Italian B4A App crash quando connetto a sito

3394509365

Active Member
Licensed User
sta realizzando un'app che va su un sito e porta giù le ultime estrazioni di numeri e poi con questi faccio una serie di calcoli miei.

in fase mia di debug anzichè, ogni volta andare sul sito, ho salvato la lista in locale e ho fatto le mie prove.

Tutto funzionava bene sia in debud che in release.

Non appena però ho riabilitato la parte che va sul sito a prendere i numeri, succede che l' app funziona solo in modalità debug.

In modalità release l' app va in crash sia da telefono che da emulatore, senza darmi errori nel log.

Come è possibile?

questa è la parte di codice che va sul sito


dimenticavo, per fare lo scraping uso la libreria jsoup

B4X:
'    '    --- Load the url
    Dim url As String = "https://www.superenalotto.com/archivio"
'        '    ---  Get the page content
    Dim HTML As String = js.connect(url) ' riabilitare se devo leggere direttamente dal sito
    Dim RawHTML As String = ""
    RawHTML = HTML
    Dim HTML As String = js.parse_HTML(RawHTML)
    'Log("Clean HTML: " & HTML)
    File.WriteString(File.DirInternal,"lista.txt",HTML)

    '    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  FINE  RIABILITARE      SITO    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'
 
Last edited:

Sagenut

Well-Known Member
Licensed User
Forse lo scraping inizia prima che i dati siano stati effettivamente scaricati?
Forse ci vuole un Wait For per attendere che i dati siano stati acquisiti.
 

sirjo66

Well-Known Member
Licensed User
ti prego di aggiungere sul titolo del thread di che linguaggio si tratta

prima domanda: che cosa è l'oggetto "js" ???

seconda domanda: quando dici "ho salvato la lista in locale ", spiega come hai fatto

il dubbio che mi viene è che il sito contenga del codice JavaScript che riempe le caselle e tutto il resto.
Se ci navighi con un browser il codice JavaScript viene eseguito e poi copiarti tranquillamente tutto quello che vuoi, ma se scarichi la pagina HTML non troverai mai questi dati presenti nel codice HTML.
Questo è fatto anche per evitare i programmi che estraggono i dati in automatico e li "rivendono", mentre il sito vuole che l'utente utilizzi la loro pagina web dove ci sono pubblicità e altre cose.

Se c'è del codice JavaScript puoi estrarre i dati (solo a titolo di sperimentazione, non puoi "rivenderli") usando l'oggetto WebView, ne avevamo discusso con LucaMs poco tempo fa, vedi se trovi il thread

EDIT: ho analizzato la pagina ma non mi sembra che ci sia codice JavaScript che compila i campi, si vede tutto nel codice HTML, per cui controlla bene la parte dove scarichi il codice
 

LucaMs

Expert
Licensed User
Se c'è del codice JavaScript puoi estrarre i dati (solo a titolo di sperimentazione, non puoi "rivenderli") usando l'oggetto WebView, ne avevamo discusso con LucaMs poco tempo fa, vedi se trovi il thread
https://www.b4x.com/android/forum/t...a-pagina-web-dati-nascosti.115006/post-718561
Comunque, come ha scritto @sirjo66, in quella pagina i numeri non sono "nascosti", sono "in chiaro".

In modalità release l' app va in crash sia da telefono che da emulatore, senza darmi errori nel log.
1 - usa l'emulatore solo nel caso in cui tu non abbia una certa versione di Android ma solo quando hai completato tutta o buona parte dell'app, non in fase di sviluppo e debug;
2 - se sei connesso tramite Bridge e lanci il progetto in modalità Release, ricordati di inserire:
#BridgeLogger: True
Nella Main (diciamo subito dopo la Region Project Attributes), altrimenti non riceverai i log nell'IDE;
3 - nel caso in cui non ottenessi cmq log di errore, togli la spunta dal Filter nel tab dei Logs.

dimenticavo, per fare lo scraping uso la libreria jsoup
Scraping? "Ora" si chiama così? Sempre conosciuto come Parsing - a meno che non siano due cose diverse ed eviti una libreria.
Fattelo a manina, usando SubStr2 e Regex, così sei sicuro di ciò che fai.
 

udg

Expert
Licensed User
Mai utilizzato jsoup, ma da quel poco che ho letto, sembrerebbe che bisognerebbe utilizzare okHttpUtils2 per scaricare la pagina e poi jsoup per il suo parsing/scraping.
Direi che il motivo risieda in js.connect che viene eseguito nel thread principale e, bloccandolo in attesa di ricevere l'intera pagina, causa il solito ANR da parte di Android.
 

3394509365

Active Member
Licensed User
ok, ho letto adesso tutte le risposte, oggi non ho potuto nemmeno accendere il pc, vedo di venirci a capo e vi faccio sapere
 

3394509365

Active Member
Licensed User
ti prego di aggiungere sul titolo del thread di che linguaggio si tratta

prima domanda: che cosa è l'oggetto "js" ???

seconda domanda: quando dici "ho salvato la lista in locale ", spiega come hai fatto

