COMICSBOX - Italia Comics info

New scripts, templates and translation files that allows to use Ant Movie Catalog to manage other things than movies
Post Reply
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

COMICSBOX - Italia Comics info

Post by fulvio53s03 »

Lo script consente di estrarre informazioni riguardanti molti informazioni su fumetti anche internazionali.
Poichè esso estrae da una lista che deve essere già presente nel D.B. Ant Movie Catalog, per un suo corretto utilizzo si deve:
- Eseguire preventivamente una ricerca su https://www.comicsbox.it/
- individuare l'estensione URL della serie interessata. es. ZAGOR da https://www.comicsbox.it/serie/ZAGOR
- creare una tabella .xls (1 riga per ogni fumetto da estrarre) 3 colonne per ogni riga:
- numero (necessario per l'estrazione informazioni)
- serie (necessario per l'estrazione informazioni)
- titolo originale (necessario per il nome della serie).
- salvare la tabella come .csv per importarla con AMC

Tutti i contributi migliorativi sono bene accetti!

The script allows you to extract information about many comics, including international comics.
Since it extracts from a list that must already be present in the D.B. Ant Movie Catalog, for its correct use you must:
- Perform a search in advance on https://www.comicsbox.it/
- identify the URL extension of the interested series. eg. ZAGOR from https://www.comicsbox.it/serie/ZAGOR
- create an .xls table (1 row for each comic to be extracted) 3 columns for each row:
- number (required for information extraction)
- series (required for information extraction)
- original title (needed for series name)
- - save the table as .csv to import it using AMC

All contributions for improvement are welcome!

Code: Select all

U P D A T E D
Last edited by fulvio53s03 on 2023-06-06 14:26:11, edited 1 time in total.
MrObama2022
Posts: 58
Joined: 2022-02-02 00:03:55

Re: COMICSBOX - Italia Comics info

Post by MrObama2022 »

Give it a try and test, test, test ;)

CHANGELOG
Major update:
- decode fixed, now all decode to Windows 1252 is inside a single line in the code. Remove no more needed procedure

Note:
- be sure to download the latest version (8 final) of ItalianSharedPas from here
- ItalianSharedPas requires latest beta 4.2.3.2 to works fine. Your ifs does not use 4.2.3.2 new functions so it can work also with older version but I think it should ask for latest beta

Code: Select all

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

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

[Infos]
Authors=Italian_AMC
Title=COMICSBOX
Description=estrae fumetti
Site=
Language=IT
Version=1.0
Requires=4.2.1
Comments=puo' essere usato per estrarre direttamente da Comicsbox.
License=*  The source code of the script can be used in   |*  another program only if full credits to Italian_AMC*
GetInfo=1
RequiresMovies=1

[Options]

[Parameters]

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

program COMICSBOX;
uses
  ItalianSharedPas;   // Script needs external unit StringUtils1.pas in scripts folder !
const
  UrlSite = 'https://www.comicsbox.it/';
  debug_search = false;                                   	// debug mode on/off su ricerca dischi
  folder = 'f:\prova\';                                   		// directory where to save files
  apice  = #39;
var
  ComicURL, MediaType: string;   // Define some script variables
//  UrlSite: String;
  Page, Pagestr, pag_ricerca, value : string;
  low_serie: string;
  InitChar, EndChar, CharAbNormal, CharNormal : String;
  posizione, lunghezza:   integer;
  StartDelimiter, endDelimiter, startdelete, enddelete : string;
  LgthPage, lungo : integer;
  CharCut, StartPos, EndPos: integer;

  film_o_serieok: boolean;
  file_name, film_o_serieName: string;

function ConvertToASCII(AText: string): string;                   //2023-04-29
begin
  Result := AText;
  if GetOption('ConvertToASCII') = 1 then
    Result := Cp1252ToASCII(AText);
end;

Procedure NormalizePage;
begin
  CharAbNormal := 'Soggetto e Sceneggiatura:';
  CharNormal := 'Soggetto e sceneggiatura:';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<B';
  CharNormal := '<b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</B';
  CharNormal := '</b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<DIV ';
  CharNormal := '<div ';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</DIV>';
  CharNormal := '</div>';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
end;

// ***** Analyze Item's Page *****
procedure AnalyzePageAlbo(URL: String);
var
  Titolo, chars_to_delete, Descr_Img: string;
  Attori, Autori, sinossi, copertina, desc_edizione, sorgente: string;
  save_Attori, save_Autori, save_Sinossi: string;
  Serie, editore, periodo: string;
  Pict_dim: double;
  Pict_width, Pict_height: Integer;
  
  distanzia_episodi, pulisci_episodi : string;
  numero_episodi, length_all_episodi, length_value_puliti: integer;
begin
  film_o_serieok := True;
  Page := GetPage(URL);   				// Fetch source code from website and store inside "Page"
  if debug_search then
     DumpPage(folder+'1 ComicsboxOriginal_Page.text', Page);  
  
  // UTF16 to UT8, then SharedUnknownToCP1252Decode magic ...
  Page := SharedUnknownToCP1252Decode(UTF8Decode(StringReplace(Page, (chr(195) + chr(162) + chr(194) + chr(128) + chr(194)), (chr(226) + chr(128)))));   
    
  pagestr := page;

  if pos('<meta name="title" content="Errore 404 - Pagina non trovata"', pagestr) > 1 then
     begin
       ShowMessage('fumetto non esistente - verificare serie e numero ' + CRLF + film_o_seriename + CRLF + URL);
       exit;
     end
  NormalizePage;
  if debug_search  then
     DumpPage(folder+'2 ComicsboxPageDetail.text', Pagestr);                         // debug_film_o_serie// Data di aggiornamento
  SetField(fieldDate, DateToStr(Date));
  SetField(fieldURL, URL);

  length_all_episodi := length(Pagestr);
  distanzia_episodi :=('<div class="linea_alboita">');
  numero_episodi := length(distanzia_episodi);
  pulisci_episodi := stringreplace(Pagestr, distanzia_episodi, '');
  length_value_puliti := length (pagestr) - length(pulisci_episodi);
  numero_episodi := length_value_puliti div numero_episodi;                  //div è la divisione aritmetica!
  value := '';

  startDelimiter := '<div style="width:100%" class="alboita_right">';
  endDelimiter := '<div class="linea_alboita">';                            //questo dice quanti racconti/episodi ci sono nel volume
  value := TextBetween(Pagestr, startdelimiter, enddelimiter);
  value := removespaces(value,True);                                        // cancella spazi tra ><
  value := StringReplace(value, '<span class="nome">', (CRLF + '<span class="nome">'));
  HTMLDecode(value);                            // Clean HTML codes (if some exist)

// ********************* inizio estrazione dati **************************
  startDelimiter := '<div class="albinpd">';
  endDelimiter := '</div>';
  sorgente := Textbetween(pagestr, startDelimiter, endDelimiter);
  startDelimiter := '<span id="editore_issue">';
  endDelimiter := '</span>';
  editore := Textbetween(sorgente, startDelimiter, endDelimiter);
  startDelimiter := '<span style="border:0" id="data_issue">';
  endDelimiter := '</span>';
  periodo := Textbetween(sorgente, startDelimiter, endDelimiter);
  sorgente := periodo + ' - ' + editore;
//  HTMLRemoveTags(sorgente);
//  HTMLDecode(sorgente);
  sorgente := fulltrim(sorgente);
  setfield(fieldsource, sorgente);

  startDelimiter := '<span id="subtitolo_issue">';
  endDelimiter := '</span>';
  titolo := Textbetween(pagestr, startDelimiter, endDelimiter);

  titolo := stringreplace(titolo, ' |', '');
  chars_to_delete := startDelimiter + titolo + endDelimiter;
  HTMLRemoveTags(Titolo);
  value := Titolo;
  Titolo := fulltrim(value);
  setfield(fieldtranslatedtitle, Titolo);
  value := stringreplace(value, chars_to_delete, '');

//estrazione  autori (per campo fieldactors)
  startDelimiter := '<div id="maintext_albo">';                                       //autori
  endDelimiter := '<div class="sinossi">';
  attori := startDelimiter + Textbetween(pagestr, startDelimiter, endDelimiter);
  if debug_search  then
     DumpPage(folder+'2A ComicsboxPageDetail.text', attori);
//  save_attori := attori;
  startDelimiter := '<a href="';                                       //autori
  endDelimiter := '</div>';
  attori := startDelimiter + Textbetween(attori, startDelimiter, endDelimiter) + enddelimiter;
  attori := stringreplace(attori, ' <br />', CRLF);
  HTMLRemoveTags(attori);
  attori := fulltrim(attori);
  startDelimiter := '<div id="col-left-albo">';
  endDelimiter := '<div id="altre_versioni">';
  value := startDelimiter + textbetween(Pagestr, startdelimiter, enddelimiter);
  if debug_search  then
     DumpPage(folder+'2b ComicsboxPageDetail.text', value);                         // debug_film_o_serie// Data di aggiornamento
  startDelimiter := '<div id="cover_autore">';
  endDelimiter := '</div>';
  autori := textBetween(value, startdelimiter, enddelimiter);
  save_autori := autori;
  HTMLRemoveTags(save_autori);
  attori := attori + CRLF + save_autori;
  startDelimiter := '<div id="note_ita" class="nonemobile">';       //altre edizioni e descrizione
  endDelimiter := '<div id="altre_versioni">';
  desc_edizione := textBetween(pagestr, startdelimiter, enddelimiter);
  HTMLRemoveTags(desc_edizione);
  save_attori := attori;                              //2022/05/08
  attori := attori + CRLF + desc_edizione;
  value := attori;
  attori := value;
  attori := fulltrim(attori);
  setfield(fieldactors, attori);

// estrazione copertina
  startDelimiter := 'container_cover_cb';
  endDelimiter := '</a>';
  copertina := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<img src="/';
  endDelimiter := '"';
  copertina := textbetween(copertina, startdelimiter, enddelimiter);
  copertina := urlsite + copertina;
  GetPicture(copertina);

// estrazione sinossi (trama)
  startDelimiter := '<div class="sinossi">';
  endDelimiter := '</div>';
  sinossi := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<span style';
  endDelimiter := '">';
  chars_to_delete := startdelimiter + textbetween(sinossi, startdelimiter, enddelimiter) + enddelimiter;
  sinossi := StringReplace(sinossi, chars_to_delete, '');
  sinossi := stringreplace(sinossi, (CRLF + ' '), CRLF);
  HTMLdecode(sinossi);
  chars_to_delete := '</span>';
  sinossi := StringReplace(sinossi, chars_to_delete, '');
  value := sinossi;                   //fs2023-05-03
  sinossi := value;                   //fs2023-05-03
  save_sinossi := sinossi;
  setfield(fielddescription, sinossi);

// ********************* inizio creazione commenti estesi ***********************
  startDelimiter := '<div id="maintext_albo">';                 //storie contenute
  endDelimiter := '<!-- Commenti -->';
  value := startDelimiter + TextBetween(Pagestr, startdelimiter, enddelimiter);
//<div style="width:100%" class="alboita_right"><div class="alboita_dettagli">Dampyr<br />
  startDelimiter := '<div style="width:100%" class="alboita_right">';                 //storie contenute
  endDelimiter := '<br />';
//  save_serie := startDelimiter + TextBetween(value, startdelimiter, enddelimiter);
  serie := startDelimiter + TextBetween(value, startdelimiter, enddelimiter);

//  Value := stringReplace(Value, save_serie, '');
  Value := stringReplace(Value, serie, '');
  Value := stringReplace(Value, save_attori, '');
  Value := stringReplace(Value, save_autori, '');
  if debug_search  then
     DumpPage(folder+'3 Comicsboxstorie.text', value);              // debug_storie contenute
  lunghezza := length(value);
  value := stringreplace(value, '<div class="linea_alboita">', ('<div class="linea_alboita">'+ CRLF));
  value := stringreplace(value, '<div class="sinossi">', ('<div class="sinossi">' + CRLF));
  value := stringreplace(value, 'parte<br />', ('parte<br />' + CRLF));
  value := stringreplace(value, '</div><br>', ('</div><br>' + CRLF));
  value := stringreplace(value, '<br />', ('<br />' + CRLF));
  lunghezza := length(value);
  posizione := pos('pagine', value);
  lunghezza := length(value);
  value := stringreplace(value, ' pagine</div>', (' pagine</div>' + CRLF));
  lunghezza := length(value);
  HTMLRemoveTags(value);
  HTMLdecode(value);
// ultime sostituzioni caratteri accentati  //
//  value := fulltrim(value);
// fine ultime sostituzioni caratteri accentati

  value := stringreplace(value, (CRLF + CRLF), CRLF);
  value := stringreplace(value, (CRLF + CRLF), CRLF);
  value := stringreplace(value, (CRLF + ' '), CRLF);
  value := stringreplace(value, save_sinossi, '');
  value := fulltrim(value);
  setfield(fieldcomments, value);
// ********************* fine   creazione commenti estesi ***********************
end;
// *********************** End of procedure "AnalyzePageAlbo" *****************************************


//------------------------------------------------------------------------------
// process batch mode                        da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxBatch;
var
   Address, album, albumtest, genre, num_albo, old_num: String;

begin

//debug: force for testing
//setField(fieldMediaType, 'Zagor'); // Tex - Zagor
//setField(fieldMedia, '573'); // 700 - 573

   file_name:= getField(fieldMediaType);
   num_albo := getfield(fieldMedia);
   old_num := num_albo;
   film_o_seriename := getfield(fieldMediaType);
   if length(old_num) = 1
      then old_num := '0' +old_num;
   if length(old_num) = 2
      then old_num := '0' + old_num;
   film_o_seriename := film_o_seriename + '_' + old_num;
   if num_albo <> old_num
      then setfield(fieldmedia, old_num);

   low_serie := getField(fieldOriginalTitle);
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = ''
      then
        begin
        low_serie := getfield(fieldMediatype);
        ricrea_titolo_otiginale;
        end
   Address := 'https://www.comicsbox.it/' + 'albo/' + film_o_serieName;
   if Address <> '' then
      AnalyzePageAlbo(Address)
   else
      ShowMessage('fumetto non esistente - serie e numero');
   Address := UrlEncode(Address);
   Page := GetPage(Address);
//   Save_address := Address;
   SetField(fieldURL, Address);
   if debug_search then
      DumpPage(folder+'4 Original_Page.text', Page);                // debug
   HTMLdecode(Page);
   if debug_search then
      DumpPage(folder+'5 Translated_Page.text', Page);                // debug

end;

procedure ricrea_titolo_otiginale;
begin
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = 'storwestce'
      then setfield(fieldoriginaltitle, 'Storia del West');
   if low_serie = 'texwiller'
      then setfield(fieldoriginaltitle, 'Tex Willer (le origini)');
   if low_serie = 'orfani6_b'
      then setfield(fieldoriginaltitle, 'Orfani - Sam');
   if low_serie = 'colrodeo'
      then setfield(fieldoriginaltitle, 'Collana Rodeo');          //MAXIMARMY
   if low_serie = 'maximarmy'
      then setfield(fieldoriginaltitle, 'Martin Mystére Maxi');          //MAXIMARMY
end;

//------------------------------------------------------------------------------
// process normal mode                          da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxNorm;
begin
   file_name:= getField(fieldMediaType);
   film_o_seriename := getfield(fieldMediaType) + '_' + getfield(fieldMedia);
   repeat GetList;
      until film_o_serieok;

end;
//------------------------------------------------------------------------------

// ***** Beginning of the script *****
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;
      ComicsboxBatch;
end.
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

Re: COMICSBOX - Italia Comics info

Post by fulvio53s03 »

MrObama2022 wrote: 2023-05-10 11:21:23 Give it a try and test, test, test ;)
CHANGELOG
Major update:
- decode fixed, now all decode to Windows 1252 is inside a single line in the code. Remove no more needed procedure
Note:
- be sure to download the latest version (8 final) of ItalianSharedPas from here
- ItalianSharedPas requires latest beta 4.2.3.2 to works fine. Your ifs does not use 4.2.3.2 new functions so it can work also with older version but I think it should ask for latest beta
Tested with some special characters (those i found still present in records) and everything looks to be OK.
A question: your new "magic" statement:
UTF8Decode(StringReplace(Page, (chr(195) + chr(162) + chr(194) + chr(128) + chr(194)), (chr(226) + chr(128))))
could be directly introduced in function SharedUnknownToCP1252Decode?
:up:

