[UPD ITA] MyMovies.it - prerelease

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
mrobama
Posts: 85
Joined: 2009-04-03 12:34:34

[UPD ITA] MyMovies.it - prerelease

Post by mrobama »

This is a pre release version. MyMovies uses for some links a https:// url and we are waiting for an Ant Movie Catalog new release for fix https protocol handling.
This new version detect news links in the search results page and use them instead of old ones. But we have to wait the new https support to check if parser works well.

Try this test: search for "battleship" and try the first result (is https, so you will get IOHandler error), then try the second result (http, working).

Code: Select all

program MyMoviesIT;

uses
  Stringutils7552;

const
  UrlBase = 'http://www.mymovies.it';
  UrlRicerca = '&titolo_orig=&regista=&attore=&id_genere=-1&nazione=&clausola1=-1&anno_prod=&clausola2=-1&stelle=-1&id_manif=-1&anno_manif=&disponib=-1&ordinamento=1&submit=Inizia+ricerca+%BB';
  QueryBase = UrlBase + '/database/ricerca/avanzata/?titolo=';
  debug_search = false;                                   // debuga mode on/off su ricerca dischi
  folder = 'f:\prova\';                                       // directory where to save files

  ImagePath = UrlBase + '/filmclub/';
  Apice       = #39;
  NoCommento = '(Riceverai le informazioni pochi giorni prima della messa in onda)';  // commenti inutili  "(la recensione più amata dal pubblico)"
  PiuAmata   = '(la recensione più amata dal pubblico)';
  cStartNumRis = 'nel Titolo. Ho trovato '; // Result Number start Marker
  cEndNumRis = ' film.</h3>';               // Result Number end Marker
  cStartId = 'recensione.asp?id=';   // ID start marker
  EndId = '" title="';              // ID end marker
  cStartNewTitle = '<meta property="og:title" content="';
  cEndNewTitle = '"';
  cStartTitle = 'Titolo originale <em>';             // Title start marker
  cEndTitle = '</em>';              // Title end marker
  cStartTranslTitle = '<h1 style="margin-bottom:3px;">';        // Translated title start marker
  cEndTranslTitle = '</h1>';         // Translated title end marker
  cStartImage2 = '<img src="';       // Image start marker
  cEndImage2 = '"';                  // Image end marker
  cStartDirector = 'Un film di <a href="';      // Director start marker
  cEndDirector = '</a>.';                       // Director end marker
  cStartCategory  = '<a title="Film ';   // Catogory start marker
  cEndCategory = '</a>';            // Category first end marker
  cStartCategory2  = '">';   // Catogory start marker
  cEndCategory2 = '</a>';            // Category second end marker
  cStartDuration = 'durata ';        // Duration start marker
  cEndDuration = ' min.';          // Duration end marker
  cStartYear = '<meta property="og:title" content="';              // Year start marker
  cEndYear = '/>';                 // Year end marker
  cStartYear2  = '(';   // year start marker
  cEndYear2 = ')';            // year second end marker
  cStartDesc = '<div id="recensione">';          // Description start marker
  cEndDesc = '<div style="text-align:right;">';  // Description end marker

  cStartCast = 'Con <a href="';              // Actor start marker
  cEndCast   = '<a title="';
  cEndCast2  = 'Titolo originale <em>';      // Actor end marker
  cStartImage = 'src="http://pad.mymovies.it/filmclub/';
  cEndImage = '"';
var
  MovieUrl, MovieName, Commento, TranslatedStr, PageStr:  string;
  Startchar, EndChar, UsePage, Addressnext: String;
  cImage, SaveField, TempField, DelField : string;
  PositionCategory, PositionDuration: integer;
  Positioncast: integer;
  idx : integer;
 
function MyTrim(Value: string):string;
var
  ExitLoop: Boolean;
  NewField, OldField: String;
  OldLgthValue, NewLgthValue: integer;
begin
    NewField := ' ';
    OldField := #9;
    value := StringReplace(Value, OldField, NewField);
    OldField := #10;
    value := StringReplace(Value, OldField, NewField);
    OldField := #13;
    value := StringReplace(Value, OldField, NewField);
    OldField := '  ';
    value := StringReplace(Value, OldField, NewField);
    Newfield := '&';
    OldField := '&';
    value := StringReplace(Value, OldField, NewField);
    Newfield := 'è';
    OldField := '&egrave;';
    value := StringReplace(Value, OldField, NewField);
    ExitLoop := False;
    OldLgthValue := length(Value);
    HTMLRemoveTags(Value);
    Value := FullTrim(Value);
    OldField := '  ';
    NewField := ' ';
    repeat
      value := StringReplace(Value, OldField, NewField);
      NewLgthValue := length(Value);
    if  OldLgthValue = NewLgthValue then
        ExitLoop := True
    else
        OldLgthValue := NewLgthValue;
    until ExitLoop;

  Result := Value;
end;

//-------------------------
procedure estrae_info;          //2017.10.26 cambio struttura sito: aggiunta pagina intermedia tra la ricerca e le info.
//-------------------------
begin
  MovieUrl := textbetween(PageStr, '<!-- webTrekk Espresso -->', '<!-- /webTrekk Espresso -->');
  HTMLRemoveTags(MovieUrl);
  MovieUrl := textbetween(MovieUrl, (' pageHref = ' + Apice), (Apice + ';'));

  PageStr := getPage(MovieUrl);
   if debug_search then
      DumpPage(folder+'comingsoon_page_second.txt', Pagestr);                // debug
end;

// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN:  none    OUT: set Ant fields
// -----------------------
procedure AnalyzeMoviePage;
var
  BeginPos, EndPos: integer;
