Posted: 2006-11-23 09:04:55
Bah oui justement, c'est pour ça que tu vois un gros pointdraco31.fr wrote: PS: Et £$µ%ù !!!! (mot très grossier !), le forum modifie automatiquement les "&...".
Bah oui justement, c'est pour ça que tu vois un gros pointdraco31.fr wrote: PS: Et £$µ%ù !!!! (mot très grossier !), le forum modifie automatiquement les "&...".
Les scripts russes risqueraient d'avoir des problèmes alors je pense, vu que ce forum est défini comme utilisant le jeu de caractères ouest-européen.draco31.fr wrote:Bah c'est dommage parce que ça le modifie automatiquement alors que c'est entre des balise 'CODE'
Je viens de le fairedraco31.fr wrote: N'oublie pas de mettre à jour le script sur ton FTP (si c'est pas déjà fait).
Code: Select all
<A HREF="/modules/Films/fiche/8966/City-Hall.html" class="titre_film">
Code: Select all
</A>
Code: Select all
Mozilla/5.0 (compatible; Ant Movie Catalog using Indy Library)
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Draco31.fr, bbullot
Title=CinEmotions
Description=Recherche et Données CinEmotions
Site=http://www.cinemotions.com/
Language=FR
Version=0.8 du 11/01/2007
Requires=3.5
Comments=Ce script nécessite le fichier ScorEpioNCommonScript.pas|.==.| : ' ( ( ( ( /\ | "==()))))): © ScorEpioN ©| ( ( ( ( \_/
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
GetInfo=1
[Options]
Type de Lancement=0|0|0=Demande le titre avant de lancer le script|1=Ne demande pas le titre avant de lancer le script|2=Lancement automatique sur l'adresse web
Format du Titre=3|3|0=Titre en minuscule|1=Titre en majuscule|2=Première lettre du titre en majuscule|3=Première lettre de chaque mot du titre en majuscule|4=Formatage identique au site d'origine
Recherche sur le titre=1|0|0=Traduit|1=Original
Affiche=1|0|0=Prend la petite affiche|1=Prend la grande affiche
Liste des Acteurs=1|0|0=Courte|1=Longue
Note=2|2|0=Note de CinEmotions|1=Note des membres|2=Note moyenne
Liste des notes=1|0|0=Pas de détail des notes|1=Liste des notes (CinEmotions, Membres) dans le champ commentaire
Critiques=0|1|0=Oui|1=Non
***************************************************)
program CinEmotions;
uses
ScorEpioNCommonScript;
const
VersionScript = '0.7 du 22/11/2006';
NomScript = 'CinEmotions';
urlDomain = 'http://www.cinemotions.com';
urlCESearch = 'http://www.cinemotions.com/cinema-tv-dvd/film-serie-acteur-actrice-realisateur/';
pathCESearch = '/cinema-tv-dvd/film-serie-acteur-actrice-realisateur/';
urlCESearchGo = '1.html';
timetosleep = 500;
var
MovieName, Titre, urlTitre, Resume, APage, CPage, Comments : string;
CxNote, compteur, premiereExecution, numTemp, lien_URL, Critique : Integer;
NoteC, NoteM, Note, NumPage: real;
listeResultat : TStringList;
//--OK--------------------------------------------------------------------------
// ANALYSE RESULTAT DE RECHERCHE
//------------------------------------------------------------------------------
procedure AnalyzeSearchPage(urlSearch: string);
var
Line, PageNo, temp : string;
nbchoix : integer;
begin
Line := GetPage(urlSearch);
PickTreeClear;
// Controle le nb de résultat dans la liste
nbchoix := 0;
urlTitre := '';
Titre := '';
// Supprime le haut de la page
Delete(Line,1,Pos('<font class=smallwhite><b>Résultats sur titres et artistes</b></font>',Line));
// Prend le numéro de la page en cours
temp := Copy(urlSearch,Pos('.html',urlSearch)-1,1);
NumPage := StrToFloat(temp);
// Test si existe page suivante
if ( Pos(pathCESearch,Line) > 0 ) Then
PageNo := ' (Page N°'+temp+')'
else
begin
if (NumPage = 1) Then
PageNo := ''
else
PageNo := ' (Dernière Page)';
end
PickTreeAdd('Résultat trouvé pour : '+MovieName+PageNo,'');
// Ne garde que le tableau de résultats
Delete(Line,1,Pos('<TABLE border=0 width=100% cellspacing=0 cellpadding=0>',Line));
// Condition pour fin de la liste de résultats
While (Pos('<table width=100% border=0 cellspacing=0 cellpadding=1>',Line) > 1) do
begin
// Supprime jusqu'à la prochaine ligne du tableau
Delete(Line,1,Pos('<table width=100% border=0 cellspacing=0 cellpadding=1>',Line));
// Récupère titre et url
TraiteInfo(Line);
PickTreeAdd(Titre,urlTitre);
nbchoix := nbchoix+1;
end
// Supprime jusqu'à la fin de la page
Delete(Line,1,Pos('<font class=link6>Pages de résultats:</font>',Line));
// Supprime jusqu'à la prochaine page
Delete(Line,1,Pos('<font class=link6>',Line));
// Sauve l'url de la page suivante si possible
if ( Pos(pathCESearch,Line) > 0 ) Then
begin
urlTitre := urlDomain + MonFindInfo('<A HREF="','" class=link10>',Line,0);
PickTreeMoreLink(urlTitre);
end
// Verifie qu'un titre est trouvé
if nbchoix = 0 Then
ShowInformation('Aucun titre correspondant à "'+MovieName+'" !'+#13#10+'Relancez le script en donnant un autre mot clé !');
if ( NumPage > 1) Then
PickTreeAdd('Page Précédente',Copy(urlSearch,1,Pos('.html',urlSearch)-2)+FloatToStr(NumPage-1)+'.html')
else
begin
if (nbchoix = 1) Then
begin
AnalyzeMoviePage(urlTitre);
nbchoix := 0;
end
end
// Affiche la liste de choix puis verifie qu'il y a une selection
if (nbchoix <> 0) Then
begin
if (PickTreeExec(urlTitre)) then
begin
// Si choisie, lance la recherche sur la page suivante
if (pos(urlCESearch,urlTitre) > 0) Then
begin
nbchoix := 0;
AnalyzeSearchPage(urlTitre);
end
else
// Analyse la page du film selectionné
AnalyzeMoviePage(urlTitre);
end
end
end;
//--OK--------------------------------------------------------------------------
// TRAITE L'INFO : SEPARE L'URL DU TITRE
//------------------------------------------------------------------------------
procedure TraiteInfo(infos: string);
var
temp1, temp2 : string;
begin
urlTitre := '';
Titre := '';
urlTitre := MonFindInfo('<A HREF="','" onMouseOver="window.status=',infos,0);
temp1 := MonFindInfo('onMouseOver="window.status=''','''; return true;"',infos,0);
temp2 := MonFindInfo('<font class=link4dtext>','</font>',infos,0);
Titre := temp1+' ('+temp2+')';
Titre := StringReplace(Titre,'\','');
end;
//------------------------------------------------------------------------------
// ANALYSE LA PAGE DU FILM
//------------------------------------------------------------------------------
procedure AnalyzeMoviePage(url : string);
var
t1, t2, t3, min, heure, annee, temp, Line, pays, le_type, duree, prod : string;
i, j : Real;
begin
temp := '';
Comments := '';
Line := GetPage(url);
// Supprimme les parties inutiles
Delete(Line,1,Pos('<TABLE width=100% border=0 cellspacing=0 cellpadding=0 bgcolor="#3C60F0">',Line));
//--OK--------------------------------------------------------------------------
// Stoque l'url
Setfield(fieldURL,url);
//--OK--------------------------------------------------------------------------
// Stoque l'image si necessaire
if CanSetPicture then
begin
temp := MonFindInfo('/affiches/1.html"><IMG SRC="','" border=0',Line,0);
if GetOption('Affiche') = 0 Then
GetPicture(temp)
else
begin
temp := StringReplace(temp,'/h200/','/');
GetPicture(temp);
end
temp := '';
end
//--OK--------------------------------------------------------------------------
// Prend le titre traduit
SetField(fieldTranslatedTitle,FormatTitre(Trim(MonFindInfo('class="titre_film">','</A>',Line,0)),GetOption('Format du Titre')));
//--OK--------------------------------------------------------------------------
// Recherche et Prend le titre original
if (Pos('<H1 style="color: #333333; font-size:14px">',Line) > 0) Then
SetField(fieldOriginalTitle,FormatTitre(Trim(MonFindInfo('<H1 style="color: #333333; font-size:14px">','</H1>',Line,0)),GetOption('Format du Titre')))
else
SetField(fieldOriginalTitle,'');
// Récupère Année + Pays + Genre + Durée
temp := MonFindInfo('<!-- ANNEE -->','</font>',Line,0);
// temp := StringReplace(temp,' ','');
temp := StringReplace(temp,#13#10,'');
temp := StringReplace(temp,Copy(temp,1,1),'');
//--OK--------------------------------------------------------------------------
// Prend l'année
Annee := Copy(temp,1,4);
SetField(fieldYear,Annee);
//--OK--------------------------------------------------------------------------
// Prend le pays
pays := MonFindInfo('- ','- ',temp,0);
temp := Copy(temp,Pos(pays,temp)+length(pays),length(temp));
pays := AnsiLowerCase(pays);
pays := StringReplace(pays, 'états-unis', 'USA');
pays := StringReplace(pays, 'etats-unis', 'USA');
pays := StringReplace(pays, 'hong kong', 'Hong-Kong');
pays := StringReplace(pays,' / ',', ');
pays := StringReplace(pays,'/',', ');
pays := transformCountry(pays);
SetField(fieldCountry,pays);
//--OK--------------------------------------------------------------------------
// Prend le genre
le_type := MonFindInfo('- ','- ',temp,0);
le_type := StringReplace(le_type,'/',', ');
SetField(fieldCategory,le_type);
temp := Copy(temp,Pos(le_type,temp)+length(le_type),length(temp));
//--OK--------------------------------------------------------------------------
// Prend la durée
duree := Copy(temp,Pos('- ',temp)+2,length(temp));
duree := StringReplace(duree,' ','');
duree := StringReplace(duree,#13#10,'');
if Pos('h',duree) > 0 Then
begin
heure := Copy(duree,1,Pos('h',duree)-1);
min := Copy(duree,Pos('h',duree)+1,length(duree));
i := StrToFloat(heure);
j := StrToFloat(min);
Setfield(fieldLength,FloatToStr(i*60+j));
end
else
begin
duree := StringReplace(duree,'mn','');
duree := StringReplace(duree,'min','');
if Pos('x',duree) > 0 Then
begin
heure := Copy(duree,1,Pos('x',duree)-1);
min := Copy(duree,Pos('x',duree)+1,length(duree)-2);
i := StrToFloat(heure);
j := StrToFloat(min);
SetField(fieldLength,FloatToStr(j));
if i <> 0 Then
begin
Comments := 'Format : '+heure+' épisode(s) de '+min+' minutes';
SetField(fieldComments,Comments);
end
end
else
begin
Setfield(fieldLength,duree);
end;
end;
//--OK--------------------------------------------------------------------------
// Prend la compagnie
temp := MonFindInfo('Sociétés de production','</table>',Line,1);
Prod := '';
While (Pos('<font class=link6>',Temp) > 0) do
begin
Prod := Prod+', '+MonFindInfo('<font class=link6>','</font>',temp,0);
Delete(temp,1,Pos('</font>',temp));
end
Setfield(fieldProducer,Copy(Prod,3,length(Prod)));
//--OK--------------------------------------------------------------------------
// Prend les notes
CxNote := GetOption('Note');
Note := -1;
// Stoque chaque note
temp := '';
temp := MonFindInfo('<font class=smallblue>CinEmotions:</font>','<FORM name=jenote',Line,1);
// Note CinEmotion
t1 := MonFindInfo('ALT="','">',temp,0);
if (t1 = 'Pas encore noté') Then
NoteC := -1
else
NoteC := StrToFloat(MonFindInfo('Moyenne : ','(',t1,0));
// Note Membre
Delete(temp,1,Pos('<font class=smallblue> Membres:</font>',temp));
t2 := MonFindInfo('ALT="','">',temp,0);
if (t2 = 'Pas encore noté') Then
NoteM := -1
else
NoteM := StrToFloat(MonFindInfo('Moyenne : ','(',t2,0));
// Donne le détail des notes dans le champ commentaire
if GetOption('Liste des notes') = 1 Then
begin
if Comments <> '' Then
Comments := Comments+#13#10#13#10;
if NoteC <> -1 Then
Comments := Comments+StringReplace(t1,'Moyenne','Note CinEmotions')+#13#10;
if NoteM <> -1 Then
Comments := Comments+StringReplace(t2,'Moyenne','Note Membres')+#13#10;
Comments := Comments+#13#10;
NoHTML(Comments);
SetField(fieldComments,Comments);
end
// Rempli le champ Note suivant l'option selectionnée
// Reteste tant qu'une note n'est pas choisie
While CxNote <> -1 Do
begin
if ((NoteC = -1) and (NoteM = -1)) Then
CxNote := -1
else
begin
// Moyenne NoteC + NoteM
if (CxNote = 2) Then
begin
// Test si les 2 notes existent
if ((NoteC <> -1) and (NoteM <> -1)) Then
begin
Note := (NoteC+NoteM)/2;
CxNote := -1;
end
else
begin
// Si que la note CinEmotions, la prend par défaut
if (NoteC > NoteM) Then
begin
Note := NoteC;
CxNote := -1;
end
else
begin
// Test si la note Membre existe et la prend par défaut
if (NoteM <> -1) Then
begin
Note := NoteM;
CxNote := -1;
end
else
// Si pas de Note CinEmotions ou Membre : pas de note
CxNote := -1;
end
end
end
else
begin
// Si Note CinEmotion voulue
if CxNote = 0 Then
begin
if NoteC <> -1 Then
Note := NoteC;
CxNote := -1;
end
else
begin
// Si Note Membres voulue
if CxNote = 1 Then
begin
if NoteM <> -1 Then
Note := NoteM;
CxNote := -1;
end
end
end
end
end
if Note <> -1 Then
// NB: La Note du site est sur 20 !
SetField(fieldRating,FloatToStr(Note/2));
//--OK--------------------------------------------------------------------------
// Prend les réalisateurs
temp := '';
t1 := '';
temp := MonFindInfo('Réalisation :','</font>',Line,0);
While Pos('<A HREF=',temp) > 0 Do
begin
t1 := t1+', '+MonFindInfo('class=link10>','</A>',temp,0);
Delete(temp,1,Pos('</A>',temp));
end
SetField(fieldDirector,Copy(t1,3,length(t1)));
//--OK--------------------------------------------------------------------------
// Prend le synopsis
temp := '';
temp := MonFindInfo('<h2 style="color: #000080; font-size=13" >• L''histoire','</font>',Line,1);
temp := MonFindInfo('<font class=link6>','</font>',temp,0);
NoHTML(temp);
Setfield(fieldDescription,temp);
//--OK--------------------------------------------------------------------------
// Prend la liste des acteurs
temp := '';
t1 := '';
t2 := '';
t3 := '';
if GetOption('Liste des Acteurs') = 1 Then
begin
t3 := StringReplace(url,urlDomain,'');
t3 := StringReplace(t3,'.html','/artistique.html');
if Pos (t3,Line) > 0 Then
begin
if CanSetField(fieldActors) Then
begin
APage := GetPage(urlDomain+t3);
temp := MonfindInfo('<TABLE width="90%">','</TABLE>',APage,0);
While Pos('<A HREF=',temp) > 0 do
begin
// Prend le nom de l'acteur
t1 := t1+', '+MonFindInfo('onMouseOut="window.status=''''">','</A>',temp,0);
Delete(temp,1,Pos('</A>',temp));
// Prend son rôle si il existe
if ((Pos('<font face="verdana,geneva,arial" size=2>',temp) < Pos('</TR>',temp)) And (Pos('<font face="verdana,geneva,arial" size=2>',temp) <> 0)) Then
t1 := t1+' ('+MonFindInfo('<font face="verdana,geneva,arial" size=2>','</font>',temp,0)+')';
// Supprimme les données de cet acteur dans temp
Delete(temp,1,Pos('</TR>',temp));
end
t1 := Copy(t1,3,length(t1));
end
end
end
else
begin
Delete(Line,1,Pos('Réalisation :',Line));
t1 := MonFindInfo('Avec ','</font>',Line,1);
{ While Pos('<A HREF=',temp) > 0 do
begin
t1 := t1+', '+MonFindInfo('<h2 class=link5>','</h2></A>',temp,0);
t2 := MonFindInfo('(',')',temp,0);
t1 := t1+' ('+t2+')';
Delete(temp,1,Pos(t2+')',temp));
end }
HTMLDecode(t1);
HTMLRemoveTags(t1);
t1 := StringReplace(t1,'Avec ','');
t1 := StringReplace(t1,#13,'');
t1 := StringReplace(t1,#10,'');
t1 := StringReplace(t1,#09,'');
end
NoHTML(t1);
SetField(fieldActors,t1);
//--OK--------------------------------------------------------------------------
// Prend les critiques si il y en a
if (GetOption('Critiques') = 0) and CanSetField(fieldComments) Then
begin
temp := '';
t1 := '';
t2 := '';
t3 := '';
t3 := StringReplace(url,urlDomain,'');
t3 := StringReplace(t3,'.html','/critiques.html');
if Pos (t3,Line) > 0 Then
begin
CPage := GetPage(urlDomain+t3);
temp := MonFindInfo('<img src=/img/writingicon.gif border="0" align=absmiddle>','<TD width=124 align=center>',CPage,0);
if Pos('<h1 style="color: #000000; font-size:16px">A Notre Avis ...</h1>',temp) > 0 Then
begin
t1 := t1+'Critique CinEmotions :'+#13#10+#13#10;
Delete(temp,1,Pos('<TABLE width=100% cellspacing=0 cellpadding=0 border=0>',temp));
t2 := MonFindInfo('class=journal_link2>','</A>',temp,0);
t1 := t1+'"'+t2+'"'+' par '+MonFindInfo('<font class=link5d><b>','</b></font>',temp,0)+#13#10;
t2 := '';
t1 := t1+MonFindInfo('<font class=link6>','</font>',temp,0)+#13#10+#13#10;
Delete(temp,1,Pos('</TABLE>',temp));
// Delete(temp,1,Pos('</TABLE>',temp));
end
if Pos('<h1 style="color: #000000; font-size:16px">A Votre Avis ...</h1>',temp) > 0 Then
begin
t1 := t1+#13#10+'Critique(s) Spectateur(s):'+#13#10+#13#10;
Delete(temp,1,Pos('<h1 style="color: #000000; font-size:16px">A Votre Avis ...</h1>',temp));
While Pos('<TABLE width=100% cellspacing=0 cellpadding=0 border=0>',temp) > 0 Do
begin
if (Pos('<font class=journal_link2>',temp) < Pos('<IMG SRC="/img/line.gif" border=0>',temp)) and (Pos('<font class=journal_link2>',temp) <> 0) Then
t2 := '"'+MonFindInfo('<font class=journal_link2>','</font>',temp,0)+'" '
else
// begin
// if (Pos('<font class=link6>',temp) < Pos('class=journal_link2>',temp)) and (Pos('<font class=link6>',temp) <> 0) then
// t2 := ''
// else
t2 := '"'+MonFindInfo('class=link10><b>','</b>',temp,0)+'" ';
// end
t1 := t1+t2+'par '+MonFindInfo('<font class=link5d>','</font>',temp,0)+#13#10;
t2 := '';
t1 := t1+MonFindInfo('<font class=link6>','</font>',temp,0)+#13#10+#13#10;
Delete(temp,1,Pos('<p>',temp));
end
end
t1 := Comments+t1+#13#10;
NoHTML(t1);
SetField(FieldComments,t1);
end
end
end;
//--OK--------------------------------------------------------------------------
// Supprimme les balises HTML
//------------------------------------------------------------------------------
procedure NoHTML(var page: string);
begin
page := StringReplace(page,'<br>',#13#10);
page := StringReplace(page,'<b>','');
page := StringReplace(page,'</b>','');
page := StringReplace(page,'<i>','');
page := StringReplace(page,'</i>','');
page := StringReplace(page,'<u>','');
page := StringReplace(page,'</u>','');
page := StringReplace(page,'<br />','');
HTMLDecode(page);
end;
//--OK--------------------------------------------------------------------------
// TROUVE LA CHAINE VOULUE (Merci ScorEpioN)
// option = 1 : Garde début et fin
// option = 0 : NE garde PAS début et fin
//------------------------------------------------------------------------------
function MonFindInfo(Debut, Fin, Line : string ; option : integer) : string;
var
infos : String;
BeginPos, EndPos : Integer;
begin
infos := '';
BeginPos := pos(Debut, Line);
if BeginPos > 0 then
begin
if (option = 1) then
// Garde 'Debut' et 'Fin'
begin
delete(Line, 1, BeginPos-1);
EndPos := pos(Fin, Line);
infos := copy(Line,0,EndPos+length(Fin)-1);
end
else
// Supprimme 'Debut' et 'Fin'
// Vérifie si paramètre 'option' n'est pas invalide
if (option = 0) then
begin
delete(Line, 1, BeginPos+length(Debut)-1);
EndPos := pos(Fin, Line);
infos := copy(Line,0,EndPos-1);
end
end
result := Trim(infos);
end;
//--OK--------------------------------------------------------------------------
// Formatte les textes (Merci ScorEpioN)
//------------------------------------------------------------------------------
procedure Format(name : string);
var
option: integer;
begin
option := GetOption('Format du Titre');
name := formatTitre(name,option);
end;
//--OK--------------------------------------------------------------------------
// PROGRAMME PRINCIPAL
//------------------------------------------------------------------------------
begin
if CheckVersion(3,5,0) then
begin
NumPage := 1;
Comments := '';
MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
// Choix du lancement
// Demande du titre
if (GetOption('Type de Lancement') = 0) then
begin
if Input(NomScript+' par draco31.fr', 'Entrez le titre du film :',MovieName) then
begin
if Pos(urlDomain, MovieName) > 0 then
AnalyzeMoviePage(MovieName)
else
AnalyzeSearchPage(urlCESearch+urlEncode(MovieName)+'/'+FloatToStr(NumPage)+'.html');
end
end
else
begin
// Ne demande pas le titre
if (GetOption('Type de Lancement') = 1) then
AnalyzeSearchPage(urlCESearch+urlEncode(MovieName)+'/'+FloatToStr(NumPage)+'.html')
else
begin
// Directement sur l'adresse web
if (GetOption('Type de Lancement') = 2) then
begin
urlTitre := GetField(fieldURL);
if Pos(urlDomain,urlTitre) > 0 Then
AnalyzeMoviePage(urlTitre)
else
ShowError('L''adresse web ne correspond pas à une page web de CinEmotions !');
end
end
end
end
else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.
Code: Select all
//--OK--------------------------------------------------------------------------
// Stoque l'url
Setfield(fieldURL,url);
Code: Select all
//--OK--------------------------------------------------------------------------
// Stoque l'url
Setfield(fieldURL,urlDomain+url);
Code: Select all
t2 := MonFindInfo('class=journal_link2>','</A>',temp,0);
Code: Select all
t2 := MonFindInfo('class=link10><b>','</b>',temp,0);