EDIT:
errors in https://www.comicsbox.it/albo/ALMPAURA_005 Ã?
:??:
MrObama2022
Posts: 58
Joined: 2022-02-02 00:03:55

Re: COMICSBOX - Italia Comics info

Post by MrObama2022 »

Ok, I'll check this error asap
MrObama2022
Posts: 58
Joined: 2022-02-02 00:03:55

Re: COMICSBOX - Italia Comics info

Post by MrObama2022 »

Ok, I added a UTF16ToCP1252 function in your ifs to properly handle the conversion.
I tested with the 3 given examples and it worked.
Let me know if you find other critical cases.

:up:

Code: Select all

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

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

[Infos]
Authors=Italian_AMC
Title=COMICSBOX
Description=estrae fumetti
Site=
Language=IT
Version=1.0
Requires=4.2.1
Comments=puo' essere usato per estrarre direttamente da Comicsbox.
License=*  The source code of the script can be used in   |*  another program only if full credits to Italian_AMC*
GetInfo=1
RequiresMovies=1

[Options]

[Parameters]

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

program COMICSBOX;
uses
  ItalianSharedPas;   // Script needs external unit StringUtils1.pas in scripts folder !
const
  UrlSite = 'https://www.comicsbox.it/';
  debug_search = false;                                   	// debug mode on/off su ricerca dischi
  folder = 'f:\prova\';                                   		// directory where to save files
  apice  = #39;
