[REL] [FR] www.filmages.ch

If you made a script you can offer it to the others here, or ask help to improve it. You can also report here bugs & problems with existing scripts.
Post Reply
Nazgul64
Posts: 2
Joined: 2016-02-04 18:19:40

[REL] [FR] www.filmages.ch

Post by Nazgul64 »

Bonjour,

Bon voilà j'utilise depuis quelque temps un script que j'ai bricolé à partir du très bon script Allociné.
Ce script permet de compléter le champ description de mes films (et quelques champs personnalisés : 'Age mini') avec les données de classification (ou certification) de films issues du site www.filmages.ch

Exemple de sortie ajouté en fin du champ description ('Les nouveaux héros'):
--------------------- Avertissements ---------------------

+6 ans

Contre-Indications :
Plan physiologique

Avertissements :
Il n'y a que très peu de contre-indications à signaler. Toutefois, l'incendie avec la mort du frère et le personnage masqué pourraient impressionner voire effrayer les plus jeunes. Il faut signaler la durée, un rythme échevelé, de nombreux dialogues et un scénario trop complexe pour les plus jeunes. A relever la qualité de l'animation, des effets spéciaux et la reprise réussie des mythiques super héros de Marvel, rajeunis par les nouvelles technologies liées à la robotique. De plus ce film d'animation souligne l'importance de la solidarité du groupe pour surmonter les obstacles, de la loyauté et de l'amitié.


J'espère que ça pourra intéresser certains ... et peut être en faire un vrai script digne de ce nom ;-)

Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=Olivier D
Title=1UpdateFilmAge
Description=Donnees filmages.ch
Site=http://www.filmages.ch
Language=-
Version=1.0
Requires=3.5
Comments=-
License=
GetInfo=1
RequiresMovies=1

[Options]
Type de Lancement=2|2|0=Cherche le meilleur résultat sans confirmation|1=Demande le titre avant de lancer le script|2=Ne demande pas le titre avant de lancer le script|3=Lancement automatique sur l'adresse web|4=Batch : désélectionne films traités / décoche + sélectionne films non traités
Recherche sur le titre=0|0|0=Traduit|1=Original

[Parameters]

***************************************************)

program UpdateFilmAge;
uses
  ScorEpioNCommonScript,StringUtils1;

const
  VersionScript = '1 du 09/2013';
  NomScript = 'FILMAGE';
  urlDomain = 'filmages.ch';
  urlFilmages = 'http://www.filmages.ch';
  urlFicheFilm = 'http://www.filmages.ch/films/detail/items/';
  urlFilmagesSearch = urlFilmages+'/films/recherche/search/';
  urlFilmagesSearchEndFilm = '.html';
 	debug = false;                        // mode debug on/off (Un grand MERCI à Scorpion7552 pour cette astuce géniale)
	debugrep = 'c:\temp\';               // répertoire de stockage des fichiers pour le mode debug
  timetosleep = 500;
  nbDecimal = 2;


var
  MovieName, MovieDirector, FoundMovieDirector, ID, AdressePlus, La_liste, Reponse, AdresseSuivant, AdressePrecedent, TypeExec, MessageInput : string;
  numPageG, numPageR, compteur, premiereExecution : Integer;
  listeResultat : TStringList;
  listeMessagesF : array of string;

//------------------------------------------------------------------------------
// RETOURNE ELEMENT FILMS OU SERIES
//------------------------------------------------------------------------------

function TitrePlus(Line : String) : String;
begin
    if Line <> '' then
    begin
      Line := StringReplace(Line, ' ', '+');
      result := Line;
    end;
end;
//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DE RECHERCHES
//------------------------------------------------------------------------------

procedure AnalyzePage(Address: string);
var
  Line, FoundTitle : string;
  BeginPos, EndPos : Integer;
