Pagina 1 di 1

LibreOffice e web :la guida.

Inviato: lunedì 4 aprile 2016, 21:18
da vladboscaneanu
Ciao,amici.Ho scoperto (e imparato) finalmente il html-parsing...Vi allego il mio codice (in python) ,versione ultra-sperimentale.
Il file,test-web.py,dovrete copiarlo nella cartella python del vostro LibreOffice (percorso completo) ,tipoC:\Program Files (x86)\LibreOffice 5\share\Scripts\python .Dopo,aprite un documento Calc,nuovo, e andate su Strumenti-->Macro-->Esegui macro .
Se avete copiato correttamente il file di prima ,lo vedrete nel Libre Office -Macro .Ci sara un modulo,test_web,che non è altro che il nostro file.
Una volta cliccando sopra,dovrete eseguire la macro LastMessage,nella sezione di fianco.
In questo modo,nella cella B1 e B2 verranno riportati gli ultimi messaggi delle due sezioni del nostro forum:Base e Macro.
Cattura.PNG
----------------------------------------------------------------------------------------------------------------------------------
Se vi servono chiarimenti,resto disponibile.

Re: LibreOffice e web :la guida.

Inviato: martedì 5 aprile 2016, 7:44
da patel
perché python ? non si può fare in basic ?

Re: LibreOffice e web :la guida.

Inviato: martedì 5 aprile 2016, 18:56
da vladboscaneanu
Trovo Basic limitato nel lavorare con le risorse web...python é una scheggia.

Re: LibreOffice e web :la guida.

Inviato: martedì 5 aprile 2016, 21:16
da unlucky83
Ero curioso di provarlo, ma come mi aspettavo non funziona con ooo 3.2 :(

Re: LibreOffice e web :la guida.

Inviato: martedì 5 aprile 2016, 22:13
da vladboscaneanu
Ciao,amico.
OpenOffice 3 usa phyton 2 ,mentre Libre arriva con python 3...in poche parole incompatibilità ...se vuoi che ti aiuto nel studiare python,fammi sapere(in privato magari)...è veramente bello questo linguaggio,fidate.
---------------------------------------------
Per quello che riguarda l'esempio,se ci sono delle domande,risponderò volentieri.
Ciao

Re: LibreOffice e web :la guida.

Inviato: martedì 5 aprile 2016, 22:29
da Gaetanopr
Ciao ancora non ho scaricato e provato l'allegato, però condivido quanto detto da vladboscaneanu, pure io ho studiato il python e utilizzato in alcuni file che uso al lavoro.
Il linguaggio è abbastanza semplice e potente.

Re: LibreOffice e web :la guida.

Inviato: domenica 10 aprile 2016, 18:16
da unlucky83
Ciao
sono tornato a libreoffice (5.1) e mi da questo errore:
Errore dello schema di scripting durante l'esecuzione dello script Python vnd.sun.star.script:test_web.py$LastMessage?language=Python&location=share.

Messaggio: <class 'urllib.error.URLError'>: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:646)>
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:1242 in function do_open() [raise URLError(err)]
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:1283 in function https_open() [context=self._context, check_hostname=self._check_hostname)]
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:443 in function _call_chain() [result = func(*args)]
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:483 in function _open() ['_open', req)]
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:465 in function open() [response = self._open(req, data)]
/opt/libreoffice5.1/program/python-core-3.5.0/lib/urllib/request.py:162 in function urlopen() [return opener.open(url, data, timeout)]
/opt/libreoffice5.1/share/Scripts/python/test_web.py:25 in function <module>() [OpenUrl=urllib.request.urlopen(MyUrl)]
/opt/libreoffice5.1/program/pythonscript.py:452 in function getModuleByUrl() [exec(code, entry.module.__dict__)]
/opt/libreoffice5.1/program/pythonscript.py:993 in function getScript() [mod = self.provCtx.getModuleByUrl( fileUri )]
ho testato anche le macro di esempio di libre, ovvero "CapitalisePython" "HelloWorldPython" "CreateTable" e anche "CapitalisePython" mi da errore.

Idee?