var
  ComicURL, MediaType: string;   // Define some script variables
//  UrlSite: String;
  Page, Pagestr, pag_ricerca, value : string;
  low_serie: string;
  InitChar, EndChar, CharAbNormal, CharNormal : String;
  posizione, lunghezza:   integer;
  StartDelimiter, endDelimiter, startdelete, enddelete : string;
  LgthPage, lungo : integer;
  CharCut, StartPos, EndPos: integer;

  film_o_serieok: boolean;
  file_name, film_o_serieName: string;

function ConvertToASCII(AText: string): string;                   //2023-04-29
begin
  Result := AText;
  if GetOption('ConvertToASCII') = 1 then
    Result := Cp1252ToASCII(AText);
end;

Procedure NormalizePage;
begin
  CharAbNormal := 'Soggetto e Sceneggiatura:';
  CharNormal := 'Soggetto e sceneggiatura:';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<B';
  CharNormal := '<b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</B';
  CharNormal := '</b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<DIV ';
  CharNormal := '<div ';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</DIV>';
  CharNormal := '</div>';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
end;

// ***** Analyze Item's Page *****
procedure AnalyzePageAlbo(URL: String);
var
  Titolo, chars_to_delete, Descr_Img: string;
  Attori, Autori, sinossi, copertina, desc_edizione, sorgente: string;
  save_Attori, save_Autori, save_Sinossi: string;
  Serie, editore, periodo: string;
  Pict_dim: double;
  Pict_width, Pict_height: Integer;
  
  distanzia_episodi, pulisci_episodi : string;
  numero_episodi, length_all_episodi, length_value_puliti: integer;
begin
  film_o_serieok := True;
  Page := GetPage(URL);   				// Fetch source code from website and store inside "Page"
  if debug_search then
     DumpPage(folder+'1 ComicsboxOriginal_Page.text', Page);  
  
  Page := UTF16ToCP1252(Page);    
  pagestr := page;

  if pos('<meta name="title" content="Errore 404 - Pagina non trovata"', pagestr) > 1 then
     begin
       ShowMessage('fumetto non esistente - verificare serie e numero ' + CRLF + film_o_seriename + CRLF + URL);
       exit;
     end
  NormalizePage;
  if debug_search  then
     DumpPage(folder+'2 ComicsboxPageDetail.text', Pagestr);                         // debug_film_o_serie// Data di aggiornamento
  SetField(fieldDate, DateToStr(Date));
  SetField(fieldURL, URL);

  length_all_episodi := length(Pagestr);
  distanzia_episodi :=('<div class="linea_alboita">');
  numero_episodi := length(distanzia_episodi);
  pulisci_episodi := stringreplace(Pagestr, distanzia_episodi, '');
  length_value_puliti := length (pagestr) - length(pulisci_episodi);
  numero_episodi := length_value_puliti div numero_episodi;                  //div è la divisione aritmetica!
  value := '';

  startDelimiter := '<div style="width:100%" class="alboita_right">';
  endDelimiter := '<div class="linea_alboita">';                            //questo dice quanti racconti/episodi ci sono nel volume
  value := TextBetween(Pagestr, startdelimiter, enddelimiter);
  value := removespaces(value,True);                                        // cancella spazi tra ><
  value := StringReplace(value, '<span class="nome">', (CRLF + '<span class="nome">'));
  HTMLDecode(value);                            // Clean HTML codes (if some exist)