begin
  Line := GetPage(Address);

  SetArrayLength(listeMessagesF,3);
  listeMessagesF[0] := 'Aucun film trouvé';
  listeMessagesF[1] := UTF8Encode('Catalog Items');
  listeMessagesF[2] := urlFilmagesSearchEndFilm;

  if (GetOption('Type de Lancement') = 4) then // Sélectionne la fiche si type de lancement à 4 et si version AMC 4.1.2 au moins
  begin
    if CheckVersion(4,1,2) = True then
      SetSelected(True);
  end;

  if (pos('Recherche : <b>""</b>', Line)) <> 0 then
     exit;

  if pos(UTF8Encode('Films trouvés<span class="total"> : 0'),Line) <> 0 then
  begin
    if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
    begin
      if Input(NomScript+' by Olivier DARRACQ', listeMessagesF[0]+' pour "'+MovieName+'" :', MovieName) then
      begin
        if Pos(urlDomain, MovieName) > 0 then
          AnalyzeMoviePage(convertURL(MovieName))
        else
          AnalyzePage(urlFilmagesSearch+UrlEncode(TitrePlus(UTF8Encode(MovieName)))+urlFilmagesSearchEndFilm);
      end;
        exit;

    end else
    begin
      SetField(fieldChecked, 'False');
      exit;
    end;
  end;

  if pos(UTF8Encode('Films trouvés<span class="total"> : 1<'), Line) > 0 then
  begin
    if (GetOption('Type de Lancement') = 4) then  // Désélectionne la fiche si type de lancement à 4, si version AMC 4.1.2 au moins et si 1 résultat trouvé
    begin
      if CheckVersion(4,1,2) = True then
        SetSelected(False);
    end;
    AddMoviesTitles(findInfo(UTF8Encode('<div class="mod_cataloglist block">'), '</div>', Line,'1'));
    sleep(timetosleep);
    FoundTitle := trouveResultat(MovieName);
    if FoundTitle <> '' then
    begin
        AnalyzeMoviePage(FoundTitle);
        SetField(fieldChecked, 'True');
    end else
    begin
        // TO DO
        
      if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
      begin
        begin
          if PickTreeExec(Address) then
          begin
            //if execMenuScorEpioN(urlDomain, Address) = False then
            //begin
              if (Address = AdressePlus) then
              begin
                numPageR := numPageR+1;
    	          AnalyzePage(AdressePlus);
              end else
              if (Address = AdressePrecedent) then
              begin
                numPageR := numPageR-1;
    	          AnalyzePage(AdressePrecedent);
              end else
              if (Address = AdresseSuivant) then
              begin
                numPageR := numPageR+1;
    	          AnalyzePage(AdresseSuivant);
              end else
              begin
                SetField(fieldChecked, 'True'); // Coche la fiche si on choisit un film
                AnalyzeMoviePage(Address);
              end;
            //end;
          end else
          exit;
        end;
      end;
    end;
    //Address := findInfo(UTF8Encode('<table class='), '</table>', Line, '4');
    //Address := urlFilmages+'/'+findInfo('<a href="', '"', Address,'0');
    //SetField(fieldChecked, 'True');
    //AnalyzeMoviePage(Address);
  end else
  begin
    if GetOption('Type de Lancement') = 4 then   // Décoche la fiche si type de lancement à 4 et ne trouve rien
    begin
      SetField(fieldChecked, 'False');
      exit;
    end;
    PickTreeClear;
    if pos(listeMessagesF[1], Line) > 0 then
      AddMoviesTitles(findInfo(UTF8Encode('<div class="mod_cataloglist block">'), '</div>', Line,'1'));
    //menuScorEpioN();
    if compteur = 1 then
    begin
      compteur := 0;
      FoundTitle := trouveResultat(MovieName);
      if FoundTitle <> '' then
      begin
        AnalyzeMoviePage(copy(listeResultat.GetString(0),pos('|',listeResultat.GetString(0))+1,pos('[',listeResultat.GetString(0))-pos('|',listeResultat.GetString(0))-1));
        exit;
      end;
    end else if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then
    begin
      begin
        if PickTreeExec(Address) then
        begin
          //if execMenuScorEpioN(urlDomain, Address) = False then
          //begin
            if (Address = AdressePlus) then
            begin
              numPageR := numPageR+1;
  	          AnalyzePage(AdressePlus);
            end else
            if (Address = AdressePrecedent) then
            begin
              numPageR := numPageR-1;
  	          AnalyzePage(AdressePrecedent);
            end else
            if (Address = AdresseSuivant) then
            begin
              numPageR := numPageR+1;
  	          AnalyzePage(AdresseSuivant);
            end else
            begin
              SetField(fieldChecked, 'True'); // Coche la fiche si on choisit un film
              AnalyzeMoviePage(Address);
            end;
          //end;
        end else
        exit;
      end;
    end else
    begin

      if (GetOption('Type de Lancement') = 0) then
      begin
        sleep(timetosleep);
        FoundTitle := trouveResultat(MovieName);
        if FoundTitle <> '' then
          AnalyzeMoviePage(FoundTitle);
      end ;
    end;
  end;
