Page 25 of 31

Re: [REL] [FR] Allociné v2

Posted: 2021-05-01 17:19:06
by LeMoi
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

Posted: 2021-05-02 10:24:17
by antp
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 :D

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

Posted: 2021-05-02 20:15:28
by zakk
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

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=', '&amp;');
  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

Posted: 2021-05-06 12:08:56
by Merit
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 !

Re: [REL] [FR] Allociné v2

Posted: 2021-05-07 08:46:00
by antp
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 ;)

Re: [REL] [FR] Allociné v2

Posted: 2021-05-07 09:51:28
by LeMoi
Merci pour la mise à jour :)

Re: [REL] [FR] Allociné v2

Posted: 2021-05-07 15:59:39
by severus
Super Même les "Secrets de tournage" sont revenus !
Merci à Zakk et tout les contributeurs pour leurs travail :grinking: !

On croise les doigts pour que ça tienne.

Re: [REL] [FR] Allociné v2

Posted: 2021-05-07 17:28:43
by zakk
severus wrote: 2021-05-07 15:59:39 Merci à Zakk et tout les contributeurs pour leurs travail :grinking: !
Ca m'a bien amusé de refaire du Pascal 30 ans plus tard :hihi:
Et comme je me sers d'AMC depuis 15 ans, fallait bien que je participe un peu :innocent:
Un grand merci à Antoine et Mickaël, pour Ant Renamer également qui est bien chouette

Re: [REL] [FR] Allociné v2

Posted: 2021-05-10 15:20:37
by phil5660
Super, le script fonctionne ! Merci et bravo à tous les contributeurs ! :clapping:

Re: [REL] [FR] Allociné v2

Posted: 2021-05-30 16:29:13
by Aliasing
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 :clapping:

Re: [REL] [FR] Allociné v2

Posted: 2021-07-31 13:24:47
by Ermac1515
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 ?

Re: [REL] [FR] Allociné v2

Posted: 2021-07-31 15:09:44
by zakk
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)

Re: [REL] [FR] Allociné v2

Posted: 2021-08-02 13:26:44
by Ermac1515
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

Posted: 2021-08-11 18:40:43
by sts85
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 :angry:
J'attends aussi une mise à jour...

Re: [REL] [FR] Allociné v2

Posted: 2021-08-12 15:33:56
by zakk
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
Je ne sais plus :wow: en tout cas AMC a planté et j'ai dû repasser en 4.2.2.2, mon script fonctionne.
As-tu des exemples de recherches qui plantent ?

Re: [REL] [FR] Allociné v2

Posted: 2021-08-12 19:10:17
by sts85
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
Image

Re: [REL] [FR] Allociné v2

Posted: 2021-08-18 16:25:40
by zakk
C'est dans la catégorie "Séries" d'Allociné et je n'ai corrigé que la partie films.

Re: [REL] [FR] Allociné v2

Posted: 2021-08-23 15:30:22
by Aliasing
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?

Re: [REL] [FR] Allociné v2

Posted: 2021-08-24 07:53:13
by antp
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
Les versions 4.2.3 pour le moment c'était juste pour des tests pour corriger des problèmes :
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

Posted: 2021-08-25 15:49:19
by Aliasing
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.