// ********************* inizio estrazione dati **************************
  startDelimiter := '<div class="albinpd">';
  endDelimiter := '</div>';
  sorgente := Textbetween(pagestr, startDelimiter, endDelimiter);
  startDelimiter := '<span id="editore_issue">';
  endDelimiter := '</span>';
  editore := Textbetween(sorgente, startDelimiter, endDelimiter);
  startDelimiter := '<span style="border:0" id="data_issue">';
  endDelimiter := '</span>';
  periodo := Textbetween(sorgente, startDelimiter, endDelimiter);
  sorgente := periodo + ' - ' + editore;
//  HTMLRemoveTags(sorgente);
//  HTMLDecode(sorgente);
  sorgente := fulltrim(sorgente);
  setfield(fieldsource, sorgente);

  startDelimiter := '<span id="subtitolo_issue">';
  endDelimiter := '</span>';
  titolo := Textbetween(pagestr, startDelimiter, endDelimiter);

  titolo := stringreplace(titolo, ' |', '');
  chars_to_delete := startDelimiter + titolo + endDelimiter;
  HTMLRemoveTags(Titolo);
  value := Titolo;
  Titolo := fulltrim(value);
  setfield(fieldtranslatedtitle, Titolo);
  value := stringreplace(value, chars_to_delete, '');

//estrazione  autori (per campo fieldactors)
  startDelimiter := '<div id="maintext_albo">';                                       //autori
  endDelimiter := '<div class="sinossi">';
  attori := startDelimiter + Textbetween(pagestr, startDelimiter, endDelimiter);
  if debug_search  then
     DumpPage(folder+'2A ComicsboxPageDetail.text', attori);
//  save_attori := attori;
  startDelimiter := '<a href="';                                       //autori
  endDelimiter := '</div>';
  attori := startDelimiter + Textbetween(attori, startDelimiter, endDelimiter) + enddelimiter;
  attori := stringreplace(attori, ' <br />', CRLF);
  HTMLRemoveTags(attori);
  attori := fulltrim(attori);
  startDelimiter := '<div id="col-left-albo">';
  endDelimiter := '<div id="altre_versioni">';
  value := startDelimiter + textbetween(Pagestr, startdelimiter, enddelimiter);
  if debug_search  then
     DumpPage(folder+'2b ComicsboxPageDetail.text', value);                         // debug_film_o_serie// Data di aggiornamento
  startDelimiter := '<div id="cover_autore">';
  endDelimiter := '</div>';
  autori := textBetween(value, startdelimiter, enddelimiter);
  save_autori := autori;
  HTMLRemoveTags(save_autori);
  attori := attori + CRLF + save_autori;
  startDelimiter := '<div id="note_ita" class="nonemobile">';       //altre edizioni e descrizione
  endDelimiter := '<div id="altre_versioni">';
  desc_edizione := textBetween(pagestr, startdelimiter, enddelimiter);
  HTMLRemoveTags(desc_edizione);
  save_attori := attori;                              //2022/05/08
  attori := attori + CRLF + desc_edizione;
  value := attori;
  attori := value;
  attori := fulltrim(attori);
  setfield(fieldactors, attori);

// estrazione copertina
  startDelimiter := 'container_cover_cb';
  endDelimiter := '</a>';
  copertina := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<img src="/';
  endDelimiter := '"';
  copertina := textbetween(copertina, startdelimiter, enddelimiter);
  copertina := urlsite + copertina;
  GetPicture(copertina);

// estrazione sinossi (trama)
  startDelimiter := '<div class="sinossi">';
  endDelimiter := '</div>';
  sinossi := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<span style';
  endDelimiter := '">';
  chars_to_delete := startdelimiter + textbetween(sinossi, startdelimiter, enddelimiter) + enddelimiter;
  sinossi := StringReplace(sinossi, chars_to_delete, '');
  sinossi := stringreplace(sinossi, (CRLF + ' '), CRLF);
  HTMLdecode(sinossi);
  chars_to_delete := '</span>';
  sinossi := StringReplace(sinossi, chars_to_delete, '');
  value := sinossi;                   //fs2023-05-03
  sinossi := value;                   //fs2023-05-03
  save_sinossi := sinossi;
  setfield(fielddescription, sinossi);

// ********************* inizio creazione commenti estesi ***********************
  startDelimiter := '<div id="maintext_albo">';                 //storie contenute
  endDelimiter := '<!-- Commenti -->';
  value := startDelimiter + TextBetween(Pagestr, startdelimiter, enddelimiter);
//<div style="width:100%" class="alboita_right"><div class="alboita_dettagli">Dampyr<br />
  startDelimiter := '<div style="width:100%" class="alboita_right">';                 //storie contenute
  endDelimiter := '<br />';
//  save_serie := startDelimiter + TextBetween(value, startdelimiter, enddelimiter);
  serie := startDelimiter + TextBetween(value, startdelimiter, enddelimiter);

//  Value := stringReplace(Value, save_serie, '');
  Value := stringReplace(Value, serie, '');
  Value := stringReplace(Value, save_attori, '');
  Value := stringReplace(Value, save_autori, '');
  if debug_search  then
     DumpPage(folder+'3 Comicsboxstorie.text', value);              // debug_storie contenute
  lunghezza := length(value);
  value := stringreplace(value, '<div class="linea_alboita">', ('<div class="linea_alboita">'+ CRLF));
  value := stringreplace(value, '<div class="sinossi">', ('<div class="sinossi">' + CRLF));
  value := stringreplace(value, 'parte<br />', ('parte<br />' + CRLF));
  value := stringreplace(value, '</div><br>', ('</div><br>' + CRLF));
  value := stringreplace(value, '<br />', ('<br />' + CRLF));
  lunghezza := length(value);
  posizione := pos('pagine', value);
  lunghezza := length(value);
  value := stringreplace(value, ' pagine</div>', (' pagine</div>' + CRLF));
  lunghezza := length(value);
  HTMLRemoveTags(value);
  HTMLdecode(value);