end;
//------------------------------------------------------------------------------
// TROUVE LE BON RESULTAT
//------------------------------------------------------------------------------

function trouveResultat(title : String) : String;
var
   oK, couple, titre, adresse : String;
   i : Integer;
begin
   for i:=0 to listeResultat.Count-1 do
   begin
     couple := listeResultat.GetString(i);
     titre := copy(couple,0,pos('|',couple)-1);
     adresse := copy(couple,pos('|',couple)+1,pos('[',couple)-pos('|',couple)-1);
     oK := compareString(title,titre);
     if oK = 'OK' then
     begin
       FoundMovieDirector := copy(couple,pos('[',couple)+1,length(couple)-pos('[',couple)-1);
       if (compareString(MovieDirector,FoundMovieDirector)= 'OK') then
       begin
         result := adresse;
         exit;
       end else
       begin
         if (result = '') then result := adresse;
       end;
     end;
   end;
   if oK = 'KO' then
     result := '';
   listeResultat.Free;

end;

//------------------------------------------------------------------------------
// COMPARE LES 2 CHAINES DE CARACTERES
//------------------------------------------------------------------------------

function compareString(String1, String2 : String) : String;
begin
     String1 := supprimeAccents(trim(AnsiLowerCase(String1)));
     String2 := supprimeAccents(trim(AnsiLowerCase(String2)));
     if (String1 = String2) then
     begin
       result := 'OK';
     end else
     begin
       result := 'KO';
     end;
end;

//------------------------------------------------------------------------------
// SUPPRIME LES ACCENTS
//------------------------------------------------------------------------------

function supprimeAccents(String1 : String) : String;
begin
     String1 := supprimeLesAccents(String1);

     delete(String1, pos(' - ',String1), length(String1));
     if (pos(', ',String1) > 0) then
        delete(String1, pos(', ',String1), length(String1));
     if (pos('(',String1) > 0) then
        delete(String1, pos('(',String1), length(String1));
     if (pos('[',String1) > 0) then
        delete(String1, pos('[',String1), length(String1));
     if (pos(':',String1) > 0) then
        delete(String1, pos(':',String1), length(String1));
     result := trim(String1);
end;

//------------------------------------------------------------------------------
// AJOUTE UN COUPLE FILM / ADRESSE A LA LISTE DE RESULTAT
//------------------------------------------------------------------------------

procedure AddMoviesTitles(Line : string);
var
  MovieTitle, MovieTitle2, MovieAddress, aucun, LocalMessageInput, Resultat : string;
  StartPos, EndPos : Integer;
begin
//compte les résultats
  compteur := 0;
  listeResultat := TStringList.Create;
  LocalMessageInput := ' Films trouvés pour ';
  Resultat := FullTrim(findInfo(UTF8Encode('<span class="total"> : '), '</span></h2>', Line, '0'));
  PickTreeAdd(Resultat + LocalMessageInput + MovieName + ' [ ' + MovieDirector +' ] :', '');
  delete(Line, 1, pos('<tr class="item  first even">', Line)-1);
  Line := StringReplace(Line, '<br />', ' ');
  repeat
      StartPos := pos('<tr class="item ', Line);                   // Pour la boucle
      delete(Line, 1, StartPos);                                             // Pour la boucle
      MovieAddress := urlFilmages+'/'+findInfo('<a href="', '"', Line,'0');
      FoundMovieDirector := findInfo('<td class="field director">', '</td>', Line,'0');
      MovieTitle2 := FullTrim(UTF8Decode(findInfo('<td class="field title_original">', '</td>', Line,'0')));
      MovieTitle := findInfo('<td class="field title_french">', '</td>', Line,'0');
      MovieTitle := UTF8Decode(MovieTitle);
      MovieTitle := RemoveSpaces(MovieTitle, True);
      Delete(MovieTitle, Pos('(', MovieTitle), (Pos(')', MovieTitle))-(Pos('(', MovieTitle))+1);
      MovieTitle :=MovieTitle + ' [ '+FoundMovieDirector+' ]';
