Page 1 of 1

[UPD ITA] Wikipedia.it

Posted: 2020-12-15 06:33:08
by fulvio53s03
Miglioramenti nella ricerca, estrazione degli attori anche nei casi particolari, estrazione degli episodi dalle stagioni dei telefilm.
Improvements in research, extraction of actors even in special cases, extraction of episodes from the seasons of the series.

:grinking:

Code: Select all

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

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

[Infos]
Authors=Fulvio53s03
Title=wikipedia.it
Description=import film e serie TV
Site=http://www.wikipedia.it
Language=IT
Version=1.1
Requires=4.2.1
Comments=puo' essere usato per ricerca informazioni (mode=0) oppure per estrarle direttamente da wikipedia.it (mode=1) inserendo l'URL direttamente. |Inserire il termine (Stagione....) nel titolo tradotto riduce i risultati della ricerca (serie TV)
License=*  The source code of the script can be used in   |*  another program only if full credits to Fulvio53s03*
GetInfo=1
RequiresMovies=1

[Options]
Mode=0|0|0=normal mode|1=batch mode (url)

[Parameters]

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

program wiki;
uses
   StringUtils7552;
   
const
   UrlBase = 'https://it.wikipedia.org';                  // base url
   debug_search = false;                                   // debug mode on/off su ricerca files
   debug_film_o_serie = false;                            // debug mode on/off su estrazione dati film_o_serie
   folder = 'f:\prova\';                                  // directory where to save files
   apice  = #39;
   null  = #09;
   CRLFspace = CRLF + ' ';
   tappo_fine_ricerca = '<div class="g">Tappodifinericercadaticongoogle</div><div class="g">';    //2016-02-10
   MaxItems = 50;
var
   found, film_o_serieok, estrai_episodi_ok: boolean;
   i, BatchMode, giri, anno_int: Integer;
   ctr_loop, position_li, posizione: integer;
   
   titolo_tradotto, Title_album: String;
   riga_li, init_li, end_li: String;
   Titolo_ricerca, strtmp: String;
   nuovo_anno, mese_anno, solo_anno, data_rilascio, label, stagione: String;
   Address, Save_address, Credit_address, Readdress, Pagestr, save_pagestr: String;
   film_o_serieName, trama_skeda: String;
   file_name, campo_URL: String;
   tipo_ricerca, pag_ricerca, save_value, ordine_lista, Salva_autore: String;
   value, episodi, lista_episodi, riquadro: string;
   CharNormal, CharAbNormal: string;
   titolo_ticerca: string;
   titolo_e_autore, titolo, autore, durata, cover: String;
   intestazione: string;                            //per testata picktree
   pre_comments, save_comments, commento_episodi, commento_skeda, commenti: String;
   batchlog, Page: TstringList;
   save_pag, artist, initchar, endchar: string;
   init_wikinote, end_wikinote, wikinote: string;

//------------------------------------------------------------------------------
// list of film_o_series
//------------------------------------------------------------------------------
procedure GetList;   
begin
   PickTreeClear;                               // clear list
   found := false;
   titolo_ricerca := stringreplace(film_o_serieName, ' ', '+');

//ricerca esatta
// primo tipo di ricerca esatta
//FS2020-12-01   Address := 'https://it.wikipedia.org/w/index.php?search=' + Titolo_ricerca;
//FS2020-12-01   Address := Address + '+intitle%3A%22' + titolo_ticerca;
//FS2020-12-01   Address := Address + '%22&title=Speciale%3ARicerca&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22intitle%22%3A%22';
//FS2020-12-01   Address := Address + titolo_ticerca;
//FS2020-12-01   Address := Address + '%22%7D%7D&ns0=1';

//secondo tipo di ricerca esatta
   Address := 'https://it.wikipedia.org/w/index.php?search=' + Titolo_ricerca;
   Address := Address + '+intitle%3A"' + Titolo_ricerca;
   Address := Address + '"&title=Speciale:Ricerca&profile=advanced&fulltext=1&advancedSearch-current={"fields"%3A{"intitle"%3A"';
   Address := Address + Titolo_ricerca;
   Address := Address + '"}}&ns0=1';