// ultime sostituzioni caratteri accentati  //
//  value := fulltrim(value);
// fine ultime sostituzioni caratteri accentati

  value := stringreplace(value, (CRLF + CRLF), CRLF);
  value := stringreplace(value, (CRLF + CRLF), CRLF);
  value := stringreplace(value, (CRLF + ' '), CRLF);
  value := stringreplace(value, save_sinossi, '');
  value := fulltrim(value);
  setfield(fieldcomments, value);
// ********************* fine   creazione commenti estesi ***********************
end;
// *********************** End of procedure "AnalyzePageAlbo" *****************************************


function UTF16ToCP1252(str: string):string;
begin
  str := StringReplace(str, (chr(195) + chr(162) + chr(194) + chr(128) + chr(194)), (chr(226) + chr(128)));
  str := StringReplace(str, (chr(226) + chr(128) + chr(128)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(129)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(130)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(131)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(132)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(133)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(134)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(135)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(136)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(137)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(138)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(144)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(145)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(146)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(147)), '–');
  str := StringReplace(str, (chr(226) + chr(128) + chr(148)), '—');
  str := StringReplace(str, (chr(226) + chr(128) + chr(149)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(150)), '|');
  str := StringReplace(str, (chr(226) + chr(128) + chr(151)), '=');
  str := StringReplace(str, (chr(226) + chr(128) + chr(152)), '‘');
  str := StringReplace(str, (chr(226) + chr(128) + chr(153)), '’');
  str := StringReplace(str, (chr(226) + chr(128) + chr(154)), '‚');
  str := StringReplace(str, (chr(226) + chr(128) + chr(155)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(156)), '“');
  str := StringReplace(str, (chr(226) + chr(128) + chr(157)), '”');
  str := StringReplace(str, (chr(226) + chr(128) + chr(158)), '„');
  str := StringReplace(str, (chr(226) + chr(128) + chr(159)), '"');
  str := StringReplace(str, (chr(226) + chr(128) + chr(160)), '†');
  str := StringReplace(str, (chr(226) + chr(128) + chr(161)), '‡');
  str := StringReplace(str, (chr(226) + chr(128) + chr(162)), '•');
  str := StringReplace(str, (chr(226) + chr(128) + chr(163)), '>');
  str := StringReplace(str, (chr(226) + chr(128) + chr(164)), '.');
  str := StringReplace(str, (chr(226) + chr(128) + chr(165)), '..');
  str := StringReplace(str, (chr(226) + chr(128) + chr(166)), '...');
  str := StringReplace(str, (chr(226) + chr(128) + chr(167)), '·');
  str := StringReplace(str, (chr(226) + chr(128) + chr(175)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(176)), '‰');
  str := StringReplace(str, (chr(226) + chr(128) + chr(177)), '‰');
  str := StringReplace(str, (chr(226) + chr(128) + chr(178)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(179)), '''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(180)), '''''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(181)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(182)), '''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(183)), '''''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(184)), '^');
  str := StringReplace(str, (chr(226) + chr(128) + chr(185)), '‹');
  str := StringReplace(str, (chr(226) + chr(128) + chr(186)), '›');
  str := StringReplace(str, (chr(226) + chr(128) + chr(187)), 'x');
  str := StringReplace(str, (chr(226) + chr(128) + chr(188)), '!!');
  str := StringReplace(str, (chr(226) + chr(128) + chr(189)), '!?');
  str := StringReplace(str, (chr(226) + chr(128) + chr(190)), '-');
  result := SharedUnknownToCP1252Decode(str);     
end;


//------------------------------------------------------------------------------
// process batch mode                        da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxBatch;
var
   Address, album, albumtest, genre, num_albo, old_num: String;

begin

//debug: force for testing
//setField(fieldMediaType, 'Zagor'); // Tex - Zagor - ALMPAURA
//setField(fieldMedia, '573'); // 700 - 573 - 005

   file_name:= getField(fieldMediaType);
   num_albo := getfield(fieldMedia);
   old_num := num_albo;
   film_o_seriename := getfield(fieldMediaType);
   if length(old_num) = 1
      then old_num := '0' +old_num;
   if length(old_num) = 2
      then old_num := '0' + old_num;
   film_o_seriename := film_o_seriename + '_' + old_num;
   if num_albo <> old_num
      then setfield(fieldmedia, old_num);

   low_serie := getField(fieldOriginalTitle);
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = ''
      then
        begin
        low_serie := getfield(fieldMediatype);
        ricrea_titolo_otiginale;
        end
   Address := 'https://www.comicsbox.it/' + 'albo/' + film_o_serieName;
   if Address <> '' then
      AnalyzePageAlbo(Address)
   else
      ShowMessage('fumetto non esistente - serie e numero');
   Address := UrlEncode(Address);
   Page := GetPage(Address);
//   Save_address := Address;
   SetField(fieldURL, Address);
   if debug_search then
      DumpPage(folder+'4 Original_Page.text', Page);                // debug
   HTMLdecode(Page);
   if debug_search then
      DumpPage(folder+'5 Translated_Page.text', Page);                // debug

end;

procedure ricrea_titolo_otiginale;
begin
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = 'storwestce'
      then setfield(fieldoriginaltitle, 'Storia del West');
   if low_serie = 'texwiller'
      then setfield(fieldoriginaltitle, 'Tex Willer (le origini)');
   if low_serie = 'orfani6_b'
      then setfield(fieldoriginaltitle, 'Orfani - Sam');
   if low_serie = 'colrodeo'
      then setfield(fieldoriginaltitle, 'Collana Rodeo');          //MAXIMARMY
   if low_serie = 'maximarmy'
      then setfield(fieldoriginaltitle, 'Martin Mystére Maxi');          //MAXIMARMY
end;

//------------------------------------------------------------------------------
// process normal mode                          da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxNorm;
begin
   file_name:= getField(fieldMediaType);
   film_o_seriename := getfield(fieldMediaType) + '_' + getfield(fieldMedia);
   repeat GetList;
      until film_o_serieok;

end;
//------------------------------------------------------------------------------

// ***** Beginning of the script *****
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;
      ComicsboxBatch;
end.
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

Re: COMICSBOX - Italia Comics info

Post by fulvio53s03 »

MrObama2022 wrote: 2023-05-11 20:05:26 Ok, I added a UTF16ToCP1252 function in your ifs to properly handle the conversion.
........
La funzione UTF16ToCP1252 sembra essere esaustiva ma ho trovato un carattere di controllo che vorrei eliminare ma non riesco a decifrare: FFFE 0900
https://ibb.co/7tYz2jW
Come posso indicarlo nel mio script?
oppure (anche meglio): dove trovo una tabella di conversione così da poter fare da solo?
grazie.

The UTF16ToCP1252 function seems to be exhaustive but I found a control character that I would like to get rid of but can't decrypt: FFFE 0900
https://ibb.co/7tYz2jW
How can I indicate this in my script?
or (even better): where do I find a conversion table so I can do it myself?
Thank you
MrObama2022
Posts: 58
Joined: 2022-02-02 00:03:55

Re: COMICSBOX - Italia Comics info