begin
  // Get packed title main page
  PageStr := getPage(MovieUrl);

  if debug_search then
     DumpPage(folder+'mymovies_page.html', Pagestr);                // debug
  if pos('<!-- webTrekk Espresso -->', PageStr) > 0 then
     begin
        estrae_info
     end;
  if pos('var_carica_taboola', pageStr) > 0
     then
         nuovo_tipo_pagina
     else
         vecchio_tipo_pagina
  end;
//end;

//----------------------------
procedure nuovo_tipo_pagina;
var
  titolo_originale, Trama_e_critica: string;
  init_char, end_char: string;
begin
  TempField := TextBetween(PageStr, cStartNewTitle, cEndNewTitle);
  TempField := MyTrim(TempField);
  SetField(fieldTranslatedTitle, TempField);

  // Original Title field
  titolo_originale := TextBetween(PageStr, 'Titolo originale</td>', '</tr>');
  HTMLRemoveTags(titolo_originale);
  SetField(fieldOriginalTitle, titolo_originale);
  if titolo_originale = '' then
    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle))
    else
    SetField(fieldOriginalTitle, titolo_originale);

  // Director Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Regia di</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldDirector, TempField);

  // Actors Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Attori</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldActors, TempField);            //attori principali

  // Category Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Genere</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldCategory, TempField);

  // Duration field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Durata</td>', '</tr>');
  HTMLRemovetags(tempfield);
  tempfield := Textbefore(' ', Tempfield, '');
  SetField(fieldLength, TempField);

  // Country field
  TempField := PageStr;
  Tempfield := TextBetween(TempField, '<td valign="top">Produzione</td>', '</tr>') + '</tr>';
//  Tempfield := '<tr> href=' + TextBetween(TempField, 'href=', '</tr>');
  Tempfield := '<tr>' + TextBetween(TempField, 'href=', '</tr>');
  HTMLRemovetags(tempfield);
//  TempField := MyTrim(TempField);
  tempField := textafter(Tempfield, '>');
  SetField(fieldCountry, TempField);

//  Year
  TempField := PageStr;
  TempField := Textbetween (tempField, '<td valign="top">Anno</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldYear, TempField);

  // Get film image
  cImage := TextBetween(PageStr, '<amp-img layout="responsive" class="stonda3" width="230" height="330" src="', '"></amp-img>');
  cImage := StringReplace(cImage, 'https', 'http');

  GetPicture(cImage);

// Description Field
   init_char := '<div class="lectios">';
   end_char  := '<div class="clear10">';
   Trama_e_critica := init_char + TextBetween(PageStr, init_char, end_char) + end_char;
   Trama_e_critica := UTF8decode(Trama_e_critica);
   if debug_search then
      DumpPage(folder+'comingsoon_trama_e_critica.txt', trama_e_critica);                // debug
   TempField := textBetween(Trama_e_critica, '<p class="corpo">', '</p>');
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   HTMLRemovetags(tempfield);
   TempField := Fulltrim(Tempfield);
   SetField(fieldDescription, TempField);

// Comments Field
   init_char := 'class="corpo citazione mm-blocco-news" style="display: table;"';
   end_char  := '<div class="clear10">';
//   TempField := '<p ' + init_char + textBetween(Trama_e_critica, init_char, end_char) + end_char;
   TempField := '<p ' + textBetween(Trama_e_critica, init_char, end_char);
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   HTMLRemovetags(tempfield);
   TempField := Fulltrim(Tempfield);
   SetField(fieldComments, TempField);

// Movie URL field
   SetField(fieldURL, MovieUrl);
   SetField(fieldDate, DateToStr(Date));

end;

//----------------------------

 
//----------------------------
procedure vecchio_tipo_pagina;
//----------------------------
begin
  TempField := TextBetween(PageStr, cStartTranslTitle, cEndTranslTitle);
  TempField := MyTrim(TempField);
  SetField(fieldTranslatedTitle, TempField);

  // Original Title field
  SetField(fieldOriginalTitle, TextBetween(PageStr, cStartTitle, cEndTitle));
  if(GetField(fieldOriginalTitle)='')then
    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));

  // Director Field
  TempField := TextBetween(PageStr, cStartDirector, cEndDirector) + cEndDirector;
  TempField := TextBetween(TempField, '>' , cEndDirector);
  HTMLRemovetags(tempfield);
  SetField(fieldDirector, TempField);

  // Actors Field
  TempField := CstartCast + TextBetween(PageStr, cStartCast, cEndCast);     // da 'con:'   a Titolo
  Positioncast := pos(cStartCast, PageStr) + length(TempField);
  SaveField := TempField;
  TempField := TextBetween(PageStr, cStartCast, cEndCast2);   // da 'con:'   a Titolo Originale
  if length(tempField) > 0 then
      TempField := '<a href="' + TempField
  else
    TempField := '<a href="' + SaveField;

  DelField  := '<div id="attori_espandi"' + TextBetween(TempField, '<div id="attori_espandi"', '</div>');
  TempField := StringReplace(TempField, DelField, '');
  DelField  := '<div id="attori_comprimi"' + TextBetween(TempField, '<div id="attori_comprimi"', '</div>');
  TempField := StringReplace(TempField, DelField, '');
  TempField := MyTrim(TempField);
  SetField(fieldActors, TempField);

  // Category Field
  TempField := TextBetween(PageStr, cStartCategory, cEndcategory) + cEndcategory;
  TempField := TextBetween(TempField, cStartCategory2, cEndcategory2);