Re: LibreOffice e web :la guida.

Inviato: martedì 12 aprile 2016, 15:58
da Gaetanopr
Su OpenOffice non mi funziona, ho provato su Libre ha funzionato solo una volta e poi ha iniziato a dare questo errore
Errore dello schema di scripting durante l'esecuzione dello script Python vnd.sun.star.script:test_web.py$LastMessage?language=Python&location=share.

Messaggio: <class 'urllib.error.URLError'>: <urlopen error unknown url type: https>
C:\Program Files\LibreOffice 5\program\python-core-3.3.0\lib\urllib\request.py:1316 in function unknown_open() [raise URLError('unknown url type: %s' % type)]
C:\Program Files\LibreOffice 5\program\python-core-3.3.0\lib\urllib\request.py:447 in function _call_chain() [result = func(*args)]
C:\Program Files\LibreOffice 5\program\python-core-3.3.0\lib\urllib\request.py:492 in function _open() ['unknown_open', req)]
C:\Program Files\LibreOffice 5\program\python-core-3.3.0\lib\urllib\request.py:469 in function open() [response = self._open(req, data)]
C:\Program Files\LibreOffice 5\program\python-core-3.3.0\lib\urllib\request.py:156 in function urlopen() [return opener.open(url, data, timeout)]
C:\Program Files\LibreOffice 5\share\Scripts\python\test_web.py:25 in function <module>() [OpenUrl=urllib.request.urlopen(MyUrl)]
C:\Program Files\LibreOffice 5\program\pythonscript.py:452 in function getModuleByUrl() [exec(code, entry.module.__dict__)]
C:\Program Files\LibreOffice 5\program\pythonscript.py:993 in function getScript() [mod = self.provCtx.getModuleByUrl( fileUri )]

Re: LibreOffice e web :la guida.

Inviato: martedì 12 aprile 2016, 17:09
da unlucky83
stesso errore che da a me, ma non ha funzionato nemmeno una volta

Re: LibreOffice e web :la guida.

