Page 2 of 2

Posted: 2006-10-01 07:00:16
by draco31.fr
fan50 wrote:la 3.5 et j'ai passé les scripts qui ne marchaient pas au convertisseur AMC, sans résultat
Il est possible que ces scripts ne soient plus fonctionnel, si le site a changé par exemple.
Dans ce cas, il faut débugger le script pour le mettre à jour.

Dans tout les cas, pour tes différentes versions d'AMC dans "program files" :
* 1 seule version peut suffire pour gérer sa liste de vidéo ou de livre.
* Le fichier LNG de Rincevent permet de passer AMC dans une "langue" avec des catégories adaptée à la gestion d'une bibliothèque ! mais l'inconvénient est qu'il faut changer la langue en même temps que l'on change de type de base de donnée ...
* ... Il est donc interressant de faire une copie d'AMC dans lequel on aura configuré la langue pour les livres et d'associer ce programe avec l'ouverture d'une nouvelle extension qui sera celle choisit pour les catalogues bibliothèques.

Tout ça pour dire, que si tu as peur de ne plus savoir quelle version fait quoi, tu peux sauvegarder tes base de donnée, et tout supprimmer pour tout réinstaller 'proprement' avec la dernière version d'AMC.

De mon côté, je vais voir ce que je peux faire avec le Script de Chunky, et sa mise à jour de ThePure pour arriver à avoir un script fonctionnel. (mais j'ai pas beaucoup de temps donc je suis pas sûr de finir aujourd'hui !)

Posted: 2006-10-03 05:51:24
by fan50
Ca fait deux jours que je surveille les réponses et que je n'avais pas vu qu'il fallait passer à la page 2 !!! pas étonnant que je m'en sorte pas avec les scripts :hihi:
Draco, je te remercie de passer un peu de temps à essayer de me dépanner, t'inquiètes pas pour le délai, y'a pas d'urgence, je voudrais juste arriver à me dépatouiller de ce truc, ça m'agace de ne pas y arriver ! :??:
De mon côté, je vais suivre ton conseil, sauvegarder, désinstaller et réinstaller propre, suivre la procédure de chunky et croiser les doigts pour que tu me trouves un script qui marche :grinking:
Merci encore de ton aide et aussi Antoine, baffab et les auteurs des scripts
Françoise

Posted: 2006-10-03 13:19:04
by baffab
Je ne sais pas ce que Draco31 a fait mais j'avais commencé la refonte du script de amazon, il y a encore des choses à faire mais c'est un début :

Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=Chunky+baffab
Title=Amazon.fr Livre.ifs
Description=Récupères les préwsentation de l'éditeur, les commentaires d'amazon, l'auteur, la date de parution, l'image de la couverture...
Site=www.amazon.fr
Language=French
Version=1.1
Requires=3.5.0
Comments=
License=
GetInfo=1

[Options]

***************************************************)

program AMAZON_FR;

uses
  ScorEpioNCommonScript;

//Paramètres du script
const

  // Mettre les valeurs à True pour importer les champs, ou False pour ne pas en tenir compte
  ConfirmTitre = True;		// False : ne demande pas de confirmation du titre avant recherche
  TempsPause = 500;		// 1000 = 1 Seconde (permet d'éviter les timeout en cas de saturation serveur)
  ImportImage = True;		// False : n'importe pas d'image
  ImportGrandeImage = True; 	// False : petite image importée
  ImportPistes = True;		// False : n'importe pas la liste des chansons
  ImportAlbum = True;	// False : n'importe pas le titre de l'album
  ImportInterprete = True;	// False : n'importe pas l'interprete
  ImportCommentaire = True;	// False : n'importe pas le commentaire
  ImportDate = True;	// False : n'importe pas la date de parution
  ImportNote = True;	// False : n'importe pas la Note des commentaires
  ImportEditeur = True;	// False : n'importe pas l'éditeur
  ImportAddImport = False;  // False : remplace le contenu des champs par les données importées

var
  MusicName: string;
  aName: string;
  aLength: 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;

procedure AnalyzePage(Address: string);
var
  LineNr: Integer;
  BDTitle,Value,Url,Tmp: string;
  Line: string;
  BeginPos, EndPos: Integer;