//  TempField := TempField + cEndcategory;
//  TempField := TextBetween(TempField, '">' , cEndcategory);
  SetField(fieldCategory, TempField);

  // Duration field
  TempField := TextBetween(PageStr, '<td valign="top">Durata</td>', '</tr>');
  HTMLRemovetags(tempfield);
  StringReplace(tempfield, ' minuti', '');
  SetField(fieldLength, TempField);

  // Country field
  TempField := PageStr;
  if PositionDuration > 0 then
     Delete(TempField, 1, PositionDuration - 1)
     else
        if  Positioncast > 0 then
            Delete(TempField, 1, Positioncast - 1)
        else
            if  PositionCategory > 0 then
                Delete(TempField, 1, PositionCategory - 1);

  Tempfield := TextBetween(TempField, '-', ' <strong>');
  TempField  := MyTrim(TempField);
  if  pos('Transitional', Tempfield)= 0 then
      SetField(fieldCountry, TempField);

//  Year
  TempField := PageStr;
  TempField := Textbetween (tempField, cStartYear, cEndYear);
//  TempField := Textbetween (TempField, '(', ')');
  TempField := TextBetween(TempField, cStartYear2, cEndYear2);
  SetField(fieldYear, TempField);

  // Get film image
  cImage := TextBetween(PageStr, cStartImage, cEndImage);
  if cImage = '' then
    cImage := TextBetween(PageStr,cStartImage2, cEndImage2)
  else
  begin
    if GetOption('Poster')=1 then
       cImage := ImagePath + StringReplace(cImage, '/imm.jpg', '/locandina.jpg')
    else
       cImage := ImagePath + cImage
    end;


  if cImage <> '' then
    GetPicture(cImage);

// Description Field
   TempField := TextBetween(PageStr, cStartDesc, cEndDesc) + cEndDesc;
   TempField := MyTrim(TempField);
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   TempField := Fulltrim(Tempfield);
   SetField(fieldDescription, TempField);

// Movie URL field
   SetField(fieldURL, MovieUrl);
   SetField(fieldDate, DateToStr(Date));
   
// Commento
//   TempField := Textbetween(PageStr, '<p style="padding-right:3px; margin-top:15px;">', '<a href="http://www.mymovies.it/dizionario/critica');
   TempField := Textbetween(PageStr, '">Rassegna stampa</a>', '</td>') + '</td>';
   TempField := Textbetween(TempField, '<p style="padding-right:3px; margin-top:15px;">', '<a href="http://www.mymovies.it/dizionario/critica');
   TempField := MyTrim(TempField);
   SetField(fieldComments, TempField);
end;

procedure CalcLgthToDelete;
begin
  StartChar :=  '<div class="linkblu" style="padding:3px;"';
  EndChar   :=  '<div class="linkblu" style="padding:3px;"';
  Positioncast := Length(startChar) + Length(Textbetween(UsePage, StartChar, EndChar));
  if Positioncast  = 0 then
     begin
     EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
     Positioncast := Length(startChar) + Length(Textbetween(UsePage, StartChar, EndChar));
     end;
end;

// ------------------------------------------------------------------
// FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
// da 35mm.it
// ------------------------------------------------------------------
function PopulatePickTree(OneFilm: boolean): string;
var
  TempIdFilm, TempTitle: string;
  TempAuthor, TempYear: string;
  LineToDrop, LineToUse, LineTodelete, LineTxt: string;
  LengthFilm, LgthTitle, LineNr: integer;
  PositionCategory, LgthLineToUse, PositionDuration: integer;
  PageAll, PageLoop: string;
  cFilmYear, CYearId: string;
  NewLinkStart, NewLinkEnd: string;
  StartPos, EndPos: integer;
  NewLinkStartPos, NewLinkEndPos: integer;
begin
  if OneFilm then                                                           // per un solo film trovato è OK
    begin
      StartChar := 'http://www.mymovies.it/dizionario/recensione.asp?id=';
      EndChar   := '" title=';
      UsePage  := Textbetween(Pagestr, StartChar, EndChar);
      if length(UsePage) > 0 then
        begin
          TempIdFilm := StartChar + Usepage;
          result := TempIdFilm;
        end
    end
  else
    begin
      PickTreeClear;
      PickTreeAdd('Risultati ricerca per "' + getfield(fieldFilePath) + '":', '');                                               // per più pagine di film
      PageLoop := PageStr;
      StartChar := '<a title="Database MYmovies" href="http://www.mymovies.it/film/"><strong>Film</strong></a>';
      EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
//fulvio      EndChar := '<a href="http://www.mymovies.it/database/">Effettua una nuova ricerca</a>';
      NewLinkStart := 'Media:<br />';
      NewLinkEnd := '#trovastreaming">';
      UsePage := TextBetween(PageStr, StartChar, EndChar) + EndChar;

      repeat                     // inizio gestione pagina multipla
        LineNr  := Pos('>Pagina successiva', PageStr);
        PageAll := UsePage;
        StartChar :=  '<div class="linkblu" style="padding:3px;"';
        Positioncast := Pos(StartChar, UsePage);
        Delete(UsePage, 1, Positioncast - 1)
        CalcLgthToDelete;

        repeat
          CalcLgthToDelete;
          StartChar :=  '<div class="linkblu" style="padding:3px;"';
          EndChar   :=  '<div class="linkverde">';
          LineToUse := StartChar + textbetween(UsePage, StartChar, EndChar) + EndChar;
          StartChar := '<div class="linkverde">';
           EndChar   := '<div class="linkblu" style="padding:3px;"';
          LineToDrop := textbetween(UsePage, StartChar, EndChar);
          if Length(LineToDrop) = 0 then
             begin
             EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
             LineToDrop := textbetween(UsePage, StartChar, EndChar);
             end;
          LineToDelete := LineToUse + LineToDrop;
          PositionDuration := Length(LineToDelete);
          StartPos := pos(StartChar, UsePage);
          StartChar := 'http://www.mymovies.it/dizionario/recensione.asp?id=';
          EndChar := '" title="';
          if StartPos > 0 then
            begin
              TempIdFilm := StartChar + TextBetween(UsePage, Startchar, EndChar);

              // fixed new urls: 13/03/2018
              NewLinkStartPos := pos(NewLinkStart, LineToUse);
              if NewLinkStartPos <> 0 then
                begin
                  NewLinkEndPos := pos(NewLinkEnd, LineToUse);
                  if NewLinkEndPos > NewLinkStartPos then
                    begin
                      TempIdFilm := TextBetween(LineToUse, NewLinkStart, NewLinkEnd) + NewLinkEnd;
                      TempIdFilm := 'https:' + TextBetween(TempIdFilm, '"http:', NewLinkEnd);
                    end
                end;
                
              LengthFilm := length(StartChar) + length(TempIdFilm);
              Delete(UsePage, 1, LengthFilm);

              StartChar := 'title="';
              EndChar := '">';
              TempTitle := TextBetween(UsePage, Startchar, EndChar);
              LgthTitle := Length(TempTitle) + length(StartChar) + length(EndChar);
              TempTitle := FullTrim(TempTitle);
              LgthTitle := length(StartChar) + LgthTitle + length(EndChar);
              TempAuthor := Textbetween (UsePage, 'Un film di <b>', '</b>');
              TempAuthor := Textbetween (TempAuthor, '">', '</a>');
              TempYear   := Textbetween (UsePage, '<a href="http://www.mymovies.it/film/?anno=', '">');
              TempTitle  := TempTitle + ' (' + TempAuthor + ') ' + TempYear;
              PickTreeAdd(TempTitle, TempIdFilm);

              StartChar :=  'http://www.mymovies.it/dizionario/recensione.asp?id=';
              EndChar := '" title="';
              StartPos := pos(StartChar, UsePage);
             Delete(PageAll, 1, Positioncast - 1);
             UsePage := PageAll;
            end;
        until(Positioncast < 100);
        result := '';