Inviato: martedì 12 aprile 2016, 22:12
da vladboscaneanu
Ciao a tutti,amici miei.
Appena avrò un po di tempo,verrò con i dettagli...
Nel frattempo,assicuratevi di avere una versione Python già instalata nel vostro sistema,preferibilmente la ultima disponibile (3.5.1)...servirà a noi per sperimentare.
Scusate la mia mancanza...
Ciao.

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:00
da vladboscaneanu
Eccomi.
Ho due grossi problemi:
1.Faccio fatica spiegare le cose.
2.Parlo male l'italiano.
Spero che la guida sarà comprensibile.
Una precisione:io lavoro in Windows.
#################################
-Capitolo 1 – il problema.
#################################
Vogliamo inserire nella pagina di un documento Writer o Calc,alcuni dati,prelevati da uno o più siti web.
La soluzione sarebbe la seguente:
a. Collegarsi al sito web
b. Leggere la pagina desiderata
c. Estrarre i dati interessati.
d. Inserire i dati nel nostro documento.
################################
-Capitolo 2 – Pagina web
################################
Una pagina web non è altro che un file html. Quelli estensioni,che si trovano in giro,ad esempio php o asp ,sono i file che agiscono sul server,per quello questi linguaggi si chiamano lato server o server-side.Ma alla fine,il loro risultato,è di fa tornare ai nostri browser un documento di testo,che invece di txt finisce con html. Quindi,qualsiasi richiesta faremo su un sito pubblico,avremo come ritorno un documento testuale.

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:01
da vladboscaneanu
###############################
-Capitolo 3 – HTML in breve
###############################
Un file HTML è composto da piu tag ,non c'è spazio qui per spiegarli tutti. Una cosa veloce:c'è un tag,head,che rappresenta la parte informativa o tecnica del documento,di solito invisibile agli utenti,e il tag body,che contiene la parte visibile per noi,cioè i link,i paragrafi ,vari testi etc.
##############################
-Capitolo 4 – Chrome,ciao amico
##############################
Non complicatevi la vita,salvando le pagine web e studiarli poi con un Notepad,tutti i browser moderni permettono di ispezionare al volo le pagine che state leggendo. Basta fare F12 e si deve aprire la scheda per gli sviluppatori,che contene anche la struttura della pagina. Vi consiglio vivamente il browser Chrome,che è molto comodo e veloce. Sia Edge,che Safari,o ancora peggio Explorer sono delle (censura) ;non ho buone parole nemmeno per la volpe.
Dunque,se aprite la pagina principale del nostro forum e posizionate il cursore su qualsiasi
elemento,poi fate click destro,nel pop-up selezionate la voce Ispeziona. Vi se aprirà la
finestra per gli sviluppatori,con elemento già selezionato. Quindi ,facendo cosi sul ultimo messaggio della sezione Macro e Uno Api ,scoprirete che quello è un elemento a (cioè un link). --vedi immagine--
target_element.PNG

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:02
da vladboscaneanu
###############################
-Capitolo 5 – Python
###############################
Sfortunatamente,OOBasic è rimasto indietro anni-luce dagli atri linguaggi come funzionalità. Fortunatamente,sia Libre ,che OO montano Python,LibreOffice arriva sempre con l'ultimissima versione. Ritengo utile avere nel mio sistema un Python installato , gli utenti Mac e Linux,se non sbaglio, c'è l'hanno già preinstallato.
Con Python non bisogna inventarsi la bicicletta,scrivendo le librerie per vari usi,perché ha una grande scelta di moduli,built-in,per diversi usi. Vi sconsiglio di usare le biblioteche delle terze parti. Ok,vado a prendermi un caffè.

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:10
da vladboscaneanu
….
Dicevo,ho scelto per ispezionare le pagine web il modulo html.parser ,che è considerato
un modulo ultrasemplice, è per ottenere le pagine web il modulo urllib.request.
####################################
-Capitolo 6 – La magia
####################################
Per adesso si lavora fuori dal LibreOffice. Aprite il vostro Python IDLE è createvi un nuovo
documento,chiamatelo come volete,quindi salvate il documento.
Cominciamo a scrivere il codice:
Uffa,mi ero dimenticato –python è molto capriccioso agli spazi,state attenti,se non vi tornerà l'errore.
Ok,andiamo:
a.Prima di tutto vanno importati i moduli:

Codice: Seleziona tutto

import urllib.request
dopo si importa direttamente la classe HTMLParser dal modulo html.parser

Codice: Seleziona tutto

from html.parser import HTMLParser
Praticamente quando verrà creato l'oggetto MyParser,sarà necessario comunicarli un
argomento(target_tag),che sarà il nostro argomento target.
Se mentre si legge la pagina si trova il target_tag,la variabile TargetFound prende il valore
True,cosi dopo con la funzione handle_data si legge il testo del nostro tag e si salva in una
matrice ,o come si chiama in Python in una list.
Alla fine della pagina la nostra matrice avrà tutti i dati degli elementi a (link) incontrati.
Abbiamo definito la nostra propria classe,modificando la classe HTMLParser.
c.Ora definirei una stringa,con l'indirizzo del nostro sito:
MyUrl='index.php'
quindi possiamo già aprire la pagina,tramite urllib.request
b.Ora ho deciso di scrivere una mia classe personalizzata ,usando come esempio
la classe HTMLParser,la chiamerò MyParser,di conseguenza dovrei modificarli alcuni
metodi,per le mie esigenze,il resto non si tocca.

Codice: Seleziona tutto

class MyParser(HTMLParser):
    def __init__(self,target_tag):
        HTMLParser.__init__(self)
        self.targetTag=target_tag
        self.targetFound=False
        self.dataArray=[]
    def handle_starttag(self,tag,attrs):
        self.targetFound=False
        if (tag==self.targetTag):
            self.targetFound=True
    def handle_endtag(self,tag):
        if tag==self.targetTag:
            self.targetFound=False
    def handle_data(self, data):
        if (self.targetFound):
            self.dataArray.append(data)