// Pour le mode batch le titre doit être "propre"
      listeResultat.Add(MovieTitle2+'|'+MovieAddress+'[' + FoundMovieDirector +']');
      PickTreeAdd(MovieTitle, MovieAddress);
      delete(Line, 1, pos('<tr class="item ', Line)-1);
      StartPos := pos('<tr class="item ', Line);                    // Pour la boucle
      compteur := compteur+1;                                        // Pour la boucle
  until (StartPos = 0);
end;

//------------------------------------------------------------------------------
// ANALYSE DE LA PAGE DU FILM
//------------------------------------------------------------------------------

procedure AnalyzeMoviePage(Adresse : String);
var
  Line, Line2, Value, AgeSuggere, AgeLegal, Synthese, Indication : String;
  AgeMini, StartPos, compteur : Integer;
begin
// Pour le mode Batch
  if (GetOption('Fichier de log') = 0) then
    beforeUpdate();

  SetArrayLength(listeMessagesF,1);
  listeMessagesF[0] := '/film/fichefilm_gen_cfilm=';

// Charge la page
  Line := GetPage(Adresse);
  Line2 := Line;

  AgeLegal := '';
  AgeSuggere := '';
  if pos('<div class="field age_legal">', Line2) > 0 then
  begin
// Age legal
    delete(Line2, 1, pos('<div class="field age_legal">', Line2)-1);
    AgeLegal := UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'0'));
    AgeLegal := StringReplace(AgeLegal, ' ans', '');

// Age suggéré
    if pos('<div class="field age_suggested">', Line2) > 0 then
    begin
      delete(Line2, 1, pos('<div class="field age_suggested">', Line2)-1);
      AgeSuggere := UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'0'));
      AgeSuggere := StringReplace(AgeSuggere, ' ans', '');
    end;

// Age mini retenu
    AgeMini := 18;
    if AgeLegal <> '' then AgeMini := StrToInt(AgeLegal,0);
    if AgeSuggere <> '' then
    begin
      if (AgeLegal <> '') and (AgeMini < StrToInt(AgeSuggere,0)) then
      begin
        AgeMini := StrToInt(AgeSuggere,0);
      end;
    end;
    if CustomFieldExists('Age_mini') = True then SetCustomField('Age_mini', IntToStr(AgeMini));
    if CustomFieldExists('Certification') = True then SetCustomField('Certification', '+'+IntToStr(AgeMini)+' ans');
  end;

// Contre-indications
  Indication := '';
  delete(Line2, 1, pos('<div class="label">Contre-indications</div>', Line2)-1);
  if pos('<div class="field final_remark">', Line2) > 0 then
  begin
    compteur := 0;
    repeat
        StartPos := pos('<a class="glossarylink glossary_1"><!-- indexer::continue -->', Line2);                   // Pour la boucle
        delete(Line2, 1, StartPos-1);                                             // Pour la boucle
        if Indication='' then
          begin
            Indication := findInfo('<a class="glossarylink glossary_1"><!-- indexer::continue -->', '<!-- indexer::stop -->', Line2,'0');
          end else
          begin
            Indication := Indication + ' | ' + findInfo('<a class="glossarylink glossary_1"><!-- indexer::continue -->', '<!-- indexer::stop -->', Line2,'0');
          end;
        delete(Line2, 1, pos('<!-- indexer::stop -->', Line2)-1);
        StartPos := pos('<a class="glossarylink glossary_1"><!-- indexer::continue -->', Line2);                    // Pour la boucle
        compteur := compteur+1;                                        // Pour la boucle
    until (StartPos = 0);
  end;