Post by MrObama2022 »

Fulvio paste here the url with untranslated character. I'll write here my personal guide to build translation functions.
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

Re: COMICSBOX - Italia Comics info

Post by fulvio53s03 »

Thank you!
https://www.comicsbox.it/albo/DYDGMAG_007.

last version of the script:

Code: Select all

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

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

[Infos]
Authors=Italian_AMC
Title=COMICSBOX
Description=estrae fumetti
Site=
Language=IT
Version=1.0
Requires=4.2.1
Comments=puo' essere usato per estrarre direttamente da Comicsbox.
License=*  The source code of the script can be used in   |*  another program only if full credits to Italian_AMC*
GetInfo=1
RequiresMovies=1

[Options]

[Parameters]

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

program COMICSBOX;
uses
  ItalianSharedPas;   // Script needs external unit StringUtils1.pas in scripts folder !
const
  UrlSite = 'https://www.comicsbox.it/';
  debug_search = false;                                   	// debug mode on/off su ricerca dischi
  folder = 'f:\prova\';                                   		// directory where to save files
  apice  = #39;
  CRLF1 = 'xxx yyy zzz';
var
  ComicURL, MediaType: string;   // Define some script variables
//  UrlSite: String;
  tappo_fine_ricerca: string;
  Page, Pagestr, save_page, pag_ricerca, value : string;
  serie, low_serie: string;
  save_attori, save_autori, save_sinossi: string;
  InitChar, EndChar, CharAbNormal, CharNormal : String;
  posizione, lunghezza:   integer;
  charCut, StartDelimiter, endDelimiter, startdelete, enddelete : string;
  LgthPage, length_all_episodi: integer;

  StartPos, EndPos: integer;

  distanzia_episodi, pulisci_episodi : string;
  numero_episodi, length_value_puliti: integer;

  film_o_serieok: boolean;
  file_name, film_o_serieName: string;

Procedure NormalizePage;
begin
  CharAbNormal := 'Soggetto e Sceneggiatura:';
  CharNormal := 'Soggetto e sceneggiatura:';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<B';
  CharNormal := '<b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</B';
  CharNormal := '</b';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '<DIV ';
  CharNormal := '<div ';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
  CharAbNormal := '</DIV>';
  CharNormal := '</div>';
  Pagestr := StringReplace(Pagestr, CharAbNormal, CharNormal);
end;

// ***** Analyze Item's Page *****
procedure AnalyzePageAlbo(URL: String);
var
  Titolo, chars_to_delete, Descr_Img: string;
  Attori, Autori, sinossi, copertina, desc_edizione, sorgente: string;
  editore, periodo: string;

begin
  film_o_serieok := True;
  Page := GetPage(URL);   				// Fetch source code from website and store inside "Page"
  if debug_search then
     DumpPage(folder+'1 ComicsboxOriginal_Page.text', Page);  
  
  Page := UTF16ToCP1252(Page);
  startdelimiter := '<div class="linea_alboita"></div>';                         //2023-05-22
	enddelimiter   := '<div style="width:100%" class="alboita_right">';            //2023-05-22
  charcut := TextBetween(Page, startdelimiter, enddelimiter);                    //2023-05-22
  charcut := startdelimiter + charcut + enddelimiter;                            //2023-05-22
  page := StringReplace(page, charcut, (' ' + CRLF + 'zzzmxptlkzzz'));
  pagestr := page;
  save_page := page;
  if pos('<meta name="title" content="Errore 404 - Pagina non trovata"', pagestr) > 1 then
     begin
       ShowMessage('fumetto non esistente - verificare serie e numero ' + CRLF + film_o_seriename + CRLF + URL);
       exit;
     end
  NormalizePage;
  if debug_search  then
     DumpPage(folder+'2 ComicsboxPageDetail.text', Pagestr);                         // debug_film_o_serie// Data di aggiornamento
  SetField(fieldDate, DateToStr(Date));
  SetField(fieldURL, URL);

  startDelimiter := '<div style="width:100%" class="alboita_right">';
  endDelimiter := '<div style="width:100%" class="alboita_right">';                            //questo dice quanti racconti/episodi ci sono nel volume
  value := TextBetween(Pagestr, startdelimiter, enddelimiter);
  value := removespaces(value,True);                                        // cancella spazi tra ><
  value := StringReplace(value, '<span class="nome">', (CRLF + '<span class="nome">'));
  HTMLDecode(value);                            // Clean HTML codes (if some exist)

// ********************* inizio estrazione dati **************************
  startDelimiter := '<div class="albinpd">';
  endDelimiter := '</div>';
  sorgente := Textbetween(pagestr, startDelimiter, endDelimiter);
  startDelimiter := '<span id="editore_issue">';
  endDelimiter := '</span>';
  editore := Textbetween(sorgente, startDelimiter, endDelimiter);
  startDelimiter := '<span style="border:0" id="data_issue">';
  endDelimiter := '</span>';
  periodo := Textbetween(sorgente, startDelimiter, endDelimiter);
  sorgente := periodo + ' - ' + editore;
//  HTMLRemoveTags(sorgente);
//  HTMLDecode(sorgente);
  sorgente := fulltrim(sorgente);
  setfield(fieldsource, sorgente);

  startDelimiter := '<span id="subtitolo_issue">';
  endDelimiter := '</span>';
  titolo := Textbetween(pagestr, startDelimiter, endDelimiter);

  titolo := stringreplace(titolo, ' |', '');
  chars_to_delete := startDelimiter + titolo + endDelimiter;
  HTMLRemoveTags(Titolo);
  value := Titolo;
  Titolo := fulltrim(value);
  setfield(fieldtranslatedtitle, Titolo);
  value := stringreplace(value, chars_to_delete, '');

//estrazione  autori (per campo fieldactors)
  startDelimiter := '<div id="maintext_albo">';                                       //autori
  endDelimiter := '<div class="sinossi">';
  attori := startDelimiter + Textbetween(pagestr, startDelimiter, endDelimiter);
  if debug_search  then
     DumpPage(folder+'2A ComicsboxPageDetail.text', attori);
//  save_attori := attori;
  startDelimiter := '<a href="';                                       //autori
  endDelimiter := '</div>';
  attori := startDelimiter + Textbetween(attori, startDelimiter, endDelimiter) + enddelimiter;
  attori := stringreplace(attori, ' <br />', CRLF);
  HTMLRemoveTags(attori);
  attori := fulltrim(attori);
  startDelimiter := '<div id="col-left-albo">';
  endDelimiter := '<div id="altre_versioni">';
  value := startDelimiter + textbetween(Pagestr, startdelimiter, enddelimiter);
  if debug_search  then
     DumpPage(folder+'2b ComicsboxPageDetail.text', value);                         // debug_film_o_serie// Data di aggiornamento
  startDelimiter := '<div id="cover_autore">';
  endDelimiter := '</div>';
  autori := textBetween(value, startdelimiter, enddelimiter);
  save_autori := autori;
  HTMLRemoveTags(save_autori);
  attori := attori + CRLF + save_autori;
  startDelimiter := '<div id="note_ita" class="nonemobile">';       //altre edizioni e descrizione
  endDelimiter := '<div id="altre_versioni">';
  desc_edizione := textBetween(pagestr, startdelimiter, enddelimiter);
  HTMLRemoveTags(desc_edizione);
  save_attori := attori;                              //2022/05/08
  attori := attori + CRLF + desc_edizione;
  value := attori;
  attori := value;
  attori := fulltrim(attori);
  setfield(fieldactors, attori);

