Page 1 of 1

[FR] moviecovers

Posted: 2004-08-16 20:14:27
by Achille
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

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.