Praticamente quando verrà creato l'oggetto MyParser,sarà necessario comunicarli un
argomento(target_tag),che sarà il nostro argomento target.
Se mentre si legge la pagina si trova il target_tag,la variabile TargetFound prende il valore
True,cosi dopo con la funzione handle_data si legge il testo del nostro tag e si salva in una
matrice ,o come si chiama in Python in una list.
Alla fine della pagina la nostra matrice avrà tutti i dati degli elementi a (link) incontrati.
Abbiamo definito la nostra propria classe,modificando la classe HTMLParser.
c.Ora definirei una stringa,con l'indirizzo del nostro sito:

Codice: Seleziona tutto

MyUrl='https://forum.openoffice.org/it/forum/index.php'
quindi possiamo già aprire la pagina,tramite urllib.request

Codice: Seleziona tutto

OpenUrl=urllib.request.urlopen(MyUrl)

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:12
da vladboscaneanu
Perfetto ,ora si crea un oggetto,appoggiato sulla nostra classe e subito lo mettiamo alla prova con il metodo feed...cosi chiediamo gentilmente alla console di python di tirar fuori il contenuto della matrice dataArray.Se non ci sono errori ,con F5 ,in una nuova finestra vedrete il risultato del codice – una matrice con tutti i link della pagina.
python-results.PNG
#########################################
-Capitolo 6 – LibreOffice
#########################################
La parte che interessa a noi è semplice:copiare il file nella cartella giusta,ma prima
aggiungendo una funzione,che inserisce nelle celle determinate i dati determinati.
Basta contare la posizione dei link nella matrice,cosi posiamo inserirli nelle nostre celle:
45,46 e rispettivamente 50 e 51.

Codice: Seleziona tutto

activeSheet=XSCRIPTCONTEXT.getDocument().getCurrentController().getActiveSheet()
def LastMessage():
    activeSheet.getCellRangeByName("A1").setString(parser.dataArray[45])
    activeSheet.getCellRangeByName("B1").setString(parser.dataArray[46])
    activeSheet.getCellRangeByName("A2").setString(parser.dataArray[50])
    activeSheet.getCellRangeByName("B2").setString(parser.dataArray[51])
Tutto qui.

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:13
da vladboscaneanu
Allego il file py per python di sistema ,NON per LibreOffice.

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 11:48
da unlucky83
Ottima spiegazione, può essere un tutorial a tutti gli effetti. :super:

Sul mio ubuntu 10.04 è preistallato python2.6, ho quindi istallato la 3.5.1
Ho eseguito lo script da terminale e il risultato è:

Codice: Seleziona tutto

andrea@andrea-desktop:~/Scaricati$ python3.5 web*.py
Traceback (most recent call last):
  File "web-tags-example.py", line 22, in <module>
    OpenUrl=urllib.request.urlopen(MyUrl)
  File "/usr/local/lib/python3.5/urllib/request.py", line 162, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.5/urllib/request.py", line 465, in open
    response = self._open(req, data)
  File "/usr/local/lib/python3.5/urllib/request.py", line 488, in _open
    'unknown_open', req)
  File "/usr/local/lib/python3.5/urllib/request.py", line 443, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.5/urllib/request.py", line 1310, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>
Cioè mi da errore con l'https

Ho quindi cambiato il link, con una pagina web che usa http e non mi ha dato errori. La pagina di prova è estrazioni del 10elotto

Codice: Seleziona tutto

andrea@andrea-desktop:~/Scaricati$ python3.5 web*.py
['Recupera password', 'Chi siamo', 'Area Ricevitori', 'Chiudi tutto', '10eLotto', 'Come si gioca', 'Numero Oro', 'I premi', 'Probabilità di vincita', 'Estrazioni e Vincite', "10eLotto ogni 5'", '10eLotto legato Lotto', 'Vincite per regione', 'Verifica vincite', '10eLotto in Ricevitoria', 'La schedina', 'La schedina interattiva', 'Lo scontrino', 'Dove Giocare', 'Riscossione vincite', '10eLotto online', 'Come si gioca online', '10eLotto online', 'Dove Giocare online', '10eLotto Mobile', 'Riscossione vincite online', 'Trova i tuoi numeri', 'Lasciati ispirare', 'Statistiche 10eLotto', 'Numeri ritardatari', 'Numeri frequenti', 'Regolamenti e Info', 'Gioca senza esagerare', 'Regolamenti', 'Informativa privacy', 'FAQ', 'Glossario', '\r\n\t\t\t', '\r\n\t\t\t', ' ', ' ', ' ', ' ', ' ', 'Disclaimer', 'Privacy', 'Note Legali', 'Gioco Responsabile', 'Giochi', 'Lottomatica Informa']

