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...