// GETINFO SCRIPTING
// Animeka.com - Recherche d'Animes (données, épisodes, et images) - by ScorEpioN
(***************************************************
* Script d'importation pour : *
* Animeka , https://www.animeka.com *
* *
* Script by ScorEpioN *
* *
* Version : 15 - Update du 18/10/2004 *
* *
* A utiliser avec Ant Movie Catalog 3.4.0 *
* www.ant.be.tf/moviecatalog ··· www.buypin.com *
* *
* The source code of the script can be used in *
* another program only if full credits to *
* script author and a link to Ant Movie Catalog *
* website are given in the About box or in *
* the documentation of the program *
***************************************************)
program ANIMEKA_SEARCH;
const
ConfirmTitre = True;
{ True: Demande le titre avant de lancer le script
False: Ne demande pas le titre avant de lancer le script }
var
MovieName, NomFilm, la_liste, premiere_pageEpisode : string;
// Pour debug : showmessage();
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line,page_film,titre_film, realisateur_film, annee_film : string;
BeginPos, EndPos, compteur : Integer;
begin
//vide la liste des films
PickTreeClear;
//charge la page
Line := GetPage(Address);
//teste si il y a des films trouvés
BeginPos := Pos('Aucuns r', Line);
if BeginPos <> 0 then
begin
titre_film := MovieName;
titre_film := StringReplace(titre_film, #13#10, '');
titre_film := StringReplace(titre_film, ' ', '');
titre_film := Trim(titre_film);
titre_film := AnsiLowerCase(titre_film);
titre_film := AnsiUpFirstLetter(titre_film);
showmessage('Aucun Anime trouvé pour : ' + titre_film);
exit;
end;
//teste si on a été redirigé vers la fiche de l'anime
BeginPos := Pos('',Line);
page_film := 'https://www.animeka.com' + Copy(Line, 1, EndPos-2 );
AnalysePageFilm(page_film);
exit;
end;
//introduction résultats
titre_film := MovieName;
titre_film := StringReplace(titre_film, #13#10, '');
titre_film := StringReplace(titre_film, ' ', '');
titre_film := Trim(titre_film);
titre_film := AnsiLowerCase(titre_film);
titre_film := AnsiUpFirstLetter(titre_film);
PickTreeAdd('Animes trouvés pour ' + titre_film + ' :', '');
//compte les résultats
compteur := 0;
repeat
//cherche le lien de la page du film
BeginPos := Pos('',Line);
page_film := 'https://www.animeka.com' + Copy(Line, 1, EndPos-1 );
//cherche le nom du film
BeginPos := Pos('">',Line);
Delete(Line, 1, BeginPos+1);
EndPos := Pos('',Line)-1;
titre_film := Copy(Line, 1, EndPos );
HTMLdecode(titre_film);
HTMLremovetags(titre_film);
titre_film := StringReplace(titre_film, #13#10, '');
titre_film := StringReplace(titre_film, ' ', '');
titre_film := Trim(titre_film);
titre_film := AnsiLowerCase(titre_film);
titre_film := AnsiUpFirstLetter(titre_film);
//ajoute les films
PickTreeAdd(titre_film , page_film);
compteur := compteur+1;
//cherche le lien de la page du film
BeginPos := Pos('/animes/detail/',Line);
until BeginPos = 0;
if compteur = 1 then
begin
compteur := 0;
AnalysePageFilm(page_film);
exit;
end;
begin
if PickTreeExec(Address)=true then
AnalysePageFilm(Address);
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DU FILM
//------------------------------------------------------------------------------
procedure AnalysePageFilm(Address: string);
var
Line,page_film,titre_film,titre_original, categorie_film, realisateur_film, studio_film, annee_film: string;
critique, noteRedaction, pays_film, url_film, duree_film, episode_anime, page_episodes, liste_episodes, acteurs_film, liste_acteurs, description_film, reference_film,public_film,video_film,audio_film,fichier_image,aucun:string;
BeginPos, EndPos, i: Integer;
begin
//pause pour eviter les time out
sleep(1500);
//charge la page
Line := GetPage(Address);
url_film := Address;
//cherche le nom du film
BeginPos := Pos('"animestitle"', Line);
Delete(Line, 1, BeginPos+39);
EndPos := Pos('',Line);
titre_film := Copy(Line, 1, EndPos-1 );
HTMLdecode(titre_film);
titre_film := StringReplace(titre_film, #13#10, '');
titre_film := StringReplace(titre_film, ' ', '');
titre_film := Trim(titre_film);
titre_film := AnsiLowerCase(titre_film);
titre_film := AnsiMixedCase(titre_film, ' -');
titre_film := nettoieTitre(titre_film);
//chargement des jaquettes
BeginPos := Pos(' ', Line);
Delete(Line, 1, BeginPos+50);
EndPos := Pos('',Line);
titre_original := Copy(Line, 1, EndPos-1 );
HTMLdecode(titre_original);
titre_original := StringReplace(titre_original, #13#10, '');
titre_original := StringReplace(titre_original, ' ', '');
titre_original := Trim(titre_original);
titre_original := AnsiLowerCase(titre_original);
titre_original := AnsiMixedCase(titre_original, ' ');
titre_original := AnsiMixedCase(titre_original, '-');
//cherche l'année
BeginPos := Pos('
', '');
description_film := deleteBalise(description_film);
end;
//cherche les critiques
BeginPos := Pos('Critiques', Line);
Delete(Line, 1, BeginPos);
if BeginPos = 0 then
begin
critique := 'Pas de critiques pour le moment';
end else
begin
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+21);
EndPos := Pos(' | ',Line);
critique := 'Critiques : ';
critique := critique + Copy(Line, 1, EndPos-1 );
HTMLdecode(critique);
critique := StringReplace(critique, #13#10, ' ');
critique := StringReplace(critique, '
', ' ');
critique := StringReplace(critique, '
', '');
critique := StringReplace(critique, '', '');
critique := StringReplace(critique, '
', '');
critique := StringReplace(critique, '', '');
critique := StringReplace(critique, ' ', ' ');
critique := deleteBalise(critique);
description_film := description_film + #13#10#13#10 + critique;
end;
//cherche la note de la rédaction
BeginPos := Pos('Note de la rédaction', Line);
Delete(Line, 1, BeginPos);
if BeginPos = 0 then
begin
noteRedaction := 'Pas de note de la rédaction pour le moment';
end else
begin
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+21);
EndPos := Pos(' | ',Line);
noteRedaction := 'Note de la rédaction : ';
noteRedaction := noteRedaction + Copy(Line, 1, EndPos-1 );
HTMLdecode(noteRedaction);
noteRedaction := StringReplace(noteRedaction, #13#10, ' ');
noteRedaction := StringReplace(noteRedaction, '
', ' ');
noteRedaction := StringReplace(noteRedaction, '
', '');
noteRedaction := StringReplace(noteRedaction, '', '');
noteRedaction := StringReplace(noteRedaction, '
', '');
noteRedaction := StringReplace(noteRedaction, '', '');
noteRedaction := StringReplace(noteRedaction, ' ', ' ');
noteRedaction := deleteBalise(noteRedaction);
description_film := description_film + #13#10#13#10 + noteRedaction;
end;
//cherche les épisodes
BeginPos := Pos('/animes/epis/', Line);
Delete(Line, 1, BeginPos-1);
if BeginPos = 0 then
begin
aucun := 'Pas de listing d''épisodes pour le moment';
end else
begin
EndPos := Pos('" class',Line);
page_episodes := 'https://www.animeka.com'+Copy(Line, 1, EndPos-1 );
premiere_pageEpisode := page_episodes;
liste_episodes := 'Liste des épisodes'+#13#10#13#10;
la_liste := '';
TrouveEpisode(page_episodes);
liste_episodes := liste_episodes + la_liste;
end;
//charge les résultats dans la fenêtre
SetField( fieldTranslatedTitle,titre_film);
SetField( fieldOriginalTitle,titre_original);
if titre_original = '' then
begin
SetField( fieldOriginalTitle,titre_film);
end;
SetField( fieldURL,url_film);
SetField( fieldCategory,categorie_film);
SetField( fieldDirector,realisateur_film);
SetField( fieldYear,annee_film);
SetField( fieldCountry,pays_film);
SetField( fieldActors,duree_film);
SetField( fieldDescription,description_film);
SetField( fieldProducer,studio_film);
SetField( fieldComments,liste_episodes);
DisplayResults;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DES EPISODES
//------------------------------------------------------------------------------
procedure TrouveEpisode(page_episodes: string);
var
Line, episode_anime, liste_episodes, aucun, resume, titre_episode:string;
BeginPos, EndPos, i: Integer;
begin
//pour eviter les time-out
sleep(1500);
//charge la page
Line := GetPage(page_episodes);
//compteur
i := 0;
//liste les épisodes
repeat
i := i+1;
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+49);
EndPos := Pos(' | ',Line);
aucun := Copy(Line, 1, 1 );
//pour n'avoir que les épisodes
if aucun = '<' then
begin
exit;
end else
begin
//Numéro et titre épisode
titre_episode := Copy(Line, 1, EndPos-1 );
titre_episode := deleteKanji(titre_episode);
titre_episode := StringReplace(titre_episode, #13#10,'');
la_liste := la_liste + titre_episode + #13#10;
//Pour le résumé
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+62);
EndPos := Pos(' |
',Line);
resume := Copy(Line, 1, EndPos-1 );
resume := StringReplace(resume, '
',' ');
resume := StringReplace(resume, #13#10,' ');
if resume <> '' then
begin
la_liste := la_liste + resume + #13#10#13#10;
end;
end;
until i = 25;
//Si 25 épisodes et + alors page suivante
if i = 25 then
begin
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+49);
EndPos := Pos(' | ',Line);
aucun := Copy(Line, 1, 1 );
//Si il y a juste 25 épisodes
if aucun = '<' then
begin
exit;
end else
begin
//Numéro et titre épisode
titre_episode := Copy(Line, 1, EndPos-1 );
titre_episode := deleteKanji(titre_episode);
la_liste := la_liste + titre_episode + #13#10;
//Pour le résumé
BeginPos := Pos('
', Line);
Delete(Line, 1, BeginPos+62);
EndPos := Pos(' |
',Line);
resume := Copy(Line, 1, EndPos-1 );
resume := StringReplace(resume, '
',' ');
resume := StringReplace(resume, #13#10,' ');
if resume <> '' then
begin
la_liste := la_liste + resume + #13#10#13#10;
end;
//cherche la page suivante
BeginPos := Pos('Précédent', Line);
Delete(Line, 1, BeginPos+9);
BeginPos := Pos('/animes/epis/', Line);
if BeginPos <> 0 then
begin
Delete(Line, 1, BeginPos-1);
EndPos := Pos('">',Line);
page_episodes := 'https://www.animeka.com'+Copy(Line, 1, EndPos-1 );
if page_episodes <> premiere_pageEpisode then
begin
TrouveEpisode(page_episodes);
end;
end;
end;
end;
end;
//------------------------------------------------------------------------------
// SUPPRESSION DES BALISES
//------------------------------------------------------------------------------
function deleteBalise (la_ligne : String) : string;
var
i,j, fin : Integer;
la_chaine_sans_balise, aucun : String;
begin
la_chaine_sans_balise := '';
fin := Length(la_ligne);
repeat
i := pos('<',la_ligne);
if i <> 0 then
begin
aucun := copy(la_ligne,i+1,fin);
delete(aucun,2,fin);
//pour être sûr d'avoir affaire à une balise
if aucun = ' ' then
begin
la_chaine_sans_balise := la_chaine_sans_balise + copy (la_ligne,1,i);
delete(la_ligne,1,i);
end else
begin
j := pos('>',la_ligne);
fin := Length(la_ligne);
la_chaine_sans_balise := la_chaine_sans_balise + copy (la_ligne,1,i-1);
delete(la_ligne,1,j);
end;
end;
until i = 0;
fin := Length(la_ligne);
la_chaine_sans_balise := la_chaine_sans_balise + copy (la_ligne,1,fin);
result := la_chaine_sans_balise;
end;
//------------------------------------------------------------------------------
// SUPPRESSION DES CARACTERES JAPONAIS DANS LES NOMS D'EPISODES
//------------------------------------------------------------------------------
function deleteKanji (la_ligne : String) : string;
var
i : Integer;
begin
i:=pos('',la_ligne); // ces symboles caractérisent un caractère asiatique
if i <> 0 then
begin
la_ligne := copy(la_ligne,1,i-2);
end;
result := la_ligne;
end;
//------------------------------------------------------------------------------
// NETTOIE TITRE
//------------------------------------------------------------------------------
function nettoieTitre(le_titre : String) : string;
var
i : Integer;
begin
i:=pos('(1',le_titre);
if i <> 0 then
begin
le_titre := copy(le_titre,1,i-1);
le_titre := Trim(le_titre);
result := le_titre;
end;
i:= 0;
i:=pos('(2',le_titre);
if i <> 0 then
begin
le_titre := copy(le_titre,1,i-1);
le_titre := Trim(le_titre);
result := le_titre;
end else
result := le_titre;
end;
//------------------------------------------------------------------------------
// NETTOIE LE TITRE DU FICHIER POUR AVOIR LE TITRE DE FILM
//------------------------------------------------------------------------------
function cleanTitle(title : String) : string;
var
i,j, fin : Integer;
temp : String;
begin
title := AnsiUpperCase(title);
if title <> '' then
begin
// Nettoie les tags fichiers, merci Atmosfear pour les tags
i:=pos('.DVD',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.DIVX',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.FREN',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.GERM',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.INT',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.LIM',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.PROP',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.REPACK',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.SUBB',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.UNSUB',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.WS',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.XVID',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.AC3',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
i:=pos('.UNRAT',title);
if i <> 0 then
begin
title := copy(title,1,i-1);
end;
title := StringReplace(title, '.', ' ');
title := StringReplace(title, ',', ' ');
title := StringReplace(title, ':', '');
title := StringReplace(title, '-', '');
title := StringReplace(title, ' ', ' ');
i := 0;
// Nettoie les tags de team
if (pos('(',title) <> 0) then
begin
i := pos('(',title);
temp := copy(title,0,i-1);
j := pos(')',title);
fin := Length(title);
title := temp + copy(title,j+1,fin);
end;
if (pos('[',title) <> 0) then
begin
i := pos('[',title);
temp := copy(title,1,i-1);
j := pos(']',title);
fin := Length(title);
title := temp + copy(title,j+1,fin);
end;
title := AnsiLowerCase(title);
title := AnsiUpFirstLetter(title);
title := AnsiMixedCase(title,' -');
end;
result := title;
end;
//------------------------------------------------------------------------------
// PROGRAMME PRINCIPAL
//------------------------------------------------------------------------------
begin
if CheckVersion(3,4,0) then
begin
NomFilm := GetField(fieldTranslatedTitle);
if NomFilm = '' then
NomFilm := GetField(fieldOriginalTitle);
NomFilm := cleanTitle(NomFilm);
if (ConfirmTitre = True) then
begin
if Input('Animeka avec Image by ScorEpioN', 'Entrez le titre de l''anime :', NomFilm) then
begin
//remplace les caractères accentués
MovieName := NomFilm;
NomFilm := AnsiLowerCase(NomFilm);
NomFilm := StringReplace(NomFilm, 'é', 'e');
NomFilm := StringReplace(NomFilm, 'è', 'e');
NomFilm := StringReplace(NomFilm, 'à', 'a');
NomFilm := StringReplace(NomFilm, 'ç', 'c');
NomFilm := StringReplace(NomFilm, 'ù', 'u');
NomFilm := StringReplace(NomFilm, ' ', '+');
NomFilm := 'https://www.animeka.com/search/index.html?req='+ UrlEncode(NomFilm)+'&zone_series=1&go_search=1&cat=search';
AnalyzePage(NomFilm);
end;
end else
begin
MovieName := NomFilm;
NomFilm := AnsiLowerCase(NomFilm);
NomFilm := StringReplace(NomFilm, 'é', 'e');
NomFilm := StringReplace(NomFilm, 'è', 'e');
NomFilm := StringReplace(NomFilm, 'à', 'a');
NomFilm := StringReplace(NomFilm, 'ç', 'c');
NomFilm := StringReplace(NomFilm, 'ù', 'u');
NomFilm := StringReplace(NomFilm, ' ', '+');
AnalyzePage('https://www.animeka.com/search/index.html?req='+ UrlEncode(NomFilm)+'&zone_series=1&go_search=1&cat=search');
end;
end else
ShowMessage('Ce script requiert une version plus récente de Ant Movie Catalog (au moins la version 3.4.0)');
end.