// Controlla se ci sono altre pagine di risultati
        StartPos := Pos('Ricerca MYmovies', PageLoop);
        Delete(PageLoop, 1, StartPos - 1);
        StartChar := '<a href="?titolo=';
        EndChar := '">Pagina successiva';

        LineTxt := TextBetween(PageLoop, StartChar, EndChar);
        repeat
           if Length(LineTxt) > 1 then
              begin
              AddressNext := QueryBase + LineTxt;
              LineTxt := LineTxt + EndChar;
              end
          LineTxt := TextBetween(LineTxt, StartChar, EndChar);
        until length(LineTxt) < length(EndChar);
        SetField(fieldcomments, AddressNext);
        Pagestr  := GetPage(Addressnext);
        PageLoop := PageStr;
        StartChar := '<a title="Database MYmovies" href="http://www.mymovies.it/film/"><strong>Film</strong></a>';
        EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
        UsePage := TextBetween(PageStr, StartChar, EndChar) + EndChar;
      until (LineNr < 1); // repeat
    end
end;

//
// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  page Url (string)
// OUT: none
// ---------------------------------
procedure AnalyzeSearchPage(Url: string);
var
  NumRisultati : string;
begin
  PageStr := getpage(Url);
//  SetField(fieldURL, URL);
  NumRisultati := Textbetween(PageStr, cStartNumRis, cEndNumRis);
 
  if ( (NumRisultati = '0') or (NumRisultati = '')) then
    begin
      ShowMessage('Title not found / Nessun film trovato.');
      SetField(fieldURL, MovieUrl);
      exit;
    end

  if NumRisultati = '1' then
    MovieUrl := PopulatePickTree(true)
  else
    begin
      PopulatePickTree(false);
      if not PickTreeExec(MovieUrl) then // ..select one
        exit;
    end;

  AnalyzeMoviePage;
end;

begin
  if (CheckVersion(4,2,1)) and (StringUtils1_Version > 5) then
    begin
      TranslatedStr := StringReplace(GetField(fieldTranslatedTitle), '.', ' ');
      MovieName := StringReplace(GetField(fieldOriginalTitle), '.', ' ');
      if (TranslatedStr <> '') then
        MovieName := TranslatedStr;

      if(Input('MyMovies.It', 'Enter the title of the movie', MovieName)) then
        begin
          MovieUrl := QueryBase + StringReplace(MovieName,' ','+') + UrlRicerca;
          AnalyzeSearchPage(MovieUrl);
        end;
    end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 4.2.1) and StringUtils1 version 6');
end.
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Re: [UPD ITA] MyMovies.it - prerelease

Post by antp »

mrobama wrote: 2018-03-13 12:20:50 Try this test: search for "battleship" and try the first result (is https, so you will get IOHandler error), then try the second result (http, working).
:??: the problem of too-recent TLS version should give an error about SSL, not the IOHandler error (which happens when trying to access a HTTPS site via a HTTP address)
fulvio53s03
Posts: 764
Joined: 2007-04-28 05:46:43
Location: Italy

Re: [UPD ITA] MyMovies.it - prerelease

Post by fulvio53s03 »

Grazie Mrobama, ottimi lavori.
Potresti evidenziare nella lista che si ottiene dalla ricerca ante titolo del film gli "http" o "https" ?
:ha:
mrobama
Posts: 85
Joined: 2009-04-03 12:34:34

Re: [UPD ITA] MyMovies.it - prerelease

Post by mrobama »

@antp: sorry, you are right, the error message is "Error connecting with SSL".

