.
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.