begin
  Line := GetPage(Address);
  if (Pos('Résultats', Line) > 0) or (Pos('résultats', Line) > 0) then
  begin
     PickTreeClear;
     // Recherche le premier album trouvé
     BeginPos := pos('<div id="Results">', Line);
     Delete(Line, 1, BeginPos-1);
     BeginPos := pos('<table class="searchresults"', Line);
     Delete(Line, 1, BeginPos-1);

     BeginPos := pos('<table class="n2" ', Line);
     while (BeginPos > 0) do
       begin
         Delete(Line, 1, BeginPos-1);
         BeginPos := 1;
         EndPos := pos('<span class="customerRatingAlign', Line);
         Value    := copy(Line, BeginPos, EndPos - BeginPos);
         // Parse pour avoir le titre
         BDTitle  := findinfo('<span class="srTitle">','</span>',Value,'0') + ' (' + findinfo('<span class="bindingBlock">(',')</span>',Value,'0') + ')';
         HTMLRemoveTags(BDTitle);
         HTMLDecode(BDTitle);
         // Parse pour avoir l'url
         BeginPos := pos('<a href="', Line)+9;
         EndPos := pos('"><img ', Line);
         Url    := copy(Line, BeginPos, EndPos - BeginPos);
         // Ajout de la ligne dans l'interface
         PickTreeAdd(BDTitle, Url);
         Delete(Line, 1, EndPos-1);
         BeginPos := pos('<table class="n2" ', Line);
         if BeginPos>pos('recherche', Line) then BeginPos:=0;
       end;
  end;
  if PickTreeExec(Address) then
    AnalyzeMoviePage(Address);
end;

procedure AnalyzeMoviePage(Address: string);
var
  Page, Line, Value, Value2, FullValue: string;
  LineNr: Integer;
  BeginPos, EndPos: Integer;
  Dummy: string;