@fulvio53s03: here the "debug" version with [http(s)] in the result page and a useful ShowMessage before and after opening the movie url. This version is a debug version and only for fulvio53s03 and developers/testers (it doesn't fix the https problem)

Code: Select all

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

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

[Infos]
Authors=Fulvio53s03  (Original by Claudio Rinaldi & seraphico)
Title=MyMovies
Description=Get movie info from MyMovies.it
Site=www.mymovies.it
Language=IT
Version=2.1
Requires=4.2.1
Comments=
License=
GetInfo=1
RequiresMovies=1

[Options]
Poster=1|0|1=Download full-res Poster|0=Download tiny Poster

[Parameters]

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

program MyMoviesIT;

uses
  Stringutils7552;

const
  UrlBase = 'http://www.mymovies.it';
  UrlRicerca = '&titolo_orig=&regista=&attore=&id_genere=-1&nazione=&clausola1=-1&anno_prod=&clausola2=-1&stelle=-1&id_manif=-1&anno_manif=&disponib=-1&ordinamento=1&submit=Inizia+ricerca+%BB';
  QueryBase = UrlBase + '/database/ricerca/avanzata/?titolo=';
  debug_search = false;                                   // debuga mode on/off su ricerca dischi
  folder = 'f:\prova\';                                       // directory where to save files

  ImagePath = UrlBase + '/filmclub/';
  Apice       = #39;
  NoCommento = '(Riceverai le informazioni pochi giorni prima della messa in onda)';  // commenti inutili  "(la recensione più amata dal pubblico)"
  PiuAmata   = '(la recensione più amata dal pubblico)';
  cStartNumRis = 'nel Titolo. Ho trovato '; // Result Number start Marker
  cEndNumRis = ' film.</h3>';               // Result Number end Marker
  cStartId = 'recensione.asp?id=';   // ID start marker
  EndId = '" title="';              // ID end marker
  cStartNewTitle = '<meta property="og:title" content="';
  cEndNewTitle = '"';
  cStartTitle = 'Titolo originale <em>';             // Title start marker
  cEndTitle = '</em>';              // Title end marker
  cStartTranslTitle = '<h1 style="margin-bottom:3px;">';        // Translated title start marker
  cEndTranslTitle = '</h1>';         // Translated title end marker
  cStartImage2 = '<img src="';       // Image start marker
  cEndImage2 = '"';                  // Image end marker
  cStartDirector = 'Un film di <a href="';      // Director start marker
  cEndDirector = '</a>.';                       // Director end marker
  cStartCategory  = '<a title="Film ';   // Catogory start marker
  cEndCategory = '</a>';            // Category first end marker
  cStartCategory2  = '">';   // Catogory start marker
  cEndCategory2 = '</a>';            // Category second end marker
  cStartDuration = 'durata ';        // Duration start marker
  cEndDuration = ' min.';          // Duration end marker
  cStartYear = '<meta property="og:title" content="';              // Year start marker
  cEndYear = '/>';                 // Year end marker
  cStartYear2  = '(';   // year start marker
  cEndYear2 = ')';            // year second end marker
  cStartDesc = '<div id="recensione">';          // Description start marker
  cEndDesc = '<div style="text-align:right;">';  // Description end marker

  cStartCast = 'Con <a href="';              // Actor start marker
  cEndCast   = '<a title="';
  cEndCast2  = 'Titolo originale <em>';      // Actor end marker
  cStartImage = 'src="http://pad.mymovies.it/filmclub/';
  cEndImage = '"';
var
  MovieUrl, MovieName, Commento, TranslatedStr, PageStr:  string;
  Startchar, EndChar, UsePage, Addressnext: String;
  cImage, SaveField, TempField, DelField : string;
  PositionCategory, PositionDuration: integer;
  Positioncast: integer;
  idx : integer;

function MyTrim(Value: string):string;
var
  ExitLoop: Boolean;
  NewField, OldField: String;
  OldLgthValue, NewLgthValue: integer;
begin
    NewField := ' ';
    OldField := #9;
    value := StringReplace(Value, OldField, NewField);
    OldField := #10;
    value := StringReplace(Value, OldField, NewField);
    OldField := #13;
    value := StringReplace(Value, OldField, NewField);
    OldField := '  ';
    value := StringReplace(Value, OldField, NewField);
    Newfield := '&';
    OldField := '&';
    value := StringReplace(Value, OldField, NewField);
    Newfield := 'è';
    OldField := '&egrave;';
    value := StringReplace(Value, OldField, NewField);
    ExitLoop := False;
    OldLgthValue := length(Value);
    HTMLRemoveTags(Value);
    Value := FullTrim(Value);
    OldField := '  ';
    NewField := ' ';
    repeat
      value := StringReplace(Value, OldField, NewField);
      NewLgthValue := length(Value);
    if  OldLgthValue = NewLgthValue then
        ExitLoop := True
    else
        OldLgthValue := NewLgthValue;
    until ExitLoop;

  Result := Value;
end;

//-------------------------
procedure estrae_info;          //2017.10.26 cambio struttura sito: aggiunta pagina intermedia tra la ricerca e le info.
//-------------------------
begin
  MovieUrl := textbetween(PageStr, '<!-- webTrekk Espresso -->', '<!-- /webTrekk Espresso -->');
  HTMLRemoveTags(MovieUrl);
  MovieUrl := textbetween(MovieUrl, (' pageHref = ' + Apice), (Apice + ';'));

  PageStr := getPage(MovieUrl);
   if debug_search then
      DumpPage(folder+'comingsoon_page_second.txt', Pagestr);                // debug
end;

// -----------------------
// ANALYZE MOVIE DATA PAGE
// IN:  none    OUT: set Ant fields
// -----------------------
procedure AnalyzeMoviePage;
var
  BeginPos, EndPos: integer;
begin
  // Get packed title main page
  ShowMessage('Debug IOHandler problem. Getting URL: [' + MovieUrl + ']');
  PageStr := getPage(MovieUrl);
  ShowMessage('Debug IOHandler problem. Done.');
  
  if debug_search then
     DumpPage(folder+'mymovies_page.html', Pagestr);                // debug
  if pos('<!-- webTrekk Espresso -->', PageStr) > 0 then
     begin
        estrae_info
     end;
  if pos('var_carica_taboola', pageStr) > 0
     then
         nuovo_tipo_pagina
     else
         vecchio_tipo_pagina
  end;
//end;

//----------------------------
procedure nuovo_tipo_pagina;
var
  titolo_originale, Trama_e_critica: string;
  init_char, end_char: string;
begin
  TempField := TextBetween(PageStr, cStartNewTitle, cEndNewTitle);
  TempField := MyTrim(TempField);
  SetField(fieldTranslatedTitle, TempField);

  // Original Title field
  titolo_originale := TextBetween(PageStr, 'Titolo originale</td>', '</tr>');
  HTMLRemoveTags(titolo_originale);
  SetField(fieldOriginalTitle, titolo_originale);
  if titolo_originale = '' then
    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle))
    else
    SetField(fieldOriginalTitle, titolo_originale);

  // Director Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Regia di</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldDirector, TempField);

  // Actors Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Attori</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldActors, TempField);            //attori principali

  // Category Field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Genere</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldCategory, TempField);

  // Duration field
  TempField := TextBetween(PageStr, '<tr><td valign="top">Durata</td>', '</tr>');
  HTMLRemovetags(tempfield);
  tempfield := Textbefore(' ', Tempfield, '');
  SetField(fieldLength, TempField);

  // Country field
  TempField := PageStr;
  Tempfield := TextBetween(TempField, '<td valign="top">Produzione</td>', '</tr>') + '</tr>';
