Fan de l'ancien script Allociné et ravi de trouver cette v2.
J'ai complété le script v2 avec l'ajout de la note et le détail de celle-ci dans le champ commentaire (pas aussi bien fait que dans le version précédente -> à améliorer)
Par contre je ne sais pas comment mettre à disposition le script à part vous faire un gros copié/collé bien sale ... désolé
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Antoine Potten
Title=Allociné
Description=Importations des fiches de films d'Allociné
Site=http://www.allocine.fr
Language=FR
Version=2.06
Requires=3.5.1
Comments=Nouveau script créé après de gros changements effectués par Allociné en janvier 2016. Pour le moment il n'est prévu que pour les fiches de films et n'intègre pas toutes les options qu'avait l'ancien script. Il sera probablement amélioré dans le futur.
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.
GetInfo=1
RequiresMovies=1
[Options]
Choix Image=2|1|0=Pas d'affiche|1=Petite affiche allociné|2=Grande affiche allociné
Recherche sur le titre=1|0|0=Traduit|1=Original
Acteurs=2|2|0=Ne prend pas la liste des acteurs|1=Prend les noms des acteurs de la page principale (plus rapide)|2=Prend la liste des acteurs principaux, producteur, compositeur et scénariste|3=Idem que 2 mais avec tous les acteurs
Roles acteurs=0|0|0=Pas de nom de rôle|1=Nom de rôle derrière le nom de l'acteur (si option Acteurs à 2 ou 3)
[Parameters]
***************************************************)
program Allocine_FR_v2;
uses
StringUtils1, ScorEpioNCommonScript;
var
MovieName: string;
const
urlDomain = 'allocine.fr';
urlAllocine = 'http://www.allocine.fr';
urlFicheFilm = 'http://www.allocine.fr/film/fichefilm-';
urlSearch = urlAllocine+'/recherche/1/?q=';
//------------------------------------------------------------------------------
// Remplace les virgules par des points Ajouté 2.06
//------------------------------------------------------------------------------
function convert_STF (ligne : String ) : Extended;
var
temp : Extended;
begin
ligne := FullTrim(ligne);
temp := StrToFloat(ligne);
if (ligne <> '0') and (temp = 0) then
begin
if pos(',',ligne) > 0 then
ligne := stringreplace(ligne,',','.')
else
begin
if pos('.',ligne) > 0 then
ligne := stringreplace(ligne,'.',',');
end;
temp := StrToFloat(ligne);
end;
result := temp;
end;
//------------------------------------------------------------------------------
// Fonction Puissance (mathématique) Ajouté 2.06
//------------------------------------------------------------------------------
function Power(base : extended ; puissance : integer): extended;
var
temp : extended;
i : integer;
begin
temp := base;
if puissance > 0 then
begin
for i:= 2 to puissance do
temp := temp * base;
end else
begin
if puissance = 0 then
temp := 1
else
for i:= puissance to 0 do
temp := temp / base;
end;
result := temp;
end;
//------------------------------------------------------------------------------
// Arrondi à la valeur décimale souhaité Ajouté 2.06
//------------------------------------------------------------------------------
function Arrondir(nombre : extended ; nbDecim : integer) : extended;
var
p10 : extended;
begin
p10 := Power(10,nbDecim);
result := round(nombre * p10) / p10;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Line: string;
BeginPos, EndPos : Integer;
begin
Line := GetPage(Address);
if pos(UTF8Encode('arrive pas à trouver de résultats pour votre recherche'), Line) <> 0 then
begin
ShowMessage('Aucun résultat trouvé');
Exit;
end;
if pos(UTF8Encode('1 résultat trouvé'), Line) > 0 then
begin
Address := TextBetween(Line, '<td style=" vertical-align:top;">', '</td>');
Address := urlAllocine + TextBetween(Address, '<a href=''', '''');
AnalyzeMoviePage(Address);
end else
begin
PickTreeClear;
AddMoviesTitles(TextBetween(Line, UTF8Encode('Merci de préciser votre recherche :'), '<div class="searchenginezone">'));
if PickTreeExec(Address) then
begin
AnalyzeMoviePage(Address);
end;
end;
end;
procedure AddMoviesTitles(Results: string);
var
Block, Title, Address, Year: string;
begin
PickTreeAdd(CleanText(TextBefore(Results, '</div>', '')), '');
while Pos('tr><td style=" vertical-align:top;">', Results) > 0 do
begin
Block := TextBetween(Results, 'tr><td style=" vertical-align:top;">', '</tr>');
Results := RemainingText;
Address := urlAllocine + TextBetween(Block, '<a href=''', '''>');
Title := TextBefore(Block, '<br />', '');
Year := TextBetween(Block, '<span class="fs11">', '<br />');
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')', Address);
end;
end;
function CleanText(Text: string): string;
begin
HtmlRemoveTags(Text);
Text := UTF8Decode(Text);
HtmlDecode(Text);
Text := StringReplace(Text, #13#10, ' ');
Text := Trim(Text);
while Pos(' ', Text) > 0 do
begin
Text := StringReplace(Text, ' ', ' ');
end;
Result := Text;
end;
procedure AnalyzeMoviePage(Address: string);
var
Page, Value, NotePresse, NoteSpectateurs, NoteSur10,RatingCountSpectateurs : string; // NotePresse, NoteSpectateurs, NoteSur10, RatingCountSpectateurs Ajouté 2.06
i: Integer;
begin
Page := GetPage(Address);
// adresse
Address := urlAllocine + TextBetween(Page, 'class="item home icon icon-home current" href="', '"');
SetField(fieldUrl, Address);
// titres
Value := TextBetween(Page, '<h1 class="item">', '</h1>');
if Pos('<span class="what light"> Titre original </span>', Page) > 0 then
begin
SetField(fieldTranslatedTitle, CleanText(Value));
Value := TextBetween(Page, '<span class="what light"> Titre original </span>', '</span>');
SetField(fieldOriginalTitle, CleanText(Value));
end else
SetField(fieldOriginalTitle, CleanText(Value));
// année
Value := TextBetween(Page, UTF8Encode('<span class="what light">Année de production</span>'), '</span>');
SetField(fieldYear, CleanText(Value));
// réalisateur
Value := TextBetween(Page, '<span class="light">De</span>', '</div>');
SetField(fieldDirector, CleanText(Value));
// genres
Value := TextBetween(Page, '<span class="light">Genre', '</div>');
if Pos('s', Value) = 1 then
Value := Copy(Value, 2, Length(Value) - 1);
SetField(fieldCategory, CleanText(Value));
// pays
Value := TextBetween(Page, UTF8Encode('<span class="light">Nationalité'), '</div>');
if Pos('s', Value) = 1 then
Value := Copy(Value, 2, Length(Value) - 1);
SetField(fieldCountry, CleanText(Value));
// résumé
Value := TextBetween(Page, UTF8Encode('Synopsis et détails</h2>'), '<div class="ovw-synopsis-info">');
if Value <> '' then
begin
if Pos('<span class="ovw-synopsis-certificate', Value) > 0 then
begin
Value := TextBefore(Value, '</span>', '');
if CheckVersion(4,2,0) then
begin
SetField(fieldCertification, CleanText(Value));
end;
SetField(fieldDescription, CleanText(RemainingText));
end
else
SetField(fieldDescription, CleanText(Value));
end;
// image
if (CanSetPicture()) and (GetOption('Choix Image') > 0) then
begin
Value := TextBetween(Page, '<figure class="thumbnail col-xs-12 col-md-4">', '</figure>');
Value := TextBetween(Value, '<img class="thumbnail-img" src="', '"');
if Value <> '' then
begin
if GetOption('Choix Image') = 2 then
Value := StringReplace(Value, '/r_215_290/', '/');
GetPicture(Value);
end;
end;
// durée
Value := TextBetween(Page, '<span class="light">Date de sortie</span>', '</div>');
Value := TextBetween(Value, '(', ')');
i := StrToInt(TextBefore(Value, 'h', ''), 0) * 60 + StrToInt(TextBetween(Value, 'h ', 'min'), 0);
SetField(fieldLength, IntToStr(i));
// note Ajouté 2.06
Value := TextBetween(Page, '<div class="rating-row">', '<section class="section">');
NotePresse := TextBetween(Value, '<span class="stareval-note">', '</span>');
NotePresse := FloatToStr(arrondir(convert_STF(NotePresse),1));
delete(Value, 1, LastPos('<span class="stareval-note"', Value)-1);
NoteSpectateurs := TextBetween(Value, '<span class="stareval-note"', '/span>');
NoteSpectateurs := TextBetween(Value, '>', '<');
NoteSpectateurs := FloatToStr(arrondir(convert_STF(NoteSpectateurs),1));
RatingCountSpectateurs := TextBetween(Value, '<span itemprop="ratingCount">', '</span>');
NoteSur10 := FloatToStr(convert_STF(NotePresse) + convert_STF(NoteSpectateurs));
if CanSetField(fieldRating) then
SetField(fieldRating,NoteSur10);
// Commentaires Ajouté 2.06
if CanSetField(fieldComments) then
begin
Value := 'Note de la presse : ' + NotePresse + '/5';
Value := Value + #13#10 + 'Note des spectateurs : ' + NoteSpectateurs + '/5';
Value := Value + ' (Pour ' + RatingCountSpectateurs + ' notes)';
SetField(fieldComments,Value);
end;
// acteurs
if GetOption('Acteurs') > 1 then
begin
Value := TextBetween(Address, '=', '.');
GetActors(urlAllocine + '/film/fichefilm-' + Value + '/casting/');
end
else
if GetOption('Acteurs') = 1 then
begin
Value := TextBetween(Page, '<span class="light">Avec</span>', '</div>');
if Pos(' plus </span>', Value) > 0 then
Value := TextBefore(Value, ' plus </span>', '');
SetField(fieldActors, CleanText(Value));
end;
end;
procedure GetActors(Address: string);
var
Roles: Boolean;
Page, Section, Block, Value, Actors: string;
begin
Actors := '';
Roles := GetOption('Roles acteurs') > 0;
Page := GetPage(Address);
if CanSetField(fieldActors) then
begin
Section := TextAfter(Page, '<div class="titlebar "><div class="titlebar-title titlebar-title-md">Acteurs et actrices</div></div>');
while Pos('<div class="card mdl col-xs-6">', Section) > 0 do
begin
Block := TextBefore(Section, '</div><!--/card -->', '');
if Pos('<div class="section', Block) > 0 then
Break;
Section := RemainingText;
Value := TextBefore(Block, UTF8Encode('Rôle : '), '');
if Actors <> '' then
Actors := Actors + ', ';
Actors := Actors + CleanText(Value);
if Roles then
Actors := Actors + ' (' + CleanText(RemainingText) + ')';
end;
if GetOption('Acteurs') = 3 then
begin
while Pos('<div class="row md-table-row " itemprop="actor" itemscope itemtype="http://schema.org/Person">', Section) > 0 do
begin
Block := TextBefore(Section, '</div>', '');
Section := RemainingText;
if Pos('</span>', Block) > 0 then
begin
Value := TextAfter(Block, '</span>');
Actors := Actors + ', ' + CleanText(Value);
if Roles then
begin
Value := TextBefore(Block, '</span>', '');
Actors := Actors + ' (' + CleanText(Value) + ')';
end;
end;
end;
end;
SetField(fieldActors, Actors);
end;
if CanSetField(fieldProducer) then
begin
SetField(fieldProducer, GetPoste(Page, 'Producteur</span>'));
end;
if CheckVersion(4,2,0) then
begin
if CanSetField(fieldComposer) then
begin
SetField(fieldComposer, GetPoste(Page, 'Compositeur</span>'));
end;
if CanSetField(fieldWriter) then
begin
SetField(fieldWriter, GetPoste(Page, UTF8Encode('Scénariste</span>')));
end;
end;
end;
function GetPoste(Section: string; PosteTag: string): string;
var
Block, Value: string;
begin
Block := '';
while Pos(PosteTag, Section) > 0 do
begin
Value := TextBetween(Section, PosteTag, '</div>');
Section := RemainingText;
if Block <> '' then
Block := Block + ', ';
Block := Block + CleanText(Value);
end;
Result := Block
end;
begin
if CheckVersion(3,5,1) then
begin
if GetStatic('InfoV2') = '' then
begin
ShowMessage('Ce script a été créé "rapidement" afin de fournir une solution de dépanage suite aux gros changements survenus sur le site d''Allociné. Pour le moment il ne supporte que les fiches de films (pas de séries) et n''intègre pas autant d''options que l''ancien script. Il sera amélioré petit à petit.');
SetStatic('InfoV2', 'ok');
end;
MovieName := GetField(fieldUrl);
if Pos(urlDomain, MovieName) = 0 then
begin
MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
end;
if Input('Allociné', 'Entrez le titre du film ou l''adresse d''une page', MovieName) then
begin
if Pos(urlDomain, MovieName) > 0 then
AnalyzeMoviePage(MovieName)
else
AnalyzePage(urlSearch + UrlEncode(UTF8Encode(MovieName)));
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.1)');
end.