Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Antoine Potten, Dedej
Title=DVDFR.com
Description=Importation des données et image de DVDFR.com (pour utilisation personnelle uniquement !)
Site=www.dvdfr.com
Language=FR
Version=1.40 du 22/07/2010
Requires=3.5.0
Comments=Merci à l'équipe de DVDFR de fournir un accès simplifié à leurs données.|Pour rappel, ces données sont accessibles uniquement pour une utilisation personnelle ; en aucun cas elles ne peuvent être utilisées commerciallement ou publiquement !|L'ancienne version du script avait été développée par Antoine Potten et Fabrice Fert.
License=Ce script permet de récupérer les données du site de DVDFR pour une utilisation personnelle uniquement.|Ces données ne peuvent pas être récupérées ni exploitées dans un but commercial ou même pour une utilisation publique.|En utilisant ce script vous déclarez accepter ces conditions et endosser toute responsabilité dans la manière dont vous utilisez ces données.
GetInfo=1
[Options]
Mise à jour du Script=0|0|0=Pas de mise à jour|1=Mise à jour du script
Typederecherche=0|0|0=Recherche sur le titre|1=Recherche sur lien Web
ListePays=1|1|0=Ne prend que le premier pays de la liste|1=Prend la liste de tous les pays, séparés par des virgules
ListeCategories=1|1|0=Ne prend que la première catégorie de la liste|1=Prend la liste de toutes les catégories, séparées par des virgules
Bonus=1|1|0=N'importe pas la liste des bonus|1=Importe la liste des bonus dans le champ Commentaires
FormatVideo=1|1|0=Spécifie "MPEG2" d'office|1=Description longue du format d'image mis dans le champ "Format Vidéo"
Reference=0|0|0=N'importe pas la référence|1=Importe la référence dans le champ "Label du média"
GarderCommentaires=0|0|0=Ne pas garder les commentaires|1=Garder les commentaires précédents
TypeMedia=2|0|0=DVD|1=BRD|2=Tous
***************************************************)
program DVDFR;
uses
StringUtils7552;
const
VersionScript = '1.40 du 22/07/2010';
ScriptName = 'DVDFR.ifs';
SiteUrl = 'http://joel.desseaux.free.fr/DVD.FR/';
var
MovieName: string;
Maj, PMaj: Integer;
// *** téléchargement et analyse des pages, contruction de la liste de choix de titres
procedure AnalyzePage(Address: string);
var
xml: TJvSimpleXml;
CurItem: TJvSimpleXmlElem;
i: Integer;
s1, s2: string;
begin
if (GetOption('Typederecherche') = 0) or (copy(GetField(fieldURL),1,16)<>'http://www.dvdfr') then
begin
Address := StringReplace(Address, 'dvdfr.com/dvd/', 'dvdfr.com/api/');
xml := TJvSimpleXml.Create(nil);
xml.LoadFromString(GetPage(Address));
//xml.LoadFromFile('T:\dvd.xml');
if xml.Root.Name = 'dvds' then
begin
if xml.Root.Items.Count = 0 then
begin
ShowInformation('Aucun film trouvé pour "' + MovieName + '"');
xml.Free;
Exit;
end;
PickTreeClear;
PickTreeAdd('Résultats de la recherche de "' + MovieName + '"', '');
for i := 0 to xml.Root.Items.Count-1 do
begin
CurItem := xml.Root.Items.GetItem(i);
s1 := CurItem.Items.GetItemNamed('titres').Items.GetItemNamed('fr').Value;
s2 := CurItem.Items.GetItemNamed('titres').Items.GetItemNamed('vo').Value;
if s2 <> '' then
s1 := s1 + ' (' + s2 + ')';
if CurItem.Items.GetItemNamed('stars').Items.Count > 0 then
begin
s2 := CurItem.Items.GetItemNamed('stars').Items.GetItem(0).Value;
if s2 <> '' then
s1 := s1 + ' / ' + s2;
end;
s2 := CurItem.Items.GetItemNamed('edition').Value;
if s2 <> '' then
s1 := s1 + ' / ' + s2;
s2 := CurItem.Items.GetItemNamed('editeur').Value;
if s2 <> '' then
s1 := s1 + ' / ' + s2;
s2 := CurItem.Items.GetItemNamed('media').Value;
if (GetOption('TypeMedia') = 2) and (s2 <> '') then
s1 := s1 + ' / ' + s2;
HtmlDecode(s1);
if ((GetOption('TypeMedia') = 2) or ((GetOption('TypeMedia') = 0) and (pos('DVD', s2)=1)) or ((GetOption('TypeMedia') = 1) and (pos('BRD', s2)=1))) then
PickTreeAdd(s1, 'http://www.dvdfr.com/dvd/dvd.php?id=' + CurItem.Items.GetItemNamed('id').Value);
end;
if PickTreeExec(Address) then
AnalyzePage(Address);
end
else if xml.Root.Name = 'dvd' then
begin
AnalyzeMoviePage(xml);
end;
if xml.Root.Name = 'errors' then
begin
ShowError(xml.Root.Items.GetItemNamed('error').Items.GetItemNamed('message').Value);
end;
end
else
begin
xml := TJvSimpleXml.Create(nil);
if pos('dvd/f',Address)= 0 then
xml.LoadFromString(GetPage(UrlEncode('http://www.dvdfr.com/api/dvd.php?id=' + copy(Address,pos('?id=',Address)+4,Length(Address)- (pos('?id=',Address)+3)))))
else if pos('-',Address)= 0 then
xml.LoadFromString(GetPage(UrlEncode('http://www.dvdfr.com/api/dvd.php?id=' + copy(Address,pos('dvd/f',Address)+5,Length(Address)- (pos('dvd/f',Address)+5)))))
else
xml.LoadFromString(GetPage(UrlEncode('http://www.dvdfr.com/api/dvd.php?id=' + copy(Address,pos('dvd/f',Address)+5,pos('-',Address)- (pos('dvd/f',Address)+5)))));
AnalyzeMoviePage(xml);
end;
xml.Free;
end;
// *** analyse d'une fiche de film
procedure AnalyzeMoviePage(xml: TJvSimpleXml);
var
Items: TJvSimpleXmlElems;
CurItem, SubItem: TJvSimpleXmlElem;
Prop: TJvSimpleXmlProp;
s1, s2: string;
i: Integer;
begin
Items := xml.Root.Items;
SetField(fieldURL, Items.GetItemNamed('url').Value);
s1 := '';
s2 := '';
CurItem := Items.GetItemNamed('titres');
if CurItem <> nil then
begin
SubItem := CurItem.Items.GetItemNamed('fr');
if SubItem <> nil then
s1 := SubItem.Value;
SubItem := CurItem.Items.GetItemNamed('vo');
if SubItem <> nil then
s2 := SubItem.Value;
end
else
begin
CurItem := Items.GetItemNamed('titres_fr');
if CurItem <> nil then
s1 := CurItem.Value;
CurItem := Items.GetItemNamed('titres_vo');
if CurItem <> nil then
s2 := CurItem.Value;
end;
if s2 = '' then
SetField(fieldOriginalTitle, s1)
else
begin
SetField(fieldOriginalTitle, s2);
SetField(fieldTranslatedTitle, s1);
end;
if CanSetField(fieldCountry) then
begin
s1 := '';
CurItem := Items.GetItemNamed('listePays');
for i := 0 to CurItem.Items.Count-1 do
begin
if s1 <> '' then
begin
if GetOption('ListePays') = 0 then
Break
else
s1 := s1 + ', ';
end;
s1 := s1 + CurItem.Items.GetItem(i).Value;
end;
SetField(fieldCountry, s1);
// end;
end;
SetField(fieldYear, Items.GetItemNamed('annee').Value);
s1 := StringReplace(StringReplace(Items.GetItemNamed('synopsis').Value, #10, ' '), #13, '');
s1 := StringReplace(s1, '&', '...');
HtmlDecode(s1);
SetField(fieldDescription, s1);
SetField(fieldLength, Items.GetItemNamed('duree').Value);
CurItem := Items.GetItemNamed('disques');
if CurItem <> nil then
begin
SetField(fieldDisks, CurItem.Properties.GetItemNamed('nbdiscs').Value);
if CurItem.Items.Count > 0 then
SetField(fieldMediaType, CurItem.Items.GetItem(0).Value);
end;
if CanSetField(fieldVideoBitrate) then
begin
CurItem := Items.GetItemNamed('bitrate');
if CurItem <> nil then
begin
s1 := CurItem.Value;
if CurItem.Properties.GetItemNamed('unite').Value = 'mbits/s' then
s1 := FloatToStr(StrToFloat(StringReplace(s1, ',', '.')) * 1000.0);
if s1 > '0' then
SetField(fieldVideoBitrate, s1);
end;
end;
CurItem := Items.GetItemNamed('image');
if CurItem.Items.Count > 0 then
begin
if CurItem.Items.GetItemNamed('aspect_ratio').Value <> '0.00' then
SetField(fieldResolution, CurItem.Items.GetItemNamed('aspect_ratio').Value);
if ((GetField(fieldMediaType) = '') or (GetField(fieldMediaType) = 'VHS') or (GetField(fieldMediaType) = 'VHS-LP') or (GetField(fieldMediaType) = 'SVHS') or (GetField(fieldMediaType) = 'SVHS-LP') or (GetField(fieldMediaType) = 'DVD') or (GetField(fieldMediaType) = 'DVD-5') or (GetField(fieldMediaType) = 'DVD-9') or (GetField(fieldMediaType) = 'DVD-18') or (GetField(fieldMediaType) = 'BD-25') or (GetField(fieldMediaType) = 'BD-50') or (GetField(fieldMediaType) = 'HD DVD-30')) then
begin
SubItem := CurItem.Items.GetItemNamed('Format');
if (GetOption('FormatVideo') = 0) and (SubItem <> nil) and (GetField(fieldMediaType) <> 'VHS') and (GetField(fieldMediaType) <> 'VHS-LP') and (GetField(fieldMediaType) <> 'SVHS') and (GetField(fieldMediaType) <> 'SVHS-LP') then
SetField(fieldVideoFormat, 'MPEG2, ' + SubItem.Value)
else
SetField(fieldVideoFormat, SubItem.Value);
if CanSetField(fieldComments) then
begin
s1 := '';
SubItem := CurItem.Items.GetItemNamed('standard');
if SubItem <> nil then
s1 := SubItem.Value;
SubItem := CurItem.Items.GetItemNamed('mode');
if SubItem <> nil then
s1 := s1 + ', ' + SubItem.Value;
if (GetOption('GarderCommentaires') = 1) then
begin
if s1 = '' then
SetField(fieldComments, '' + GetField(fieldComments))
else
SetField(fieldComments, s1+ #13#10 + #13#10 + GetField(fieldComments));
end
else
begin
SetField(fieldComments, s1);
end;
end;
end
else
if ((GetField(fieldMediaType) <> 'VHS') and (GetField(fieldMediaType) <> 'VHS-LP') and (GetField(fieldMediaType) <> 'SVHS') and (GetField(fieldMediaType) <> 'SVHS-LP')) and (GetField(fieldMediaType) <> 'CD-ROM') and (GetField(fieldMediaType) <> 'CD') then
SetField(fieldVideoFormat, 'MPEG2');
end;
s1 := Items.GetItemNamed('rating').Value;
if GetField(fieldComments) <> '' then
s1 := Items.GetItemNamed('rating').Value + #13#10#13#10 + GetField(fieldComments);
if s1 <> '' then
SetField(fieldComments, s1);
s1 := Items.GetItemNamed('media').Value;
s1 := StringReplace(s1, 'BRD', 'Blu-ray');
CurItem := Items.GetItemNamed('zones');
if CurItem.Items.Count > 0 then
begin
if CurItem <> nil then
begin
s2 := '';
for i := 0 to CurItem.Items.Count-1 do
begin
if i > 0 then
s2 := s2 + ' - ' + CurItem.Items.GetItem(i).Value
else
s2 := CurItem.Items.GetItem(i).Value;
end;
end;
end;
if s2 <> '' then
s1 := s1 + ' zone ' + s2;
if GetField(fieldComments) <> '' then
s1 := s1 + ', ' + GetField(fieldComments);
SetField(fieldComments, s1);
CurItem := Items.GetItemNamed('critiques');
if CurItem.Items.Count > 0 then
if (CurItem.Items.GetItemNamed('public').Value > '0.0') then
SetField(fieldrating, CurItem.Items.GetItemNamed('public').Value)
else if (CurItem.Items.GetItemNamed('dvdfr').Value > '0.0') then
SetField(fieldrating, CurItem.Items.GetItemNamed('dvdfr').Value);
if CanSetField(fieldActors) or CanSetField(fieldDirector) then
begin
GetStars(Items.GetItemNamed('stars').Items);
if GetField(fieldDirector) = '' then
begin
CurItem := Items.GetItemNamed('realisateurs');
if CurItem <> nil then
begin
s1 := '';
for i := 0 to CurItem.Items.Count-1 do
begin
if i > 0 then
s1 := s1 + ', ';
s1 := s1 + CurItem.Items.GetItem(i).Value;
end;
SetField(fieldDirector, s1);
end;
end;
end;
if CanSetField(fieldCategory) then
begin
s1 := '';
CurItem := Items.GetItemNamed('categories');
for i := 0 to CurItem.Items.Count-1 do
begin
if s1 <> '' then
begin
if GetOption('ListeCategories') = 0 then
Break
else
s1 := s1 + ', ';
end;
s1 := s1 + CurItem.Items.GetItem(i).Value;
end;
SetField(fieldCategory, s1);
end;
if CanSetField(fieldLanguages) or CanSetField(fieldAudioFormat) then
GetAudioTracks(Items.GetItemNamed('audiotracks').Items);
if CanSetField(fieldSubtitles) then
begin
CurItem := Items.GetItemNamed('soustitrage');
s1 := '';
for i := 0 to CurItem.Items.Count-1 do
begin
Prop := CurItem.Items.GetItem(i).Properties.GetItemNamed('type');
if Prop = nil then
s2 := ''
else
s2 := Prop.Value;
if (s2 = '') or (s2 = 'normal') then
begin
if s1 <> '' then
s1 := s1 + ', ';
s1 := s1 + CurItem.Items.GetItem(i).Value;
end;
if s2 = 'malentendants' then
begin
if s1 <> '' then
if pos('Malentendants', s1) = 0 then
s1 := s1 + ', Malentendants: '
else
s1 := s1 + ', ';
s1 := s1 + CurItem.Items.GetItem(i).Value;
end;
end;
SetField(fieldSubtitles, s1);
end;
if ((GetField(fieldMediaType) = '') or (GetField(fieldMediaType) = 'DVD') or (GetField(fieldMediaType) = 'DVD-5') or (GetField(fieldMediaType) = 'DVD-9') or (GetField(fieldMediaType) = 'DVD-18') or (GetField(fieldMediaType) = 'BD-25') or (GetField(fieldMediaType) = 'BD-50') or (GetField(fieldMediaType) = 'HD DVD-30')) then
begin
if CanSetField(fieldComments) then
begin
CurItem := Items.GetItemNamed('listeBonus');
s1 := '';
for i := 0 to CurItem.Items.Count-1 do
begin
s2 := StringReplace(CurItem.Items.GetItem(i).Value, #10, #13#10);
s2 := Trim(StringReplace(s2, #13#13, #13));
s2 := StringReplace(s2, '’', '`');
s2 := StringReplace(s2, '<strong>', '');
s2 := StringReplace(s2, '</strong>', '');
s2 := StringReplace(s2, '<b>', '');
s2 := StringReplace(s2, '</b>', '');
HTMLDecode(s2);
if (s1 <> '') and (s2 <> '') then
s1 := s1 + #13#10 + s2
else
s1 := s1 + s2;
end;
if GetField(fieldComments) <> '' then
s1 := s1 + #13#10#13#10 + GetField(fieldComments);
s1 := StringReplace(s1, #13#10#13#10#13#10, #13#10#13#10);
SetField(fieldComments, s1);
end;
end;
if ((GetField(fieldMediaType) = '') or (GetField(fieldMediaType) = 'DVD') or (GetField(fieldMediaType) = 'DVD-5') or (GetField(fieldMediaType) = 'DVD-9') or (GetField(fieldMediaType) = 'DVD-18') or (GetField(fieldMediaType) = 'BD-25') or (GetField(fieldMediaType) = 'BD-50') or (GetField(fieldMediaType) = 'HD DVD-30')) then
begin
if CanSetField(fieldComments) then
begin
CurItem := Items.GetItemNamed('contenu');
s1 := '';
for i := 0 to CurItem.Items.Count-1 do
begin
s2 := StringReplace(CurItem.Items.GetItem(i).Value, #10, #13#10);
s2 := Trim(StringReplace(s2, #13#13, #13));
s2 := StringReplace(s2, '’', '`');
s2 := StringReplace(s2, '<strong>', '');
s2 := StringReplace(s2, '</strong>', '');
s2 := StringReplace(s2, '<b>', '');
s2 := StringReplace(s2, '</b>', '');
HTMLDecode(s2);
if (s1 <> '') and (s2 <> '') then
s1 := s1 + #13#10 + s2
else
s1 := s1 + s2;
end;
if (GetField(fieldComments) <> '') and (s1 <> '') then
s1 := s1 + #13#10#13#10 + GetField(fieldComments)
else
s1 := GetField(fieldComments);
s1 := StringReplace(s1, #13#10#13#10#13#10, #13#10#13#10);
SetField(fieldComments, s1);
end;
end;
if CanSetField(fieldProducer) then
begin
s1 := Items.GetItemNamed('studio').Value;
s1 := StringReplace(s1, #13#10, ' ');
SetField(fieldProducer, s1);
end;
if CanSetField(fieldMedia) and (GetOption('Reference') <> 0) then
begin
s1 := Items.GetItemNamed('reference').Value;
SetField(fieldMedia, s1);
end;
CurItem := Items.GetItemNamed('cover');
if CurItem <> nil then
begin
s1 := CurItem.Value;
if Pos('nocover', s1) = 0 then
GetPicture(s1);
end;
end;
// *** récupère les acteurs et réalisateurs dans la liste des stars
procedure GetStars(Items: TJvSimpleXmlElems);
var
sActors, sDirectors, val: string;
i: Integer;
CurItem: TJvSimpleXmlElem;
Prop: TJvSimpleXmlProp;
begin
sActors := '';
sDirectors := '';
for i := 0 to Items.Count-1 do
begin
CurItem := Items.GetItem(i);
Prop := CurItem.Properties.GetItemNamed('type');
if Prop = nil then
val := ''
else
val := Prop.Value;
if (val = '') or (val = 'Acteur') then
begin
if sActors <> '' then
sActors := sActors + ', ';
sActors := sActors + CurItem.Value;
end
else
if val = 'Réalisateur' then
begin
if sDirectors <> '' then
sDirectors := sDirectors + ', ';
sDirectors := sDirectors + CurItem.Value;
end
end;
SetField(fieldActors, sActors);
SetField(fieldDirector, sDirectors);
end;
// *** récupère les langues et formats des pistes audio
procedure GetAudioTracks(Items: TJvSimpleXmlElems);
var
i: Integer;
sFormats, sLanguages: string;
CurItem: TJvSimpleXmlElem;
begin
sFormats := '';
sLanguages := '';
for i := 0 to Items.Count-1 do
begin
CurItem := Items.GetItem(i);
if sFormats <> '' then
sFormats := sFormats + ', ';
if sLanguages <> '' then
sLanguages := sLanguages + ', ';
sFormats := sFormats + Trim(CurItem.Items.GetItemNamed('standard').Value + ' ' + CurItem.Items.GetItemNamed('encodage').Value);
sLanguages := sLanguages + CurItem.Items.GetItemNamed('langue').Value
end;
SetField(fieldAudioFormat, sFormats);
SetField(fieldLanguages, sLanguages);
end;
//------------------------------------------------------------------------------
// Vérifie s'il existe une nouvelle version du script
// et propose de la télécharger
//------------------------------------------------------------------------------
procedure CheckScriptVersion();
var
Page, Script: TStringList;
Line, ScriptsDirectory, FileName, ScriptText, Fich: string;
LineNr, BeginPos, EndPos: Integer;
CurrentVersion, NewVersion: real;
begin
Page := TStringList.Create;
FileName := UrlEncode(ScriptName);
FileName := StringReplace(FileName, '%2E', '.');
FileName := StringReplace(FileName, '+', '%20');
Page.Text := GetPage(SiteUrl + FileName);
ScriptsDirectory := GetStatic('path');
//SetStatic('path', ScriptsDirectory);
LineNr := FindLine('Version=', Page, 0);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := pos('Version=', Line) + 8;
EndPos := pos(' du', Line);
CurrentVersion := StrToFloat(copy(VersionScript, 1, pos('du', VersionScript) - 2));
NewVersion := StrToFloat(copy(Line, BeginPos, EndPos - BeginPos));
if (NewVersion > CurrentVersion) then
begin
if ShowConfirmation('Une nouvelle version du script est disponible : ' + copy(Line, BeginPos, EndPos - BeginPos)+ #13#10#13#10 + '- Cliquez sur ''''Oui'''' pour effectuer la mise à jour.' + #13#10#13#10 + '- Cliquez sur ''''Non'''' dans le cas contraire.') = True then
begin
FileName := ScriptName;
Sleep(500);
ScriptText := Page.Text;
Script := TStringList.Create;
Script.Add(ScriptText);
FileName := StringReplace(FileName, '%20', ' ');
Script.SaveToFile(ScriptsDirectory + FileName);
Maj := 1;
ShowInformation('Vous avez mis à jour le script, quitter la fenêtre de scripts et relancez la.');
Script.Free;
end;
end else
end;
end;
// *** début du programme ***
begin
PMaj := PMaj+ 1;
if CheckVersion(3,5,0) then
begin
Maj := 0;
if AcceptLicense(1) then // modifier ou retirer cette ligne revient à accepter la licence :p
begin
if (GetOption('Mise à jour du Script') = 1) and (PMaj = 1) then
begin
CheckScriptVersion();
if Maj = 1 then exit;
end;
if (GetOption('Typederecherche') = 1) and (copy(GetField(fieldURL),1,16)='http://www.dvdfr') then
begin
AnalyzePage(GetField(fieldURL));
end else
begin
MovieName := GetField(fieldTranslatedTitle);
if MovieName = '' then
MovieName := GetField(fieldOriginalTitle);
if Input('Importation DVDFR', 'Entrez le titre du film :', MovieName) then
AnalyzePage('http://www.dvdfr.com/api/search.php?title=' + UrlEncode(RemoveArticles(MovieName)));
end;
end;
end else
ShowError('Ce script requiert une version plus récente de Ant Movie Catalog (au moins la version 3.5)');
end.
A vérifier plus en détail...