// da browser
//   https://it.wikipedia.org/w/index.php?search=+intitle%3A%22%22&title=Speciale%3ARicerca&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22intitle%22%3A%22%22%7D%7D&ns0=1'
// costruito con script
//   https://it.wikipedia.org/w/index.php?search=una++pistola+per+ringo+intitle%3A%22una+pistola+per+ringo%22&title=Speciale:Ricerca&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22intitle%22%3A%22una+pistola+per+ringo%22%7D%7D&ns0=1
//   ctr_loop := 0;
   intestazione := 'Risultati ricerca esatta per: "';
   crea_lista;

   if not found then               //ricerca estesa
      begin
      Address := 'https://it.wikipedia.org/w/index.php?search=' + Titolo_ricerca;
      Address := Address + '&title=Speciale%3ARicerca&profile=advanced&fulltext=1&advancedSearch-current=%7B%7D&ns0=1';
//      ctr_loop := 0;
      intestazione := '"Risultati ricerca generica per: "';
      crea_lista;
      end
     
   if not found then
   begin
      LogMessage('Nessuna informazione per  "' + film_o_serieName + '"');
      exit;
   end;
  if PickTreeExec(Address) then
     begin
       film_o_serieName := Address;
       AnalyzeMoviePage;
     end
     else
       LogMessage('Nulla selezionato');
end;

procedure crea_lista;
var
length_pag_ricerca: integer;
save_riga_li: string;
cancella_li, titolo_li: string;

begin;
   ctr_loop := 0;
   Page.Text := GetPage(Address);
   pagestr := Page.Text;
   PageStr := UTF8Decode(PageStr);
   Save_address := Address;
   SetField(fieldURL, Address);
   HTMLdecode(Pagestr);
   if debug_search then
      DumpPage(folder+'wikiList.html', Pagestr);                // debug
   if Pos('find anything', Pagestr) <> 0 then
   begin
      LogMessage('Errore nella ricerca - nessun risultato per ' + file_name);
      Found := False;
      exit;
   end;
//<div class="searchresults mw-searchresults-has-iw">
//<p class='mw-search-pager-bottom'>
   init_li := '<div class="searchresults mw-searchresults-has-iw">';                        //2015-11-25
   end_li  := '<div class="mw-search-visualclear">';                           //2015-11-25
   pag_ricerca := TextBetween(Pagestr, init_li, end_li) + tappo_fine_ricerca + end_li;  //elenco titoli richiesti e tappo ricerca
   if debug_search then
      DumpPage(folder+'wikiricerca.html', pag_ricerca);                // debug
   position_li :=  pos(tappo_fine_ricerca, pag_ricerca);
   if  position_li = 1 then
      begin
      init_li := '<div class="searchresults">';
      end_li := '<p class=';                           //FS2020-12-13
      pag_ricerca := TextBetween(Pagestr, init_li, end_li) + tappo_fine_ricerca;  //elenco titoli richiesti e tappo ricerca
      end
   if debug_search then
      DumpPage(folder+'wikiricerca-1.html', pag_ricerca);                // debug