//  Tempfield := '<tr> href=' + TextBetween(TempField, 'href=', '</tr>');
  Tempfield := '<tr>' + TextBetween(TempField, 'href=', '</tr>');
  HTMLRemovetags(tempfield);
//  TempField := MyTrim(TempField);
  tempField := textafter(Tempfield, '>');
  SetField(fieldCountry, TempField);

//  Year
  TempField := PageStr;
  TempField := Textbetween (tempField, '<td valign="top">Anno</td>', '</tr>');
  HTMLRemovetags(tempfield);
  SetField(fieldYear, TempField);

  // Get film image
  cImage := TextBetween(PageStr, '<amp-img layout="responsive" class="stonda3" width="230" height="330" src="', '"></amp-img>');
  cImage := StringReplace(cImage, 'https', 'http');

  GetPicture(cImage);

// Description Field
   init_char := '<div class="lectios">';
   end_char  := '<div class="clear10">';
   Trama_e_critica := init_char + TextBetween(PageStr, init_char, end_char) + end_char;
   Trama_e_critica := UTF8decode(Trama_e_critica);
   if debug_search then
      DumpPage(folder+'comingsoon_trama_e_critica.txt', trama_e_critica);                // debug
   TempField := textBetween(Trama_e_critica, '<p class="corpo">', '</p>');
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   HTMLRemovetags(tempfield);
   TempField := Fulltrim(Tempfield);
   SetField(fieldDescription, TempField);

// Comments Field
   init_char := 'class="corpo citazione mm-blocco-news" style="display: table;"';
   end_char  := '<div class="clear10">';
//   TempField := '<p ' + init_char + textBetween(Trama_e_critica, init_char, end_char) + end_char;
   TempField := '<p ' + textBetween(Trama_e_critica, init_char, end_char);
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   HTMLRemovetags(tempfield);
   TempField := Fulltrim(Tempfield);
   SetField(fieldComments, TempField);

// Movie URL field
   SetField(fieldURL, MovieUrl);
   SetField(fieldDate, DateToStr(Date));

end;

//----------------------------


//----------------------------
procedure vecchio_tipo_pagina;
//----------------------------
begin
  TempField := TextBetween(PageStr, cStartTranslTitle, cEndTranslTitle);
  TempField := MyTrim(TempField);
  SetField(fieldTranslatedTitle, TempField);

  // Original Title field
  SetField(fieldOriginalTitle, TextBetween(PageStr, cStartTitle, cEndTitle));
  if(GetField(fieldOriginalTitle)='')then
    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));

  // Director Field
  TempField := TextBetween(PageStr, cStartDirector, cEndDirector) + cEndDirector;
  TempField := TextBetween(TempField, '>' , cEndDirector);
  HTMLRemovetags(tempfield);
  SetField(fieldDirector, TempField);

  // Actors Field
  TempField := CstartCast + TextBetween(PageStr, cStartCast, cEndCast);     // da 'con:'   a Titolo
  Positioncast := pos(cStartCast, PageStr) + length(TempField);
  SaveField := TempField;
  TempField := TextBetween(PageStr, cStartCast, cEndCast2);   // da 'con:'   a Titolo Originale
  if length(tempField) > 0 then
      TempField := '<a href="' + TempField
  else
    TempField := '<a href="' + SaveField;

  DelField  := '<div id="attori_espandi"' + TextBetween(TempField, '<div id="attori_espandi"', '</div>');
  TempField := StringReplace(TempField, DelField, '');
  DelField  := '<div id="attori_comprimi"' + TextBetween(TempField, '<div id="attori_comprimi"', '</div>');
  TempField := StringReplace(TempField, DelField, '');
  TempField := MyTrim(TempField);
  SetField(fieldActors, TempField);

  // Category Field
  TempField := TextBetween(PageStr, cStartCategory, cEndcategory) + cEndcategory;
  TempField := TextBetween(TempField, cStartCategory2, cEndcategory2);
//  TempField := TempField + cEndcategory;
//  TempField := TextBetween(TempField, '">' , cEndcategory);
  SetField(fieldCategory, TempField);

  // Duration field
  TempField := TextBetween(PageStr, '<td valign="top">Durata</td>', '</tr>');
  HTMLRemovetags(tempfield);
  StringReplace(tempfield, ' minuti', '');
  SetField(fieldLength, TempField);

  // Country field
  TempField := PageStr;
  if PositionDuration > 0 then
     Delete(TempField, 1, PositionDuration - 1)
     else
        if  Positioncast > 0 then
            Delete(TempField, 1, Positioncast - 1)
        else
            if  PositionCategory > 0 then
                Delete(TempField, 1, PositionCategory - 1);

  Tempfield := TextBetween(TempField, '-', ' <strong>');
  TempField  := MyTrim(TempField);
  if  pos('Transitional', Tempfield)= 0 then
      SetField(fieldCountry, TempField);

