(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=ScorEpioN
Title=Cinemovies.fr
Description=Le magazine du cinéma international
Site=http://www.cinemovies.fr
Language=FR
Version=04 du 23/05/2005
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]
Mise à jour=1|1|0=Oui|1=Non
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=Cherche le meilleur résultat sans confirmation|3=Lancement automatique sur l'adresse web
Casse Choisie=3|3|0=Titre et Nom en minuscule|1=Titre et Nom en majuscule|2=Première lettre en majuscule|3=Première lettre de chaque mot en majuscule
Titre en double=0|0|0=Garde les titres originaux et traduits même identiques|1=Garde les titres originaux si identiques|2=Garde les titres traduits si identiques
Recherche sur le titre=0|0|0=Traduit|1=Original
Choix Image=1|1|0=Petite affiche|1=Grande affiche
Fichier de log=1|1|0=Oui|1=Non
***************************************************)
program Cinemovies_FR;
uses
ScorEpioNCommonScript;
const
VersionScript = '04 du 23/05/2005';
NomScript = 'CINEMOVIES';
urlDomain = 'cinemovies.fr';
cinemovies = 'http://www.cinemovies.fr/';
cinemoviesSearch = cinemovies+'resultat_recherche.php?cherche=';
cinemoviesSubmit = '&x=0&y=0';
cinemoviesFiche = 'fiche_film.php?IDfilm=';
cinemoviesPhoto = 'fiche_photos.php?IDfilm=';
cinemoviesAffiche = 'fiche_affiches.php?IDfilm=';
timeSleep = 500;
var
MovieName, Address, ID : string;
i, premiereExecution : Integer;
listeResultat: TStringList;
//------------------------------------------------------------------------------
// RECUPERE LES RESULTATS CINEMOVIES.FR
//------------------------------------------------------------------------------
procedure recherche(title : String);
var
adresseRecherche, Line, annee, complement, titre, adresse : String;
StartPos, EndPos : Integer;
begin
adresseRecherche := cinemoviesSearch+UrlEncode(title)+cinemoviesSubmit;
Line := GetPage(adresseRecherche);
if pos('Films', Line) > 0 then
begin
listeResultat := TStringList.Create;
StartPos := pos('Films', Line);
delete(Line, 1, StartPos+length('Films')-1);
// Films déjà sortis
if pos('Films déjà sortis:', Line) > 0 then
begin
StartPos := pos('Films déjà sortis:', Line);
delete(Line, 1, StartPos+length('Films déjà sortis:')-1);
StartPos := pos('', '', Line,'0');
annee := findInfo('', '', Line,'0');
annee := StringReplace(annee, '(', '');
annee := StringReplace(annee, ')', '');
annee := Trim(annee);
complement := findInfo('
', '
', Line,'0');
complement := StringReplace(complement, ' ', '');
// Ajoute les films
listeResultat.Add(annee+'|'+titre+'|'+adresse+'|'+complement);
delete(Line, 1, length(' EndPos);
end;
// Films bientôt en salles
if pos('Films bientôt en salles:', Line) > 0 then
begin
StartPos := pos('Films bientôt en salles:', Line);
delete(Line, 1, StartPos+length('Films bientôt en salles:')-1);
StartPos := pos('', '', Line,'0');
annee := findInfo('', '', Line,'0');
annee := StringReplace(annee, '(', '');
annee := StringReplace(annee, ')', '');
annee := Trim(annee);
complement := findInfo('
', '
', Line,'0');
complement := StringReplace(complement, ' ', '');
// Ajoute les films
listeResultat.Add(annee+'|'+titre+'|'+adresse+'|'+complement);
delete(Line, 1, length(' EndPos);
end;
// Création de la liste de résultats
afficheResultat(title);
end else
begin
SetField(fieldChecked, '');
exit;
end;
end;
//------------------------------------------------------------------------------
// CREATION DE LA LISTE DE RESULTAT
//------------------------------------------------------------------------------
procedure afficheResultat(title : String);
var
StartPos: Integer;
couple, annee, complement, titre, adresse : String;
begin
if (GetOption('Type de Lancement') = 0) or (GetOption('Type de Lancement') = 1) then
begin
PickTreeClear;
PickTreeAdd('Films trouvés pour ' + title + ' :', '');
for i:=0 to listeResultat.Count-1 do
begin
couple := listeResultat.GetString(i);
annee := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(annee)+1);
titre := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(titre)+1);
HTMLDecode(titre);
adresse := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(adresse)+1);
complement := copy(couple,0,length(couple));
delete(couple, 1, length(complement)+1);
PickTreeAdd('['+annee+'] '+titre+' '+complement, adresse);
end;
if listeResultat.Count = 1 then
begin
recupInfo(adresse);
exit;
end;
begin
if PickTreeExec(Address)=true then
begin
recupInfo(Address);
end;
end;
end else if (GetOption('Type de Lancement') = 2) then
begin
if listeResultat.Count = 1 then
begin
couple := listeResultat.GetString(0);
annee := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(annee)+1);
titre := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(titre)+1);
HTMLDecode(titre);
adresse := copy(couple,0,pos('|',couple)-1);
recupInfo(adresse);
exit;
end else
begin
trouveTitle(title);
end;
end;
end;
//------------------------------------------------------------------------------
// RECUPERE LES INFOS
//------------------------------------------------------------------------------
procedure recupInfo(Adresse : String);
var
Value, Value2, Line: String;
StartPos : Integer;
begin
// Pour le mode Batch
if (GetOption('Fichier de log') = 0) then
beforeUpdate();
// Début du script de récupération
ID := StringReplace(Adresse, cinemovies+cinemoviesFiche, '');
Line := GetPage(Adresse);
// Jaquette DVD
if CanSetPicture then
recupImage(Line);
// Titre Traduit
if CanSetField(fieldTranslatedTitle) then
MonSetField(fieldTranslatedTitle, formatTitre(findInfo('
', ' : | ', Line,'0'),GetOption('Casse Choisie')));
// Année
if CanSetField(fieldYear) then
MonSetField(fieldYear, nettoieAnnee(findInfo('Sortie(s):', '', Line,'0')));
// Genre
if CanSetField(fieldCategory) then
begin
Value := formatTitre(findInfo('Genre:', '', Line,'0')));
// Réalisateur
if CanSetField(fieldDirector) then
begin
Value := formatTitre(findInfo('Réalisé par:', '', Line,'0'),GetOption('Casse Choisie'));
Value := StringReplace(Value, ',', ', ');
MonSetField(fieldDirector, deleteEnd(Value, ', '));
end;
// Acteurs
if CanSetField(fieldActors) then
begin
Value := formatTitre(findInfo('Avec:', '', Line,'0'),GetOption('Casse Choisie'));
Value := StringReplace(Value, ',', ', ');
MonSetField(fieldActors, deleteEnd(Value, ', ')+'.');
end;
// L'histoire
if CanSetField(fieldDescription) then
MonSetField(fieldDescription,findInfo('arial11blacknews">L''histoire', '', Line,'0'));
// Pays
if CanSetField(fieldCountry) then
MonSetField(fieldCountry, findInfo('Pays', '', Line,'0'));
// Scénario
if CanSetField(fieldProducer) then
begin
Value := formatTitre(findInfo('Scénario', '', Line,'0'),GetOption('Casse Choisie'));
Value := StringReplace(Value, ',', ', ');
MonSetField(fieldProducer, deleteEnd(Value, ', '));
end;
// Titre Original
if CanSetField(fieldOriginalTitle) then
MonSetField(fieldOriginalTitle, formatTitre(findInfo('Titre original', '', Line,'0'),GetOption('Casse Choisie')));
// Note Moyenne
if CanSetField(fieldRating) then
begin
Value := findInfo('', '/5', Line,'0');
delete(Line, 1, pos('/5',Line));
Value2 := findInfo('', '/5', Line,'0');
MonSetField(fieldRating, moyenne(Value, Value2));
end;
// Adresse Web
if CanSetField(fieldURL) then
SetField(fieldURL, Adresse);
// Pour le mode Batch
if (GetOption('Fichier de log') = 0) then
afterUpdate();
// Affichage des titres si original et traduit identique
titreDouble(GetOption('Titre en double'));
end;
//------------------------------------------------------------------------------
// RECUPERE L'AFFICHE
//------------------------------------------------------------------------------
procedure recupImage(Line : String);
var
adresse, adresseAutre : String;
begin
if (pos(cinemoviesPhoto+ID,Line) <> 0) then
begin
Sleep(timeSleep);
Line := GetPage(cinemovies+cinemoviesPhoto+ID);
if (pos(cinemoviesAffiche+ID,Line) <> 0) then
begin
Sleep(timeSleep);
Line := GetPage(cinemovies+cinemoviesAffiche+ID);
adresse := cinemovies+'images/data/affiches/'+findInfo('images/data/affiches/', '"', Line,'0');
delete(Line,1,pos('images/data/affiches/',Line)+length('images/data/affiches/'));
if pos('images/data/affiches/', Line) <> 0 then
begin
adresseAutre := cinemovies+'images/data/affiches/'+findInfo('images/data/affiches/', '"', Line,'0');
adresse := adresseAutre;
end;
if (GetOption('Choix Image') = 1) then
begin
adresse := StringReplace(adresse, 'Paff', 'Gaff');
adresse := StringReplace(adresse, 'AFFP', 'AFFG');
end;
GetPicture(adresse);
end;
end;
end;
//------------------------------------------------------------------------------
// FONCTION DE CONVERSION DE LA DUREE
//------------------------------------------------------------------------------
function DureeEnMinutes(s : string) : String;
var
Heures, Minutes : Integer;
H,m : string;
begin
Heures := 0;
Minutes := 0;
H := copy(s,1,pos('h',s)-1);
Heures := StrToInt(H,1);
Heures := Heures*60;
m := copy(s,pos('h',s)+1,length(s));
if m <> '' then
begin
Minutes := StrToInt(m,2);
Minutes := Heures+Minutes;
m := IntToStr(Minutes);
result := m;
end else
begin
H := IntToStr(Heures);
result := H;
end;
end;
//------------------------------------------------------------------------------
// FONCTION MOYENNE SUR DIX
//------------------------------------------------------------------------------
function moyenne(Note1, Note2 : string) : String; // Calcul la moyenne des notes
var
unite1, decimale1, unite2, decimale2 : Integer;
begin
if (Note1 = '--') and (Note2 = '--') then // Si pas de notes
begin
result := '';
exit;
end;
if (Note1 <> '--') then
begin
unite1 := uniteValue(Note1);
decimale1 := decimaleValue(Note1);
end else
begin
unite1 := uniteValue(Note2);
decimale1 := decimaleValue(Note2);
end;
if (Note2 <> '--') then
begin
unite2 := uniteValue(Note2);
decimale2 := decimaleValue(Note2);
end else
begin
unite2 := unite1;
decimale2 := decimale1;
end;
unite1 := unite1+unite2; // Somme des deux moyennes
decimale1 := decimale2+decimale1;
if decimale1 = 10 then
begin
decimale1 := 0;
unite1 := unite1+1;
end else if decimale1 > 10 then
begin
decimale1 := decimale1-10;
unite1 := unite1+1;
end;
result := IntToStr(unite1)+','+IntToStr(decimale1);
end;
function uniteValue(Note : string) : Integer; // retourne la valeur des chiffre avant la virgule
var
unite : Integer;
begin
unite := 0;
if pos('.',Note) <> 0 then
Note := copy(Note,1,pos('.',Note)-1);
unite := StrToInt(Note,1);
result := unite;
end;
function decimaleValue(Note : string) : Integer; // retourne la valeur des chiffre après la virgule
var
decimale : Integer;
begin
decimale := 0;
if pos('.',Note) <> 0 then
begin
Note := copy(Note,pos('.',Note)+1,length(Note));
decimale := StrToInt(Note,1);
end;
result := decimale;
end;
//------------------------------------------------------------------------------
// NETTOIE ANNEE
//------------------------------------------------------------------------------
function nettoieAnnee(annee : String) : string;
begin
if pos(' 19',annee) <> 0 then
begin
annee := copy(annee,pos(' 19',annee),length(annee));
annee := Trim(annee);
end else
if pos(' 20',annee) <> 0 then
begin
annee := copy(annee,pos(' 20',annee),length(annee));
annee := Trim(annee);
end;
result := annee;
end;
//------------------------------------------------------------------------------
// SUPPRIME LES ACCENTS
//------------------------------------------------------------------------------
function supprimeAccents(NomFilm : String) : String;
begin
// les accents
NomFilm := supprimeLesAccents(NomFilm);
// Pour n'avoir que le titre
delete(NomFilm, pos(' - ',NomFilm), length(NomFilm));
if (pos(', ',NomFilm) > 0) then
delete(NomFilm, 1, pos(', ',NomFilm)+1);
if (pos('(',NomFilm) > 0) then
delete(NomFilm, pos('(',NomFilm), length(NomFilm));
if (pos(':',NomFilm) > 0) then
delete(NomFilm, pos(':',NomFilm), length(NomFilm));
result := trim(NomFilm);
end;
//------------------------------------------------------------------------------
// COMPARE LE TITRE PASSE ET LE TITRE TROUVE
//------------------------------------------------------------------------------
function compareTitle(titleAllo, title : String) : String;
begin
title := supprimeAccents(trim(AnsiLowerCase(title)));
titleAllo := supprimeAccents(trim(AnsiLowerCase(titleAllo)));
if (title = titleAllo) then
begin
result := 'OK';
end else
begin
result := 'KO';
end;
end;
//------------------------------------------------------------------------------
// TROUVE LE BON TITRE SI LE PREMIER N'EST PAS LE BON
//------------------------------------------------------------------------------
procedure trouveTitle(title : String);
var
oK, couple, annee, titre, adresse : String;
begin
for i:=0 to listeResultat.Count-1 do
begin
couple := listeResultat.GetString(i);
annee := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(annee)+1);
titre := copy(couple,0,pos('|',couple)-1);
delete(couple, 1, length(titre)+1);
HTMLDecode(titre);
adresse := copy(couple,0,pos('|',couple)-1);
oK := compareTitle(title,titre);
if oK = 'OK' then
begin
recupInfo(adresse);
exit;
end;
end;
listeResultat.Free;
end;
//------------------------------------------------------------------------------
// PROGRAMME PRINCIPAL
//------------------------------------------------------------------------------
begin
if CheckVersion(3,5,0) then
begin
if GetOption('Mise à jour') = 0 then
begin
execMenuMAJ(VersionScript,NomScript);
exit;
end;
MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
MovieName := conversionNR(MovieName, 'RvN');
Sleep(timeSleep*2);
if (GetOption('Fichier de log') = 0) and (premiereExecution = 0) then
begin
batch(NomScript);
AddToLog('Les films ayant été mis à jour sont maintenant cochés');
end;
if (GetOption('Type de Lancement') = 0) then
begin
if Input(NomScript+' by ScorEpioN', 'Entrez le titre du film :', MovieName) then
begin
if Pos(urlDomain, MovieName) > 0 then
begin
recupInfo(MovieName);
end else
recherche(MovieName);
end;
end else
if (GetOption('Type de Lancement') = 3) then
begin
if (premiereExecution = 0) then
begin
premiereExecution := -1;
if (ShowConfirmation('Vous allez executer le script sans confirmation, cliquer sur ''''OUI'''' pour continuer') = False) then
exit;
end;
MovieName := GetField(fieldURL);
if Pos(urlDomain, MovieName) > 0 then
recupInfo(MovieName);
end else
begin
if (premiereExecution = 0) then
begin
premiereExecution := -1;
if (ShowConfirmation('Vous allez executer le script sans confirmation, cliquer sur ''''OUI'''' pour continuer') = True) then
begin
recherche(MovieName);
end else
exit;
end else
begin
recherche(MovieName);
end;
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.