Bon voilà j'utilise depuis quelque temps un script que j'ai bricolé à partir du très bon script Allociné.
Ce script permet de compléter le champ description de mes films (et quelques champs personnalisés : 'Age mini') avec les données de classification (ou certification) de films issues du site www.filmages.ch
Exemple de sortie ajouté en fin du champ description ('Les nouveaux héros'):
--------------------- Avertissements ---------------------
+6 ans
Contre-Indications :
Plan physiologique
Avertissements :
Il n'y a que très peu de contre-indications à signaler. Toutefois, l'incendie avec la mort du frère et le personnage masqué pourraient impressionner voire effrayer les plus jeunes. Il faut signaler la durée, un rythme échevelé, de nombreux dialogues et un scénario trop complexe pour les plus jeunes. A relever la qualité de l'animation, des effets spéciaux et la reprise réussie des mythiques super héros de Marvel, rajeunis par les nouvelles technologies liées à la robotique. De plus ce film d'animation souligne l'importance de la solidarité du groupe pour surmonter les obstacles, de la loyauté et de l'amitié.
J'espère que ça pourra intéresser certains ... et peut être en faire un vrai script digne de ce nom ;-)
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Olivier D
Title=1UpdateFilmAge
Description=Donnees filmages.ch
Site=http://www.filmages.ch
Language=-
Version=1.0
Requires=3.5
Comments=-
License=
GetInfo=1
RequiresMovies=1
[Options]
Type de Lancement=2|2|0=Cherche le meilleur résultat sans confirmation|1=Demande le titre avant de lancer le script|2=Ne demande pas le titre avant de lancer le script|3=Lancement automatique sur l'adresse web|4=Batch : désélectionne films traités / décoche + sélectionne films non traités
Recherche sur le titre=0|0|0=Traduit|1=Original
[Parameters]
***************************************************)
program UpdateFilmAge;
uses
ScorEpioNCommonScript,StringUtils1;
const
VersionScript = '1 du 09/2013';
NomScript = 'FILMAGE';
urlDomain = 'filmages.ch';
urlFilmages = 'http://www.filmages.ch';
urlFicheFilm = 'http://www.filmages.ch/films/detail/items/';
urlFilmagesSearch = urlFilmages+'/films/recherche/search/';
urlFilmagesSearchEndFilm = '.html';
debug = false; // mode debug on/off (Un grand MERCI à Scorpion7552 pour cette astuce géniale)
debugrep = 'c:\temp\'; // répertoire de stockage des fichiers pour le mode debug
timetosleep = 500;
nbDecimal = 2;
var
MovieName, MovieDirector, FoundMovieDirector, ID, AdressePlus, La_liste, Reponse, AdresseSuivant, AdressePrecedent, TypeExec, MessageInput : string;
numPageG, numPageR, compteur, premiereExecution : Integer;
listeResultat : TStringList;
listeMessagesF : array of string;
//------------------------------------------------------------------------------
// RETOURNE ELEMENT FILMS OU SERIES
//------------------------------------------------------------------------------
function TitrePlus(Line : String) : String;
begin
if Line <> '' then
begin
Line := StringReplace(Line, ' ', '+');
result := Line;
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Line, FoundTitle : string;
BeginPos, EndPos : Integer;
begin
Line := GetPage(Address);
SetArrayLength(listeMessagesF,3);
listeMessagesF[0] := 'Aucun film trouvé';
listeMessagesF[1] := UTF8Encode('Catalog Items');
listeMessagesF[2] := urlFilmagesSearchEndFilm;
if (GetOption('Type de Lancement') = 4) then // Sélectionne la fiche si type de lancement à 4 et si version AMC 4.1.2 au moins
begin
if CheckVersion(4,1,2) = True then
SetSelected(True);
end;
if (pos('Recherche : <b>""</b>', Line)) <> 0 then
exit;
if pos(UTF8Encode('Films trouvés<span class="total"> : 0'),Line) <> 0 then
begin
if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
begin
if Input(NomScript+' by Olivier DARRACQ', listeMessagesF[0]+' pour "'+MovieName+'" :', MovieName) then
begin
if Pos(urlDomain, MovieName) > 0 then
AnalyzeMoviePage(convertURL(MovieName))
else
AnalyzePage(urlFilmagesSearch+UrlEncode(TitrePlus(UTF8Encode(MovieName)))+urlFilmagesSearchEndFilm);
end;
exit;
end else
begin
SetField(fieldChecked, 'False');
exit;
end;
end;
if pos(UTF8Encode('Films trouvés<span class="total"> : 1<'), Line) > 0 then
begin
if (GetOption('Type de Lancement') = 4) then // Désélectionne la fiche si type de lancement à 4, si version AMC 4.1.2 au moins et si 1 résultat trouvé
begin
if CheckVersion(4,1,2) = True then
SetSelected(False);
end;
AddMoviesTitles(findInfo(UTF8Encode('<div class="mod_cataloglist block">'), '</div>', Line,'1'));
sleep(timetosleep);
FoundTitle := trouveResultat(MovieName);
if FoundTitle <> '' then
begin
AnalyzeMoviePage(FoundTitle);
SetField(fieldChecked, 'True');
end else
begin
// TO DO
if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
begin
begin
if PickTreeExec(Address) then
begin
//if execMenuScorEpioN(urlDomain, Address) = False then
//begin
if (Address = AdressePlus) then
begin
numPageR := numPageR+1;
AnalyzePage(AdressePlus);
end else
if (Address = AdressePrecedent) then
begin
numPageR := numPageR-1;
AnalyzePage(AdressePrecedent);
end else
if (Address = AdresseSuivant) then
begin
numPageR := numPageR+1;
AnalyzePage(AdresseSuivant);
end else
begin
SetField(fieldChecked, 'True'); // Coche la fiche si on choisit un film
AnalyzeMoviePage(Address);
end;
//end;
end else
exit;
end;
end;
end;
//Address := findInfo(UTF8Encode('<table class='), '</table>', Line, '4');
//Address := urlFilmages+'/'+findInfo('<a href="', '"', Address,'0');
//SetField(fieldChecked, 'True');
//AnalyzeMoviePage(Address);
end else
begin
if GetOption('Type de Lancement') = 4 then // Décoche la fiche si type de lancement à 4 et ne trouve rien
begin
SetField(fieldChecked, 'False');
exit;
end;
PickTreeClear;
if pos(listeMessagesF[1], Line) > 0 then
AddMoviesTitles(findInfo(UTF8Encode('<div class="mod_cataloglist block">'), '</div>', Line,'1'));
//menuScorEpioN();
if compteur = 1 then
begin
compteur := 0;
FoundTitle := trouveResultat(MovieName);
if FoundTitle <> '' then
begin
AnalyzeMoviePage(copy(listeResultat.GetString(0),pos('|',listeResultat.GetString(0))+1,pos('[',listeResultat.GetString(0))-pos('|',listeResultat.GetString(0))-1));
exit;
end;
end else if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
begin
begin
if PickTreeExec(Address) then
begin
//if execMenuScorEpioN(urlDomain, Address) = False then
//begin
if (Address = AdressePlus) then
begin
numPageR := numPageR+1;
AnalyzePage(AdressePlus);
end else
if (Address = AdressePrecedent) then
begin
numPageR := numPageR-1;
AnalyzePage(AdressePrecedent);
end else
if (Address = AdresseSuivant) then
begin
numPageR := numPageR+1;
AnalyzePage(AdresseSuivant);
end else
begin
SetField(fieldChecked, 'True'); // Coche la fiche si on choisit un film
AnalyzeMoviePage(Address);
end;
//end;
end else
exit;
end;
end else
begin
if (GetOption('Type de Lancement') = 0) then
begin
sleep(timetosleep);
FoundTitle := trouveResultat(MovieName);
if FoundTitle <> '' then
AnalyzeMoviePage(FoundTitle);
end ;
end;
end;
end;
//------------------------------------------------------------------------------
// TROUVE LE BON RESULTAT
//------------------------------------------------------------------------------
function trouveResultat(title : String) : String;
var
oK, couple, titre, adresse : String;
i : Integer;
begin
for i:=0 to listeResultat.Count-1 do
begin
couple := listeResultat.GetString(i);
titre := copy(couple,0,pos('|',couple)-1);
adresse := copy(couple,pos('|',couple)+1,pos('[',couple)-pos('|',couple)-1);
oK := compareString(title,titre);
if oK = 'OK' then
begin
FoundMovieDirector := copy(couple,pos('[',couple)+1,length(couple)-pos('[',couple)-1);
if (compareString(MovieDirector,FoundMovieDirector)= 'OK') then
begin
result := adresse;
exit;
end else
begin
if (result = '') then result := adresse;
end;
end;
end;
if oK = 'KO' then
result := '';
listeResultat.Free;
end;
//------------------------------------------------------------------------------
// COMPARE LES 2 CHAINES DE CARACTERES
//------------------------------------------------------------------------------
function compareString(String1, String2 : String) : String;
begin
String1 := supprimeAccents(trim(AnsiLowerCase(String1)));
String2 := supprimeAccents(trim(AnsiLowerCase(String2)));
if (String1 = String2) then
begin
result := 'OK';
end else
begin
result := 'KO';
end;
end;
//------------------------------------------------------------------------------
// SUPPRIME LES ACCENTS
//------------------------------------------------------------------------------
function supprimeAccents(String1 : String) : String;
begin
String1 := supprimeLesAccents(String1);
delete(String1, pos(' - ',String1), length(String1));
if (pos(', ',String1) > 0) then
delete(String1, pos(', ',String1), length(String1));
if (pos('(',String1) > 0) then
delete(String1, pos('(',String1), length(String1));
if (pos('[',String1) > 0) then
delete(String1, pos('[',String1), length(String1));
if (pos(':',String1) > 0) then
delete(String1, pos(':',String1), length(String1));
result := trim(String1);
end;
//------------------------------------------------------------------------------
// AJOUTE UN COUPLE FILM / ADRESSE A LA LISTE DE RESULTAT
//------------------------------------------------------------------------------
procedure AddMoviesTitles(Line : string);
var
MovieTitle, MovieTitle2, MovieAddress, aucun, LocalMessageInput, Resultat : string;
StartPos, EndPos : Integer;
begin
//compte les résultats
compteur := 0;
listeResultat := TStringList.Create;
LocalMessageInput := ' Films trouvés pour ';
Resultat := FullTrim(findInfo(UTF8Encode('<span class="total"> : '), '</span></h2>', Line, '0'));
PickTreeAdd(Resultat + LocalMessageInput + MovieName + ' [ ' + MovieDirector +' ] :', '');
delete(Line, 1, pos('<tr class="item first even">', Line)-1);
Line := StringReplace(Line, '<br />', ' ');
repeat
StartPos := pos('<tr class="item ', Line); // Pour la boucle
delete(Line, 1, StartPos); // Pour la boucle
MovieAddress := urlFilmages+'/'+findInfo('<a href="', '"', Line,'0');
FoundMovieDirector := findInfo('<td class="field director">', '</td>', Line,'0');
MovieTitle2 := FullTrim(UTF8Decode(findInfo('<td class="field title_original">', '</td>', Line,'0')));
MovieTitle := findInfo('<td class="field title_french">', '</td>', Line,'0');
MovieTitle := UTF8Decode(MovieTitle);
MovieTitle := RemoveSpaces(MovieTitle, True);
Delete(MovieTitle, Pos('(', MovieTitle), (Pos(')', MovieTitle))-(Pos('(', MovieTitle))+1);
MovieTitle :=MovieTitle + ' [ '+FoundMovieDirector+' ]';
// Pour le mode batch le titre doit être "propre"
listeResultat.Add(MovieTitle2+'|'+MovieAddress+'[' + FoundMovieDirector +']');
PickTreeAdd(MovieTitle, MovieAddress);
delete(Line, 1, pos('<tr class="item ', Line)-1);
StartPos := pos('<tr class="item ', Line); // Pour la boucle
compteur := compteur+1; // Pour la boucle
until (StartPos = 0);
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DU FILM
//------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Adresse : String);
var
Line, Line2, Value, AgeSuggere, AgeLegal, Synthese, Indication : String;
AgeMini, StartPos, compteur : Integer;
begin
// Pour le mode Batch
if (GetOption('Fichier de log') = 0) then
beforeUpdate();
SetArrayLength(listeMessagesF,1);
listeMessagesF[0] := '/film/fichefilm_gen_cfilm=';
// Charge la page
Line := GetPage(Adresse);
Line2 := Line;
AgeLegal := '';
AgeSuggere := '';
if pos('<div class="field age_legal">', Line2) > 0 then
begin
// Age legal
delete(Line2, 1, pos('<div class="field age_legal">', Line2)-1);
AgeLegal := UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'0'));
AgeLegal := StringReplace(AgeLegal, ' ans', '');
// Age suggéré
if pos('<div class="field age_suggested">', Line2) > 0 then
begin
delete(Line2, 1, pos('<div class="field age_suggested">', Line2)-1);
AgeSuggere := UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'0'));
AgeSuggere := StringReplace(AgeSuggere, ' ans', '');
end;
// Age mini retenu
AgeMini := 18;
if AgeLegal <> '' then AgeMini := StrToInt(AgeLegal,0);
if AgeSuggere <> '' then
begin
if (AgeLegal <> '') and (AgeMini < StrToInt(AgeSuggere,0)) then
begin
AgeMini := StrToInt(AgeSuggere,0);
end;
end;
if CustomFieldExists('Age_mini') = True then SetCustomField('Age_mini', IntToStr(AgeMini));
if CustomFieldExists('Certification') = True then SetCustomField('Certification', '+'+IntToStr(AgeMini)+' ans');
end;
// Contre-indications
Indication := '';
delete(Line2, 1, pos('<div class="label">Contre-indications</div>', Line2)-1);
if pos('<div class="field final_remark">', Line2) > 0 then
begin
compteur := 0;
repeat
StartPos := pos('<a class="glossarylink glossary_1"><!-- indexer::continue -->', Line2); // Pour la boucle
delete(Line2, 1, StartPos-1); // Pour la boucle
if Indication='' then
begin
Indication := findInfo('<a class="glossarylink glossary_1"><!-- indexer::continue -->', '<!-- indexer::stop -->', Line2,'0');
end else
begin
Indication := Indication + ' | ' + findInfo('<a class="glossarylink glossary_1"><!-- indexer::continue -->', '<!-- indexer::stop -->', Line2,'0');
end;
delete(Line2, 1, pos('<!-- indexer::stop -->', Line2)-1);
StartPos := pos('<a class="glossarylink glossary_1"><!-- indexer::continue -->', Line2); // Pour la boucle
compteur := compteur+1; // Pour la boucle
until (StartPos = 0);
end;
// Synthèse
Synthese:= '';
delete(Line2, 1, pos('<div class="field final_remark">', Line2)-1);
if CustomFieldExists('Avertissement') = True then
begin
if pos('<div class="field final_remark">', Line2) > 0 then
begin
Value := FullTrim(UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'4')));
Synthese := StringReplace(Value, '.<br />'+#13#10, '.<br>');
Synthese := StringReplace(Synthese, '.<br />', '.<br>');
Synthese := StringReplace(Synthese, '<br />', ' ');
Synthese := StringReplace(Synthese, '<br>', RC);
Synthese:= 'Contre-Indications :' + RC + UTF8Decode(Indication) + RC + RC + 'Avertissements :' + RC + Synthese;
HTMLRemoveTags(Synthese);
HTMLDecode(Synthese);
SetCustomField('Avertissement', Synthese)
Value := '';
end;
end;
end;
//------------------------------------------------------------------------------
// CALCUL DU MAX
//------------------------------------------------------------------------------
function Max ( A, B : Extended ) : Extended;
begin
if A<B then
begin
result := B;
end else
begin
result := A;
end;
//ShowMessage(FloatToStr(result));
end;
//------------------------------------------------------------------------------
// CALCUL DU MIN
//------------------------------------------------------------------------------
function Min ( A, B : Extended ) : Extended;
begin
if A<B then
begin
result := A;
end else
begin
result := B;
end;
//ShowMessage(FloatToStr(result));
end;
//
begin
if CheckVersion(3,5,0) then
begin
// Détecte and update si la version de StringUtils1 est bonne
if StringUtils1_Version < 7 then
begin
if ShowWarning('Ancienne version de "Stringutils1.pas" détectée: '+IntToStr(StringUtils1_Version)+#13#10+'Ce script requiert au moins la version 7.'+#13#10+'Celle-ci va être téléchargée maintenant, continuer ?') = True then
begin
listeResultat := TStringList.Create;
listeResultat.Text := GetPage('http://update.antp.be/amc/scripts/StringUtils1.pas');
listeResultat.SaveToFile(dirScripts + 'StringUtils1.pas');
listeResultat.Free;
ShowInformation('Mise à jour effectuée. Veuillez relancer le script Allociné.');
Exit;
end
else
begin
ShowInformation('Vous pouvez télécharger la mise à jour de StringUtils1.pas en lançant "update scripts" ou via http://update.antp.be/amc/scripts');
Exit;
end;
end;
numPageR := 1;
MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
MovieDirector := GetField(fieldDirector);
SetArrayLength(listeMessagesF,1);
listeMessagesF[0] := urlFilmagesSearchEndFilm;
// Pour ne pas avoir l'alerte sur le type de lancement à chaque fois mais uniquement à la première execution
// Début
TypeExec := GetStatic('LastExec');
if (TypeExec <> IntToStr(GetOption('Type de Lancement'))) then
begin
if (ShowConfirmation('Vous exécutez le script avec le type de lancement << '+IntToStr(GetOption('Type de Lancement'))+' >> pour la première fois.'+RCN(2)+'Cliquer sur ''''OUI'''' pour continuer.') = False) then
exit
else
SetStatic('LastExec',IntToStr(GetOption('Type de Lancement')));
end;
// Fin
// Pour la création du fichier log
// Début
if (GetOption('Fichier de log') = 0) and (premiereExecution = 0) then
begin
premiereExecution := -1;
batch(NomScript);
AddToLog('Les films ayant été mis à jour sont maintenant cochés');
end;
// Fin
if (GetOption('Type de Lancement') = 1) then
MessageInput := 'Entrez le titre du film :'
else
if (GetOption('Type de Lancement') = 3) then
begin
Sleep(timetosleep);
MovieName := GetField(fieldURL);
if Pos(urlFicheFilm, MovieName) > 0 then
AnalyzeMoviePage(MovieName);
end else
begin
Sleep(timetosleep);
AnalyzePage(urlFilmagesSearch+UrlEncode(StringReplace(TitrePlus(UTF8Encode(MovieName)), '?', ''))+urlFilmagesSearchEndFilm);
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.