Re: LibreOffice e web :la guida.

Inviato: mercoledì 13 aprile 2016, 13:02
da vladboscaneanu
Ciao,sembra che la tua versione Python non suporta le connessioni SSL.
Non me ne intendo molto delle versioni per Ubuntu o Mac,ma forse manca il
modulo py-openssl ,o qualcosa simile...controlla le tue "packages" di sistema.
Non potrai mai aprire nessun sito,che usa una connessione protetta(SSL).
Vedi anche cosa ti da il comando

Codice: Seleziona tutto

import ssl

Re: LibreOffice e web :la guida.

Inviato: giovedì 14 aprile 2016, 0:04
da unlucky83
scoperto il mistero. Il modulo ssl.py è presente ma nel suo codice richiama _ssl.py che invece è assente.
Libreoffice per ubuntu, adopera python 3.5.0, presenta lo stesso file ssl.py di python 3.5.2 istallato sul S.O. e anche in questo percorso manca il file _ssl.py
 Editato: Ho visto in qualche file che si fa richiamo al file _ssl.c, ma ancora non sono riusciuto a trovarlo :? 
import _ssl # if we can't import it, let the error propagate
ImportError: No module named '_ssl'
Googleando un pò, forse ho trovato il modo di risolvere il problema con pyhton istallato sul S.O., perchè qualcuno ha lasciato questo commento:
Did you build the Python from source? If so, you need the --with-ssl option while building.
Appena posso testo questa soluzione e poi faccio sapere.
 Editato: Ho aggiunto l'opzione --with-ssl per il build del programma, ma dopo l'istallazione, ha continuato a darmi errore. Cercando meglio in rete ho visto che sui sistemi linux bisogna verificare prima la libreria libssl-dev...non era istallata.
Ho quindi istallato la libreria, ho aggiunto l'opzione durante il building, ho istallato e infine ho testato il tuo codice test_web.py ed è andato tutto bene :super:
Ho confrontato le directory dei due python e la differenza più importante risulta confrontando la subdirectory site-packages: nella versione di Libre presenta solo il file README.txt
Forse disistallando Libreoffice e reistallandolo, ora che ho aggiunto la libreria libssl-dev, risolvo :?: 

Re: LibreOffice e web :la guida.

Inviato: mercoledì 17 agosto 2016, 15:25
da templare77
Ciao Vlad! Grazie per questa guida! Al di là che python sia meglio di Basic, sapresti dirmi come fare in Basic appunto?

Re: LibreOffice e web :la guida.

Inviato: venerdì 7 ottobre 2016, 16:37
da vladboscaneanu
Per adesso non è fattibile una cosa del genere ,in Basic.
Il problema si presenta nella mancanza di una libreria, per stabilire un colegamento web.
Desolato

Re: LibreOffice e web :la guida.

Inviato: giovedì 23 settembre 2021, 20:16
da RichardIII
Ho avuto lo stesso problema. Beh, visto che non c'è una soluzione, è un peccato. :roll:

Re: LibreOffice e web :la guida.

Inviato: giovedì 23 settembre 2021, 22:36
da marcocurreli
vladboscaneanu ha scritto:Ciao,amici.Ho scoperto (e imparato) finalmente il html-parsing...Vi allego il mio codice (in python) ,versione ultra-sperimentale.
Il file,test-web.py,dovrete copiarlo nella cartella python del vostro LibreOffice (percorso completo)
A me funziona (mi ha copiato l'ultimo messaggio).
Su Linux il percorso è questo: /usr/lib/libreoffice/share/Scripts/python