il dubbio che mi viene è che il sito contenga del codice JavaScript che riempe le caselle e tutto il resto.
Se ci navighi con un browser il codice JavaScript viene eseguito e poi copiarti tranquillamente tutto quello che vuoi, ma se scarichi la pagina HTML non troverai mai questi dati presenti nel codice HTML.
Questo è fatto anche per evitare i programmi che estraggono i dati in automatico e li "rivendono", mentre il sito vuole che l'utente utilizzi la loro pagina web dove ci sono pubblicità e altre cose.

Se c'è del codice JavaScript puoi estrarre i dati (solo a titolo di sperimentazione, non puoi "rivenderli") usando l'oggetto WebView, ne avevamo discusso con LucaMs poco tempo fa, vedi se trovi il thread

EDIT: ho analizzato la pagina ma non mi sembra che ci sia codice JavaScript che compila i campi, si vede tutto nel codice HTML, per cui controlla bene la parte dove scarichi il codice


Js è la libreria jsoup
 

3394509365

Active Member
Licensed User
Sirjo66 Js è la libreria Lsoup che mi serve per estrarre i tag le class e tutto il resto..

ma la uso anche per salvare la pagina HTML

B4X:
'    '    --- Load the url
    Dim url As String = "https://www.superenalotto.com/archivio"
'        '    ---  Get the page content
    Dim HTML As String = js.connect(url) ' riabilitare se devo leggere direttamente dal sito
    Dim RawHTML As String = ""
    RawHTML = HTML
    Dim HTML As String = js.parse_HTML(RawHTML)
    'Log("Clean HTML: " & HTML)
    File.WriteString(File.DirInternal,"lista.txt",HTML)

    '    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  FINE  RIABILITARE      SITO    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'


    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    'per adesso leggo solo dal File di text
    '--- Load the raw text File
    Dim RawHTML As String = ""
    'Dim read1 As String="miotesto.txt"
    Dim read1 As String="lista.txt"
    
    'RawHTML = File.ReadString(File.DirAssets,read1)
    RawHTML = File.ReadString(File.DirInternal,read1)
        
    'Log("Raw RawHTML: " & RawHTML)  'displays the content of file
    '--- Remove empty lines And reformat the layout
    Dim HTML As String = js.parse_HTML(RawHTML)
    'Log("Clean HTML: " & HTML)


mi pare che l' estrazione della pagina html si possa fare anche con httputils2 ?
 

LucaMs

Expert
Licensed User
mi pare che l' estrazione della pagina html si possa fare anche con httputils2 ?
Le librerie da usare "oggi" sono OKHttp e OKHttpUtils2, che vanno benissimo per scaricare il sorgente html di una pagina web.

Non so se quella "zuppa" sia potente, in quanto ogni pagina web è composta da "miriadi" di tipi; so che ho fatto cose mooolto simili (leggi Superenalotto e Lotto) e farlo "a mano", usando SubString2 e Regex, come già ho scritto, non è affatto complicato.
 

3394509365

Active Member
Licensed User
Senza nella togliere a te, LucaMs ho usato la libreria libreria OKHttpUtils2 per fare il collegamento e il download della pagina, poi lo scraping lo faccio con la libreria JSoup ;)
 

Star-Dust

Expert
Licensed User
Senza nella togliere a te, LucaMs ho usato la libreria libreria OKHttpUtils2 per fare il collegamento e il download della pagina, poi lo scraping lo faccio con la libreria JSoup ;)
Cos'è lo scraping? È quello che facevano gli indiani d'America quando tagliano lo scalpo ai nemici per non farli andare in paradiso?
 

udg

Expert
Licensed User
Scraping e harvesting (citato da wikipedia) sono due termini che letteralmente hanno significati (raschiatura/scrostatura e mietitura/raccolto) non propio vicinissimi a quello che di fatto è un parsing del codice di una pagina html. Lo so che avevate già controllato sui dizionari online..eheh
Se volessimo accordarci su web data extracting forse uniremmo (come presumo fosse nelle intenzioni iniziali) la fase di downlaod della pagina e il successivo parsing; in fondo come posso estrarre se prima non ho la pagina?
Potremmo anche utilizzare l'italiano che di termini ne ha a iosa e non costringe a riutilizzare termini nati per altro...
 
Last edited:

Star-Dust

Expert
Licensed User
Parlate italiano allora , ha ragione LucaMs che dice che vi state americanizzando. 😂 😂 😂 😂 😂

Allora estrazione dati da un HTML. Grazie della delucidazione
 

Star-Dust

Expert
Licensed User
Parlate italiano allora , ha ragione LucaMs che dice che vi state americanizzando. 😂 😂 😂 😂 😂

Allora estrazione dati da un HTML. Grazie della delucidazione
15 anni fa lo facevo anche io, leggevo le pagine internet codificate ssl e facevo lo Scraping dell'account e password. Ma all'epoca lo chiamavano diversamente
 

udg

Expert
Licensed User
Potremmo aggiungere che skyscraper indica il grattacielo, ma a me questo "scrap" proprio non piace...
In effetti, anche grattacielo per indicare un palazzo... va bene l'immagine evocativa di un oggetto così alto da poter fare un grattino al cielo, ma anche lì perchè parlare di grattare (non era più carino un solleticare, carezzare, sfiorare)? mah
 

sirjo66

Well-Known Member
Licensed User
Top