//  Year
  TempField := PageStr;
  TempField := Textbetween (tempField, cStartYear, cEndYear);
//  TempField := Textbetween (TempField, '(', ')');
  TempField := TextBetween(TempField, cStartYear2, cEndYear2);
  SetField(fieldYear, TempField);

  // Get film image
  cImage := TextBetween(PageStr, cStartImage, cEndImage);
  if cImage = '' then
    cImage := TextBetween(PageStr,cStartImage2, cEndImage2)
  else
  begin
    if GetOption('Poster')=1 then
       cImage := ImagePath + StringReplace(cImage, '/imm.jpg', '/locandina.jpg')
    else
       cImage := ImagePath + cImage
    end;


  if cImage <> '' then
    GetPicture(cImage);

// Description Field
   TempField := TextBetween(PageStr, cStartDesc, cEndDesc) + cEndDesc;
   TempField := MyTrim(TempField);
   TempField := StringReplace(TempField, 'Il film Shadow è disponibile in streaming. Scopri MYmovieslive', '');
   TempField := StringReplace(TempField, 'Questo film è disponibile in versione digitale, scopri il miglior prezzo: TROVASTREAMING', '');
   TempField := Fulltrim(Tempfield);
   SetField(fieldDescription, TempField);

// Movie URL field
   SetField(fieldURL, MovieUrl);
   SetField(fieldDate, DateToStr(Date));

// Commento
//   TempField := Textbetween(PageStr, '<p style="padding-right:3px; margin-top:15px;">', '<a href="http://www.mymovies.it/dizionario/critica');
   TempField := Textbetween(PageStr, '">Rassegna stampa</a>', '</td>') + '</td>';
   TempField := Textbetween(TempField, '<p style="padding-right:3px; margin-top:15px;">', '<a href="http://www.mymovies.it/dizionario/critica');
   TempField := MyTrim(TempField);
   SetField(fieldComments, TempField);
end;

procedure CalcLgthToDelete;
begin
  StartChar :=  '<div class="linkblu" style="padding:3px;"';
  EndChar   :=  '<div class="linkblu" style="padding:3px;"';
  Positioncast := Length(startChar) + Length(Textbetween(UsePage, StartChar, EndChar));
  if Positioncast  = 0 then
     begin
     EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
     Positioncast := Length(startChar) + Length(Textbetween(UsePage, StartChar, EndChar));
     end;
end;

// ------------------------------------------------------------------
// FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
// da 35mm.it
// ------------------------------------------------------------------
function PopulatePickTree(OneFilm: boolean): string;
var
  TempIdFilm, TempTitle: string;
  TempAuthor, TempYear: string;
  LineToDrop, LineToUse, LineTodelete, LineTxt: string;
  LengthFilm, LgthTitle, LineNr: integer;
  PositionCategory, LgthLineToUse, PositionDuration: integer;
  PageAll, PageLoop: string;
  cFilmYear, CYearId: string;
  NewLinkStart, NewLinkEnd: string;
  StartPos, EndPos: integer;
  NewLinkStartPos, NewLinkEndPos: integer;
begin
  if OneFilm then                                                           // per un solo film trovato è OK
    begin
      StartChar := 'http://www.mymovies.it/dizionario/recensione.asp?id=';
      EndChar   := '" title=';
      UsePage  := Textbetween(Pagestr, StartChar, EndChar);
      if length(UsePage) > 0 then
        begin
          TempIdFilm := StartChar + Usepage;
          result := TempIdFilm;
        end
    end
  else
    begin
      PickTreeClear;
      PickTreeAdd('Risultati ricerca per "' + getfield(fieldFilePath) + '":', '');                                               // per più pagine di film
      PageLoop := PageStr;
      StartChar := '<a title="Database MYmovies" href="http://www.mymovies.it/film/"><strong>Film</strong></a>';
      EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