// estrazione copertina
  startDelimiter := 'container_cover_cb';
  endDelimiter := '</a>';
  copertina := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<img src="/';
  endDelimiter := '"';
  copertina := textbetween(copertina, startdelimiter, enddelimiter);
  copertina := urlsite + copertina;
  GetPicture(copertina);

// estrazione sinossi (trama)
  startDelimiter := '<div class="sinossi">';
  endDelimiter := '</div>';
  sinossi := textbetween(Pagestr, startdelimiter, enddelimiter);
  startDelimiter := '<span style';
  endDelimiter := '">';
  chars_to_delete := startdelimiter + textbetween(sinossi, startdelimiter, enddelimiter) + enddelimiter;
  sinossi := StringReplace(sinossi, chars_to_delete, '');
  sinossi := stringreplace(sinossi, (CRLF + ' '), CRLF);
  HTMLdecode(sinossi);
  chars_to_delete := '</span>';
  sinossi := StringReplace(sinossi, '<div>', '');
  sinossi := StringReplace(sinossi, chars_to_delete, '');
//  value := sinossi;                   //fs2023-05-03
//  sinossi := value;                   //fs2023-05-03
  save_sinossi := sinossi;
  setfield(fielddescription, sinossi);

// ********************* inizio creazione commenti estesi ***********************
  estrai_commenti(value);
  if debug_search then
     DumpPage(folder+ '+++ fieldcomments.html', value);               // debug
  value := stringreplace(value, 'zzzmxptlkzzz', '');                  //2022-05-22
  setfield(fieldcomments, value);
// ********************* fine   creazione commenti estesi ***********************
end;

function estrai_commenti(str: string): string; 					//************* estrai commenti **************
var
  sub_episodio, pulisci_episodio, salta_riga: string;               //estrazione dato per singolo episodio contenuto
  episodi: string;                    //campo fieldsize
  episodi_completi: string;           //accumulo dati per fielddescription
  debug_giri, lgth_value: integer;
  lgth_pulisci_episodio: integer;
begin
  length_all_episodi := length(Pagestr);
  distanzia_episodi :=('<div style="width:100%" class="alboita_right">');
  numero_episodi := length(distanzia_episodi);
  pulisci_episodi := stringreplace(Pagestr, distanzia_episodi, '');
  length_value_puliti := length (pagestr) - length(pulisci_episodi);
  numero_episodi := length_value_puliti div numero_episodi;               		//per sapere quanti episodi contenuti.
  if numero_episodi = 1 then
      episodi := IntToStr(numero_episodi) + ' storia'
  else begin
      episodi := IntToStr(numero_episodi) + ' storie'
  end;
  SetField(fieldSize, episodi);                                               //numero episodi contenuti

  value := '';
  lgth_value := 0;
  lgth_pulisci_episodio := 0;
  initchar := '<div id="maintext_albo">';
  endchar := '<!-- Commenti -->';
  tappo_fine_ricerca := '<div class="alboita_dettagli">';
  value := FullTrim(TextBetween(Pagestr, initchar, endchar));        //tutti gli episodi contenuti nell'albo
  value := value + tappo_fine_ricerca;
  lgth_value := length(value);
  if debug_search then
      DumpPage(folder+ '$$$ episodi.html', value);                // debug
//tutti gli episodi + tappo fine ricerca

  debug_giri := 0;
  initchar := '<div class="alboita_dettagli">';
  endchar  := '<div class="alboita_dettagli">';

  episodi_completi := '';
  sub_episodio := TextBetween(value, initchar, endchar);
  if debug_search then
     DumpPage(folder+ '$$$ episodio 1.html', sub_episodio);       // debug
  pulisci_episodio := initchar + sub_episodio;
  lgth_value := length(value);
  value := StringReplace(value, pulisci_episodio, '');                //il primo è già estratto
  lgth_value := length(value);
  if debug_search then
     DumpPage(folder+ '$$$ episodi 2 e seguito.html', value);               // debug

// ****************** qui  estrarre e cumulare i dati
  while sub_episodio <> '' do
  begin
    debug_giri := debug_giri + 1;
//  trattamento del sub episodio
//    pulisci_episodio :=  tappo_fine_ricerca + sub_episodio;
//    pulisci_episodio := sub_episodio;
    lgth_pulisci_episodio := length(pulisci_episodio);
    
// riformattazione degli'espisodio da mostrare ***************
    sub_episodio := fulltrim(sub_episodio);
    sub_episodio := stringReplace(sub_episodio, '<br /><a href="/autore/', (CRLF + '<br /><a href="/autore/'));         //2023-05-20 AUTORI
    sub_episodio := stringReplace(sub_episodio, '<em>protagonisti:</em>', (CRLF + '<em>protagonisti:</em>'));
    sub_episodio := stringReplace(sub_episodio, '<div class="sinossi">', (CRLF + '<div class="sinossi">'));
    sub_episodio := stringReplace(sub_episodio, '<div class="pages">', ('<div class="pages">' + CRLF));
    sub_episodio := stringReplace(sub_episodio, (CRLF + '<div>'), '<div>');
    sub_episodio := stringReplace(sub_episodio, '<em>Ristampa:</em>', (CRLF + '<em>Ristampa:</em>'));
//nuovo
//    salta_riga   := textbetween(sub_episodio, '</div>', '<div style="width:100%"');
//    sub_episodio := stringReplace(sub_episodio, salta_riga, '');
//fine nuovo

    if  debug_giri > 1 then
        sub_episodio := stringReplace(sub_episodio, '<br /><span class="titolo_storia">',
                     (CRLF + '<br /><span class="titolo_storia">'));        //impone riga vuota per episodi successivi al 1
    HTMLRemoveTags(sub_episodio);
//  fine riformattazione **************************************

    episodi_completi := episodi_completi + sub_episodio;
//  proseguo la ricerca di altri sub episodi
    sub_episodio := TextBetween(value, initchar, endchar);
    pulisci_episodio := sub_episodio;
    value := StringReplace(value, pulisci_episodio, '');    //2023-05-20
    lgth_value := length(value);

    if debug_search then
      DumpPage(folder+ '$$$ episodi 3 e seguito.html', sub_episodio);                // debug
  end;
//  ****************** fine estrarre e cumulare i dati

