[REL] [FR] Allociné v2
Re: [REL] [FR] Allociné v2
Euh, tu as réussi à modifier un script simplement comme ça et trouver la solution qu'on cherche depuis 2 mois et ne sais pas qu'il suffit sinon de coller l'URL de la fiche Allociné (à récupérer dans la barre d'adresse de n'importe quel navigateur) pour la coller à l'endroit où on fait la mise à jour d'une fiche ?
Re: [REL] [FR] Allociné v2
Hello, quand tu fais ta recherche sur le site via un navigateur web, une fois arrivé sur la fiche de film tu vas dans la barre d'adresse et copies tout le contenu du champ (par ex https://www.allocine.fr/film/fichefilm_ ... =3746.html ) et tu colles ça à la place de taper le titre quand AMC demande le titre au moment de lancer le script.
Intéressant de savoir que ça marche en utilisant un autre site, à voir combien de temps ça tiendra.
edit: chez moi ça ne marche pas, ça commence bien
Sinon un autre script qui s'était inspiré d'Allociné pour la recherche Google utilise maintenant DuckDuckGo pour la recherche : viewtopic.php?p=62642#p62642
Intéressant de savoir que ça marche en utilisant un autre site, à voir combien de temps ça tiendra.
edit: chez moi ça ne marche pas, ça commence bien
Sinon un autre script qui s'était inspiré d'Allociné pour la recherche Google utilise maintenant DuckDuckGo pour la recherche : viewtopic.php?p=62642#p62642
Re: [REL] [FR] Allociné v2
Script de Merit : la modif ne donne rien chez moi.
Script de Filmstart.de : ne marche pas non-plus, d'ailleurs l'analyse de la page utilise pleins de mots-clés en allemand.
Mon nouveau script :
- barre des résultats OK
- commentaires OK
- ne fonctionne toujours qu'en recherce Google (les liens dans le résultat du moteur allociné ne sont plus en clair dans le html)
- pas pour les séries
Script de Filmstart.de : ne marche pas non-plus, d'ailleurs l'analyse de la page utilise pleins de mots-clés en allemand.
Mon nouveau script :
- barre des résultats OK
- commentaires OK
- ne fonctionne toujours qu'en recherce Google (les liens dans le résultat du moteur allociné ne sont plus en clair dans le html)
- pas pour les séries
Code: Select all
program Allocine_FR_v3;
uses
StringUtils1, ScorEpioNCommonScript;
var
MovieName: string;
const
urlDomain = 'allocine.fr';
urlAllocine = 'https://www.allocine.fr';
urlFicheFilm = 'www.allocine.fr/film/fichefilm_gen_cfilm=';
urlSearch = urlAllocine+'/rechercher/?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;
//------------------------------------------------------------------------------
// Fonction pour récupérer les acteurs et leurs roles Transféré 2.09 R_V
//------------------------------------------------------------------------------
function AllActors(Section : String) : string;
var
Roles: Boolean;
Page, Block, Value, Actors: string;
T: TStringList;
begin
Actors := '';
Section := TextBetween(Section, '<div class="card person-card person-card-col">', '<div class="titlebar ">');
Section := StringReplace(Section, '<div class="meta-sub light">', '');
Section := StringReplace(Section, #13#10+' </div>', '');
Roles := GetOption('Roles acteurs') > 0;
while Pos('<div class="card person-card person-card-col">', Section) > 0 do
begin
Block := TextBetween(Section, '<figure class="thumbnail ">', #13#10+' </div>');
if Pos('<div class="section', Block) > 0 then
Break;
Section := RemainingText;
if (Pos(UTF8Encode('Rôle : '), Block) > 0) then
Value := TextBefore(Block, UTF8Encode('Rôle : '), '')
else
Value := Block;
Value := CleanText(Value);
if Value <> '' then
begin
if Actors <> '' then
Actors := Actors + ', ';
Actors := Actors + Value;
if Roles then
Actors := Actors + ' (' + CleanText(RemainingText) + ')';
end;
if (CheckVersion(4,2,0) = True) and (GetOption('Extra : Photos des acteurs') = 1) then // Condition pour récupérer les photos des acteurs Ajouté V2.08 R_V
Extra_Photos_Acteurs(Block + '</div>'); // Récupération des photos des acteurs via la procédure Extra_Photos_Acteurs Ajouté V2.08 R_V
end;
if GetOption('Acteurs') = 3 then
begin
while Pos('<div class="gd gd-xs-1 gd-s-2 md-table-row ">', Section) > 0 do
begin
Block := TextBefore(Section, '</div>', '');
if Pos('<div class="section', Block) > 0 then
Break;
Section := RemainingText;
if Pos('</span>', Block) > 0 then
begin
Value := TextAfter(Block, '</span>');
Value := CleanText(Value);
if Value <> '' then
begin
Actors := Actors + ', ' + Value;
if Roles then
begin
Value := TextBefore(Block, '</span>', '');
Actors := Actors + ' (' + CleanText(Value) + ')';
end;
end;
end;
end;
end;
result := Actors;
end;
//------------------------------------------------------------------------------
// IMPORTE LES PHOTOS DU FILM COMME EXTRAS Ajouté 2.07 R_V
//------------------------------------------------------------------------------
procedure Extra_Photos_Film(Value : String);
Var
AdressePhoto, AdresseExtra, Comparaison : String;
BeginPos, idx, NbrExtra, i : Integer;
begin
NbrExtra := GetExtraCount;
if Pos('data-src="', Value) > 0 then // s'assure que l'adresse de l'image existe
begin
BeginPos := Pos('data-src="', Value);
repeat
delete(Value, 1, BeginPos+4);
AdressePhoto := FullTrim(findInfo('src="', '"', Value,'0'));
if AdressePhoto <> '' then // s'assure que l'adresse de l'image n'est pas vide
begin
For i := 0 to NbrExtra-1 do // Début boucle pour comparer les adresses des images déja dans la base avec celles du site
if GetExtraField(i, eCategory) = 'Photos du film' then // ne compare que les extras ayant pour catégorie : 'Photos du film'
begin
AdresseExtra := GetExtraField(i , extraFieldURL);
if (AdresseExtra = AdressePhoto) then
begin
Comparaison := 'OK';
Break;
end else
begin
Comparaison := 'KO';
end; // fin boucle comparaison
end else
Comparaison := 'KO';
if ((Comparaison = 'KO') or (NbrExtra = 0)) then // Ajoute l'extra si la comparaison n'est pas bonne ou que le nombre d'extra est égale à 0
begin
idx := AddExtra; // Crée un extra et stock sa position dans la valeur idx
SetExtraField(idx, extraFieldCategory, 'Photos du film'); // Stocke la valeur 'Photos du film' dans le champ catégorie de l'extra
SetExtraField(idx, extraFieldURL, AdressePhoto); // Stocke dans le champ URL de l'extra, l'adresse de la photo sur le site pour la comparer ultérieurement et ne télécharger que les photos que l'on n'a pas déjà
SetExtraField(idx, extraFieldDescription, CleanText(findInfo('alt="', '"', Value,'0'))); // Stocke la description de la photo donnée par le site dans le champ description de l'extra
SetExtraField(idx, extraFieldTitle, TextBefore(AdressePhoto, '.jpg', '/')); // Stocke le nom de la photo sur les serveurs du site dans le champ titre de l'extra
GetExtraPicture(idx, AdressePhoto); // Récupère l'image
if GetExtraPictureWidth(idx) < 1 then // Evite de récupérer un extra sans image en supprimant l'extra si l'image fait moins de 1 pixel de large
DeleteExtraOfScript(idx);
end;
end;
delete(Value, 1, Pos('src=', Value)+4);
BeginPos := Pos(UTF8Encode('data-src="'), Value);
until (BeginPos = 0);
end;
end;
///------------------------------------------------------------------------------
// IMPORTE LES PHOTOS DES ACTEURS COMME EXTRAS Ajouté 2.08 R_V
//------------------------------------------------------------------------------
procedure Extra_Photos_Acteurs(Value : String);
Var
AdressePhoto, Acteur, Role, AdresseExtra, Comparaison : String;
idx, NbrExtra, i : Integer;
begin
if pos('<img class="thumbnail-img"', Value) > 0 then // vérifie que la photo de l'acteur existe
begin
AdressePhoto := TextBetween(Value, 'data-src="', '"');
Acteur := TextBetween(Value, '<span itemprop="name">', '</span>');
Role := TextBetween(Value, UTF8Encode('Rôle : '), '</div>');
if (AdressePhoto <> '') and (Pos('empty_photo.jpg', AdressePhoto) = 0) and (Pos('empty_star.jpg', AdressePhoto) = 0) then
begin
AdressePhoto := StringReplace(AdressePhoto, '/c_160_213', '');
AdressePhoto := StringReplace(AdressePhoto, '.JPG', '.jpg');
NbrExtra := GetExtraCount;
For i := 0 to NbrExtra-1 do // Début boucle pour comparer les adresses des images déja dans la base avec celles du site
if GetExtraField(i, eCategory) = 'Acteurs et Actrices' then // ne compare que les extras ayant pour catégorie : 'Acteurs et Actrices'
begin
AdresseExtra := GetExtraField(i , extraFieldURL);
if (AdresseExtra = AdressePhoto) then
begin
Comparaison := 'OK';
Break;
end else
begin
Comparaison := 'KO';
end; // fin boucle comparaison
end else
Comparaison := 'KO';
if ((Comparaison = 'KO') or (NbrExtra = 0)) then // Ajoute l'extra si la comparaison n'est pas bonne ou que le nombre d'extra est égale à 0
begin
idx := AddExtra;
SetExtraField(idx, extraFieldCategory, 'Acteurs et Actrices');
SetExtraField(idx, extraFieldURL, AdressePhoto);
SetExtraField(idx, extraFieldDescription, CleanText(Role));
SetExtraField(idx, extraFieldTitle, CleanText(Acteur));
GetExtraPicture(idx, AdressePhoto);
if GetExtraPictureWidth(idx) < 1 then // Evite de récupérer un extra sans image en supprimant l'extra si l'image fait moins de 1 pixel de large
DeleteExtraOfScript(idx);
end;
end;
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE SECRETS DE TOURNAGE Ajouté 2.09 R_V
//------------------------------------------------------------------------------
procedure SecretComplet(pageSecret: string);
var
Line, Titre, Texte, La_liste :string;
begin
//charge la page
if GetOption('ABlock') = 1 then
begin
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Line := GetPage(pageSecret);
if Pos('<span class="title-punchline">', Line) > 0 then
begin
//liste des secrets
Line := TextBetween(Line, '<span class="title-punchline">' , '</section>');
delete(Line, 1, Pos('<div class="trivia hred">', Line));
while Pos('<div class="trivia-news">', Line) > 0 do
begin
// titre
Titre := CleanText(TextBetween(Line, '<h2 class="trivia-title">', '</h2>'))+#13#10;
// secret
Texte := CleanText(TextBetween(Line, '<div class="trivia-news">', '</div>'))+#13#10#13#10;
// liste
La_liste := La_liste+Titre+Texte;
delete(Line, 1, Pos('<div class="trivia-news">', Line));
end;
La_liste := deleteEnd(La_liste, #13#10);
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+'Secrets de tournage :'+#13#10#13#10+La_liste)
else
SetField(fieldComments, 'Secrets de tournage :'+#13#10#13#10+La_liste);
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE L' EQUIPE TECHNIQUE Ajouté 2.15 R_V
//------------------------------------------------------------------------------
procedure EquipeTechnique(AdresseCasting: string);
var
Value, Page, Metier, Nom, Liste :string;
begin
if GetOption('ABlock') = 1 then
begin
Launch(AdresseCasting, '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Page := GetPage(AdresseCasting);
Page := TextBetween(Page, '>Equipe technique</h2></div>' , '<div class="section casting-list">');
while Pos('</div>', Page) > 0 do
begin
Value := TextBetween(Page, '<div class="row md-table-row ">' , '</div>');
Metier := TextBetween(Value, '<span class="col-xs-12 col-sm-6 item">' , '</span>');
Nom := TextBetween(Value, 'title="' , '"');
Liste := Liste + '.' + #13#10 + '- '+ Metier + ' : ' + Nom;
delete(Page, 1, Pos('</div>', Page));
if GetOption('Equipe technique') = 2 then
begin
while Pos(Metier, Page) > 0 do
begin
Value := TextBetween(Page, '<div class="row md-table-row ">' , '</div>');
Nom := TextBetween(Value, 'title="' , '"');
Liste := Liste + ', ' + Nom;
delete(Page, 1, Pos('</div>', Page));
end;
end;
end;
Liste := deleteEnd(Liste, '- : ');
Liste := 'Equipe Technique :'+UTF8Decode(Liste);
HtmlDecode(Liste);
Liste := StringReplace(Liste, ':.', ':');
Liste := deleteEnd(Liste, #13#10);
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+Liste)
else
SetField(fieldComments, Liste);
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE BANDE ANNONCE Ajouté 2.20 R_V
//------------------------------------------------------------------------------
procedure BandeAnnonce(pageBA: string);
var
Value, Page :string;
begin
if GetOption('ABlock') = 1 then
begin
Launch(pageBA, '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Page := GetPage(pageBA);
Value := TextAfter(Page, 'Bandes-annonces & Teasers');
Value := TextBetween(Page, '/video/player_gen_cmedia=', '&');
if Value <> '' then
begin
Value := 'Bande Annonce : ' + urlAllocine + '/_video/iblogvision.aspx?cmedia=' + CleanText(Value);
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+Value)
else
SetField(fieldComments,Value);
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePageGoogle();
var
Address, Line: string;
BeginPos, EndPos: Integer;
begin
// fabrique l'URL de recherche Google
Address := 'http://www.google.com/search?q=' + UrlEncode(MovieName) + '%20fichefilm_gen_cfilm%20site%3Aallocine.fr';
// Récupère le code HTML de la pagede recherche
Line := GetPage(Address);
if pos('fichefilm_gen_cfilm', Line) <= 0 then
begin
ShowMessage('Aucun résultat trouvé');
Exit;
end;
begin
PickTreeClear;
AddMoviesTitlesGoogle(Line);
//affichage du tableau des résultats et attente d'action utilisateur
if PickTreeExec(Address) then
begin
AnalyzeMoviePage(Address);
end;
end;
end;
procedure AddMoviesTitlesGoogle(Results: string);
var
Block, Id, Title, Address, Year, FilmTV: string;
begin
//tant qu'il y a encore une URL de film dans Results
while Pos('q=https://www.allocine.fr/film/fichefilm_gen_cfilm%3D', Results) > 0 do
begin
//Récupère le 1er bloc contenant une adresse de film
Block := TextBetween(Results, 'q=https://www.allocine.fr/film/fichefilm_gen_cfilm', '</div>');
//Récupère le numéro du film
Id := TextBetween(Block, '%3D', '.html');
//Sauvegarde l'URL du film
Address := 'https://www.allocine.fr/film/fichefilm_gen_cfilm=' + Id + '.html';
delete(Block, 1, pos('fichefilm_gen_cfilm', Block) + 10);
delete(Block, 1, pos('<div', Block));
if (pos('- film',Block)>0) then
Title := Trim(TextBetween(Block, '">', '- film'))
else if (pos('- Allo',Block)>0) then
Title := Trim(TextBetween(Block, '">', '- Allo'));
Year := Trim(TextBetween(Block, '- film', ' - AlloC'));
Year := TextBetween(' ' + Year + ' ', ' ', ' '); //'AlloCiné' peut être absent
//supprime la 1ère URL de résultat trouvé
delete(Results, 1, pos('q=https://www.allocine.fr/film/fichefilm_gen_cfilm', Results) + 70);
//Ajout de l'adresse dans le tableau, Ne pas garder les pages critiques, sorties, news...
if (length(Title)>0) and (pos('>', Title) <= 0) then
begin
if getfield(fieldYear) <> '' then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ') [' + MovieName + ' (' + GetField(fieldYear) + ')]', Address)
else
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')', Address);
end
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
Line: string;
BeginPos, EndPos : Integer;
begin
ShowMessage('AnalyzePage(' + Address + ')');
if GetOption('ABlock') = 1 then
begin
Launch(Address, '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Line := GetPage(Address);
if pos(UTF8Encode('Oups ! Il semble qu’on n’arrive pas à trouver de résultats pour votre recherche'), Line) <> 0 then
begin
ShowMessage('Oups ! Il semble qu’on n’arrive pas à trouver de résultats pour votre recherche');
Exit;
end;
if pos(UTF8Encode('1 résultat trouvé dans les titres de films'), Line) > 0 then
begin
ShowMessage('1 résultat trouvé dans les titres de films');
Address := TextBetween(Line, '<td style=" vertical-align:top;">', '</td>');
Address := urlAllocine + TextBetween(Address, '<a href=''', '''');
AnalyzeMoviePage(Address);
end else
begin
ShowMessage('Plusieurs résultats trouvés dans les titres de films');
PickTreeClear;
//AddMoviesTitles(TextBetween(Line, UTF8Encode('Merci de préciser votre recherche :'), '<div class="searchenginezone">'));
AddMoviesTitles(TextBetween(Line, UTF8Encode('titres de films</div>'), 'Suivez-nous sur Facebook'));
if PickTreeExec(Address) then
begin
AnalyzeMoviePage(Address);
end;
end;
end;
procedure AddMoviesTitles(Results: string);
var
Block, Title, Address, Year, Director: string;
begin
if getfield(fieldYear) <> '' then
PickTreeAdd(CleanText(TextBefore(Results, '</div>', ''))+' ['+MovieName+' ('+getfield(fieldYear)+')]', '')
else
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 />');
Director := TextBetween(Block, '<br />'+#13#10+'de ', '<br />');
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')' + ' de ' + CleanText(Director), Address);
end;
end;
function CleanText(Text: string): string;
begin
Result := CleanTextWithBr(Text, False);
end;
function CleanTextWithBr(Text: string; KeepBr: Boolean): string;
begin
if KeepBr then
begin
Text := StringReplace(Text, #13#10, '');
Text := StringReplace(Text, '<br>', #13#10);
end;
HtmlRemoveTags(Text);
Text := UTF8Decode(Text);
HtmlDecode(Text);
if not KeepBr then
begin
Text := StringReplace(Text, #13#10, ' ');
end;
Text := Trim(Text);
while Pos(' ', Text) > 0 do
begin
Text := StringReplace(Text, ' ', ' ');
end;
Result := Text;
end;
//Analyse du film sélectionné par l'utilisateur dans le tableau
procedure AnalyzeMoviePage(Address: string);
var
Page, Value, ID: string;
i: Integer;
begin
if GetOption('Garder les valeurs du champ Commentaires') = 0 then
SetField(fieldComments,'');
SetField(fieldUrl, Address);
if Pos('/film/fichefilm_gen_cfilm=', Address) = 0 then
if GetOption('ABlock') = 1 then
begin
Launch(Address, '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Page := GetPage(Address);
// adresse
if (GetOption('Recherche Google') = 0) then
begin
Address := urlAllocine + TextBetween(Page, 'class="item home icon icon-home current" href="', '"');
if Pos('/film/fichefilm_gen_cfilm=', Address) = 0 then
Address := urlAllocine + '/film/fichefilm_gen_cfilm=' + TextBetween(Page, 'allocine://open/movie?code=', '"') + '.html';
SetField(fieldUrl, Address);
end;
// ID Ajouté 2.07 R_V
if pos('/film/fichefilm_gen_cfilm=',Address) <> 0 then
ID := findInfo('/film/fichefilm_gen_cfilm=', '.html', Address,'0');
// titres
// Le-Sphinx 12/01/2020 Ajout du Titre FR et Titre Original
Value := TextBetween(Page, '<h1 class="item">', '</h1>');
SetField(fieldOriginalTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
SetField(fieldTranslatedTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
if Pos('<span class="light">Titre original </span>', Page) > 0 then
begin
SetField(fieldTranslatedTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
Value := TextBetween(Page, '<span class="light">Titre original </span>', '</div>');
SetField(fieldOriginalTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
end;
// année
Value := TextBetween(Page, UTF8Encode('<span class="what light">Année de production</span>'), '</span>');
SetField(fieldYear, CleanText(Value));
// réalisateur
// Le-Sphinx 12/01/2020 Ajout Nom du Réalisateur
Value := TextBetween(Page, 'director" content="', '"');
if Pos('<span class="light">De</span>', Page) > 0 then
begin
Value := TextBetween(Page, '<span class="light">De</span>', '</div>');
SetField(fieldDirector, formatTitre(CleanText(Value),GetOption('Format du Titre')));
end else
SetField(fieldDirector, formatTitre(CleanText(Value),GetOption('Format du Titre')));
// genres
// Le-Sphinx 12/01/2020 Ajout les Categories
Value := TextBetween(Page, '<div class="meta-body-item meta-body-info">', '</div>');
Value := Copy(Value, Pos('<span class="spacer">/</span>', Value)+29, Length(Value) - Pos('<span class="spacer">/</span>', Value)+29);
Value := Copy(Value, Pos('<span class="spacer">/</span>', Value)+29, Length(Value) - Pos('<span class="spacer">/</span>', Value)+29);
if Pos('s', Value) = 1 then
Value := Copy(Value, 2, Length(Value) - 1);
SetField(fieldCategory, formatTitre(CleanText(Value),GetOption('Format du Titre')));
// pays
// Le-Sphinx 12/01/2020 Format du Pays
Value := TextBetween(Page, UTF8Encode('<span class="what light">Nationalité'), '</div>');
if Pos('s', Value) = 1 then
Value := Copy(Value, 2, Length(Value) - 1);
SetField(fieldCountry, formatTitre(CleanText(Value),GetOption('Format du Titre')));
// résumé
Value := TextBetween(Page, UTF8Encode('Synopsis</h2>'), '</section>');
if Value <> '' then
begin
if Pos('certificate-text', Value) > 0 then
begin
Value := TextBefore(Value, '</span>', '');
if CheckVersion(4,2,0) then
begin
SetField(fieldCertification, CleanText(Value));
end;
SetField(fieldDescription, CleanTextWithBr(RemainingText, True));
end
else
SetField(fieldDescription, CleanTextWithBr(Value, True));
end;
// image
if (CanSetPicture()) and (GetOption('Choix Image') > 0) then
begin
Value := TextBetween(Page, '<figure class="thumbnail ">', '</figure>');
Value := TextBetween(Value, '<img class="thumbnail-img" src="', '"');
if Value <> '' then
begin
if GetOption('Choix Image') = 2 then
begin
Value := StringReplace(Value, '/c_215_290/', '/');
Value := StringReplace(Value, '/c_310_420/', '/');
end;
GetPicture(Value);
end;
end;
// Extra Picture Ajouté 2.07 R_V
if (CheckVersion(4,2,0)) and (GetOption('Extra : Photos du film') = 1) then
begin
if pos('/film/fichefilm-'+ID+'/photos', Page) > 0 then // vérifie que la page photos existe
begin
if GetOption('ABlock') = 1 then
begin
Launch(urlFicheFilm+ID+'/photos/', '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Value := GetPage(urlFicheFilm+ID+'/photos/');
if Pos('Photos</h2>', Value) <> 0 then
begin
Value := TextBetween(Value, 'Photos</h2>', '</section>'); // récupère la portion de code contenant les adresses des photos du film
Value := StringReplace(Value, '/c_300_300', ''); // Nettoie le code pour récupérer les plus grandes images possibles
Value := StringReplace(Value, '.JPG', '.jpg');
Extra_Photos_Film(Value);
end;
end;
end;
// durée
// Le-Sphinx 12/01/2020 Ajout Heure du Film en minute
Value := TextBetween(Page, '<div class="meta-body-item meta-body-info">', '</div>');
Value := TextBetween(Value, '<span class="spacer">/</span>', '<span class="spacer">/</span>');
i := StrToInt(TextBefore(Value, 'h', ' '), 0) * 60 + StrToInt(TextBetween(Value, 'h ', 'min'), 0);
SetField(fieldLength, IntToStr(i));
// Date de sortie Cinéma (champ Commentaires) Ajouté 2.13 R_V
// Le-Sphinx 12/01/2020 Ajout de la Date de Sortie
if CanSetField(fieldComments) then
begin
Value := TextBetween(Page, '<div class="meta-body-item meta-body-info">', '</div>');
Value := TextBetween(Value, '<span class="', '<span class="');
Value := 'Date de sortie cinéma : ' + CleanText(TextBetween(Value, '">', '</strong>'));
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+Value)
else
SetField(fieldComments,Value);
end;
// note
if CanSetField(fieldRating) or CanSetField(fieldComments) then
begin
Value := TextBetween(Page, '<div class="rating-item">', '<section class="section">');
GetNote(Value);
end;
// Bande Annonce (champ Commentaires) Ajouté 2.13 R_V
if (CanSetField(fieldComments)) and (Pos('toutes/">Bandes-annonces', Page) > 0) then
BandeAnnonce(urlAllocine+'/videos/fichefilm-'+ID+'/toutes/');
// Fiche Technique (champ Commentaires) Ajouté 2.16 R_V
if (CanSetField(fieldComments)) and (GetOption('Fiche technique') > 0) then
begin
Value := TextBetween(Page, 'Voir les infos techniques' , '</section>');
Value := StringReplace(Value, '<span class="that', ' : <span class="that');
Value := StringReplace(Value, '<span class="what light">', '##- ');
Value := CleanText(Value);
Value := StringReplace(Value, '##', #13#10);
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+'Fiche Technique :'+Value)
else
SetField(fieldComments, 'Fiche Technique :'+Value);
end;
// Equipe Technique (champ Commentaires) Ajouté 2.15 R_V
if (CanSetField(fieldComments)) and (GetOption('Equipe technique') > 0) then
EquipeTechnique(urlAllocine + '/film/fichefilm-' + ID + '/casting/');
// Secrets de tournage Ajouté 2.09 R_V
if (CanSetField(fieldComments)) and (GetOption('Secrets de tournage') = 1) then
begin
if (pos('Secrets de tournage</span>', Page) <> 0) then
begin
Value := urlAllocine+'/film/fichefilm-'+ID+'/secrets-tournage/';
//Analyse de la page Secrets de Tournage
SecretComplet(Value);
end;
end;
// acteurs
if GetOption('Acteurs') > 1 then
begin
GetActors(urlAllocine + '/film/fichefilm-' + ID + '/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, formatTitre(CleanText(Value),GetOption('Format du Titre')));
end;
// Pour purger la fin des commentaires de retours à la ligne en trop
Value := GetField(fieldComments);
repeat
Value := deleteEnd(Value, #13#10);
Until (copy(Value,length(Value)-length(#13#10)+1,length(Value)) <> #13#10);
SetField(fieldComments, Value);
end;
procedure GetActors(Address: string);
var
Roles: Boolean;
Page, Section, Block, Value, Actors: string;
begin
if GetOption('ABlock') = 1 then
begin
Launch(Address, '');
Sleep(StrToInt(GetParam('Pause'), 0));
end;
Page := GetPage(Address);
if CanSetField(fieldActors) then
begin
if Pos('>Acteurs et actrices</h2></div>', Page) > 0 then
begin
Section := TextAfter(Page, '>Acteurs et actrices</h2></div>');
Actors := AllActors(Section);
end;
if Pos('>Acteurs de doublage (Voix originales)</h2></div>', Page) > 0 then
begin
Section := TextAfter(Page, '>Acteurs de doublage (Voix originales)</h2></div>');
Value := AllActors(Section);
if Value <> '' then
begin
if Actors <> '' then
Actors := Actors + ', ' + Value
else
Actors := Value;
end;
end;
if Pos('>Acteurs de doublage (Voix locales)</h2></div>', Page) > 0 then
begin
Section := TextAfter(Page, '>Acteurs de doublage (Voix locales)</h2></div>');
Value := AllActors(Section);
if Value <> '' then
begin
if Actors <> '' then
Actors := Actors + ', ' + Value
else
Actors := Value;
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;
procedure GetNote(Value: string);
var
NotePresse, NoteSpectateurs, NoteSur10,RatingCountSpectateurs: string;
begin
if (Pos('presse',Value)>0) then
begin
NotePresse := TextAfter(Value, '<span class="stareval-note"');
NotePresse := CleanText(TextBetween(NotePresse, '>', '<'));
NotePresse := StringReplace(NotePresse, '?', '');
Value := TextAfter(Value, '<span class="stareval-note"');
end;
NoteSpectateurs := TextBetween(Value, '<span class="stareval-note"', '/span>');
NoteSpectateurs := CleanText(TextBetween(NoteSpectateurs, '>', '<'));
NoteSpectateurs := StringReplace(NoteSpectateurs, '?', '');
RatingCountSpectateurs := TextBetween(Value, '<span itemprop="ratingCount">', '</span>');
if (NotePresse <> '') and (NoteSpectateurs <> '') then
begin
NoteSur10 := FloatToStr(arrondir(convert_STF(NotePresse),1) + arrondir(convert_STF(NoteSpectateurs),1));
SetField(fieldRating,NoteSur10);
end else
if (NotePresse <> '') then
begin
NoteSur10 := FloatToStr(arrondir(convert_STF(NotePresse),1)*2);
SetField(fieldRating,NoteSur10);
end else
if (NoteSpectateurs <> '') then
begin
NoteSur10 := FloatToStr(arrondir(convert_STF(NoteSpectateurs),1)*2);
SetField(fieldRating,NoteSur10);
end;
Value := '';
if NotePresse <> '' then
Value := 'Note de la presse : ' + NotePresse + '/5';
if NoteSpectateurs <> '' then
begin
if Value <> '' then
Value := Value + #13#10 + 'Note des spectateurs : ' + NoteSpectateurs + '/5' + ' (Pour ' + RatingCountSpectateurs + ' notes)'
else
Value := 'Note des spectateurs : ' + NoteSpectateurs + '/5' + ' (Pour ' + RatingCountSpectateurs + ' notes)';
end;
if (Value <> '') and (GetOption('Détail des notes') > 0) then
begin
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+Value)
else
SetField(fieldComments,Value);
end;
end;
begin
if CheckVersion(3,5,1) then
begin
MovieName := GetField(fieldUrl);
if Pos(urlAllocine, MovieName) = 0 then
begin
MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
end;
if ((GetOption('Batch') = 1) and (Pos(urlAllocine, MovieName) > 0)) then
AnalyzeMoviePage(MovieName)
else
begin
if Input('Allociné', 'Entrez le titre du film ou l''adresse d''une page', MovieName) then
begin
if Pos(urlAllocine, MovieName) > 0 then
AnalyzeMoviePage(MovieName)
else
begin
if CheckVersion(4,2,2) then
begin
if (GetOption('Recherche Google') = 0) then
AnalyzePage(urlSearch + UrlEncode(MovieName))
else
begin
//ShowMessage('MovieName=' + MovieName);
AnalyzePageGoogle();
end;
end
else
AnalyzePage(urlSearch + UrlEncode(UTF8Encode(MovieName)));
end;
end;
end;
end else
ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.1)');
end.
Re: [REL] [FR] Allociné v2
Effectivement ça ne marche plus. Je comprend pas, ça a marché une fois (pour le Les Mitchells contre les machines), mais à présent il indique qu'il ne trouve pas le film que je cherche.
Je n'avais pas fais gaffe qu'on pouvait coller une url à la place du titre du film, merci pour l'astuce.
@Zakk : merci, il marche bien ton script !
Je n'avais pas fais gaffe qu'on pouvait coller une url à la place du titre du film, merci pour l'astuce.
@Zakk : merci, il marche bien ton script !
Re: [REL] [FR] Allociné v2
Merci, en effet ça a l'air de bien marcher Merci !
je l'ai mis sur le serveur en tant que version 2.52
Au sujet de l'autre script dont j'avais posté le lien, c'était juste pour l'info technique, mais il aurait probablement fallu refaire la partie de code spécifique à la recherche
je l'ai mis sur le serveur en tant que version 2.52
Au sujet de l'autre script dont j'avais posté le lien, c'était juste pour l'info technique, mais il aurait probablement fallu refaire la partie de code spécifique à la recherche
Re: [REL] [FR] Allociné v2
Merci pour la mise à jour
Re: [REL] [FR] Allociné v2
Super Même les "Secrets de tournage" sont revenus !
Merci à Zakk et tout les contributeurs pour leurs travail !
On croise les doigts pour que ça tienne.
Merci à Zakk et tout les contributeurs pour leurs travail !
On croise les doigts pour que ça tienne.
Re: [REL] [FR] Allociné v2
Ca m'a bien amusé de refaire du Pascal 30 ans plus tard
Et comme je me sers d'AMC depuis 15 ans, fallait bien que je participe un peu
Un grand merci à Antoine et Mickaël, pour Ant Renamer également qui est bien chouette
Last edited by zakk on 2021-05-17 11:04:11, edited 1 time in total.
Re: [REL] [FR] Allociné v2
Super, le script fonctionne ! Merci et bravo à tous les contributeurs !
Re: [REL] [FR] Allociné v2
Super merci d'avoir mis cette modif sur le serveur des scripts.
Je l'ai testé et tout parait OK...Sauf le défaut qui existe depuis la modif d'il y a 2 mois:
Les résultats de recherche présentent les titres en double ou même plus parfois.
D'autres personnes ont le même problème?
Mais ce n'est pas grave du tout!
ENCORE Super MERCI pour le travail accompli
Je l'ai testé et tout parait OK...Sauf le défaut qui existe depuis la modif d'il y a 2 mois:
Les résultats de recherche présentent les titres en double ou même plus parfois.
D'autres personnes ont le même problème?
Mais ce n'est pas grave du tout!
ENCORE Super MERCI pour le travail accompli
Re: [REL] [FR] Allociné v2
Bonjour à tous ! J'utilise AMC depuis de très nombreuses années, mais depuis plusieurs mois, plus moyen d'importer les données Allociné.
Alors j'ai bien lu toutes les dernière pages de ce sujet et j'ai remplacé le contenu du script par celui fourni dans le message le plus récent (celui de zakk), mais ça ne fonctionne toujours pas.
J'ai essayé en remplaçant le nom du film par l'URL Allociné de la fiche, comme vous en parlez, mais rien à faire.
Je n'ai que des erreurs de ce type :
AnalyzePage(https://www.allocine.fr/rechercher/?q=6%20underground)
Puis
Erreur
IOHandler value is not valid
Si je met le lien de la fiche, j'ai directement la 2ème erreur.
Comment faites-vous ?
Alors j'ai bien lu toutes les dernière pages de ce sujet et j'ai remplacé le contenu du script par celui fourni dans le message le plus récent (celui de zakk), mais ça ne fonctionne toujours pas.
J'ai essayé en remplaçant le nom du film par l'URL Allociné de la fiche, comme vous en parlez, mais rien à faire.
Je n'ai que des erreurs de ce type :
AnalyzePage(https://www.allocine.fr/rechercher/?q=6%20underground)
Puis
Erreur
IOHandler value is not valid
Si je met le lien de la fiche, j'ai directement la 2ème erreur.
Comment faites-vous ?
Re: [REL] [FR] Allociné v2
Salut, aucun souci de mon côté que ce soit avec la recherche "6 underground" ou avec l'URL.
Donc côté script, je ne peux pas répondre
(j'utilise AMC 4.2.3.1 du 19 mai 2021)
Donc côté script, je ne peux pas répondre
(j'utilise AMC 4.2.3.1 du 19 mai 2021)
Re: [REL] [FR] Allociné v2
Merci zakk. Tu m'a fais réaliser que je n'avais pas la dernière version de l'appli. Je n'étais qu'en 4.2.0. J'ai mis la 4.2.2 que j'ai trouvé sur le site, et ça a l'air déjà mieux !
Re: [REL] [FR] Allociné v2
Bonsoir,
@zakk
Où as-tu réussi à obtenir AMC 4.2.3.1 du 19 mai 2021 ?
Sur le site officiel http://www.antp.be/software/moviecatalog/download/fr il n'y a que la Version 4.2.2.2 du 04/04/2021
@Ermac1515
Moi aussi j'ai des problèmes avec le script Allociné mais que sur certaines recherches
J'attends aussi une mise à jour...
@zakk
Où as-tu réussi à obtenir AMC 4.2.3.1 du 19 mai 2021 ?
Sur le site officiel http://www.antp.be/software/moviecatalog/download/fr il n'y a que la Version 4.2.2.2 du 04/04/2021
@Ermac1515
Moi aussi j'ai des problèmes avec le script Allociné mais que sur certaines recherches
J'attends aussi une mise à jour...
Re: [REL] [FR] Allociné v2
Je ne sais plus en tout cas AMC a planté et j'ai dû repasser en 4.2.2.2, mon script fonctionne.sts85 wrote: ↑2021-08-11 18:40:43 @zakk
Où as-tu réussi à obtenir AMC 4.2.3.1 du 19 mai 2021 ?
Sur le site officiel http://www.antp.be/software/moviecatalog/download/fr il n'y a que la Version 4.2.2.2 du 04/04/2021
As-tu des exemples de recherches qui plantent ?
Re: [REL] [FR] Allociné v2
Bonsoir,
Dernière recherche qui plante:
"La cuisinière de Castamar" le script trouve 2 titres 365 Dni et La cuisinière (court métrage)
Si tu vas sur allocine.fr en tapant "La cuisinière de Castamar" il trouve du premier coup le titre.
Si tu colles l'URL https://www.allocine.fr/series/ficheser ... 26920.html dans AMC
tu as une erreur
Dernière recherche qui plante:
"La cuisinière de Castamar" le script trouve 2 titres 365 Dni et La cuisinière (court métrage)
Si tu vas sur allocine.fr en tapant "La cuisinière de Castamar" il trouve du premier coup le titre.
Si tu colles l'URL https://www.allocine.fr/series/ficheser ... 26920.html dans AMC
tu as une erreur
Re: [REL] [FR] Allociné v2
C'est dans la catégorie "Séries" d'Allociné et je n'ai corrigé que la partie films.
Re: [REL] [FR] Allociné v2
Bonjour
le téléchargement des affiches des films ne fonctionne plus. Cela donne : "Timeout Error"
Cela pour tous les titres que j'ai essayé.
Avez vous le même problème?
le téléchargement des affiches des films ne fonctionne plus. Cela donne : "Timeout Error"
Cela pour tous les titres que j'ai essayé.
Avez vous le même problème?
Re: [REL] [FR] Allociné v2
Les versions 4.2.3 pour le moment c'était juste pour des tests pour corriger des problèmes :sts85 wrote: ↑2021-08-11 18:40:43 Où as-tu réussi à obtenir AMC 4.2.3.1 du 19 mai 2021 ?
Sur le site officiel http://www.antp.be/software/moviecatalog/download/fr il n'y a que la Version 4.2.2.2 du 04/04/2021
viewtopic.php?f=4&t=8232
viewtopic.php?f=4&t=14552
Mais je ne pense pas que ça joue pour Allociné
Re: [REL] [FR] Allociné v2
Fausse alerte
Concernant le DL des affiches
Cela fonctionne normalement maintenant.
Ce devait être une panne temporaire du serveur Allociné.
Donc j'annule mon alerte.
Concernant le DL des affiches
Cela fonctionne normalement maintenant.
Ce devait être une panne temporaire du serveur Allociné.
Donc j'annule mon alerte.