//fulvio      EndChar := '<a href="http://www.mymovies.it/database/">Effettua una nuova ricerca</a>';
      NewLinkStart := 'Media:<br />';
      NewLinkEnd := '#trovastreaming">';
      UsePage := TextBetween(PageStr, StartChar, EndChar) + EndChar;

      repeat                     // inizio gestione pagina multipla
        LineNr  := Pos('>Pagina successiva', PageStr);
        PageAll := UsePage;
        StartChar :=  '<div class="linkblu" style="padding:3px;"';
        Positioncast := Pos(StartChar, UsePage);
        Delete(UsePage, 1, Positioncast - 1)
        CalcLgthToDelete;

        repeat
          CalcLgthToDelete;
          StartChar :=  '<div class="linkblu" style="padding:3px;"';
          EndChar   :=  '<div class="linkverde">';
          LineToUse := StartChar + textbetween(UsePage, StartChar, EndChar) + EndChar;
          StartChar := '<div class="linkverde">';
           EndChar   := '<div class="linkblu" style="padding:3px;"';
          LineToDrop := textbetween(UsePage, StartChar, EndChar);
          if Length(LineToDrop) = 0 then
             begin
             EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
             LineToDrop := textbetween(UsePage, StartChar, EndChar);
             end;
          LineToDelete := LineToUse + LineToDrop;
          PositionDuration := Length(LineToDelete);
          StartPos := pos(StartChar, UsePage);
          StartChar := 'http://www.mymovies.it/dizionario/recensione.asp?id=';
          EndChar := '" title="';
          if StartPos > 0 then
            begin
              TempTitle := '[http] ';
              TempIdFilm := StartChar + TextBetween(UsePage, Startchar, EndChar);

              // fixed new urls: 13/03/2018
              NewLinkStartPos := pos(NewLinkStart, LineToUse);
              if NewLinkStartPos <> 0 then
                begin
                  NewLinkEndPos := pos(NewLinkEnd, LineToUse);
                  if NewLinkEndPos > NewLinkStartPos then
                    begin
                      TempIdFilm := TextBetween(LineToUse, NewLinkStart, NewLinkEnd) + NewLinkEnd;
                      TempIdFilm := 'https:' + TextBetween(TempIdFilm, '"http:', NewLinkEnd);
                      TempTitle := '[https] ';
                    end
                end;

              LengthFilm := length(StartChar) + length(TempIdFilm);
              Delete(UsePage, 1, LengthFilm);

              StartChar := 'title="';
              EndChar := '">';
              TempTitle := TempTitle + TextBetween(UsePage, Startchar, EndChar);
              LgthTitle := Length(TempTitle) + length(StartChar) + length(EndChar);
              TempTitle := FullTrim(TempTitle);
              LgthTitle := length(StartChar) + LgthTitle + length(EndChar);
              TempAuthor := Textbetween (UsePage, 'Un film di <b>', '</b>');
              TempAuthor := Textbetween (TempAuthor, '">', '</a>');
              TempYear   := Textbetween (UsePage, '<a href="http://www.mymovies.it/film/?anno=', '">');
              TempTitle  := TempTitle + ' (' + TempAuthor + ') ' + TempYear;
              PickTreeAdd(TempTitle, TempIdFilm);

              StartChar :=  'http://www.mymovies.it/dizionario/recensione.asp?id=';
              EndChar := '" title="';
              StartPos := pos(StartChar, UsePage);
             Delete(PageAll, 1, Positioncast - 1);
             UsePage := PageAll;
            end;
        until(Positioncast < 100);
        result := '';

// Controlla se ci sono altre pagine di risultati
        StartPos := Pos('Ricerca MYmovies', PageLoop);
        Delete(PageLoop, 1, StartPos - 1);
        StartChar := '<a href="?titolo=';
        EndChar := '">Pagina successiva';

        LineTxt := TextBetween(PageLoop, StartChar, EndChar);
        repeat
           if Length(LineTxt) > 1 then
              begin
              AddressNext := QueryBase + LineTxt;
              LineTxt := LineTxt + EndChar;
              end
          LineTxt := TextBetween(LineTxt, StartChar, EndChar);
        until length(LineTxt) < length(EndChar);
        SetField(fieldcomments, AddressNext);
        Pagestr  := GetPage(Addressnext);
        PageLoop := PageStr;
        StartChar := '<a title="Database MYmovies" href="http://www.mymovies.it/film/"><strong>Film</strong></a>';
        EndChar := '<a href="http://www.mymovies.it/prossimamente/">';
        UsePage := TextBetween(PageStr, StartChar, EndChar) + EndChar;
      until (LineNr < 1); // repeat
    end
end;

//
// ---------------------------------
// ANALYZE FIRST SEARCH RESULT PAGE:
// IN:  page Url (string)
// OUT: none
// ---------------------------------
procedure AnalyzeSearchPage(Url: string);
var
  NumRisultati : string;
begin
  PageStr := getpage(Url);
//  SetField(fieldURL, URL);
  NumRisultati := Textbetween(PageStr, cStartNumRis, cEndNumRis);

  if ( (NumRisultati = '0') or (NumRisultati = '')) then
    begin
      ShowMessage('Title not found / Nessun film trovato.');
      SetField(fieldURL, MovieUrl);
      exit;
    end

  if NumRisultati = '1' then
    MovieUrl := PopulatePickTree(true)
  else
    begin
      PopulatePickTree(false);
      if not PickTreeExec(MovieUrl) then // ..select one
        exit;
    end;

  AnalyzeMoviePage;
end;

begin
  if (CheckVersion(4,2,1)) and (StringUtils1_Version > 5) then
    begin
      TranslatedStr := StringReplace(GetField(fieldTranslatedTitle), '.', ' ');
      MovieName := StringReplace(GetField(fieldOriginalTitle), '.', ' ');
      if (TranslatedStr <> '') then
        MovieName := TranslatedStr;

      if(Input('MyMovies.It', 'Enter the title of the movie', MovieName)) then
        begin
          MovieUrl := QueryBase + StringReplace(MovieName,' ','+') + UrlRicerca;
          AnalyzeSearchPage(MovieUrl);
        end;
    end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 4.2.1) and StringUtils1 version 6');
end.
fulvio53s03
Posts: 764
Joined: 2007-04-28 05:46:43
Location: Italy

Re: [UPD ITA] MyMovies.it - prerelease

Post by fulvio53s03 »

@mrobama. grazie. Sono molto felice di trovare qualcun altro (italiano) che apprezza questo utilissimo programma.
Scevro da inutili orpelli, semplice, essenziale e completo è il meglio nell'area della catalogazione.
Io lo uso per tutte le mie collezioni di film, musica, libri, software.
:) ;) :grinking:
mrobama
Posts: 85
Joined: 2009-04-03 12:34:34

Re: [UPD ITA] MyMovies.it - prerelease

Post by mrobama »

sì, piace molto anche a me :grinking:
antp
Site Admin
Posts: 9651
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Re: [UPD ITA] MyMovies.it - prerelease

Post by antp »

Some progress on the SSL/TLS problem, a new version to test:
viewtopic.php?f=6&t=6847
otreux
Posts: 194
Joined: 2008-10-22 16:55:46

Re: [UPD ITA] MyMovies.it - prerelease

Post by otreux »

IOHandler error

A me da il solito errore :( Praticamente non mi va più nessuno scritp, non capisco cosa stia succedendo :(
Post Reply