// ********************* fine   creazione commenti estesi ***********************
  episodi_completi := stringReplace(episodi_completi, (CRLF + CRLF), CRLF);
  value := fulltrim(episodi_completi);
end;

function UTF16ToCP1252(str: string):string;
begin
  str := StringReplace(str, (chr(195) + chr(162) + chr(194) + chr(128) + chr(194)), (chr(226) + chr(128)));
  str := StringReplace(str, (chr(226) + chr(128) + chr(128)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(129)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(130)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(131)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(132)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(133)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(134)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(135)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(136)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(137)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(138)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(144)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(145)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(146)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(147)), '–');
  str := StringReplace(str, (chr(226) + chr(128) + chr(148)), '—');
  str := StringReplace(str, (chr(226) + chr(128) + chr(149)), '-');
  str := StringReplace(str, (chr(226) + chr(128) + chr(150)), '|');
  str := StringReplace(str, (chr(226) + chr(128) + chr(151)), '=');
  str := StringReplace(str, (chr(226) + chr(128) + chr(152)), '‘');
  str := StringReplace(str, (chr(226) + chr(128) + chr(153)), '’');
  str := StringReplace(str, (chr(226) + chr(128) + chr(154)), '‚');
  str := StringReplace(str, (chr(226) + chr(128) + chr(155)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(156)), '“');
  str := StringReplace(str, (chr(226) + chr(128) + chr(157)), '”');
  str := StringReplace(str, (chr(226) + chr(128) + chr(158)), '„');
  str := StringReplace(str, (chr(226) + chr(128) + chr(159)), '"');
  str := StringReplace(str, (chr(226) + chr(128) + chr(160)), '†');
  str := StringReplace(str, (chr(226) + chr(128) + chr(161)), '‡');
  str := StringReplace(str, (chr(226) + chr(128) + chr(162)), '•');
  str := StringReplace(str, (chr(226) + chr(128) + chr(163)), '>');
  str := StringReplace(str, (chr(226) + chr(128) + chr(164)), '.');
  str := StringReplace(str, (chr(226) + chr(128) + chr(165)), '..');
  str := StringReplace(str, (chr(226) + chr(128) + chr(166)), '...');
  str := StringReplace(str, (chr(226) + chr(128) + chr(167)), '·');
  str := StringReplace(str, (chr(226) + chr(128) + chr(175)), ' ');
  str := StringReplace(str, (chr(226) + chr(128) + chr(176)), '‰');
  str := StringReplace(str, (chr(226) + chr(128) + chr(177)), '‰');
  str := StringReplace(str, (chr(226) + chr(128) + chr(178)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(179)), '''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(180)), '''''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(181)), '''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(182)), '''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(183)), '''''''');
  str := StringReplace(str, (chr(226) + chr(128) + chr(184)), '^');
  str := StringReplace(str, (chr(226) + chr(128) + chr(185)), '‹');
  str := StringReplace(str, (chr(226) + chr(128) + chr(186)), '›');
  str := StringReplace(str, (chr(226) + chr(128) + chr(187)), 'x');
  str := StringReplace(str, (chr(226) + chr(128) + chr(188)), '!!');
  str := StringReplace(str, (chr(226) + chr(128) + chr(189)), '!?');
  str := StringReplace(str, (chr(226) + chr(128) + chr(190)), '-');
  result := SharedUnknownToCP1252Decode(str);     
end;


//------------------------------------------------------------------------------
// process batch mode                        da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxBatch;
var
   Address, album, albumtest, genre, num_albo, old_num: String;

begin

//debug: force for testing
//setField(fieldMediaType, 'Zagor'); // Tex - Zagor - ALMPAURA
//setField(fieldMedia, '573'); // 700 - 573 - 005

   file_name:= getField(fieldMediaType);
   num_albo := getfield(fieldMedia);
   old_num := num_albo;
   film_o_seriename := getfield(fieldMediaType);
   if length(old_num) = 1
      then old_num := '0' +old_num;
   if length(old_num) = 2
      then old_num := '0' + old_num;
   film_o_seriename := film_o_seriename + '_' + old_num;
   if num_albo <> old_num
      then setfield(fieldmedia, old_num);

   low_serie := getField(fieldOriginalTitle);
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = ''
      then
        begin
        low_serie := getfield(fieldMediatype);
        ricrea_titolo_otiginale;
        end
   Address := 'https://www.comicsbox.it/' + 'albo/' + film_o_serieName;
   if Address <> '' then
      AnalyzePageAlbo(Address)
   else
      ShowMessage('fumetto non esistente - serie e numero');
   Address := UrlEncode(Address);
   Page := GetPage(Address);
//   Save_address := Address;
   SetField(fieldURL, Address);
   if debug_search then
      DumpPage(folder+'4 Original_Page.text', Page);                // debug
   HTMLdecode(Page);
   if debug_search then
      DumpPage(folder+'5 Translated_Page.text', Page);                // debug

end;

procedure ricrea_titolo_otiginale;
begin
   low_serie := AnsiLowerCase(low_serie);
   if low_serie = 'storwestce'
      then setfield(fieldoriginaltitle, 'Storia del West');
   if low_serie = 'texwiller'
      then setfield(fieldoriginaltitle, 'Tex Willer (le origini)');
   if low_serie = 'orfani6_b'
      then setfield(fieldoriginaltitle, 'Orfani - Sam');
   if low_serie = 'colrodeo'
      then setfield(fieldoriginaltitle, 'Collana Rodeo');          //MAXIMARMY
   if low_serie = 'maximarmy'
      then setfield(fieldoriginaltitle, 'Martin Mystére Maxi');          //MAXIMARMY
end;

//------------------------------------------------------------------------------
// process normal mode                          da sergiobonelli.it
//------------------------------------------------------------------------------
procedure ComicsboxNorm;
begin
   file_name:= getField(fieldMediaType);
   film_o_seriename := getfield(fieldMediaType) + '_' + getfield(fieldMedia);
   repeat GetList;
      until film_o_serieok;

end;
//------------------------------------------------------------------------------

// ***** Beginning of the script *****
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;
      ComicsboxBatch;
end.
MrObama2022
Posts: 58
Joined: 2022-02-02 00:03:55

Re: COMICSBOX - Italia Comics info

Post by MrObama2022 »

I can't get the hex character you see in your example :(

Here is how I create my conversion function.
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

Re: COMICSBOX - Italia Comics info

Post by fulvio53s03 »

MrObama2022 wrote: 2023-05-23 18:37:29 I can't get the hex character you see in your example :(

Here is how I create my conversion function.
..maybe it comes from a "magic" statement by myself...
I'll take a look to yor suggested funcrion.
Thanks. :grinking: :clapping: :innocent:
fulvio53s03
Posts: 745
Joined: 2007-04-28 05:46:43
Location: Italy

Re: COMICSBOX - Italia Comics info

Post by fulvio53s03 »

AGGIORNATO!
UPDATED at viewtopic.php?t=39865
;)
Post Reply