// 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('  ', Line); Delete(Line, 1, BeginPos+66); EndPos := Pos('',Line); annee_film := Copy(Line, 1, EndPos-1 ); duree_film := ''; i:=pos('-',annee_film); if i <> 0 then begin duree_film := #13#10#13#10 + 'ANNÉES DE PRODUCTION : ' + annee_film; annee_film := copy(annee_film,1,i-1); annee_film := Trim(annee_film); end; //cherche le studio BeginPos := Pos('STUDIO', Line); Delete(Line, 1, BeginPos+8); EndPos := Pos('',Line); studio_film := Copy(Line, 1, EndPos-1 ); HTMLRemoveTags(studio_film); HTMLdecode(studio_film); studio_film := StringReplace(studio_film, #13#10, ''); studio_film := StringReplace(studio_film, ' ', ''); studio_film := StringReplace(studio_film, '] [', ' - '); studio_film := StringReplace(studio_film, '[', ''); studio_film := StringReplace(studio_film, ']', ''); studio_film := Trim(studio_film); studio_film := AnsiLowerCase(studio_film); studio_film := AnsiMixedCase(studio_film, ' -'); //cherche la catégorie BeginPos := Pos('GENRE', Line); Delete(Line, 1, BeginPos+8); EndPos := Pos('',Line); categorie_film := Copy(Line, 1, EndPos-1); HTMLRemoveTags(categorie_film); HTMLdecode(categorie_film); categorie_film := StringReplace(categorie_film, #13#10, ''); categorie_film := StringReplace(categorie_film, ' ', ''); categorie_film := StringReplace(categorie_film, '] [', ' - '); categorie_film := StringReplace(categorie_film, '[', ''); categorie_film := StringReplace(categorie_film, ']', ''); categorie_film := Trim(categorie_film); categorie_film := AnsiLowerCase(categorie_film); categorie_film := AnsiMixedCase(categorie_film, ' -'); //cherche le réalisateur BeginPos := Pos('AUTEUR : ', Line); Delete(Line, 1, (BeginPos-1)); aucun := Copy(Line, 10, 3 ); if aucun = 'Non' then begin realisateur_film := 'Non Spécifié'; end else begin BeginPos := Pos('.html">', Line); Delete(Line, 1, BeginPos+6); EndPos := Pos('',Line); realisateur_film := Copy(Line, 1, EndPos-1 ); HTMLdecode(realisateur_film); realisateur_film := StringReplace(realisateur_film, #13#10, ''); realisateur_film := StringReplace(realisateur_film, ' ', ''); realisateur_film := Trim(realisateur_film); realisateur_film := AnsiLowerCase(realisateur_film); realisateur_film := AnsiMixedCase(realisateur_film, ' '); realisateur_film := AnsiMixedCase(realisateur_film, '-'); end; //cherche la durée BeginPos := Pos('DUR', Line); Delete(Line, 1, BeginPos-1); EndPos := Pos('',Line); duree_film := Copy(Line, 1, EndPos-1 ) + duree_film; HTMLdecode(duree_film); duree_film := StringReplace(duree_film, ' ', ''); duree_film := Trim(duree_film); // durée dans le champs durée aucun := duree_film; BeginPos := Pos('mins',aucun); delete(aucun,1,BeginPos-5); BeginPos := Pos('mins',aucun); aucun := copy(aucun,1,BeginPos-1); aucun := Trim(aucun); if aucun <> '' then SetField(fieldLength,aucun); //cherche le pays BeginPos := Pos('show_flag.php', Line); Delete(Line, 1, BeginPos); BeginPos := Pos('alt=', Line); Delete(Line, 1, BeginPos+4); EndPos := Pos('"',Line); pays_film := Copy(Line, 1, EndPos-1 ); HTMLdecode(pays_film); pays_film := StringReplace(pays_film, #13#10, ''); pays_film := StringReplace(pays_film, ' ', ''); pays_film := Trim(pays_film); HTMLremovetags(pays_film); pays_film := AnsiLowerCase(pays_film); pays_film := AnsiMixedCase(pays_film, ' '); pays_film := AnsiMixedCase(pays_film, '-'); //cherche la description BeginPos := Pos('Synopsis', Line); Delete(Line, 1, BeginPos+126); aucun := Copy(Line, 10, 3 ); if aucun = 'sp;' then begin aucun := 'Pas de description pour le moment'; end else begin EndPos := Pos('',Line)-1; description_film := Copy(Line, 1, EndPos ); HTMLdecode(description_film); description_film := StringReplace(description_film, #13#10, ''); description_film := StringReplace(description_film, '
',#13#10); description_film := StringReplace(description_film, '', ''); description_film := StringReplace(description_film, '', ''); description_film := StringReplace(description_film, '', ''); description_film := StringReplace(description_film, '', ''); description_film := StringReplace(description_film, ' ', ' '); description_film := StringReplace(description_film, '', ' '); description_film := StringReplace(description_film, '
', ''); 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.