begin

  Page := GetPage(Address);
  BeginPos := pos('<div class="buying">', Page);
  Delete(Page, 1, BeginPos-1);
  SetField(fieldURL, Address);
  
   // Titre
  if ImportAlbum then
    begin
      BeginPos := pos('<b class="sans">', Page)+16;
      EndPos := pos('</b>', Page);
      Value := copy(Page, BeginPos, EndPos - BeginPos);
      SetField(fieldOriginalTitle, Value);
    end;
  Delete(Page, 1, EndPos-1);

   // Auteur
  if ImportInterprete then
    begin
      BeginPos := pos('<a href="', Page);
      EndPos := pos('</a>', Page);
      Value := copy(Page, BeginPos, EndPos - BeginPos);
      HTMLDecode(Value);
      HTMLRemovetags(Value);
      SetField(fieldDirector, Value);
    end;
  Delete(Page, 1, EndPos-1);

  // Image
  if ImportImage then
    begin
      BeginPos := pos('<img src="http://images.amazon.com/images/P', Page) + 10;
      if BeginPos=10 then
        BeginPos := pos('<img src="http://ec1.images-amazon.com/images/P', Page) + 10;
      if beginPos>0 then Delete(Page, 1, BeginPos-1);
      EndPos := pos(' width', Page)-1;
      Value := copy(Page, 1, EndPos - 1);
      if ImportGrandeImage then
        Value := StringReplace(Value, 'MZZZZZZZ', 'LZZZZZZZ'); // Change l'URL pour prendre la grande au lieu de la petite image
      Sleep(TempsPause*2); // Attente 2X seconde : Evite les timeout sur le serveur
      GetPicture(Value); // False = stocke l'image dans la base
    end;
  Delete(Page, 1, EndPos-1);

  // Description
  if ImportCommentaire then
    begin
      Value2 := '';
      //BeginPos := Pos('<div class="bucket" id="productDescription">', Page);
      BeginPos := Pos('Description du produit',Page);
      EndPos := Pos('<a name="productDetails"', Page);
      if (BeginPos>0) and (EndPos>0) then
        begin
        Delete(Page, 1, BeginPos-1);
        BeginPos := Pos('<',Page);
        EndPos := Pos('<a name="productDetails"', Page);
        Value := copy (Page,BeginPos,EndPos-BeginPos);
        Value := StringReplace(StringReplace(Value, '<i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<br>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, 'œ', 'oe'), '•', '-');
        Value := StringReplace(Value,#13#10+' ', #13#10);
        Value := StringReplace(Value,#13#10+' ', #13#10);
        HTMLDecode(Value);
        HTMLRemovetags(Value);
        //SetField(fieldDescription, deleteMultiReturn(Value));
        Value2 := deleteMultiReturn(DeleteTab(Value));
        Delete(Page, 1, EndPos-1);
      end;
      BeginPos := Pos('Détails sur le produit',Page);
      EndPos := Pos('Souhaitez-vous', Page);
      if (BeginPos>0) and (EndPos>0) then
        begin
        Delete(Page, 1, BeginPos-1);
        BeginPos := Pos('<',Page);
        EndPos := Pos('Moyenne des commentaires', Page);
        if EndPos=0 then
          EndPos := Pos('Souhaitez-vous', Page);
        Value := copy (Page,BeginPos,EndPos-BeginPos);
        Value := StringReplace(StringReplace(Value, '<i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<br>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, 'œ', 'oe'), '•', '-');
        Value := StringReplace(Value,#13#10+' '+#13#10, #13#10);
        HTMLDecode(Value);
        HTMLRemovetags(Value);
        Value2 := Value2 + #13#10 + deleteMultiReturn(DeleteTab(Value));
        SetField(fieldDescription, Value2);
        //Delete(Page, 1, EndPos-1);
      end;
    end;
//  Delete(Page, 1, EndPos-1);

   // Editeur
  if ImportEditeur then
    begin
      BeginPos := pos('<b>Éditeur :</b> ', Page)+29;
      if BeginPos=29 then
        BeginPos := pos('<b>Editeur :</b> ', Page)+22;
      if BeginPos=22 then
        BeginPos := pos('Editeur', Page)+14;
      EndPos := pos(' (', Page);
      Value := copy(Page, BeginPos, EndPos - BeginPos);
      SetField(fieldProducer, Value);
      aName := Value;
      aLength := EndPos - BeginPos;
    end;
  Delete(Page, 1, EndPos-1);

     // Date
  if ImportDate then
    begin
      EndPos := pos(')', Page);
      Value := copy(Page, EndPos-4, 4);
      SetField(fieldYear, Value);
    end;
  Delete(Page, 1, EndPos-1);

     // Note
  if ImportDate then
    begin
      BeginPos := pos('customer-reviews/stars-', Page);
      if BeginPos>0 then
        begin
        EndPos := pos('.gif', Page);
        Value := copy(Page, EndPos-3, 1) + '.' + copy(Page, EndPos-1, 1);
        Value := FloatToStr((StrToFloat(Value)*2));
        SetField(fieldRating, Value);
        end;
    end;
  Delete(Page, 1, EndPos-1);

  //Commentaires
  if ImportCommentaire then
    begin
      Value2 := '';
      //BeginPos := Pos('<!-- BOUNDARY -->', Page);
      //BeginPos := Pos('Commentaires en ligne', Page);
      //Delete(Page, 1, BeginPos-1);
      BeginPos := Pos('partagez votre opinion avec les autres clients.', Page);
      Delete(Page, 1, BeginPos-1);
      EndPos := Pos('Avez-vous trouv', Page);
      BeginPos := Pos('<', Page);
      while (BeginPos>0) and (BeginPos<EndPos) do
        begin
        Value := copy (Page,BeginPos,EndPos-BeginPos);
        Value := StringReplace(StringReplace(Value, '<i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</i>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '</I>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, '<br>', ''), '•', '-');
        Value := StringReplace(StringReplace(Value, 'œ', 'oe'), '•', '-');
        Value := StringReplace(Value,'’','''');
        Value := StringReplace(Value,#13#10+' ', #13#10);
        Value := StringReplace(Value,'Voir tous mes commentaires', #13#10);
        HTMLDecode(Value);
        HTMLRemovetags(Value);
        if Value2='' then
          Value2 := deleteMultiReturn(deleteTab(Value))
        else
          Value2 := Value2 + #13#10 + deleteMultiReturn(deleteTab(Value));
        Delete(Page, 1, EndPos+1);
        BeginPos := Pos('<!-- BOUNDARY -->', Page);
        EndPos := Pos('Avez-vous trouv', Page);
        end;
        SetField(fieldcomments, Value2);
    end;



end;

procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
var
  Line: string;
  MovieTitle, MovieAddress: string;
  StartPos: Integer;
  StartImg: Integer;
  StartLst: Integer;
  LastLine: Integer;

begin
  repeat
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    LastLine := Page.count;
    StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
    StartImg := pos('<img src="http://images.amazon.com/images/', Line);
    StartLst := pos('</a>', Line);
    if StartPos+StartImg+StartLst < StartPos+StartPos+StartPos-StartImg-StartLst then
    begin
      Startpos := Startpos + 9;
      MovieAddress := copy(Line, StartPos, pos('qid', Line) - StartPos);
      StartPos := pos('<b>', Line) + 3;
      MovieTitle := copy(Line, StartPos, (StartPos + 150)- StartPos);
      HTMLDecode(Movietitle);
      PickTreeAdd(MovieTitle, 'http://www.amazon.fr/' + MovieAddress);
    end;
  until (LineNr > Lastline);
end;

begin
  if CheckVersion(3,4,0) then
  begin
    MusicName := GetField(fieldTranslatedTitle);
    if MusicName = '' then
      MusicName := GetField(fieldOriginalTitle);

  if ConfirmTitre then
    begin
     if Input('Amazon.fr Import', 'Entrer le titre du livre... :', MusicName) then
      begin
       AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=books-fr&field-keywords='+UrlEncode(MusicName));
      end;
     end else
      begin
       AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=books-fr&field-keywords='+UrlEncode(MusicName));
      end;
  end else
   ShowMessage('Ce script requiert une version plus récente de Ant Movie Catalog (au moins la version 3.4.0)');
end.
N'ayant pas non plus énormément de temp, chacun peut l'améliorer...

Posted: 2006-10-03 19:55:44
by fan50
Ca m'épatera toujours ça ! Est-ce que vous avez tous des formations dans l'informatique ou est-ce que tout le monde peut y arriver ? Connaissez vous un site ou je pourrais apprendre à faire ça ?

Posted: 2006-10-03 20:54:25
by draco31.fr
lol, baffab tu m'étonneras toujours ! Je savais même pas que tu t'y penchais !

De mon côté je n'ai eu le temps que de contrôler la partie "recherche" et de le rendre fonctionnelle mais sans plus, donc je vais plutôt continuer sur ton script, même je ne pense pas que tu ais laissé beaucoup de chose à faire :p
Je suppose que ta version du script est fonctionnelle, ce qui n'est pas (encore) le cas de celle que je triffouillais !

@fan50 :
Je ne travaille pas dans l'informatique, mais j'ai eu des cours de programmation en pascal en fac de science qui m'ont permis de comprendre et de faire mes propres scripts.
Cependant, je pense qu'avec du courage et beaucoup de volonté, cela est accessible à n'importe qui à partir du moment où tu as "appris" le Delphi/Pascal.
Donc dans un premier temps tu peux te documenter là dessus, et regarder en parallèle les script déjà existants.

J'avais créé un topic où je donnais des liens et le B-A-BA pour faire des script pour AMC ... cherche le topic, et commence par lire les pages webs ça t'aidera pour débuter :grinking:

Posted: 2006-10-04 07:41:53
by baffab
Disons que je m'étais retrouvé avec un peu de temps que j'y ai consacré.
Sinon je suis développeur et je code toute la journée donc ça ne me pose pas trop de problème. Pour mieux comprendre, tu peux utiliser la fonction debug qui te permet de suivre le code pas à pas (voir dans l'aide de création de scripts "Outils de débogage") pour te faire une idée.

Posted: 2006-10-04 19:07:45
by fan50
Ok, je vais déjà essayer d'apprendre à les utiliser correctement, après on verra pour les fabriquer, y'a du boulot !
A bien y réfléchir, je crois que c'est avec le fichier "lng" que j'ai un souci, je vérifie tout ça et je vous tiens au courant.
Merci encore

Posted: 2006-10-04 19:34:02
by hornicar
Bonsoir,

Un grand merci pour la mise à jour du script!!!!
J'ai une petite question, j'essaie vainement de changer les champs du type "réalisateur..." par "auteur mais je n'y arrive pas.
Comment faire? J'avais réussi à le faire avec une version précédente mais j'ai un peu oublié!!

Merci

Posted: 2006-10-04 20:04:57
by fan50
Essai encourageant ! Le script marche, mais j'ai des messages d'erreur : soit no found, soit "http/1.1 1500 server error", dans ce dernier cas, il charge les données, mais pas l'image. N'empêche que je suis en progrès ! :D

Posted: 2006-10-05 07:33:13
by baffab
hornicar wrote:Bonsoir,

Un grand merci pour la mise à jour du script!!!!
J'ai une petite question, j'essaie vainement de changer les champs du type "réalisateur..." par "auteur mais je n'y arrive pas.
Comment faire? J'avais réussi à le faire avec une version précédente mais j'ai un peu oublié!!

Merci
Ce n'est pas sur le script mais sur le fichier de langue sous le répertoire Languages. Il suffit de copier la version francaise avec un autre nom, de la modifier puis de la charger dans amc (Outils>langue...)

Posted: 2006-10-05 07:34:38
by baffab
fan50 wrote:Essai encourageant ! Le script marche, mais j'ai des messages d'erreur : soit no found, soit "http/1.1 1500 server error", dans ce dernier cas, il charge les données, mais pas l'image. N'empêche que je suis en progrès ! :D
Ce genre d'erreur arrive souvent lors de problèmes de connexions avec le site, cela dit il reste certainement des choses à y faire.