home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 June / PCpro_2005_06.ISO / files / opensource / amc / amc_install.exe / {app} / Scripts / Amazon (FR).ifs < prev    next >
Encoding:
Text File  |  2005-03-12  |  18.7 KB  |  598 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=ScorEpioN
  8. Title=Amazon.fr
  9. Description=RΘcupΦre lse informations DVD d'Amazon.fr
  10. Site=http://www.amazon.fr
  11. Language=FR
  12. Version=02 du 07/03/2005
  13. Requires=3.5.0
  14. Comments=
  15. 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. |
  16. GetInfo=1
  17.  
  18. [Options]
  19. 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
  20. 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
  21. Recherche sur le titre=0|0|0=Traduit|1=Original
  22.  
  23. ***************************************************)
  24.  
  25. program Amazon_FR;
  26. const
  27.     AmazonUrl = 'http://www.amazon.fr/exec/obidos/ASIN/';
  28.     AmazonSearch = 'http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-keywords=';
  29. var
  30.   MovieName, Address : string;
  31.   i, premiereExecution: Integer;
  32.   listeResultat: TStringList;
  33.  
  34. //------------------------------------------------------------------------------
  35. // VERIFIER LA VERSION DU SCRIPT
  36. //------------------------------------------------------------------------------
  37.  
  38. procedure verifVersion();
  39. var
  40.    Line, NewVersion : String;
  41.    BeginPos, EndPos : Integer;
  42. begin
  43.   Line := GetPage('http://forum.antp.be/phpbb2/viewtopic.php?t=1453');
  44.   BeginPos := pos('TELECHARGER LE SCRIPT AMAZON.FR v', Line);
  45.   delete(Line,1, BeginPos+32);
  46.   EndPos := pos('du', Line);
  47.   NewVersion := copy(Line, 1, EndPos - 2);
  48.   if (ShowConfirmation('La derniΦre version est la '+NewVersion+'. Cliquer sur ''''OUI'''' pour la tΘlΘcharger.') = True) then
  49.   begin
  50.     Launch('iexplore.exe','http://www.ifrance.com/ricoland/Amazon%20(FR).ifs');
  51.   end else
  52.     exit;
  53. end;
  54.  
  55. //------------------------------------------------------------------------------
  56. // MET LE TITRE AU BON FORMAT
  57. //------------------------------------------------------------------------------
  58.  
  59. function formatTitre(titre : String; option : Integer) : string;
  60. begin
  61.   if (option = 0) then
  62.   begin
  63.      titre := AnsiLowerCase(titre);
  64.   end else if (option = 1) then
  65.   begin
  66.      titre := AnsiUpperCase(titre);
  67.   end else if (option = 2) then
  68.   begin
  69.      titre := AnsiUpFirstLetter(titre);
  70.   end else if (option = 3) then
  71.   begin
  72.      titre := AnsiMixedCase(titre,' -');
  73.   end;
  74.   result := titre;
  75. end;
  76.  
  77. //------------------------------------------------------------------------------
  78. // TROUVE LA CHAINE VOULUE
  79. //------------------------------------------------------------------------------
  80.  
  81. function findInfo(Debut, Fin, Line, Option : String) : string;
  82. var
  83.    infos : String;
  84.    BeginPos, EndPos : Integer;
  85. begin
  86.    infos := '';
  87.    BeginPos := pos(Debut, Line);
  88.    if BeginPos > 0 then
  89.    begin
  90.     delete(Line, 1, BeginPos+length(Debut)-1);
  91.     EndPos := pos(Fin, Line);
  92.     infos := copy(Line,0,EndPos-1);
  93.     if option = '-1' then
  94.     begin
  95.       infos := StringReplace(infos, '<BR>', #13#10);
  96.       infos := StringReplace(infos, '<br>', #13#10);
  97.       infos := StringReplace(infos, '–', '-');
  98.     end;
  99.     HTMLRemoveTags(infos);
  100.     HTMLDecode(infos);
  101.     if option = '0' then
  102.       infos := StringReplace(infos, #13#10, '');
  103.    end;
  104.    result := Trim(infos);
  105. end;
  106.  
  107. //------------------------------------------------------------------------------
  108. // STOCKE LA VALEUR DANS LE CHAMP SP╔CIFI╔ SI LA VALEUR EST NON NULLE
  109. //------------------------------------------------------------------------------
  110.  
  111. procedure MonSetField(field: Integer; value: string);
  112. begin
  113. if value <> '' then
  114.   SetField(field,value);
  115. end;
  116.  
  117. //------------------------------------------------------------------------------
  118. // RECUPERE LES RESULTATS AMAZON.FR
  119. //------------------------------------------------------------------------------
  120.  
  121. procedure imageAmazon(title : String);
  122. var
  123.   adresseRecherche, Line : String;
  124.   StartPos: Integer;
  125. begin
  126.   PickTreeClear;
  127.   adresseRecherche := AmazonSearch+UrlEncode(title);
  128.   Line := GetPage(adresseRecherche);
  129.   if pos('satisfaisante pour votre recherche sur', Line) > 0 then
  130.   begin
  131.     exit;
  132.   end else
  133.   if (pos('Sur ce DVD', Line) > 0) or (pos('Amazon.fr : DVD:', Line) > 0) then
  134.   begin
  135.       recupInfo(Line);
  136.   end else
  137.   if pos('résultats au total pour', Line) > 0 then
  138.   begin
  139.       StartPos := pos('résultats au total pour', Line);
  140.       delete(Line, 1, StartPos);
  141.       recupAmazon(Line, title);
  142.   end;
  143. end;
  144.  
  145. //------------------------------------------------------------------------------
  146. // CREATION DE LA LISTE DE RESULTAT
  147. //------------------------------------------------------------------------------
  148.  
  149. procedure recupAmazon(Line, title : String);
  150. var
  151.    StartPos: Integer;
  152.    couple, titre, adresse : String;
  153. begin
  154.  
  155.   listeResultat := TStringList.Create;
  156.   
  157.   StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
  158.   repeat
  159.      delete(Line, 1, StartPos+length('<a href=/exec/obidos/ASIN/')-1);
  160. //ajoute les films
  161.      listeResultat.Add(recupTitle(Line)+'|'+AmazonUrl+copy(Line,0,pos('qid', Line)-1));
  162.      StartPos := pos('http://images-eu.amazon.com/images/P/', Line);
  163.      delete(Line, 1, StartPos-1);
  164.      StartPos := pos('<b>', Line);
  165.      delete(Line, 1, StartPos-1);
  166.      StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
  167.   until (StartPos = 0);
  168.  
  169.   if (GetOption('Type de Lancement') = 0) or (GetOption('Type de Lancement') = 1) then
  170.   begin
  171.    PickTreeAdd('Films trouvΘs pour ' + title + ' :', '');
  172.    for i:=0 to listeResultat.Count-1 do
  173.    begin
  174.      couple := listeResultat.GetString(i);
  175.      titre := copy(couple,0,pos('|',couple)-1);
  176.      adresse := copy(couple,pos('|',couple)+1,length(couple)-1);
  177.      PickTreeAdd(titre , adresse);
  178.    end;
  179.  
  180.     PickTreeAdd(' ', '');
  181.     PickTreeAdd('Verifier si vous avez la derniΦre version', 'version');
  182.     PickTreeAdd('Pour me contacter', 'contact');
  183.     
  184.     if listeResultat.Count = 1 then
  185.     begin
  186.      recupInfo(adresse);
  187.      exit;
  188.     end;
  189.  
  190.     begin
  191.       if PickTreeExec(Address)=true then
  192.       begin
  193.         if (Address = 'version') then
  194.         begin
  195.           verifVersion();
  196.         end else if (Address = 'contact') then
  197.         begin
  198.           Launch('iexplore.exe','http://forum.antp.be/phpbb2/viewtopic.php?t=1453');
  199.         end else
  200.         begin
  201.           recupInfo(Address);
  202.         end;
  203.       end;
  204.     end;
  205.   end else if (GetOption('Type de Lancement') = 2) then
  206.   begin
  207.      trouveTitle(title);
  208.   end;
  209. end;
  210.  
  211. //------------------------------------------------------------------------------
  212. // RECUPERE LES INFOS
  213. //------------------------------------------------------------------------------
  214.  
  215. procedure recupInfo(Adresse : String);
  216. var
  217.    Value, Value2, Line: String;
  218.    StartPos: Integer;
  219. begin
  220.    Value := copy(Adresse,0,4);
  221.    if Value = 'http' then
  222.    begin
  223.         Line := GetPage(Adresse);
  224.    end else
  225.    begin
  226.        line := Adresse;
  227.    end;
  228.    StartPos := pos('<b class="sans">', Line);
  229.    delete(Line, 1, StartPos-1);
  230. // Jaquette DVD
  231.    if CanSetPicture then
  232.      GetPicture(recupImage(Line));
  233. // Titre Traduit
  234.    if CanSetField(fieldTranslatedTitle) then
  235.    begin
  236.       Value := formatTitre(findInfo('<b class="sans">', '</b>', Line,'0'),GetOption('Casse Choisie'));
  237.       delete(Value, pos(' - ',Value), length(Value));
  238.       if (pos('(',Value) > 0) then
  239.         delete(Value, pos('(',Value), length(Value));
  240.       MonSetField(fieldTranslatedTitle, Value);
  241.    end;
  242. // Acteurs
  243.    if CanSetField(fieldActors) then
  244.       MonSetField(fieldActors, formatTitre(findInfo('Avec :', '<br>', Line,'0'),GetOption('Casse Choisie')));
  245. // RΘalisateur
  246.    if CanSetField(fieldDirector) then
  247.       MonSetField(fieldDirector, formatTitre(findInfo('Réalisateur :', '<br>', Line,'0'),GetOption('Casse Choisie')));
  248. // Date de parution
  249.    if CanSetField(fieldYear) then
  250.    begin
  251.       Value := findInfo('Date de parution :', '<br>', Line,'0');
  252.       MonSetField(fieldYear, copy(Value,length(Value)-4,length(Value)));
  253.    end;
  254. // Editeur
  255.    if CanSetField(fieldProducer) then
  256.       MonSetField(fieldProducer, findInfo('Éditeur :', '<br>', Line,'0'));
  257. // Line α partir de Zone et Formats son
  258.    StartPos := pos('Zone et formats son :', Line);
  259.    delete(Line, 1, StartPos-1);
  260. // Zone
  261.    if CanSetField(fieldVideoFormat) then
  262.       MonSetField(fieldVideoFormat, 'DVD '+findInfo('Zone :', '<BR>', Line,'0'));
  263. // Langue
  264.    if CanSetField(fieldLanguages) then
  265.       MonSetField(fieldLanguages, findInfo('Langues et formats sonores :', '<BR>', Line,'0'));
  266. // Sous-titre
  267.    if CanSetField(fieldSubtitles) then
  268.       MonSetField(fieldSubtitles, findInfo('Sous-titres :', '<br>', Line,'0'));
  269. // Line α partir de DΘtails de l'Θdition
  270.    StartPos := pos('Détails', Line);
  271.    delete(Line, 1, StartPos-1);
  272. // Titre Original
  273.    if CanSetField(fieldOriginalTitle) then
  274.       MonSetField(fieldOriginalTitle, findInfo('Titre Original :', '<br>', Line,'0'));
  275. // Line α partir de Bonus
  276.    StartPos := pos('Bonus', Line);
  277.    delete(Line, 1, StartPos-1);
  278. // Bonus
  279.    if CanSetField(fieldComments) then
  280.    begin
  281.       Value := findInfo('Bonus :', '• ASIN', Line,'-1');
  282.       if Value <> '' then
  283.         Value := 'Bonus :'+Value;
  284.       MonSetField(fieldComments, Value);
  285.    end;
  286. // Line α partir de Bonus
  287.    StartPos := pos('Chroniques et points de vue', Line);
  288.    delete(Line, 1, StartPos-1);
  289. // Synopsis
  290.    if CanSetField(fieldDescription) then
  291.    begin
  292.       if pos('Liste complète des chroniques et points de vue',Line) <> 0 then
  293.       begin
  294.         StartPos := Pos('href=/exec/obidos/tg/detail',Line);
  295.         delete(Line,1,StartPos+5);
  296.         Value := copy(Line,1,Pos('/ref',Line)-1);
  297.         Line := GetPage('http://www.amazon.fr/'+Value);
  298.       end;
  299.       Value := findInfo('Synopsis</i></b></span><br>', '</span>', Line,'-1');
  300.       if Value <> '' then
  301.         Value := 'Synopsis :'+#13#10+Value+#13#10#13#10;
  302.       Value2 := Value;
  303.       Value := findInfo('Amazon.fr</i></b></span><br>', '</span>', Line,'-1')+findInfo('Amazon.fr </i></b></span><br>', '</span>', Line,'-1');
  304.       if Value <> '' then
  305.         Value := 'Avis Amazon.fr :'+#13#10+Value;
  306.       MonSetField(fieldDescription, Value2+Value);
  307.    end;
  308. // Adresse Web
  309.    if CanSetField(fieldURL) then
  310.       SetField(fieldURL, Adresse);
  311. end;
  312.  
  313. //------------------------------------------------------------------------------
  314. // RECUPERE L'ADRESSE DE L'IMAGE
  315. //------------------------------------------------------------------------------
  316.  
  317. function recupImage(Line : String) : String;
  318. var
  319.    ImageAddress : String;
  320.    StartPos: Integer;
  321. begin
  322.      StartPos := pos('http://images-eu.amazon.com/images/P/', Line);
  323.      delete(Line, 1, StartPos-1);
  324.      ImageAddress := copy(Line, 0, pos('"', Line) - 1);
  325.      ImageAddress := StringReplace(ImageAddress, 'THUMBZZZ', 'LZZZZZZZ');
  326.      result := ImageAddress;
  327. end;
  328.  
  329. //------------------------------------------------------------------------------
  330. // RECUPERE LE TITRE
  331. //------------------------------------------------------------------------------
  332.  
  333. function recupTitle(Line : String) : String;
  334. var
  335.    title : String;
  336.    StartPos: Integer;
  337. begin
  338.      StartPos := pos('http://images-eu.amazon.com/images/P/', Line);
  339.      delete(Line, 1, StartPos-1);
  340.      StartPos := pos('<b>', Line);
  341.      delete(Line, 1, StartPos-1);
  342.      title := copy(Line, 1, pos('</b></a>', Line)-1);
  343.      HTMLRemoveTags(title);
  344.      title := StringReplace(title, #13#10, '');
  345.      result := title;
  346. end;
  347.  
  348. //------------------------------------------------------------------------------
  349. // IMPORTE L'IMAGE AMAZON
  350. //------------------------------------------------------------------------------
  351.  
  352. procedure importAmazon(Line : String);
  353. var
  354.    ImageAddress : String;
  355.    StartPos: Integer;
  356. begin
  357.      StartPos := pos('http://images-eu.amazon.com/images/P/', Line);
  358.      delete(Line, 1, StartPos-1);
  359.      ImageAddress := copy(Line, 0, pos('"', Line) - 1);
  360.      ImageAddress := StringReplace(ImageAddress, 'THUMBZZZ', 'LZZZZZZZ');
  361.      Sleep(500);
  362.      GetPicture(ImageAddress);
  363. end;
  364.  
  365.  
  366. //------------------------------------------------------------------------------
  367. // SUPPRIME LES ACCENTS
  368. //------------------------------------------------------------------------------
  369.  
  370. function supprimeAccents(NomFilm : String) : String;
  371. begin
  372.      NomFilm := StringReplace(NomFilm, 'Θ', 'e');
  373.      NomFilm := StringReplace(NomFilm, 'Φ', 'e');
  374.      NomFilm := StringReplace(NomFilm, 'α', 'a');
  375.      NomFilm := StringReplace(NomFilm, 'τ', 'c');
  376.      NomFilm := StringReplace(NomFilm, '∙', 'u');
  377.      NomFilm := StringReplace(NomFilm, 'δ', 'e');
  378.      NomFilm := StringReplace(NomFilm, 'Ω', 'e');
  379.      NomFilm := StringReplace(NomFilm, '⌠', 'o');
  380.      delete(NomFilm, pos(' - ',NomFilm), length(NomFilm));
  381.      if (pos(', ',NomFilm) > 0) then
  382.         delete(NomFilm, 1, pos(', ',NomFilm)+1);
  383.      if (pos('(',NomFilm) > 0) then
  384.         delete(NomFilm, pos('(',NomFilm), length(NomFilm));
  385.      if (pos(':',NomFilm) > 0) then
  386.         delete(NomFilm, pos(':',NomFilm), length(NomFilm));
  387.      result := trim(NomFilm);
  388. end;
  389.  
  390. //------------------------------------------------------------------------------
  391. // VERIFIE LE RESULTAT AMAZON
  392. //------------------------------------------------------------------------------
  393.  
  394. function compareTitle(titleAllo, title : String) : String;
  395. begin
  396.      title := supprimeAccents(trim(AnsiLowerCase(title)));
  397.      titleAllo := supprimeAccents(trim(AnsiLowerCase(titleAllo)));
  398.      if (title = titleAllo) then
  399.      begin
  400.        result := 'OK';
  401.      end else
  402.      begin
  403.        result := 'KO';
  404.      end;
  405. end;
  406.  
  407. //------------------------------------------------------------------------------
  408. // TROUVE LE BON TITRE SI LE PREMIER N'EST PAS LE BON
  409. //------------------------------------------------------------------------------
  410.  
  411. procedure trouveTitle(title : String);
  412. var
  413.    oK, couple, titre, adresse : String;
  414. begin
  415.    for i:=0 to listeResultat.Count-1 do
  416.    begin
  417.      couple := listeResultat.GetString(i);
  418.      titre := copy(couple,0,pos('|',couple)-1);
  419.      adresse := copy(couple,pos('|',couple)+1,length(couple)-1);
  420.      oK := compareTitle(title,titre);
  421.      if oK = 'OK' then
  422.      begin
  423.        recupInfo(adresse);
  424.        exit;
  425.      end;
  426.    end;
  427.    listeResultat.Free;
  428.  
  429. end;
  430.  
  431. //------------------------------------------------------------------------------
  432. // NETTOIE LE TITRE DU FICHIER POUR AVOIR LE TITRE DE FILM
  433. //------------------------------------------------------------------------------
  434.  
  435. function cleanTitle(title : String) : string;
  436. var
  437.   i,j, fin : Integer;
  438.   temp : String;
  439.  
  440. begin
  441.   title := AnsiUpperCase(title);
  442.  
  443.   if title <> '' then
  444.   begin
  445. // Nettoie les tags fichiers, merci Atmosfear pour les tags
  446.   i:=pos('.DVD',title);
  447.   if i <> 0 then
  448.   begin
  449.     title := copy(title,1,i-1);
  450.   end;
  451.   i:=pos('.DIVX',title);
  452.   if i <> 0 then
  453.   begin
  454.     title := copy(title,1,i-1);
  455.   end;
  456.   i:=pos('.FREN',title);
  457.   if i <> 0 then
  458.   begin
  459.     title := copy(title,1,i-1);
  460.   end;
  461.   i:=pos('.GERM',title);
  462.   if i <> 0 then
  463.   begin
  464.     title := copy(title,1,i-1);
  465.   end;
  466.   i:=pos('.INT',title);
  467.   if i <> 0 then
  468.   begin
  469.     title := copy(title,1,i-1);
  470.   end;
  471.   i:=pos('.LIM',title);
  472.   if i <> 0 then
  473.   begin
  474.     title := copy(title,1,i-1);
  475.   end;
  476.   i:=pos('.PROP',title);
  477.   if i <> 0 then
  478.   begin
  479.     title := copy(title,1,i-1);
  480.   end;
  481.   i:=pos('.REPACK',title);
  482.   if i <> 0 then
  483.   begin
  484.     title := copy(title,1,i-1);
  485.   end;
  486.   i:=pos('.SUBB',title);
  487.   if i <> 0 then
  488.   begin
  489.     title := copy(title,1,i-1);
  490.   end;
  491.   i:=pos('.UNSUB',title);
  492.   if i <> 0 then
  493.   begin
  494.     title := copy(title,1,i-1);
  495.   end;
  496.   i:=pos('.WS',title);
  497.   if i <> 0 then
  498.   begin
  499.     title := copy(title,1,i-1);
  500.   end;
  501.   i:=pos('.XVID',title);
  502.   if i <> 0 then
  503.   begin
  504.     title := copy(title,1,i-1);
  505.   end;
  506.   i:=pos('.AC3',title);
  507.   if i <> 0 then
  508.   begin
  509.     title := copy(title,1,i-1);
  510.   end;
  511.   i:=pos('.UNRAT',title);
  512.   if i <> 0 then
  513.   begin
  514.     title := copy(title,1,i-1);
  515.   end;
  516.  
  517.    title := StringReplace(title, '.', ' ');
  518.    title := StringReplace(title, ',', ' ');
  519.    title := StringReplace(title, ':', '');
  520.    title := StringReplace(title, '-', '');
  521.    title := StringReplace(title, '  ', ' ');
  522.  
  523.    i := 0;
  524. // Nettoie les tags de team
  525.    if (pos('(',title) <> 0) then
  526.    begin
  527.      i := pos('(',title);
  528.      temp := copy(title,0,i-1);
  529.      j := pos(')',title);
  530.      fin := Length(title);
  531.      title := temp + copy(title,j+1,fin);
  532.    end;
  533.  
  534.    if (pos('[',title) <> 0) then
  535.    begin
  536.      i := pos('[',title);
  537.      temp := copy(title,1,i-1);
  538.      j := pos(']',title);
  539.      fin := Length(title);
  540.      title := temp + copy(title,j+1,fin);
  541.    end;
  542.  
  543.    title := AnsiLowerCase(title);
  544.    title := AnsiUpFirstLetter(title);
  545.    title := AnsiMixedCase(title,' -');
  546.   end;
  547.    result := title;
  548. end;
  549.  
  550. //------------------------------------------------------------------------------
  551. // PROGRAMME PRINCIPAL
  552. //------------------------------------------------------------------------------
  553.  
  554. begin
  555.   if CheckVersion(3,5,0) then
  556.   begin
  557.     if (GetOption('Recherche sur le titre') = 0) then
  558.     begin
  559.       MovieName := GetField(fieldTranslatedTitle);
  560.       if MovieName = '' then
  561.         MovieName := GetField(fieldOriginalTitle);
  562.     end else
  563.     if (GetOption('Recherche sur le titre') = 1) then
  564.     begin
  565.       MovieName := GetField(fieldOriginalTitle);
  566.       if MovieName = '' then
  567.         MovieName := GetField(fieldTranslatedTitle);
  568.     end;
  569.     MovieName := cleanTitle(MovieName);
  570.     if (GetOption('Type de Lancement') = 0) then
  571.     begin
  572.       if Input('Amazon.fr by ScorEpioN', 'Entrez le titre du film :', MovieName) then
  573.       begin
  574.         if Pos('amazon.', MovieName) > 0 then
  575.         begin
  576.           recupInfo(MovieName);
  577.         end else
  578.           imageAmazon(MovieName);
  579.       end;
  580.     end else
  581.     begin
  582.       if (premiereExecution = 0) then
  583.       begin
  584.           premiereExecution := -1;
  585.           if (ShowConfirmation('Vous allez executer le script sans confirmation, cliquer sur ''''OUI'''' pour continuer') = True) then
  586.           begin
  587.             imageAmazon(MovieName);
  588.           end else
  589.             exit;
  590.       end else
  591.       begin
  592.           imageAmazon(MovieName);
  593.       end;
  594.     end;
  595.   end else
  596.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  597. end.
  598.