//   pulisci_wiki_collaterali;
// inizio pulizia wiki collaterali
   init_wikinote := '<div id="mw-interwiki-results">';
   end_wikinote  := '<div class="g">Tappodifinericercadaticongoogle';
   wikinote := textbetween(pag_ricerca, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote;
   pag_ricerca := stringreplace(Pag_ricerca, wikinote, '');
   if debug_search then
      DumpPage(folder+'wikiricerca_li.html', pag_ricerca);                // debug
// fine   pulizia wiki collaterali

   pulisci_search_match;                  //2020-11-28

   init_li := 'mw-search-result';                  //2020-11-19
   end_li  := '</li>';                                          //2020-11-19
   position_li := pos(init_li, pag_ricerca);

   while position_li > 0 do          //estraggo fino al tappo di fine ricerca
      begin
      riga_li := textbetween(pag_ricerca, init_li, end_li) + end_li;
      save_riga_li := riga_li;
      riga_li := '<div>' + textbetween(riga_li, '>', 'mw-search-result-data');

      cancella_li := textbetween(riga_li, '<span class="searchmatch"', '</a>') + '</a>';
      riga_li := stringreplace(riga_li, cancella_li, '');
      titolo_li := textbetween(riga_li, 'title="', '"');                //FS2020-11-27
//FS2020-11-27      riga_li := stringreplace(riga_li, titolo_li, '');     //descrizione molto estesa
      initchar := '<a href="';
      endchar  := '"';
//debug      Address  := 'xyz' + apice + '---------' + apice + 'xyz';   //per  visualizzare caratteri
      Address  := textBetween(riga_li, initchar, endchar);
      Address := UrlBase + Address;
//******************************* fin qui OK ****************************
      initchar := 'title="';
      endchar  := '"';
      Title_album  := textBetween(riga_li,initchar, endchar);              //titolo del link
      riga_li := stringReplace(riga_li, Title_album, '');
      HTMLRemoveTags(riga_li);
      Title_album := Title_album + ' - ' + copy(riga_li, 1, 80);
      found := True;
      ctr_loop := ctr_loop +  1;
      if ctr_loop = 1 then
         begin
         file_name := intestazione + film_o_seriename + '"';
         PickTreeAdd(file_name, '');
         end
      PickTreeAdd(Titolo_li, Address);                 //FS2020-11-27
      found := True;

      init_li := 'mw-search-result';                  //2020-11-19
//      init_li := '<li class=' + apice + 'mw-search-result' + apice + '>';                  //2020-11-19
      end_li  := '</li>';
      pag_ricerca := stringreplace(pag_ricerca, save_riga_li, '');                                           //2020-11-19
      length_pag_ricerca := length(pag_ricerca);
      position_li := pos(init_li, pag_ricerca);
      if length(riga_li) = 0 then               //FS2020-11-23
         position_li := 0;                      //FS2020-11-23
      end;
end;

// elimina risultati dei wiki collaterali (wikibooks, wiktionary ecc.)
procedure pulisci_wiki_collaterali;
begin
   init_wikinote := '<li class="iw-resultset"';
   end_wikinote  := '</li>';
   wikinote := textbetween(pag_ricerca, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pag_ricerca);
   while posizione > 0 do
       begin
       pag_ricerca := stringreplace(pag_ricerca, wikinote, '');
       wikinote := textbetween(pag_ricerca, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       pag_ricerca := stringreplace(pag_ricerca, wikinote, '');
       posizione :=  pos(init_wikinote, pag_ricerca);
       end                                                          //fine   pulizia  [......]
end;

// elimina risultati dei wiki collaterali (wikibooks, wiktionary ecc.)
procedure pulisci_search_match;
begin
   init_wikinote := '<span class="searchmatch">';
   end_wikinote  := '</span>';
   wikinote := textbetween(pag_ricerca, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pag_ricerca);
   while posizione > 0 do
       begin
       pag_ricerca := stringreplace(pag_ricerca, wikinote, '');
       wikinote := textbetween(pag_ricerca, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       pag_ricerca := stringreplace(pag_ricerca, wikinote, '');
       posizione :=  pos(init_wikinote, pag_ricerca);
       end                                                          //fine pulizia titolo ricercate
end;

//------------------------------------------------------------------------------
// ANALYZE Movie PAGE
//------------------------------------------------------------------------------
procedure AnalyzeMoviePage;
var
   Lenght, Pays: String;
   Autore, style, str_min, campo_note: String;
   minu, minuti, ore, lgth_comm, save_lgth_comm, i: integer;
   j: Real;
begin
   save_comments    := '';
   commento_episodi := '';
   commento_skeda   := '';
   estrai_episodi_ok := false;
   Address := film_o_serieName;                        //2019.10.19
   titolo_tradotto := '';
//FS2020-12-11   estrazione_scheda;
   if  pos('_stagione)', Address) > 0 then  		  //FS2020-12-11
       begin
        estrazione_episodi;			                  //FS2020-12-11
        estrazione_scheda;                        //FS2020-12-11 Address viene impostato da estrazione_episodi
       end
   else
       estrazione_scheda;                   			//FS2020-12-11
end;

//------------------------------------------------------------------------------
// ESTRAE LISTA EPISODI DA SCHEDA
//------------------------------------------------------------------------------
procedure estrazione_episodi;
var
   tab_episodi: string;
   save_description, anno: String;
begin
   Page.Text := GetPage(Address);
   pagestr := Page.Text;
   PageStr := UTF8Decode(PageStr);
   Save_address := Address;
   estrai_episodi_ok := true;
   SetField(fieldURL, Address);
   Address := textbetween(Pagestr, '<i>Voce principale:', 'title="');
   Address := textbetween(Address, '<a href="', '"');
   Address := UrlBase + Address;
   HTMLdecode(Pagestr);
   if debug_film_o_serie then
      DumpPage(folder+'pagina_episodi.html', Pagestr);                // debug
//*** titolo tradotto
   initchar := '<title>';                                 //fs2016-06-26
   endchar :=  '</title>';
   titolo_tradotto := textbetween(Pagestr, initchar, endchar);
   titolo_tradotto := stringreplace(titolo_tradotto, ' - Wikipedia', '');
   titolo_tradotto := stringreplace(titolo_tradotto, 'Episodi di', '');
   titolo_tradotto := fulltrim(titolo_tradotto);
   SetField(fieldtranslatedTitle, titolo_tradotto);

   tab_episodi := textbetween(pagestr, '<table class="wikitable">', '</tbody>');
   tab_episodi := stringreplace (tab_episodi, '<tr>', (CRLF + 'xyz'));
   tab_episodi := stringreplace (tab_episodi, CRLF, 'xyz');
   tab_episodi := stringreplace (tab_episodi, 'xyzxyz', CRLF);
   tab_episodi := stringreplace (tab_episodi, 'xyz', '  -  ');
   tab_episodi := stringreplace (tab_episodi, (CRLF +CRLF), CRLF);
   HTMLRemoveTags(tab_episodi);
   if debug_film_o_serie then
      DumpPage(folder+'tabella_episodi.html', tab_episodi);

   commento_episodi := ' n' + textafter(tab_episodi, ' n');
end;

//------------------------------------------------------------------------------
// ESTRAE INFORMAZIONI DA SCHEDA
//------------------------------------------------------------------------------
procedure estrazione_scheda;
var
   save_description, anno: String;
   cancel_img: string;
   init_comments, end_comments: string;
begin
   Page.Text := GetPage(Address);
   pagestr := Page.Text;
   save_pagestr := pagestr;             //FS2020-12-01
   if debug_film_o_serie  then
      DumpPage(folder+'pagestr_skeda.html', Pagestr);                         // debug_film_o_serie

// elimina_wikinote
   init_wikinote := '<span class="mw-editsection">';
   end_wikinote  := '</span></span>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //individua note wiki
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do                                                       //inizio loop pulizia note [......]
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //individua note wiki
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                                      //fine loop pulizia  [......]

// elimina_link interni wiki
   init_wikinote := '<sup id="cite_';
   end_wikinote  := '</sup>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //individua note wiki
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do                                                       //inizio loop pulizia note [......]
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //individua note wiki
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                                      //fine loop pulizia  [......]

// elimina_immagini destre interne al testo
   init_wikinote := '<div class="thumb tright">';
   end_wikinote  := '</div></div>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                          //fine   pulizia  [......]

// elimina_immagini sinistre interne al testo
   init_wikinote := '<div class="thumb tleft">';
   end_wikinote  := '</div></div>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                          //fine   pulizia  [......]

// elimina_citazioni interne al testo
   init_wikinote := '<table class="citazione-table">';
   end_wikinote  := '</table>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                          //fine   pulizia  [......]

// elimina_formattazioni interne al testo
   init_wikinote := '<style data-mw-deduplicate=';
   end_wikinote  := '</style>';
   wikinote := textbetween(pagestr, init_wikinote, end_wikinote);
   wikinote := init_wikinote + wikinote + end_wikinote;
   posizione :=  pos(init_wikinote, pagestr);
   while posizione > 0 do
       begin
       pagestr := stringreplace(pagestr, wikinote, '');
       wikinote := textbetween(pagestr, init_wikinote, end_wikinote);  //elimina note wiki da trama
       wikinote := init_wikinote + wikinote + end_wikinote;
       posizione :=  pos(init_wikinote, pagestr);
       end                                                          //fine   pulizia  [......]

   if not estrai_episodi_ok then
      SetField(fieldURL, Address);       //E' una serie: URL già impostato da estrazione_episodi
   Pagestr := UTF8decode(Pagestr);
   HTMLdecode(Pagestr);
   if debug_film_o_serie  then
      DumpPage(folder+'wikiPageDetail.html', Pagestr);                         // debug_film_o_serie

   if (BatchMode = 0)  and (tipo_ricerca = 'sk ep') then
      SetField(fieldURL, Address);
   campo_URL := getfield(fieldurl);

   SetField(fieldDate, DateToStr(Date));
   Normalizza_Page(pagestr);
   if debug_film_o_serie  then
      DumpPage(folder+'wikiPageDetailHTMLdecode.html', pagestr);               // debug_film_o_serie
//   Page := UTF8Decode(pagestr);                                              //fs2015-01-15
   film_o_serieok := True;
   Value := Pagestr;
//fs 2017.01.28   riquadro := textbetween(Value, '<div id="mw-content-text"', '</div>');
   riquadro := textbetween(Value, '<table class="sinottico"', '</table>');        //fs 2017.01.28
   if debug_film_o_serie  then
      DumpPage(folder+'wikiriquadro.html', riquadro);

//*** titolo tradotto
   if not estrai_episodi_ok then                //titolo tradotto già estratto da estrazione_episodi
     begin
     initchar := '<title>';                                 //fs2016-06-26
     endchar :=  '</title>';
     titolo_tradotto := textbetween(Value, initchar, endchar);
     titolo_tradotto := stringreplace(titolo_tradotto, ' - Wikipedia', '');
     titolo_tradotto := fulltrim(titolo_tradotto);
     titolo_tradotto := fulltrim(titolo_tradotto);
     SetField(fieldtranslatedTitle, titolo_tradotto);
     end;

//*** Descrizione (trama)
   label := textbetween(value, '<h2><span class="mw-headline" id="Trama">Trama</span>', '<h2>');
   cancel_img := textbetween(label, '<div class="thumb tleft">', '</div></div>');  //elimina immagine se presente
   label := stringreplace(label, cancel_img, '');
//   cancel_img := textbetween(label, init_wikinote, end_wikinote);  //elimina "modifica" note wiki" ripetute
//   label := stringreplace(label, cancel_img, '');
       
   HTMLRemoveTags(label);
   label := fulltrim(label);
   label := stringreplace(label, (CRLF + CRLF), '');
   trama_skeda := label;
   save_description := Label;

//*** commento (descrizione generale)
   init_comments := '<span class="mw-headline" id="Produzione">Produzione</span>';
   end_comments  := '<span class="mw-headline" id="Note">Note</span>';
   commento_skeda := textbetween(pagestr, init_comments, end_comments);
   if length(commento_skeda) = 0 then
      begin
      end_comments  := '<span class="mw-headline" id="Altri_progetti">Altri progetti</span>';
      commento_skeda := textbetween(pagestr, init_comments, end_comments);
      end;
      
   HTMLRemoveTags(commento_skeda);
   commento_skeda := fulltrim(commento_skeda);
   if estrai_episodi_ok then
      begin
      setfield(fielddescription, commento_episodi);
      setField(fieldcomments, trama_skeda);
      end
   else
      begin
      setfield(fielddescription, trama_skeda);
      setField(fieldcomments, commento_skeda);
      end;
      
//   *** dati estratti dal riquadro sinottico ***
//*** country
   initchar := '>Paese';      endchar :=  '</tr>';
   label := TextBetween(riquadro, initchar, endchar);
   HTMLRemoveTags(label);
   label := stringReplace(label, 'di produzione', '');
   label := stringReplace(label, 'Stati Uniti d''America', 'USA');
   label := fulltrim(label);
   SetField(fieldcountry, label);

   pagestr := save_pagestr;
   Findcover;

//*** Titolo Originale
   label := textbetween(riquadro, '>Titolo originale<', '</td>');
   initchar := '<td';           endchar :=  '</td>';
   label := initchar + textbetween(label, initchar, '</i>');
   label := FormatText(label);
   SetField(fieldoriginalTitle, label);

//*** genere
   initchar := '>Genere<';
   label := textbetween(riquadro, initchar, '</tr>');
   initchar := '<td';           endchar :=  '</td>';
   label := initchar + textbetween(label, initchar, endchar);
   HTMLRemoveTags(label);
   label    := AnsiMixedCase(AnsiLowerCase(label), ' ');
   SetField(fieldcategory, label);

//*** regia
   initchar := '>Regia</a>';     endchar :=  '</td>';
   label := TextBetween(riquadro, initchar, endchar);
   HTMLRemoveTags(label);
   label := FormatText(label);
   SetField(fieldDirector, label);

//*** personaggi e interpreti
   initchar := '<ul>';
   endchar :=  '</ul>';
   label := initchar + TextBetween(riquadro, initchar, endchar) + endchar;
   initchar := '<li>';
   label := initchar + TextBetween(riquadro, initchar, endchar) + endchar;
   HTMLRemoveTags(label);
   if  label = '' then
       estrai_attori;
   SetField(fieldactors, label);

//*** anno
   anno := textbetween (riquadro, '<th style="">Anno</th>', '</tr>');
   anno := stringReplace(anno, '– in produzione', ' ');
   HTMLRemoveTags(anno);
   anno := fulltrim(anno);
   if pos('-', anno) > 0 then      //serie in corso
      anno := textbefore(anno, '-', '');
   if anno = '' then                     //serie animazione
      begin
      anno := textbetween (riquadro, 'TV</th>', '</tr>');
      HTMLRemoveTags(anno);
      anno := fulltrim(anno);
      end;
   SetField(fieldyear, anno);
   anno:= getfield(fieldyear);
   if anno = '' then                     //serie animazione
      begin
      anno := textbetween (riquadro, '<span title="italiana">it.</span>', '</tr>');
      HTMLRemoveTags(anno);
      anno := fulltrim(anno);
      end;
   SetField(fieldyear, anno);

//*** produttore
   initchar := '>Casa di produzione<';    endchar:= '</tr>';
   label := textbetween(riquadro, initchar, endchar);
   label := '<' + stringReplace(label, '<br />', ', ');
   HTMLRemoveTags(label);                        //   label := stringReplace(label, ' - in produzione', '');
   SetField(fieldproducer, label);

//*** writer (ideatore della serie TV)  -  soggetto (film)
   initchar := '>Soggetto';                   //film
   label := textbetween(value, initchar, '</tr>');
//   label := textbetween(label, '<td>', '</td>');
   HTMLRemoveTags(label);
   SetField(fieldwriter, label);
   if label = '' then
      begin
      initchar := '<th>Ideatore</th>';           //serie
      label := textbetween(value, initchar, '</tr>');
//    label := textbetween(label, '<td>', '</td>');
      HTMLRemoveTags(label);
      SetField(fieldwriter, label);
   end;

//*** compositore
   initchar := '>Musiche';    endchar:= '</tr>';
   label := textbetween(riquadro, initchar, endchar);
   label := '<' + stringReplace(label, '<br />', ', ');
   HTMLRemoveTags(label);                        //   label := stringReplace(label, ' - in produzione', '');
   SetField(fieldcomposer, label);

end;

// attori assenti dal riquadro e presenti con icone in gallery box
Procedure estrai_attori;
var
   len_label: integer;
begin
  initchar := '<ul class="gallery mw-gallery-traditional"';
  endchar  := '</ul>';
  if debug_film_o_serie then
     DumpPage(folder+'actors_pagestr.html', pagestr);                // debug
  label := textbetween(pagestr, initchar, endchar);
  label := textafter(label, '">');
  if debug_film_o_serie then
     DumpPage(folder+'actors_box.html', label);                // debug
  HTMLRemoveTags(label);
  label := fulltrim(label);
  len_label := length(label);
  label := stringreplace(label, null,'');
  len_label := length(label);
  label := stringreplace(label, (CRLF + CRLF), CRLF);
  label := stringreplace(label, (CRLF + CRLF), CRLF);
  label := stringreplace(label, (CRLF + CRLF), CRLF);
  label := stringreplace(label, ' interpreta ', ' --> ');
  len_label := length(label);
  label := stringreplace(label, null,'');
  if debug_film_o_serie then
     DumpPage(folder+'actors_extr.html', label);                // debug

end;

Procedure Normalizza_page(Pagina: string);    // elimina i crlf, trasforma delimiters maiuscoli in minuscoli
begin
  pagina := RegExprSetReplace('<([^>]+)>', pagina, '<\L\1>', true);
  CharAbNormal := crlf;   CharNormal := ' ';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '<B';   CharNormal := '<b';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</B';  CharNormal := '</b';
  pagina := StringReplace(Value, CharAbNormal, CharNormal);
  CharAbNormal := '<FONT';  CharNormal := '<font';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</FONT';   CharNormal := '</font';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '<TR';   CharNormal := '<tr';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</TR';   CharNormal := '</tr';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '<TD';     CharNormal := '<td';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</TD';    CharNormal := '</td';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '<DIV';   CharNormal := '<div';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</DIV';   CharNormal := '</div';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '<Ol';    CharNormal := '<ol';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
  CharAbNormal := '</Ol';   CharNormal := '</ol';
  pagina := StringReplace(pagina, CharAbNormal, CharNormal);
//  >modifica wikitesto<
end;

//------------------------------------------------------------------------------
// set show warning (normal mode) or add to log (batch mode)
//------------------------------------------------------------------------------
procedure LogMessage(m: string);
begin
   if BatchMode > 0 then
      AddToLog('item '+GetField(fieldNumber)+': '+m)
   else
      ShowWarning(m);
end;

//------------------------------------------------------------------------------
// add a message in the batch log and save to disk
// (because I don't know when it's finished...)
//------------------------------------------------------------------------------
procedure AddToLog(m: string);
begin
//fs2016-12-31    batchlog.Add(m);
//fs2016-12-31    batchlog.SaveToFile(batchlogfic);
end;

//------------------------------------------------------------------------------
// process batch mode
//------------------------------------------------------------------------------
procedure wikiBatch;
var
   pos_url: integer;
begin
   film_o_serieName := GetField(fieldUrl);                      // if no url or another site then ignore
   pos_url := Pos(UrlBase, film_o_serieName);
   if pos_url = 0 then
      begin
      film_o_serieName := stringreplace(film_o_serieName, 'http://', 'https://');
      pos_url := Pos(UrlBase, film_o_serieName);
      end;
   if (film_o_serieName <> '') and (pos_url > 0) then
      AnalyzeMoviePage
   else
      LogMessage('indirizzo ingnorato ="'+film_o_serieName+'"');
end;   

//------------------------------------------------------------------------------
// process normal mode
//------------------------------------------------------------------------------
procedure wikiNorm;
begin
   file_name:= getField(fieldfilepath);
   if (GetField(fieldTranslatedTitle) <> '') then
      film_o_serieName := GetField(fieldTranslatedTitle)          // get film_o_serie name
   else
      film_o_serieName := GetField(fieldOriginalTitle);							//mrobama           
   if film_o_serieName = '' then
      film_o_serieName := file_name;
   repeat
      if not Input('cerca: ' + film_o_serieName, 'Scrivi il nome del film o della serie:'
          + crlf, film_o_serieName) or (film_o_serieName = '') then exit;
//      formato := getfield(FieldOriginalTitle);
      GetList;
   until film_o_serieok;
end;

procedure FindCover;
var
  pict_dim: Double;
  Page_cover: TStringList;
  trova_cover, cover_ok, url_img, new_url_img: string;
  pos_locandina, lgth_comm: integer;
  locandina_da: string;
begin                    // Picture
  Page_cover := TStringList.Create;
  url_img := '';
  new_url_img := '';
  cover_ok := 'no';
  pict_dim := 0;
  save_pagestr := pagestr;
  locandina_da := 'Locandina: ';

//AntonioGenna
  initchar := 'https://www.antoniogenna.net/';
  strtmp := TextBetween(Pagestr, initchar, '">');
  if length(strtmp) > 0   then
    begin
    strtmp := initchar + strtmp;
    pagestr := getpage(strtmp);
    if debug_film_o_serie then
       DumpPage(folder+'Antonio_Genna.html', Pagestr);                // debug
    pos_locandina := pos('alt="Il mondo dei doppiatori - Zona Cinema', pagestr);           //film
    if pos_locandina = 0 then
       pos_locandina := pos('alt="Il mondo dei doppiatori - Zona Telefilm"', pagestr);        //animazione
    if pos_locandina = 0 then
       pos_locandina := pos('alt="Il mondo dei doppiatori - Zona Animazione"', pagestr);        //animazione
    if pos_locandina > 0 then
       begin
       strtmp := stringreplace(strtmp, '.html', '.jpg');         //eventuali cambi html <---> htm
       strtmp := stringreplace(strtmp, '.htm', '.jpg');
       url_img := locandina_da + strtmp;
       GetPicture (strTmp);
       Pict_dim	 := GetPictureSize;
       if Pict_dim > 22000  then
          cover_ok := 'yes_AntonioGenna';
       end;
       pagestr := save_pagestr;
    end

//IMDB
  if cover_ok = 'no' then
    begin
    initchar := 'https://www.imdb.com/';
    strtmp := TextBetween(Pagestr, initchar, '">');
    if length(strtmp) > 0   then
      begin
      strtmp := initchar + strtmp;
      pagestr := getpage(strtmp);
      if debug_film_o_serie then
         DumpPage(folder+'IMDB.html', Pagestr);                // debug
      pos_locandina := pos('<div class="poster">', pagestr);   // cerco sulla pagina IMDB
      if pos_locandina > 0 then
         begin
         strtmp := TextBetween(pagestr, '<div class="poster">', '<img alt="');
         strtmp := TextBetween(strtmp, '<a href="/', '"');
         strtmp := initchar + strtmp;
         pagestr := getpage(strtmp);            //pagina della locandina grande
         strtmp := TextBetween(Pagestr, '<meta property="og:image" content="', '"/>');
         url_img := locandina_da + strtmp;
         GetPicture (strTmp);
         Pict_dim	 := GetPictureSize;
         if Pict_dim > 22000  then
            cover_ok := 'yes_IMDB';
         end;
       pagestr := save_pagestr;
    end;
  end

//*** cover       locandina da wikipedia  ------------------
  if cover_ok = 'no' then
    begin
    pagestr := save_pagestr;
    cover := 'https:' + TextBetween(riquadro, 'src="', '"');
//    if cover <> 'http:' then
    cover := StringReplace(cover, 'http:', 'https:');
    if length(cover) > length('https:') then
        begin
         GetPicture(cover);
         Pict_dim	 := GetPictureSize;
         if Pict_dim > 4000  then
           begin
           url_img := locandina_da + cover;
           cover_ok := 'yes_Wiki';
           end;
         end;
  end;

//*** cover       locandina da wikipedia per stagioni telefilm ------------------
  if cover_ok = 'no' then
    begin
    url_img := locandina_da + getfield(fieldUrl);
    pagestr := save_pagestr;
    cover := TextBetween(pagestr, 'meta property="og:image" content="', '"');
    if length(cover) > length('https:') then
       GetPicture(cover);
    Pict_dim	 := GetPictureSize;
    if Pict_dim > 4000  then
       begin
       url_img := locandina_da + cover;
       cover_ok := 'yes_Wiki_wiki';
       end;
  end;

//   cancel_img := '123456781234567812345678';                  //Prova
//   cancel_img := stringreplace(cancel_img, '1', '   ');       //tutte le ricorrenze sono modificate!

  if url_img <> '' then
     begin
     commenti := getfield(fieldcomments);
     if pos(locandina_da, commenti) > 0 then
        commenti := textbefore(commenti, (locandina_da + 'https://'), '');   // evito doppio indirizzo locandina nel caso di
                                                                             // aggiornamento informazioni
     lgth_comm := length(commenti);
     if commenti <> '' then
        commenti := pre_comments + CRLF + commenti + CRLF + url_img;
     if commenti = '' then
        commenti := pre_comments + CRLF + url_img;
     if pos(CRLF, commenti) = 1 then
        delete(commenti, 1, 1);
     commenti := fulltrim(stringreplace(commenti, (CRLF + CRLF), CRLF));
     commenti := fulltrim(stringreplace(commenti, (CRLF + CRLF), CRLF));
     setfield(fieldcomments, commenti);
     end
end;

//------------------------------------------------------------------------------
//  start here
//------------------------------------------------------------------------------                                             
begin
      if not CheckVersion(4,2,1) then
      begin
         ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 4.2.1)');
         exit;
      end;   
// get user's parms (used more than once)
      BatchMode := GetOption('Mode');
      Page := TStringList.Create;
// *********************************************************************
      if BatchMode = 1 then                                
          wikiBatch;
      if BatchMode = 0 then
          wikiNorm;

end.

Re: [UPD ITA] Wikipedia.it

Posted: 2020-12-16 06:46:43
by antp
Thanks