[FR] moviecovers
Posted: 2004-08-16 20:14:27
Salut voila j'ai modifier profondément le script pour moviecovers en utilisant le fichier text qu'il propose affin de moins utiliser de bande passante et aller plus vite en plus sa télécharge directement
j'ai eu un peut de mal avec certaine fonction, j'ai carément mis une fonction en commentaire car je ne connais pas assez bien le pascal donc si vous voyez comment la coriger
j'ai eu un peut de mal avec certaine fonction, j'ai carément mis une fonction en commentaire car je ne connais pas assez bien le pascal donc si vous voyez comment la coriger
Code: Select all
// GETINFO SCRIPTING
// Moviecovers (base DIVX) Achille
(***************************************************
* *
* MOVIECOVERS extraction *
* by ACHILLE *
* *
* Ce script est baser sur le site movie cover *
* il permet d'aller cherché le Titre fr *
* nom du réalisateur *
* année de sortie / nationalité du film / genre *
* la durée / liste des nom d'acteurs / résumé *
* distributeur en francee/ titre original / *
* mots clef *
* *
* Pour ceux quii esite encor a quiter basedivx *
* Voici un script qui ce raproche de sa méthode *
***************************************************)
program MovieCovers;
var
MovieName: string;
LineNr: Integer;
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(Pattern, List.GetString(i)) <> 0 then
begin
result := i;
Break;
end;
end;
(*
Cettee fonction ne marche pas elle est sencé transformé les codes uurl ( type %20 pour l'espace )
en caracter ascii ( type espace a la place de %20 )
exemple :
urldeencode('bonjour%20achille') devrais renvoyer 'bonjour achille'
voilla son fonctionnemennt
on teste les chr un par un
si le chhr = % alors on prend les 2 chr suivant
on transforme ce codee hexadecimal en entier (code ascii )
on transforme cette entier en chr par ll'inverse du code ascii
faacile a dire mais pas a faire quand on ne connais pass les subtiilité du pascal ou ddu delphi
function urldeencode(STR : string): string;
var
URLED_STR, num : string;
i, xl: integer;
begin
URLED_STR := '';
for i := 1 to length(STR) do
begin
xl := ord(MidStr(STR,i,1));
if (xl=25) then
num:=MidStr(STR,i + 1,2);
num:=chr(hexaToInt(num));
URLED_STR := URLED_STR + num;
i:=i+3
else
URLED_STR := URLED_STR + MidStr(STR,i,1);
end;
Result := URLED_STR;
end;
*)
function urldecod(STR : string): string;
var
urd: string;
begin
(* fonction inverce de URLencode un peut artizanale*)
urd:=stringreplace(STR,'%20',' ');
urd:=stringreplace(urd,'%23','#');
urd:=stringreplace(urd,'%22','"');
urd:=stringreplace(urd,'%27','''');
urd:=stringreplace(urd,'%25','%');
result:=urd;
end;
procedure AnalyzePage(Address: string);
var
Line, Value: string;
LastLine, BeginPos, EndPos: Integer;
Page: TStringList;
begin
Line := GetPage(Address);
if Pos('il n''y a pas de film correspondant à ce(s) critère(s) dans <B>MOVIECOVERS</B>', Line) > 0 then
begin
ShowMessage('No movie found');
Exit;
end;
PickTreeClear;
BeginPos := Pos('<FONT size="+1" color="#000000"><B>', Line);
Delete(Line, 1, BeginPos - 1);
EndPos := Pos('</FONT>', Line);
Value := Copy(Line, 1, EndPos - 1);
HTMLRemoveTags(Value);
HTMLDecode(Value);
BeginPos := Pos(' <TABLE border=0 cellspacing=0 cellpadding=6 align="center" width="100%">', Line) + 1;
Delete(Line, 1, BeginPos);
EndPos := Pos(' <TABLE border=0 cellspacing=0 cellpadding=6 align="center" width="100%">', Line) + 1;
Delete(Line, EndPos, Length(Line));
Page := TStringList.Create;
Page.Text := Line;
Value := Trim(Value) + ' : ' + Trim(Page.GetString(2));
PickTreeAdd(Value, '');
for LineNr := 3 to Page.Count-1 do
begin
Line := Page.GetString(LineNr);
if Pos('<LI><A', Line) > 0 then
begin
BeginPos := Pos('/film/titre', Line);
EndPos := Pos('">', Line);
Value := 'http://www.moviecovers.com' + Copy(Line, BeginPos, EndPos - BeginPos);
(*Picktreeadd(value, value);*)
HTMLRemoveTags(Line);
PickTreeAdd(Trim(Line), Value);
end;
end;
if PickTreeExec(Address) then
(*AnalyzeMoviePage(Address);*)
resume(Address);
Page.Free;
end;
function TwoLinesAfter(Pattern: string; Page: TStringList): string;
begin
LineNr := FindLine(Pattern, Page, LineNr);
Result := Page.GetString(LineNr+2);
HTMLRemoveTags(Result);
HTMLDecode(Result);
Result := Trim(Result);
end;
procedure resume (Adress: string);
(*
Proccedure de remplacement pour aller cherché les textes directement suur la page de traitement a programme
ajouter par ACHILLE le 15 / 08 / 2004
*)
var
nouvelleadr, idcm, dure : string;
lestx: TStringList;
BeginPos, EndPos, IntValue: Integer;
begin
SetField(fieldURL, Adress);
nouvelleadr:=stringreplace(Adress,'http://www.moviecovers.com/film/titre_','');
idcm:=stringreplace(nouvelleadr,'.html','');
(*idcm:= HTMLDecode(idcm); je ne commprend pas pourquoi sa ne fonctionnne pas
HTMLDecode(idcm); ni sa non plus dailleur*)
idcm:=urldecod(idcm);
(*pour plus de détaiilles sur mooviie cover aller voir http://www.moviecovers.com/interfacage.html *)
Adress:='http://www.moviecovers.com/getfilm.html' ;
nouvelleadr:='idmc=' + idcm;
lestx := TStringList.Create;
lestx.text:= postpage(Adress,nouvelleadr);
Adress:=lestx.getstring(5);
(*SetField(fieldComments, idcm); (*vue qu'il ny a pas de comentaire sur moovie cover je me seert des commentairre pour
tester mes variables*)
SetField(fieldTranslatedTitle, lestx.getstring(0));
SetField(fieldDirector,lestx.getstring(1));
SetField(fieldYear, lestx.getstring(2));
SetField(fieldCountry, lestx.getstring(3));
SetField(fieldCategory, lestx.getstring(4));
(* vv passage de l'heure du format hhHmm au format mmm vv*)
dure:= lestx.getstring(5);
BeginPos := Pos('H', dure);
IntValue := (StrToInt(Copy(dure, 1, BeginPos - 1), 0) * 60) + (StrToInt(Copy(dure, BeginPos + 1, Length(dure)), 0));
(* ^^ passage de l'heure du format hhHmm au format mmm ^^*)
SetField(fieldLength, IntToStr(IntValue));
SetField(fieldActors, lestx.getstring(6));
SetField(fieldDescription, lestx.getstring(7));
SetField(fieldProducer, lestx.getstring(8));
SetField(fieldOriginalTitle, lestx.getstring(9));
if GetField(fieldOriginalTitle) = '' then
SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));
GetLargePicture(idcm);
DisplayResults;
end;
procedure GetLargePicture(Address: string);
(* procedure refaite par acchille pour aller recherché l'affiche du film en grand format *)
begin
Address :=urlencode(address);
GetPicture('http://www.moviecovers.com/getjpg.html/' + Address, False);
end;
begin
if CheckVersion(3,4,2) then
begin
MovieName := GetField(fieldTranslatedTitle);
if MovieName = '' then
MovieName := GetField(fieldOriginalTitle);
if Input('MovieCovers Achille', 'Entrez le titre du film :', MovieName) then
begin
AnalyzePage('http://www.moviecovers.com/multicrit.html?titre=' + UrlEncode(MovieName) + '&slow=1&listes=1');
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.2)');
end.program NewScript;
begin
end.