Migliorata l'importazione #4

Merged
Mrk merged 2 commits from mrk/Import Upgrade AGit into master 2026-01-01 14:05:03 +01:00
8 changed files with 607 additions and 37 deletions

No files matched your search

+12
View File
@@ -119,6 +119,12 @@ namespace A69WD {
public virtual string PathApplicationRoot { get { return applicationRootPath; } set { applicationRootPath = value; } }
private string applicationRootPath;
/// <summary>
/// Path della cartella con i file da importare.
/// </summary>
public virtual string PathImport { get { return pathImport; } set { pathImport = value; } }
private string pathImport;
/// <summary>
/// Nome del database usato dall'applicazione [DEPRECATE].
/// </summary>
@@ -150,6 +156,12 @@ namespace A69WD {
public virtual int nThread { get { return nthread; } set { nthread = value; } }
private int nthread;
/// <summary>
/// Numero di file massimo da gestire
/// </summary>
public virtual int MaxNumFile { get { return maxNumFile; } set { maxNumFile = value; } }
private int maxNumFile;
#endregion
+315
View File
@@ -3,6 +3,8 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.Remoting.Messaging;
using System.Security.Policy;
using System.Text;
@@ -733,6 +735,319 @@ namespace A69WD.Net {
#region Gestione Sito A69
private static HttpClient client = null;
private static readonly string nickname = @"Toky78";
private static readonly string password = @"p!fw05Q9Hc6j5";
private static bool autenticated = false;
/// <summary>
/// Indica se siamo autenticati al sito
/// </summary>
public bool Autenticated => autenticated;
/// <summary>
/// Esegue l'autenticazione al sito:
/// - Scarica la pagina di autenticazione
/// - analizza quanto scaricato per determinare i campi dinamici 'ts' e 'token'
/// - prepara la risposta al form di identificazione
/// - invia il POST di autenticazione
/// - analizza la risposta per verificare il corretto login
/// </summary>
public static async Task<bool> Authenticate() {
if (autenticated) {
// Autenticazione già fatta, posso proseguire senza altro fare
Logger.Warning("A69 - Autenticazione già effettuata.");
}
try {
#region 1) Prepare HTML Client
HttpClientHandler _handler = new HttpClientHandler {
CookieContainer = new CookieContainer(),
UseCookies = true,
AllowAutoRedirect = true,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
client = new HttpClient(_handler);
client.Timeout = TimeSpan.FromSeconds(60);
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
client.DefaultRequestHeaders.Referrer = new Uri(cLink_A69.LoginPageUrl);
#endregion
#region 2) GET pagina di login
Console.WriteLine("A69 - Richiedo la pagina di login...");
Logger.Information("A69 - Richiedo la pagina di login...");
string loginPageHtml = await client.GetStringAsync(cLink_A69.LoginPageUrl);
#endregion
#region 3) Parsing HTML per estrarre ts e token
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(loginPageHtml);
string ts = doc.DocumentNode
.SelectSingleNode("//input[@name='ts']")
?.GetAttributeValue("value", "");
string token = doc.DocumentNode
.SelectSingleNode("//input[@name='token']")
?.GetAttributeValue("value", "");
if (string.IsNullOrWhiteSpace(ts) || string.IsNullOrWhiteSpace(token)) {
Console.WriteLine("A69 - Impossibile estrarre 'ts' o 'token' dalla pagina di login.");
Logger.Information("A69 - Impossibile estrarre 'ts' o 'token' dalla pagina di login.");
return autenticated;
}
Console.WriteLine($"A69 - Parametri dinamici trovati: ts={ts}, token={token}");
Logger.Information($"A69 - Parametri dinamici trovati: ts={ts}, token={token}");
#endregion
#region 4) POST login con valori dinamici
var loginData = new FormUrlEncodedContent(new[] {
new KeyValuePair<string,string>("nick", nickname),
new KeyValuePair<string,string>("pwd", password),
new KeyValuePair<string,string>("ricordami","1"),
new KeyValuePair<string,string>("login", "Entra"),
new KeyValuePair<string,string>("ts", ts),
new KeyValuePair<string,string>("token", token)
});
Console.WriteLine("Invio credenziali di login...");
var loginResponse = await client.PostAsync(cLink_A69.LoginPostUrl, loginData);
if (!loginResponse.IsSuccessStatusCode) {
Console.WriteLine($"A69 - Login fallito. HTTP {(int)loginResponse.StatusCode} {loginResponse.ReasonPhrase}");
Logger.Information($"A69 - Login fallito. HTTP {(int)loginResponse.StatusCode} {loginResponse.ReasonPhrase}");
return autenticated;
}
#endregion
#region 5) Verifica autenticazione correttamente avvenuta
// Verifica semplice: sulla pagina di login effettuato, ricerco il nome dell'utente:
string loginResult = await loginResponse.Content.ReadAsStringAsync();
if (loginResult.Contains(nickname)) {
Console.WriteLine("A69 - Login effettuato con successo! Sessione autenticata attiva.");
Logger.Information("A69 - Login effettuato con successo! Sessione autenticata attiva.");
autenticated = true;
} else {
Console.WriteLine("A69 - Login non riuscito: il server ha restituito un messaggio di errore.");
Logger.Information("A69 - Login non riuscito: il server ha restituito un messaggio di errore.");
autenticated = false;
}
#endregion
} catch (Exception ex) {
Console.WriteLine($"Errore generale: {ex.Message}");
Logger.Information($"Errore generale: {ex.Message}");
}
return autenticated;
}
/// <summary>
/// Codice da eseguire per ciascun A69 link:
/// - scarico l'url indicato
/// - se richiesto lo salvo come file di testo
/// - analizzo il documento html ed estraggo tutti gli url ad altre pagine di link
/// - analizzo il documento html ed estraggo tutti gli url a racconti
/// - analizzo il documento html ed estraggo il testo del racconto
/// </summary>
/// <param name="lk"></param>
/// <returns></returns>
public async Task<List<iLink>> CrawlPageAsync() {
var newlinks = new List<iLink>();
if (!autenticated) {
// Sito non autenticato, non posso fare nulla
Logger.Warning("A69 - Sito non autenticato. Download non permessi.");
return newlinks;
}
try {
Console.WriteLine($"A69 - Scarico: {URL}");
HtmlDocument tdoc = null;
#region ToConfirm
if (Status == eLinkState.ToConfirm) {
// Eseguo la verifica se link da downloadare
Status = eLinkState.ToDownload;
}
#endregion
#region ToDownload
if (Status == eLinkState.ToDownload) {
Status = eLinkState.OnDownload;
}
#endregion
#region OnDownload
if (Status == eLinkState.OnDownload) {
// Scarico il file
var resp = await client.GetAsync(URL);
if (!resp.IsSuccessStatusCode) {
Console.WriteLine($"A69 - Errore HTTP {(int)resp.StatusCode} {resp.ReasonPhrase} per {URL}");
Status = eLinkState.Error;
//App.DB.LinkLog(lk);
return newlinks;
}
// Scarico la pagina
var thtml = await client.GetStringAsync(URL);
tdoc = new HtmlDocument();
tdoc.LoadHtml(thtml);
// Salvo il file downloadato
//System.IO.StreamWriter tsw = new System.IO.StreamWriter(lk.DstFilePath, false, Encoding.UTF8);
System.IO.StreamWriter tsw = new System.IO.StreamWriter(System.IO.Path.Combine(FilePath, FileName), false, Encoding.UTF8);
tsw.Write(thtml);
Status = eLinkState.ToAnalize;
}
#endregion
#region ToAnalize
{
if (Status == eLinkState.ToAnalize) {
List<string> tmpLk = new List<string>();
#region Estraggo gli url ad indici:
{
/*
* Gli url delle pagine di indice sono del tipo:
*
* <div id="pagination">
* <ul>
* <li class="prev"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=2">&lsaquo;</a></li>
* <li class="page"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=1">1</a></li>
* <li class="page"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=2">2</a></li>
* <li class="currentpage">3</li>
* <li class="page"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=4">4</a></li>
* <li class="page"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=5">5</a></li>
* <li class="next"><a href="/racconti-erotici/racconti_lista.php?genere=altro&pagina=4">&rsaquo;</a></li>
* </ul>
* </div>
*
*/
// Estraggo i link alle altre pagine:
var tnodes = tdoc.DocumentNode.SelectNodes("//div[@id='pagination']//ul//li//a[@href]");
if (tnodes != null) {
foreach (var link in tnodes) {
var href = link.GetAttributeValue("href", "");
if (!string.IsNullOrEmpty(href) && href.StartsWith("/racconti-erotici/racconti_lista.php?genere="))
tmpLk.Add(href); //tmpLk.Add(cLink_A69.PageBase + href);
}
}
// Rimuove duplicati e ordina alfabeticamente
tmpLk = tmpLk
.OrderBy(s => s) // ordina alfabeticamente
.Distinct() // elimina duplicati
.ToList();
// Inserisco i link trovati
try {
foreach (string ilk in tmpLk) {
string[] separator = new string[] { "&pagina=" };
string[] txt = ilk.Split(separator, StringSplitOptions.RemoveEmptyEntries);
string url = cLink_A69.PageBase + ilk;
string name = txt[0].Replace("/racconti-erotici/racconti_lista.php?genere=", "_A69_") + "_" + int.Parse(txt[1]).ToString("0000") + ".html";
newlinks.Add(new cLink_A69(url, name));
}
} catch (Exception ex) { Logger.Error("Errore analisi Idx link dal " + FileName + " - " + ex.Message); }
}
#endregion
#region Estraggo gli url a racconti:
{
/*
*
* I link ai racconti sono dei pulsanti così formati:
* <div class="continua">
* <a href="/racconti-erotici/altro/Tutto-e-iniziato-per-gioco-pazza-famiglia_166770.html">Continua a leggere » </a>
* </div>
*/
// Estraggo i link ai racconti:
tmpLk = new List<string>();
// Estraggo i link alle altre pagine:
var tnodes = tdoc.DocumentNode.SelectNodes("//div[@class='continua']//a[@href]");
if (tnodes != null) {
foreach (var link in tnodes) {
var href = link.GetAttributeValue("href", "");
if (!string.IsNullOrEmpty(href) && href.StartsWith("/racconti-erotici/") && (href.EndsWith(".html") || href.EndsWith(".htm")))
tmpLk.Add(href); //tmpLk.Add(cLink_A69.PageBase + href);
}
}
// Rimuove duplicati e ordina alfabeticamente
tmpLk = tmpLk
.OrderBy(s => s) // ordina alfabeticamente
.Distinct() // elimina duplicati
.ToList();
// Inserisco i link trovati
try {
foreach (string ilk in tmpLk) {
string url = cLink_A69.PageBase + ilk;
string name = ilk.Replace("/racconti-erotici/", "A69_").Replace(@"/", "_");
newlinks.Add(new cLink_A69(url, name));
}
} catch (Exception ex) { Logger.Error("Errore analisi Idx link dal " + FileName + " - " + ex.Message); }
}
#endregion
#region Estraggo il racconto dal file e lo inserisco nel DB
if (FileName.StartsWith("A69_")) {
// Link ad un racconto
cRac rac = EstraiRac(tdoc);
if (rac != null) {
// Racconto estratto correttamente, lo salvo sul DB
App.DB.ImportRac(rac);
}
}
#endregion
Status = eLinkState.End;
App.DB.LinkLog(this);
}
}
#endregion
#region End
if (Status == eLinkState.End) {
}
#endregion
#region Error
if (Status == eLinkState.Error) {
}
#endregion
#region Abort
if (Status == eLinkState.Abort) {
}
#endregion
#region Cancel
if (Status == eLinkState.Cancel) {
}
#endregion
Console.WriteLine("Link.Count=" + newlinks.Count.ToString("00"));
} catch (Exception ex) {
Console.WriteLine($"Errore con {URL}: {ex.Message}");
Status = eLinkState.Error;
//App.DB.LinkLog(lk);
}
return newlinks;
}
#endregion
}//class cLink_A69
}//namespace A69WD.Net
+20 -2
View File
@@ -32,8 +32,26 @@ using System.Runtime.InteropServices;
// È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build
// usando l'asterisco '*' come illustrato di seguito:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.5.0.0")]
[assembly: AssemblyFileVersion("0.5.0.0")]
[assembly: AssemblyVersion("0.5.1.0")]
[assembly: AssemblyFileVersion("0.5.1.0")]
/*
*
* Vrs 0.5.1.0
*
* Compilata da CSiCoAlm il 2026/01/01
* Refactoring del downloader per poterlo utilizzare in ATDB
* Upgradato l'importazione, selezionando casualmente i file da importare,
* gestendo il numero massimo di file e la cartella da importare, sul file di configurazione.
*
*
* ToDo:
* - Aggiungere gestione parallela della FIFO secondo vecchi modello per aumentare il feedback alla UI
* - Inserire anche l'estrazione dei racconti
* - Inserire funzionalità avanzate sul lettore
*
*/
/*
+45 -10
View File
@@ -24,6 +24,7 @@ namespace A69WD.Service {
// Contatori
private int _totali = 0;
private int _completati = 0;
private int _duplicati = 0;
private int _errori = 0;
public Service_Importer(StatusStrip sb) {
@@ -43,12 +44,11 @@ namespace A69WD.Service {
private async void ProcessWorking() {
string[] files = System.IO.Directory.GetFiles(_path, "A69_*.html");
_totali = files.Length;
_completati = 0;
_errori = 0;
UpdateCounters();
//string[] files = System.IO.Directory.GetFiles(_path, "A69_*.html");
//_totali = files.Length;
//_completati = 0;
//_errori = 0;
//UpdateCounters();
// foreach (string file in files) {
// Task.Run(async () => {
// Logger.Warning($"Start estrazione racconto: {file}");
@@ -72,7 +72,37 @@ namespace A69WD.Service {
// });
// }
foreach (string file in files) {
// Seleziono 1000 file in modo casuale dalla directory indicata:
// - Ottieni tutti i file nel percorso
string[] files = System.IO.Directory.GetFiles(Cfg.Settings.PathImport, "A69_*.html");
int MaxNFile = files.Length < Cfg.Settings.MaxNumFile ? files.Length : Cfg.Settings.MaxNumFile;
// - Mescola l'elenco dei file in modo casuale e seleziona i primi MaxNFile
// Usiamo LINQ per mescolare (Shuffle) l'array e prendere i primi MaxNFile
// Si noti che mescolare casualmente l'intero array può essere costoso per molte migliaia di file.
// Alternativamente, si può usare un algoritmo di campionamento casuale (come Fisher-Yates) se l'efficienza è cruciale,
// ma per 10 elementi da un elenco ragionevole, questo è semplice ed efficace.
Random rng = new Random();
var fileCasuali = files
.OrderBy(f => rng.Next()) // Ordina in base a un numero casuale
.Take(MaxNFile) // Prendi i primi MaxNFile
.ToList(); // Converti in List<string> (opzionale, ma utile)
// aggiorno contatori
_totali = fileCasuali.Count;
_completati = 0;
_duplicati = 0;
_errori = 0;
UpdateCounters();
// Verifico cartelle di destinazione
string pathErrOnExtract = System.IO.Path.Combine(Cfg.Settings.PathDownloadWorking, "ErrOnExtract");
if (!Directory.Exists(pathErrOnExtract)) Directory.CreateDirectory(pathErrOnExtract);
string pathErrOnSave = System.IO.Path.Combine(Cfg.Settings.PathDownloadWorking, "ErrOnSave");
if (!Directory.Exists(pathErrOnSave)) Directory.CreateDirectory(pathErrOnSave);
string pathDone = System.IO.Path.Combine(Cfg.Settings.PathDownloadWorking, "Done");
if (!Directory.Exists(pathDone)) Directory.CreateDirectory(pathDone);
// Ciclo su ciascun file
foreach (string file in fileCasuali) {
string name = System.IO.Path.GetFileName(file);
Logger.Warning($"Import - Start estrazione racconto: {name}");
@@ -80,27 +110,32 @@ namespace A69WD.Service {
cRac rac = await lk.EstraiRac(file);
if (rac != null) {
// Racconto estratto correttamente, lo salvo sul DB
Logger.Warning($"Import - estrazione corretta: {name}");
Logger.Warning($"Import - estrazione corretta: {name}");
int res = App.DB.ImportRac(rac); // res=id del racconto nel DB
if (res < 1) {
// errore nel salvataggio
Logger.Warning($"Import - errore nel salvataggio: {name}");
Interlocked.Increment(ref _errori);
// - Sposto il file
System.IO.File.Move(file, System.IO.Path.Combine(pathErrOnSave, System.IO.Path.GetFileName(file)));
} else {
// salvataggio ok
Logger.Warning($"Import - racconto salvato: {name}");
Interlocked.Increment(ref _completati);
// - Sposto il file
System.IO.File.Move(file, System.IO.Path.Combine(pathDone, System.IO.Path.GetFileName(file)));
}
} else {
Logger.Warning($"Import - estrazione errata: {name}");
Logger.Warning($"Import - estrazione errata: {name}");
Interlocked.Increment(ref _errori);
// - Sposto il file
System.IO.File.Move(file, System.IO.Path.Combine(pathErrOnExtract, System.IO.Path.GetFileName(file)));
}
UpdateCounters();
}
UpdateCounters();
}
private void UpdateCounters() {
if (_sb.InvokeRequired) {
_sb.Invoke(new Action(UpdateCounters));
+6
View File
@@ -6,6 +6,12 @@
<!-- <PathApplicationRoot>C:\Temporary\A69WD</PathApplicationRoot> -->
<PathApplicationRoot>C:\Commesse\_zPrivate\A69WD\Test</PathApplicationRoot>
<!-- Path della cartella con i file da importare -->
<PathImport>C:\Commesse\_zPrivate\A69WD\Test\Import</PathImport>
<!-- Numero di file massimo da gestire. -->
<MaxNumFile>1000</MaxNumFile>
<!-- Nome del database usato dall'applicazione. -->
<DBName>A69DB.db</DBName>
+57 -18
View File
@@ -112,21 +112,6 @@ namespace A69WD.Site {
HtmlDocument tdoc = null;
#region ToConfirm
//if (lk.Status == eLinkState.ToConfirm) {
// // Eseguo la verifica se link da downloadare
// eLinkState tstate = App.DB.GetStateByURL(lk.URL);
// if (
// (tstate == eLinkState.ToConfirm) ||
// (tstate == eLinkState.ToDownload) ||
// (tstate == eLinkState.Error)
// ) {
// lk.Status = eLinkState.ToDownload;
// App.DB.LinkLog(lk);
// } else {
// lk.Status = eLinkState.End;
// App.DB.LinkLog(lk);
// }
//}
if (lk.Status == eLinkState.ToConfirm) {
// Eseguo la verifica se link da downloadare
lk.Status = eLinkState.ToDownload;
@@ -294,21 +279,75 @@ namespace A69WD.Site {
return newlinks;
}
public async Task<List<iLink>> CrawlPageAsyncTest1(iLink lk) {
var newlinks = new List<iLink>();
try {
// Scarico il file
var resp = await client.GetAsync(lk.URL);
if (!resp.IsSuccessStatusCode) {
Console.WriteLine($"A69 - Errore HTTP {(int)resp.StatusCode} {resp.ReasonPhrase} per {lk.URL}");
lk.Status = eLinkState.Error;
//App.DB.LinkLog(lk);
return newlinks;
}
// Scarico la pagina
var thtml = await client.GetStringAsync(lk.URL);
// Salvo il file downloadato
System.IO.StreamWriter tsw = new System.IO.StreamWriter(System.IO.Path.Combine(lk.FilePath, lk.FileName), false, Encoding.UTF8);
tsw.Write(thtml);
Console.WriteLine("Link.Count=" + newlinks.Count.ToString("00"));
} catch (Exception ex) {
Console.WriteLine($"Errore con {lk.URL}: {ex.Message}");
lk.Status = eLinkState.Error;
//App.DB.LinkLog(lk);
}
return newlinks;
}
public async Task<List<iLink>> CrawlPageAsyncTest2(iLink lk) {
var newlinks = new List<iLink>();
try {
// Scarico il file
var resp = await client.GetAsync(lk.URL);
if (!resp.IsSuccessStatusCode) {
Console.WriteLine($"A69 - Errore HTTP {(int)resp.StatusCode} {resp.ReasonPhrase} per {lk.URL}");
lk.Status = eLinkState.Error;
//App.DB.LinkLog(lk);
return newlinks;
}
// Scarico la pagina
HttpClient tmpClient = new HttpClient(_handler);
var thtml = await tmpClient.GetStringAsync(lk.URL);
// Salvo il file downloadato
System.IO.StreamWriter tsw = new System.IO.StreamWriter(System.IO.Path.Combine(lk.FilePath, lk.FileName), false, Encoding.UTF8);
tsw.Write(thtml);
Console.WriteLine("Link.Count=" + newlinks.Count.ToString("00"));
} catch (Exception ex) {
Console.WriteLine($"Errore con {lk.URL}: {ex.Message}");
lk.Status = eLinkState.Error;
//App.DB.LinkLog(lk);
}
return newlinks;
}
public cSite_A69() {
var handler = new HttpClientHandler {
_handler = new HttpClientHandler {
CookieContainer = new CookieContainer(),
UseCookies = true,
AllowAutoRedirect = true,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
client = new HttpClient(handler);
client = new HttpClient(_handler);
client.Timeout = TimeSpan.FromSeconds(60);
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
client.DefaultRequestHeaders.Referrer = new Uri(cLink_A69.LoginPageUrl);
}
HttpClientHandler _handler = null;
+45 -5
View File
@@ -28,18 +28,23 @@
this.sbMessage = new System.Windows.Forms.ToolStripStatusLabel();
this.sbProgressBar = new System.Windows.Forms.ToolStripProgressBar();
this.sbStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.btnTest = new System.Windows.Forms.Button();
this.btnTest2 = new System.Windows.Forms.Button();
this.btnTest3 = new System.Windows.Forms.Button();
this.sb.SuspendLayout();
this.SuspendLayout();
//
// rtb
//
this.rtb.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.rtb.BackColor = System.Drawing.Color.White;
this.rtb.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.rtb.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtb.Font = new System.Drawing.Font("Verdana", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtb.Location = new System.Drawing.Point(0, 0);
this.rtb.Location = new System.Drawing.Point(0, 54);
this.rtb.Name = "rtb";
this.rtb.Size = new System.Drawing.Size(700, 420);
this.rtb.Size = new System.Drawing.Size(700, 366);
this.rtb.TabIndex = 3;
this.rtb.Text = "";
this.rtb.KeyDown += new System.Windows.Forms.KeyEventHandler(this.KeyDownAnalisi);
@@ -64,7 +69,7 @@
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
this.sbMessage.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner;
this.sbMessage.Name = "sbMessage";
this.sbMessage.Size = new System.Drawing.Size(452, 19);
this.sbMessage.Size = new System.Drawing.Size(483, 19);
this.sbMessage.Spring = true;
this.sbMessage.Tag = "Messaggi";
this.sbMessage.Text = "Messaggi";
@@ -90,12 +95,45 @@
this.sbStatusLabel.Tag = "Label";
this.sbStatusLabel.ToolTipText = "Stato di eventuali operazioni in background";
//
// btnTest
//
this.btnTest.Location = new System.Drawing.Point(4, 4);
this.btnTest.Name = "btnTest";
this.btnTest.Size = new System.Drawing.Size(62, 48);
this.btnTest.TabIndex = 4;
this.btnTest.Text = "Test";
this.btnTest.UseVisualStyleBackColor = true;
this.btnTest.Click += new System.EventHandler(this.btnTest_Click);
//
// btnTest2
//
this.btnTest2.Location = new System.Drawing.Point(72, 4);
this.btnTest2.Name = "btnTest2";
this.btnTest2.Size = new System.Drawing.Size(62, 48);
this.btnTest2.TabIndex = 5;
this.btnTest2.Text = "Test 2";
this.btnTest2.UseVisualStyleBackColor = true;
this.btnTest2.Click += new System.EventHandler(this.btnTest2_Click);
//
// btnTest3
//
this.btnTest3.Location = new System.Drawing.Point(140, 4);
this.btnTest3.Name = "btnTest3";
this.btnTest3.Size = new System.Drawing.Size(62, 48);
this.btnTest3.TabIndex = 6;
this.btnTest3.Text = "Test 3";
this.btnTest3.UseVisualStyleBackColor = true;
this.btnTest3.Click += new System.EventHandler(this.btnTest3_Click);
//
// frmReader
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(700, 444);
this.ControlBox = false;
this.Controls.Add(this.btnTest3);
this.Controls.Add(this.btnTest2);
this.Controls.Add(this.btnTest);
this.Controls.Add(this.rtb);
this.Controls.Add(this.sb);
this.Name = "frmReader";
@@ -115,6 +153,8 @@
private System.Windows.Forms.ToolStripStatusLabel sbMessage;
private System.Windows.Forms.ToolStripProgressBar sbProgressBar;
private System.Windows.Forms.ToolStripStatusLabel sbStatusLabel;
private System.Windows.Forms.Button btnTest;
private System.Windows.Forms.Button btnTest2;
private System.Windows.Forms.Button btnTest3;
}
}
+107 -2
View File
@@ -683,7 +683,7 @@ namespace A69WD.UI {
// - Eseguo l'autenticazione
bool res = await siteA69.Authenticate();
if (res) {
sbStatusLabel.Text = "A69 logged";
sbStatusLabel.Text = "A69 autenticated";
Logger.Information("Sito A69 loggato: " + res.ToString());
} else {
Logger.Information("Login Fault");
@@ -746,6 +746,111 @@ namespace A69WD.UI {
cTools.ShowOnNotepad(Cfg.Settings.PathFileLogs);
}
private async void btnTest_Click(object sender, EventArgs e) {
// Test download multipli con sempre lo stesso client per condividere la sessione
// - Creo istanza del client per il sito con autenticazione:
sbStatusLabel.Text = "Login on A69";
cSite_A69 site = new cSite_A69();
// - Eseguo l'autenticazione
bool res = await site.Authenticate();
if (res) {
sbStatusLabel.Text = "A69 autenticated";
Logger.Information("Sito A69 loggato: " + res.ToString());
} else {
Logger.Information("Login Fault");
return;
}
// - Verifico path per il download
if (!System.IO.Directory.Exists(Cfg.Settings.PathDownloadWorking)) System.IO.Directory.CreateDirectory(Cfg.Settings.PathDownloadWorking);
cLink_A69[] lks = new cLink_A69[26];
for (int i = 1; i < lks.Length; i++) {
lks[i] = new cLink_A69($"https://www.annunci69.it/racconti-erotici/racconti_lista.php?genere=altro&pagina={i}", $"_A69_altro_{i.ToString("0000")}.html");
}
DateTime start = DateTime.Now;
// - Download dei link come finora fato (steso client per condividere la sessione):
for (int i = 1; i < lks.Length; i++) {
List<iLink> urls = await site.CrawlPageAsyncTest1(lks[i]);
}
DateTime end = DateTime.Now;
sbStatusLabel.Text = (start - end).ToString();
}
private async void btnTest2_Click(object sender, EventArgs e) {
// Test download multipli con client diversi ma che condividono solo la sessione
// - Creo istanza del client per il sito con autenticazione:
sbStatusLabel.Text = "Login on A69";
cSite_A69 site = new cSite_A69();
// - Eseguo l'autenticazione
bool res = await site.Authenticate();
if (res) {
sbStatusLabel.Text = "A69 autenticated";
Logger.Information("Sito A69 loggato: " + res.ToString());
} else {
Logger.Information("Login Fault");
return;
}
// - Verifico path per il download
if (!System.IO.Directory.Exists(Cfg.Settings.PathDownloadWorking)) System.IO.Directory.CreateDirectory(Cfg.Settings.PathDownloadWorking);
cLink_A69[] lks = new cLink_A69[26];
for (int i = 1; i < lks.Length; i++) {
lks[i] = new cLink_A69($"https://www.annunci69.it/racconti-erotici/racconti_lista.php?genere=altro&pagina={i}", $"_A69_altro_{i.ToString("0000")}.html");
}
DateTime start = DateTime.Now;
// - Download dei link come finora fato (steso client per condividere la sessione):
for (int i = 1; i < lks.Length; i++) {
List<iLink> urls = await site.CrawlPageAsyncTest1(lks[i]);
}
DateTime end = DateTime.Now;
sbStatusLabel.Text = (start - end).ToString();
}
private async void btnTest3_Click(object sender, EventArgs e) {
// Test download multipli con client diversi ma che condividono solo la sessione e nuovo refactoring
// - Eseguo l'autenticazione
bool res = await cLink_A69.Authenticate();
if (res) {
sbStatusLabel.Text = "A69 autenticated";
Logger.Information("Sito A69 loggato: " + res.ToString());
} else {
sbStatusLabel.Text = "Fault Login";
Logger.Information("Login Fault");
return;
}
// - Verifico path per il download
if (!System.IO.Directory.Exists(Cfg.Settings.PathDownloadWorking)) System.IO.Directory.CreateDirectory(Cfg.Settings.PathDownloadWorking);
cLink_A69[] lks = new cLink_A69[26];
for (int i = 1; i < lks.Length; i++) {
lks[i] = new cLink_A69($"https://www.annunci69.it/racconti-erotici/racconti_lista.php?genere=altro&pagina={i}", $"_A69_altro_{i.ToString("0000")}.html");
}
DateTime start = DateTime.Now;
// - Download dei link come finora fato (steso client per condividere la sessione):
for (int i = 1; i < lks.Length; i++) {
List<iLink> urls = await lks[i].CrawlPageAsync();
}
DateTime end = DateTime.Now;
sbStatusLabel.Text = (start - end).ToString();
}
}
}