// Synthèse
  Synthese:= '';
  delete(Line2, 1, pos('<div class="field final_remark">', Line2)-1);
  if CustomFieldExists('Avertissement') = True then
  begin
    if pos('<div class="field final_remark">', Line2) > 0 then
    begin
     Value := FullTrim(UTF8Decode(findInfo('<div class="value">', '</div>', Line2,'4')));
     Synthese := StringReplace(Value, '.<br />'+#13#10, '.<br>');
     Synthese := StringReplace(Synthese, '.<br />', '.<br>');
     Synthese := StringReplace(Synthese, '<br />', ' ');
     Synthese := StringReplace(Synthese, '<br>', RC);
     Synthese:= 'Contre-Indications :' + RC + UTF8Decode(Indication) + RC + RC + 'Avertissements :' + RC + Synthese;
     HTMLRemoveTags(Synthese);
     HTMLDecode(Synthese);
     SetCustomField('Avertissement', Synthese)
     Value := '';
    end;
  end;

end;

//------------------------------------------------------------------------------
// CALCUL DU MAX
//------------------------------------------------------------------------------
function Max ( A, B : Extended ) : Extended;
begin
  if A<B then
    begin
      result := B;
    end else
    begin
      result := A;
    end;

  //ShowMessage(FloatToStr(result));
end;

//------------------------------------------------------------------------------
// CALCUL DU MIN
//------------------------------------------------------------------------------
function Min ( A, B : Extended ) : Extended;
begin
  if A<B then
    begin
      result := A;
    end else
    begin
      result := B;
    end;

  //ShowMessage(FloatToStr(result));
end;

//

begin
 if CheckVersion(3,5,0) then
  begin
  // Détecte and update si la version de StringUtils1 est bonne
  if StringUtils1_Version < 7 then
    begin
      if ShowWarning('Ancienne version de "Stringutils1.pas" détectée: '+IntToStr(StringUtils1_Version)+#13#10+'Ce script requiert au moins la version 7.'+#13#10+'Celle-ci va être téléchargée maintenant, continuer ?') = True then
        begin
          listeResultat := TStringList.Create;
          listeResultat.Text := GetPage('http://update.antp.be/amc/scripts/StringUtils1.pas');
          listeResultat.SaveToFile(dirScripts + 'StringUtils1.pas');
          listeResultat.Free;
          ShowInformation('Mise à jour effectuée. Veuillez relancer le script Allociné.');
          Exit;
        end
      else
        begin
          ShowInformation('Vous pouvez télécharger la mise à jour de StringUtils1.pas en lançant "update scripts" ou via http://update.antp.be/amc/scripts');
          Exit;
        end;
    end;
    numPageR := 1;
    MovieName := recupTitreRecherche(GetOption('Recherche sur le titre'));
    MovieDirector :=  GetField(fieldDirector);
    SetArrayLength(listeMessagesF,1);
    listeMessagesF[0] := urlFilmagesSearchEndFilm;
    // Pour ne pas avoir l'alerte sur le type de lancement à chaque fois mais uniquement à la première execution
    // Début
    TypeExec := GetStatic('LastExec');
    if (TypeExec <> IntToStr(GetOption('Type de Lancement'))) then
    begin
      if (ShowConfirmation('Vous exécutez le script avec le type de lancement << '+IntToStr(GetOption('Type de Lancement'))+' >> pour la première fois.'+RCN(2)+'Cliquer sur ''''OUI'''' pour continuer.') = False) then
         exit
      else
        SetStatic('LastExec',IntToStr(GetOption('Type de Lancement')));
    end;
    // Fin
    // Pour la création du fichier log
    // Début
    if (GetOption('Fichier de log') = 0) and (premiereExecution = 0) then
    begin
      premiereExecution := -1;
      batch(NomScript);
      AddToLog('Les films ayant été mis à jour sont maintenant cochés');
    end;
    // Fin
    if (GetOption('Type de Lancement') = 1) then
      MessageInput := 'Entrez le titre du film :'
    else
    if (GetOption('Type de Lancement') = 3) then
    begin
      Sleep(timetosleep);
      MovieName := GetField(fieldURL);
      if Pos(urlFicheFilm, MovieName) > 0 then
         AnalyzeMoviePage(MovieName);
    end else
    begin
      Sleep(timetosleep);
      AnalyzePage(urlFilmagesSearch+UrlEncode(StringReplace(TitrePlus(UTF8Encode(MovieName)), '?', ''))+urlFilmagesSearchEndFilm);
    end;
  end else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.
;) ;)
Post Reply