Mise à jour du script "Allocine (FR).ifs"
Mise à jour du script "Allocine (FR).ifs"
Voici le lien vers le nouveau script : https://1drv.ms/u/s!ApZ8UBGXxFNwhe8NoM9 ... g?e=SdqWEp
Correction de bugs pour les films :
- Résultat à partir de l'url du film sur Allociné
- Utilisation de Brave Search à partir d'un titre de film (attention à ne pas faire trop de requêtes à suivre car Brave Search nous assimile à un bot)
Ajout de la fonctionnalité pour les séries :
- Résultat à partir de l'url de la série sur Allociné
Correction de bugs pour les films :
- Résultat à partir de l'url du film sur Allociné
- Utilisation de Brave Search à partir d'un titre de film (attention à ne pas faire trop de requêtes à suivre car Brave Search nous assimile à un bot)
Ajout de la fonctionnalité pour les séries :
- Résultat à partir de l'url de la série sur Allociné
Re: Mise à jour du script "Allocine (FR).ifs"
Merci, je replace ça sur le serveur.
Je passe en même temps la version à 2.61
Je passe en même temps la version à 2.61
Re: Mise à jour du script "Allocine (FR).ifs"
Bonjour,
J'ai bien la dernière version du script (2.61), mais depuis aujourd'hui au moins la zone "Catégorie" reprend toute une série d'informations en plus des genres.
Exemple pour "Le livre des solutions" : zLw== date "> 13 septembre 2023 en salle | 1h 42min | Comédie, Comédie dramatique, Drame
Autre exemple pour "The Novice" : xLw== date "> 11 janvier 2023 en salle | 1h 37min | Drame, Thriller
Merci d'avance pour votre aide.
Bien à vous,
Philippe.
J'ai bien la dernière version du script (2.61), mais depuis aujourd'hui au moins la zone "Catégorie" reprend toute une série d'informations en plus des genres.
Exemple pour "Le livre des solutions" : zLw== date "> 13 septembre 2023 en salle | 1h 42min | Comédie, Comédie dramatique, Drame
Autre exemple pour "The Novice" : xLw== date "> 11 janvier 2023 en salle | 1h 37min | Drame, Thriller
Merci d'avance pour votre aide.
Bien à vous,
Philippe.
Re: Mise à jour du script "Allocine (FR).ifs"
Bonsoir,
Voici la dernière version du script corrigé : https://1drv.ms/u/s!ApZ8UBGXxFNwhe8N2iG ... A?e=fY8508
Finalement, pas mal de corrections :
- suppression des doublons pour les résultats de recherche d'un film (car modifications des styles du moteur de recherche Brave)
- le site Allociné a changé ses styles de page web. On peut à nouveau retrouver : la durée, le(s) réalisateur(s), le(s) producteur(s), la ou les catégories, le(s) compositeur(s)
- correction aussi quand l'option du script "Equipe Technique" est à 1.
Ce qu'il reste à corriger :
- bug sur la liste des acteurs : il y a quelques acteurs en doublon
Ce qui n'a pas été testé :
- les autres options du script
Voici la dernière version du script corrigé : https://1drv.ms/u/s!ApZ8UBGXxFNwhe8N2iG ... A?e=fY8508
Finalement, pas mal de corrections :
- suppression des doublons pour les résultats de recherche d'un film (car modifications des styles du moteur de recherche Brave)
- le site Allociné a changé ses styles de page web. On peut à nouveau retrouver : la durée, le(s) réalisateur(s), le(s) producteur(s), la ou les catégories, le(s) compositeur(s)
- correction aussi quand l'option du script "Equipe Technique" est à 1.
Ce qu'il reste à corriger :
- bug sur la liste des acteurs : il y a quelques acteurs en doublon
Ce qui n'a pas été testé :
- les autres options du script
Re: Mise à jour du script "Allocine (FR).ifs"
Bonsoir,
Grand merci !
Je teste cela dès que possible.
Grand merci !
Je teste cela dès que possible.
Re: Mise à jour du script "Allocine (FR).ifs"
Version 2.63 du script, toujours à partir du lien du précédent post.
Correction d'un nouveau bug lié à 2 types de page web pour les pages films :
- Compositeur : le champ n'est plus vide quand la page web est du 2e type
- Producteur : idem que ci-dessus
Sinon, il me reste toujours le bug pour les acteurs. Cela ne concerne uniquement lorsqu'il y des acteurs de doublage original et local :
- Les acteurs de doublage local apparaissent 2 fois. Car la recherche des acteurs de doublage original va également trouver les acteurs de doublage local
Correction d'un nouveau bug lié à 2 types de page web pour les pages films :
- Compositeur : le champ n'est plus vide quand la page web est du 2e type
- Producteur : idem que ci-dessus
Sinon, il me reste toujours le bug pour les acteurs. Cela ne concerne uniquement lorsqu'il y des acteurs de doublage original et local :
- Les acteurs de doublage local apparaissent 2 fois. Car la recherche des acteurs de doublage original va également trouver les acteurs de doublage local
Re: Mise à jour du script "Allocine (FR).ifs"
Merci, je mets déjà ça à jour sur le serveur
Re: Mise à jour du script "Allocine (FR).ifs"
Un tout grand merci à Hervem et antp, le script fonctionne pour moi nickel pour les zones téléchargées à partir d'Allociné, la majorité des autres zones l'étant à partir d'IMBD, souvent plus fiable.
-
- Posts: 5
- Joined: 2024-01-29 18:15:46
Re: Mise à jour du script "Allocine (FR).ifs"
Bonjour,
Le script 2.63 ne marche pas pour moi.
Les résultats de recherche sont
Allocine (?)
Allocine (?)
Allocine (?)
Allocine a changé depuis le 20 janvier ?
Le script 2.63 ne marche pas pour moi.
Les résultats de recherche sont
Allocine (?)
Allocine (?)
Allocine (?)
Allocine a changé depuis le 20 janvier ?
Re: Mise à jour du script "Allocine (FR).ifs"
Je suppose que c'est la recherche Google qui a un souci ?
La page de recherche d'Allociné ne permet plus de récupérer les liens direct vers les fiches.
En attendant il faut faire un copier-coller de l'adresse de la fiche depuis le site (et fournir cette adresse au script à la place du titre de film, pour qu'il récupère les infos).
La page de recherche d'Allociné ne permet plus de récupérer les liens direct vers les fiches.
En attendant il faut faire un copier-coller de l'adresse de la fiche depuis le site (et fournir cette adresse au script à la place du titre de film, pour qu'il récupère les infos).
Re: Mise à jour du script "Allocine (FR).ifs"
C'est le moteur de recherche Brave qui est utilisé à la place de Google. Celui-ci a dû faire évoluer sa page de recherche.
Je regarde et je modifie dès que possible
Je regarde et je modifie dès que possible
Re: Mise à jour du script "Allocine (FR).ifs"
Voici la version 2.64 modifiée (c'était bien Brave qui a modifié ses pages de recherche) : https://1drv.ms/u/s!ApZ8UBGXxFNwhe8N2iG ... A?e=D9mhfu
-
- Posts: 5
- Joined: 2024-01-29 18:15:46
Re: Mise à jour du script "Allocine (FR).ifs"
Merci pour cette correction rapide.
Un autre soucis avec Brave, après 15 recherches, il y a une erreur "too many requests" et ça ne marche plus...
Un autre soucis avec Brave, après 15 recherches, il y a une erreur "too many requests" et ça ne marche plus...
Re: Mise à jour du script "Allocine (FR).ifs"
Oui, comme j'ai déjà pu le dire, le moteur de recherche Brave considère qu'à partir d'un certain nombre de requêtes trop rapprochées, que c'est un bot qui les fait. Donc il bloque pendant un certain temps : 30 minutes ? 1h ? Je n'ai pas testé le temps qu'il faut.
De mon côté, quand j'ai besoin de faire des requêtes, je patiente dès qu'il bloque et j'effectue des recherches directement sur le site Allociné en ajoutant l'url de la fiche du film dans la recherche AMC.
De mon côté, quand j'ai besoin de faire des requêtes, je patiente dès qu'il bloque et j'effectue des recherches directement sur le site Allociné en ajoutant l'url de la fiche du film dans la recherche AMC.
-
- Posts: 5
- Joined: 2024-01-29 18:15:46
Re: Mise à jour du script "Allocine (FR).ifs"
la recherche avec Allocine marche avec le code suivant
Code: Select all
procedure AnalyzePageAllocine();
var
Address, Line, Value: string;
BeginPos, EndPos: Integer;
begin
// fabrique l'URL de recherche Brave (quand on va dans une fiche de film, l'url d'Allociné contient "fichefilm_gen_cfilm"
Address := 'https://allocine.fr/_/autocomplete/' + UrlEncode(MovieName);
// Récupère le code HTML de la pagede recherche
Line := GetPage(Address);
begin
PickTreeClear;
AddMoviesTitlesAllocine(Line);
if PickTreeCount > 0 then
begin
//affichage du tableau des résultats et attente d'action utilisateur
if PickTreeExec(Address) then
begin
AnalyzeMoviePage(Address);
end;
end
else
begin
ShowMessage('Aucun résultat trouvé');
Exit;
end;
end;
end;
procedure AddMoviesTitlesAllocine(Results: string);
var
Block, Id, Title, Title2, Address, Year, FilmTV, test: string;
jsonPos, jsonLength : integer;
begin
//tant qu'il y a encore une URL de film dans Results
while Pos('}]', Results) > 0 do
begin
delete(Results, 1, pos('"entity_id":"', Results) + length('"entity_id":"')-1);
Id := TextBefore(Results, '"', '');
delete(Results, 1, pos('"label":"', Results) + length('"label":"')-1);
Title := TextBefore(Results, '"', '');
Title := UNICODEDecode(Title);
Title2 := Title;
HTMLDecode(Title2);
delete(Results, 1, pos('"data":', Results) + length('"data":')-1);
Block := TextBetween(Results, '{', '}');
jsonPos := pos('"year"', Block);
if jsonPos > 0 then
begin
Year := TextBetween(Block, '"year":"', '"');
end;
Address := 'https://www.allocine.fr/film/fichefilm_gen_cfilm='+Id+'.html';
if AnsiPosEx(MovieName, Title2, True, True) > 0 then
begin
if getfield(fieldYear) <> '' then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ') [' + MovieName + ' (' + GetField(fieldYear) + ')]', Address)
else if(length(Year)>0) then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')', Address)
else
PickTreeAdd(CleanText(Title) + ' (?)', Address);
end;
jsonPos := pos('},{', Results);
if jsonPos = 0 then
jsonPos := pos('}]', Results) + 1;
delete(Results, 1, jsonPos);
end;
end;
function UNICODEDecode(Text: string) :string;
var
decoded: string;
begin
while RegExprSetExec('(.*)(\\u)(....)(.*)', Text) do
begin
Text := RegExprReplace(Text, '$1&#x$3;$4', True);
end;
result := Text;
end;
Re: Mise à jour du script "Allocine (FR).ifs"
Merci pour la mise à jour qui fonctionne nickel chez moi !hervem wrote: ↑2024-01-30 19:18:28 Voici la version 2.64 modifiée (c'était bien Brave qui a modifié ses pages de recherche) : https://1drv.ms/u/s!ApZ8UBGXxFNwhe8N2iG ... A?e=D9mhfu
Re: Mise à jour du script "Allocine (FR).ifs"
@hervem > merci, c'est mis à jour sur le serveur
@marceltrou > merci, mais comment est-on supposé combiner cela avec le script existant ? C'est une nouvelle fonction à appeler à la place d'une autre ?
@marceltrou > merci, mais comment est-on supposé combiner cela avec le script existant ? C'est une nouvelle fonction à appeler à la place d'une autre ?
-
- Posts: 5
- Joined: 2024-01-29 18:15:46
Re: Mise à jour du script "Allocine (FR).ifs"
voici le script complet (modification du script Allocine)
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Antoine Potten, Nazgul64, Raoul_Volfoni, HerveM, MarcelT
Title=Allociné
Description=Importations des fiches de films d'Allociné
Site=http://www.allocine.fr
Language=FR
Version=2.64
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.|Les versions précédentes ont été réalisées et maintenues par ScorEpioN et Raoul Volfoni.
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=1|1|0=Pas d'affiche|1=Petite affiche allociné|2=Grande affiche allociné
Recherche sur le titre=0|0|0=Traduit|1=Original
Format du Titre=4|4|0=Titre en minuscule|1=Titre en majuscule|2=Première lettre du titre en majuscule|3=Première lettre de chaque mot du titre en majuscule|4=Formatage identique au site d'origine
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)
Détail des notes=1|1|0=Non|1=Oui (champ Commentaires)
Fiche technique=0|0|0=Non|1=Oui (champ Commentaires)
Equipe technique=0|0|0=Non|1=Oui (Listée comme sur Allociné)|2=Oui (Noms regroupés par métier)
Secrets de tournage=0|0|0=Non|1=Oui (dans les commentaires)
Extra : Photos du film=0|0|0=Non|1=Oui
Extra : Photos des acteurs=0|0|0=Non|1=Oui
Garder les valeurs du champ Commentaires=0|0|0=Non|1=Oui
Batch=0|0|0=Non|1=Oui
ABlock=0|0|0=Non (par défaut)|1=Oui (ouvre les pages dont le script à besoin dans le navigateur par défaut)
Recherche Google=0|1|0=Non|1=Oui
[Parameters]
Pause=|3000|Délai d'attente (en ms) entre l'ouverture de la page sur navigateur et son acquisition par AMC
MaxFilmExtra=||Nombre max de photos du film à récupérer dans les extras (0 ou vide = pas de limite)
ChampBA=||Nom du champ personnalisé où stocker l'adresse de la bande annonce (vide = addresse dans les commentaires)
***************************************************)
program Allocine_FR_v2;
uses
StringUtils1, ScorEpioNCommonScript;
var
MovieName: string;
const
urlDomain = 'allocine.fr';
urlAllocine = 'https://www.allocine.fr';
urlFicheFilm = 'https://www.allocine.fr/film/fichefilm-';
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 ">', '</div>'+#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, DLExtra, MaxExtra: Integer;
begin
NbrExtra := GetExtraCount;
DLExtra := 0;
MaxExtra := StrToInt(GetParam('MaxFilmExtra'), 0);
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);
DLExtra := DLExtra + 1;
until (BeginPos = 0) or ((MaxExtra > 0) and (DLExtra >= MaxExtra));
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, 'title="', '"');
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-gql">');
while Pos('</div>', Page) > 0 do
begin
Value := TextBetween(Page, '<div class="md-table-row ">' , '</div>');
Metier := TextBetween(Value, '<span class="item light">' , '</span>');
Nom := TextBetween(Value, '">' , '</span>');
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 := urlAllocine + '/_video/iblogvision.aspx?cmedia=' + CleanText(Value);
if (CheckVersion(4,0,0)) and (GetParam('ChampBA') <> '') then
begin
SetCustomField(GetParam('ChampBA'), Value);
end
else
begin
Value := 'Bande Annonce : ' + Value;
if GetField(fieldComments) <> '' then
SetField(fieldComments, GetField(fieldComments)+#13#10#13#10+Value)
else
SetField(fieldComments,Value);
end;
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePageGoogle();
var
Address, Line, Value: string;
BeginPos, EndPos: Integer;
begin
// fabrique l'URL de recherche Brave (quand on va dans une fiche de film, l'url d'Allociné contient "fichefilm_gen_cfilm"
Address := 'https://search.brave.com/search?q=' + UrlEncode(MovieName) + '+fichefilm_gen_cfilm+site%3Aallocine.fr';
// Récupère le code HTML de la pagede recherche
Line := GetPage(Address);
if pos('href="https://www.allocine.fr/film/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, test: string;
begin
//tant qu'il y a encore une URL de film dans Results
while Pos('href="https://www.allocine.fr/film/fichefilm_gen_cfilm=', Results) > 0 do
begin
//Récupère le 1er bloc contenant une adresse de film
delete(Results, 1, pos('<div class="snippet svelte', Results) + 32);
Block := TextBetween(Results, 'href="https://www.allocine.fr/film/fichefilm_gen_cfilm', '"');
//Récupère le numéro du film
Id := TextBetween(Block, '=', '.html');
//Sauvegarde l'URL du film
Address := 'https://www.allocine.fr/film/fichefilm_gen_cfilm=' + Id + '.html';
delete(Results, 1, pos('href="https://www.allocine.fr/film/fichefilm_gen_cfilm', Results) + 10);
Block := TextBetween(Results, '<div class="title svelte', '/div>');
delete(Results, 1, pos('<div class="title svelte', Results) + 24);
if (pos('- film',Block)>0) then
Title := Trim(TextBetween(Block, '>', '- film'))
else if (pos('- Allo',Block)>0) then
Title := Trim(TextBetween(Block, '>', '- Allo'))
else
Title := Trim(TextAfter(Block, '">'));
Year := Trim(TextBetween(Block, '- film ', '<'));
Year := TextBetween(' ' + Year + ' ', ' ', ' '); //'AlloCiné' peut être absent
//Ajout de l'adresse dans le tableau, Ne pas garder les pages critiques, sorties, news...
HtmlRemoveTags(Title);
if length(Title)>0 then
begin
if getfield(fieldYear) <> '' then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ') [' + MovieName + ' (' + GetField(fieldYear) + ')]', Address)
else if(length(Year)>0) then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')', Address)
else
PickTreeAdd(CleanText(Title) + ' (?)', Address);
end
end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------
procedure AnalyzePageAllocine();
var
Address, Line, Value: string;
BeginPos, EndPos: Integer;
begin
// fabrique l'URL de recherche Brave (quand on va dans une fiche de film, l'url d'Allociné contient "fichefilm_gen_cfilm"
Address := 'https://allocine.fr/_/autocomplete/' + UrlEncode(MovieName);
// Récupère le code HTML de la pagede recherche
Line := GetPage(Address);
begin
PickTreeClear;
AddMoviesTitlesAllocine(Line);
if PickTreeCount > 0 then
begin
//affichage du tableau des résultats et attente d'action utilisateur
if PickTreeExec(Address) then
begin
AnalyzeMoviePage(Address);
end;
end
else
begin
ShowMessage('Aucun résultat trouvé');
Exit;
end;
end;
end;
procedure AddMoviesTitlesAllocine(Results: string);
var
Block, Id, Title, Title2, Address, Year, FilmTV, test: string;
jsonPos, jsonLength : integer;
begin
//tant qu'il y a encore une URL de film dans Results
while Pos('}]', Results) > 0 do
begin
delete(Results, 1, pos('"entity_id":"', Results) + length('"entity_id":"')-1);
Id := TextBefore(Results, '"', '');
delete(Results, 1, pos('"label":"', Results) + length('"label":"')-1);
Title := TextBefore(Results, '"', '');
Title := UNICODEDecode(Title);
Title2 := Title;
HTMLDecode(Title2);
delete(Results, 1, pos('"data":', Results) + length('"data":')-1);
Block := TextBetween(Results, '{', '}');
jsonPos := pos('"year"', Block);
if jsonPos > 0 then
begin
Year := TextBetween(Block, '"year":"', '"');
end;
Address := 'https://www.allocine.fr/film/fichefilm_gen_cfilm='+Id+'.html';
if AnsiPosEx(MovieName, Title2, True, True) > 0 then
begin
if getfield(fieldYear) <> '' then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ') [' + MovieName + ' (' + GetField(fieldYear) + ')]', Address)
else if(length(Year)>0) then
PickTreeAdd(CleanText(Title) + ' (' + CleanText(Year) + ')', Address)
else
PickTreeAdd(CleanText(Title) + ' (?)', Address);
end;
jsonPos := pos('},{', Results);
if jsonPos = 0 then
jsonPos := pos('}]', Results) + 1;
delete(Results, 1, jsonPos);
end;
end;
function UNICODEDecode(Text: string) :string;
var
decoded: string;
begin
while RegExprSetExec('(.*)(\\u)(....)(.*)', Text) do
begin
Text := RegExprReplace(Text, '$1&#x$3;$4', True);
end;
result := Text;
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>'), '</section>'));
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;
Text := StringReplace(Text, ' , ', ', ');
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>');
if Pos('series/ficheserie_gen_cserie', MovieName) > 0 then
begin
SetField(fieldTranslatedTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
Value := TextBetween(Page, 'Titre original :</span>', '</div>');
SetField(fieldOriginalTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
end else
begin
SetField(fieldOriginalTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
SetField(fieldTranslatedTitle, formatTitre(CleanText(Value),GetOption('Format du Titre')));
end;
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
if Pos('series/ficheserie_gen_cserie', MovieName) > 0 then
begin
Value := TextBetween(Page, '<div class="meta-body-item meta-body-info"', '</span>');
if Pos('Depuis ', Value) > 0 then
begin
Value := TextBetween(Value, 'Depuis ', '<span class="spacer">/');
end else
begin
Value := TextBetween(Value, '>', '<span class="spacer">/');
Value := CleanText(Value);
// Si Value contient plus que l'année (une période par exemple)
Value := Copy(Value, 1, 4);
end;
end else
begin
Value := TextBetween(Page, UTF8Encode('<span class="what light">Année de production</span>'), '</span>');
end;
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
if Pos('series/ficheserie_gen_cserie', MovieName) > 0 then
begin
Value := TextBetween(Page, UTF8Encode('<span class="light">Nationalité'), '</div>');
end else
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é
if Pos('series/ficheserie_gen_cserie', MovieName) > 0 then
begin
Value := TextBetween(Page, 'Synopsis & Info', '</p>');
end else
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
if not (Pos('series/ficheserie_gen_cserie', MovieName) > 0) then
begin
Value := TextBetween(Page, '<div class="meta-body-item meta-body-info">', '</div>');
Value := TextBetween(Value, '<span class="spacer">|</span>', '<span class="spacer">|</span>');
Value := CleanText(Value);
i := StrToInt(TextBefore(Value, 'h', ''), 0) * 60 + StrToInt(TextBetween(Value, 'h ', 'min'), 0);
SetField(fieldLength, IntToStr(i));
end;
// 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="');
if pos('</strong>', Value) > 0 then
begin
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;
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('title="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, '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
if Pos('series/ficheserie_gen_cserie', MovieName) > 0 then
begin
Value := TextBetween(Page, '<h2 class="titlebar-title titlebar-title-md"><a class="titlebar-link" href="', '">Casting');
GetActors(urlAllocine + Value);
end else
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
// Récupère les producteurs mais aussi les producteurs délégués, coproducteurs, producteurs exécutifs
begin
Block := TextBetween(Page, 'Production</h2></div>', '<div class="section casting-list-gql">' );
if Pos('Producteur" class="item link">', Block) > 0 then
SetField(fieldProducer, GetPoste(Block, 'Producteur" class="item link">', '</a>'))
else
SetField(fieldProducer, GetPoste(Block, '<div class="md-table-row ">', '</span>'));
end;
if CheckVersion(4,2,0) then
begin
if CanSetField(fieldComposer) then
begin
Block := TextBetween(Page, 'Soundtrack</h2></div>', '<div class="section casting-list-gql">' );
if Pos('Compositeur" class="item link">', Block) > 0 then
SetField(fieldComposer, GetPoste(Block, 'Compositeur" class="item link">', '</a>'))
else
SetField(fieldComposer, GetPoste(Block, 'Compositeur">', '</span>'));
end;
if CanSetField(fieldWriter) then
begin
SetField(fieldWriter, GetPoste(Page, UTF8Encode('Scénariste</span>'), '</div>'));
end;
end;
end;
function GetPoste(Section: string; PosteTag: string; EndTag: string): string;
var
Block, Value: string;
begin
Block := '';
while Pos(PosteTag, Section) > 0 do
begin
Value := TextBetween(Section, PosteTag, EndTag);
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('series/ficheserie_gen_cserie', MovieName) > 0) or (Pos('film/fichefilm_gen_cfilm', MovieName) > 0) then
AnalyzeMoviePage(MovieName)
else
begin
if CheckVersion(4,2,2) then
begin
if (GetOption('Recherche Google') = 0) then
begin
// AnalyzePage(urlSearch + UrlEncode(MovieName))
AnalyzePageAllocine();
end
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: Mise à jour du script "Allocine (FR).ifs"
@marceltrou : j'ai fait quelques tests rapides, ça marche ;-) !
Au moins, nous ne sommes plus limités par Brave.
En gros, dans Scripting, avant d'exécuter la recherche, dans "Options du script", mettre :
- "Recherche Google" à 0 --> exécution avec recherche directe sur le site d'Allociné (merci marceltrou)
- "Recherche Google" à 1 --> exécution avec recherche via le moteur de recherche Brave
Il reste juste à mettre 2.65 pour cette nouvelle version.
Au moins, nous ne sommes plus limités par Brave.
En gros, dans Scripting, avant d'exécuter la recherche, dans "Options du script", mettre :
- "Recherche Google" à 0 --> exécution avec recherche directe sur le site d'Allociné (merci marceltrou)
- "Recherche Google" à 1 --> exécution avec recherche via le moteur de recherche Brave
Il reste juste à mettre 2.65 pour cette nouvelle version.
Re: Mise à jour du script "Allocine (FR).ifs"
Merci C'est mis à jour