Pagina 2 di 4

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 0:10
da Zoff
Per i bbcode potresti usare moduli già pronti tipo: http://code.google.com/p/postmarkup/

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 0:59
da vaeVictis
@cristian_c
Che versione di python usi?
output di

Codice: Seleziona tutto

python --version
Probabilmente non hai gli altri moduli, che ho importato ma che non servono.
Commenta (mettendo # all'inizio) tutti gli import, eccetto qullo di mechanize.

Fammi sapere.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 2:42
da crap0101
cristian_c » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4206064#p4206064]07/10/2012, 23:18[/url] ha scritto:Ok, l'ho lanciato ma ho dovuto installare il pacchetto python-mechanize :)

Comunque, esce immediatamente un errore:

Codice: Seleziona tutto

python mp.py
Traceback (most recent call last):
  File "mp.py", line 6, in <module>
    import argparse
  File "/home/cristian/mp/argparse.py", line 1
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    ^
SyntaxError: invalid syntax
hai salvalto la pagina del link, anzichè il modulo che mostra. Sulla sinistra si può cambiare la modalità di visualizzazione, se scegli raw ti fa vedere/salvare il file come testo.
btw, se la versione di python è >= a 2.7 non devi installare nulla, se è minore nei repo c'è il pacchetto python-argparse.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 7:30
da cristian_c
Ho la versione 2.7, ma non è apparso nulla :nono:

Codice: Seleziona tutto

Python 2.7.3
Ora provo a commentare gli import (tranne mechanize), vediamo che succede :)- Provo a vedere anche per python-argparse :-)

Edit: vaevictis, sei un grande! Sta scaricando gli xml :o

Edit2: mi ha scaricato 29 xml. Le ultime due righe di output sul terminale sono:

Codice: Seleziona tutto

./ucp.php?i=pm&mode=view&action=view_folder&f=0&st=0&sk=t&sd=d&start=900
./ucp.php?i=pm&mode=view&action=view_folder&f=0&st=0&sk=t&sd=d&start=900 non trovato
Comunque i messaggi sono ordinati dal più recente al più vecchio, ma il più vecchio di tutti c'è il fondo all'ultimo file, quindi credo li abbia scaricati tutti :sisi:

Sono troppo contento, vi voglio bene :lol: (scusate i toni affettuosi :-P )

Crap, python-argparse non c'è nei repo, c'è solo python-commando :-)

Edit3: ho scoperto cos'è successo: non mi ha scaricato la prima pagina dei messaggi, cioè mi ha scaricato soltanto 29 pagine invece di 30 :-(

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 18:09
da vaeVictis
@crap0101
hai salvalto la pagina del link
LOL, non me ne ero proprio accorto :)

@cristian_c
Edit3: ho scoperto cos'è successo: non mi ha scaricato la prima pagina dei messaggi, cioè mi ha scaricato soltanto 29 pagine invece di 30 :-(
È il normale comportamento (temporaneo) dello script.
Se vai a rivedere il messaggio in cui ho allegato lo script, lo avevo specificato.
Non ti preoccupare, poi lo scaricherà normalmente.
Edit2: mi ha scaricato 29 xml. Le ultime due righe di output sul terminale sono:
./ucp.php?i=pm&mode=view&action=view_folder&f=0&st=0&sk=t&sd=d&start=900
./ucp.php?i=pm&mode=view&action=view_folder&f=0&st=0&sk=t&sd=d&start=900 non trovato
Lo script, in sostanza, apre la prima pagina della inbox e vede il primo dei link che al suo interno contenga la parola "view_folder" e ne controlla il valore associato a start (che di norma è 30).
Poi in base a questo valore, fa un ciclo per controllare se nella pagina esiste un link con questa struttura

Codice: Seleziona tutto

./ucp.php?i=pm&mode=view&action=view_folder&f=0&st=0&sk=t&sd=d&start=NUMERO
in cui la posto di numero ci si mettono i multipli di 30.
Quando ti dice che non trova la pagina, è perché non c'è il link, ovvero sono fine le pagine della inbox.
Si deve fare in questo modo (controllare se esiste il link e poi eventualmente aprirlo) perché in realta se si prova ad aprire la pagina con start=900 (o anche maggiori) tale pagina viene aperta... ma non è altro che l'ultima pagina della tua inbox, cui viene "cambiato l'url".
... pertanto si deve fare il controllo, per vedere se la pagina su cui sei già abbia un link a quella che (nel ciclo) viene dopo.
Se tale link esiste, la apri e scarichi il file XML. Se tale link non esiste, vuol dire che hai controllato tutta la inbox e lo script termina avvertendoti (per il momento, mentre poi farà solo quello che deve).

Mi pare che lo script ti funzioni, quindi procedo a implementare le sue ulteriori funzionalità.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 18:35
da vaeVictis
Interessante, grazie. Non lo conoscevo.
Se ho capito bene, converte il bbcode in html. Il fatto è che per il momento devo ridurre i messaggi privati a testo piano in documenti txt.
Per quando invece dovrò prelevare tutto lo storico del messaggio e riportarlo in una pagina html, credo che mi sarà utile.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 20:51
da vaeVictis
Giusto per fare due risate tutti insieme...
Avevo il computer così imballato che non riuscivo a fare una iso per reinstallare Ubuntu. Mi si interrompeva sempre il processo con un errore.
... ho trovato (allegato di un libro che avevo compato) il disco con la iso di ubuntu 7.10
Ho installato quella, ho fatto la iso della 10.04 e l'ho reinstallata.
... un'esperienza teribbile!

Tornando al progetto...
Ora abbiamo la "certezza" che i file XML vengono correttamente scaricati.
Mi chiedo se sia meglio scaricarli in locale e poi elaborarli.
Non scaricarli in locale ed elaborarli con un processo che parte in parallelo ogni volta che si è finito di scaricare il documento XML (non in locale, ma scaricare nel senso di metterlo in una variabile dello script).
... me lo sto chiedendo perché non sapendo una virgola di programmazione web, non so cosa comporti l'interruzione della connessione o una eventuale "scadenza" della sessione.
A dire il vero non so neanche se tutto ciò sia un dubbio sensato.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 21:18
da cristian_c
Dimmi se ho capito bene: dovrei scaricare la prima pagina manualmente? :D
Tornando al progetto...
Ora abbiamo la "certezza" che i file XML vengono correttamente scaricati.
Mi chiedo se sia meglio scaricarli in locale e poi elaborarli.
Non scaricarli in locale ed elaborarli con un processo che parte in parallelo ogni volta che si è finito di scaricare il documento XML (non in locale, ma scaricare nel senso di metterlo in una variabile dello script).
... me lo sto chiedendo perché non sapendo una virgola di programmazione web, non so cosa comporti l'interruzione della connessione o una eventuale "scadenza" della sessione.
A dire il vero non so neanche se tutto ciò sia un dubbio sensato.
Potresti fare come apt. Prima scarica e poi elabora :D

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 21:22
da vaeVictis
Non ti preoccupare di scaricare la prima pagina (a meno che non ti serva).
Nella prossima versione dello script il problema non si presenterà e quella pagina sarà scaricata come le altre.

Sì, io sarei orientato per scaricare e poi elaborare.
Però si aprono una marea di inghippi anche così, come per esempio il non andare a sovrascrivere directory o file già esistenti e cose di questo tipo.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 21:30
da cristian_c
vaeVictis » [url=http://forum.ubuntu-it.org/viewtopic.php?p=4206820#p4206820]6 minuti fa[/url] ha scritto:Non ti preoccupare di scaricare la prima pagina (a meno che non ti serva).
Nella prossima versione dello script il problema non si presenterà e quella pagina sarà scaricata come le altre.

Sì, io sarei orientato per scaricare e poi elaborare.
Però si aprono una marea di inghippi anche così, come per esempio il non andare a sovrascrivere directory o file già esistenti e cose di questo tipo.
Potresti associare ad ogni scaricamento una cartella e un'etichetta (numero progressivo). Dove vai a salvare controlli quali cartelle sono presenti e regoli la numerazione di conseguenza. Troppo contorto? :D

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 21:31
da vaeVictis
vedo come regolarmi e ti faccio sapere.
:)

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 21:36
da cristian_c
Grazie una cosa: non so se posso scaricarmi la prima pagina e cancellare i messaggi nella mia casella per liberarla. Dico questo perché non so se vuoi che faccia da cavia per altre prove future (e quindi in tal caso dovrei avere la casella non vuota di messaggi). Anche perché devo vedere se il forum mi permette di cancellare in un botto tutti i messaggi. In caso contrario dovrei chiederti di aggiungere la funzionalità 'cancella tutti i messaggi nella casella, ma non quelli in attesa' (cosa che comunque credo difficile visti i tuoi attuali impegni) :shy:

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 22:08
da vaeVictis
Se hai bisogno di svuotarla, cancella pure.
In caso servisse, te la riempo io di spam... :D

Il forum non permette di eliminare in un botto tutti i messaggi. Pertanto, che te lo dico a fare, è una funzione che avevo previsto di includere nello script.
En passant, ti dico che lo script prevederà la possibilità di:
1) scaricare i documenti XML (o in uno degli altri formati) dei messaggi contenuti nella inbox e/o nella outbox e/o nella sentbox.
2) scaricare ed elaborare i messaggi in un file .txt di testo piano (sempre scegliendo una o più delle cartelle inbox, outbox, sentbox).
In questo caso, si scarica però il documento XML che mi sembra il più facile da elaborare.
3) eliminare il contenuto di una o più delle cartelle inbox, outbox e sentbox, sia che si scarichino i messaggi, sia che si richieda solo questa azione.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: lunedì 8 ottobre 2012, 22:22
da cristian_c
Allora aspetterò la tua implementazione per poter cancellare i messaggi di cui ho già fatto il backup. Fai pure con calma, quanto ci metti non importa, tanto io aspetto :)

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 6:31
da vaeVictis
Pare che ho capito come cancellare i messaggi, quindi diciamo che il problema è risolto.


Visto che sei il betatester ufficiale, ti lascio questo script:

Codice: Seleziona tutto

#! /usr/bin/env python
# -* coding: iso-8859-15 -*-

import argparse


if __name__ == '__main__':
	parser = argparse.ArgumentParser()
	parser.add_argument('--folder', nargs='+', choices=['inbox', 'outbox', 'sentbox'], required='True')
	parser.add_argument('--action', nargs='+', choices=['downloadPlain', 'downloadXML', 'downloadCSV', 'downloadCSV_Excel', 'empty'], required='True')
	
	arguments = parser.parse_args()
	for folder in arguments.folder:
		print "Verrà elaborata:", folder
		if 'downloadPlain' in arguments.action:
			print "\tVerranno scaricati i messaggi in file txt"
		if 'downloadXML' in arguments.action:
			print "\tVerrà scaricato il file XML contenente i messaggi"
		if 'downloadCSV' in arguments.action:
			print "\tVerrà scaricato il file CSV contenente i messaggi"
			print "\tDeve pertanto essere specificato il separatore e l'allegato"
		if 'downloadCSV_Excel' in arguments.action:
			print "\tVerrà scaricato il file CSV_Excel contenente i messaggi"
		if 'empty' in arguments.action:
			print "\tLa cartella" , folder, "verrà quindi svuotata"
(per il quale, serve sempre avere argparse nella stessa directory).
Dal momento che ho finito di capire come gestire le varie cose, se hai tempo, dagli un'occhiata.
Serve per mettersi d'accordo circa la gestione di quello che si può fare con questo script, avendo il codice davanti (che per quanto mi riguarda è meglio).
In pratica, puoi lanciare lo script senza parametri e ti viene stampato a video l'help... e anzi, dimmi se si capisce l'help che viene prodotto. Altrimenti modifico un pochino il comportamento di argparse.
Lo script, altrimenti, accetta due opzioni, "--folder" e "--action".
La prima, "folder", accetta i tre parametri "inbox", "outbox" e "sentbox". Possono essere dati anche tutti insieme. E rappresentano le cartelle su cui si vuole lavorare.
L'opzione "action" indica allo script cosa si vuole fare... e le scelte possono essere downloadPlain, downloadXML, downloadCSV, downloadCSV_Excel ed infine empty. Possono essere date anche tutte insieme.
L'unica cosa che non so se sia "buona" è che se si elencano più di una "folder", su ognuna di esse verrà effettuata ognuna della azioni in action.
Per rendere il tutto più chiaro, eccoti alcuni esempi d'utilizzo:

Codice: Seleziona tutto

vaevictis@HAL:~/Programmazione/python/estrazioneMessaggiForum$ ./recuperoMessaggi.py --folder inbox sentbox --action downloadPlain empty
Verrà elaborata: inbox
	Verranno scaricati i messaggi in file txt
	La cartella inbox verrà quindi svuotata
Verrà elaborata: sentbox
	Verranno scaricati i messaggi in file txt
	La cartella sentbox verrà quindi svuotata
vaevictis@HAL:~/Programmazione/python/estrazioneMessaggiForum$ ./recuperoMessaggi.py --folder sentbox --action downloadPlain empty
Verrà elaborata: sentbox
	Verranno scaricati i messaggi in file txt
	La cartella sentbox verrà quindi svuotata

Per il momento, non mi viene in mente altro da aggiungere, eccezione fatta per una "action" che permetta di scaricare lo storico dei messaggi in un file html... ma a quello ci si pensa dopo, che per il momento è troppo complesso.
Ci sarebbe, poi, da aggiungere un modo per modificare la procedura di default per dare il nome al messaggio. Per il momento, come detto nei messaggi precedenti, penso di creare una directory di nome "inbox", "outbox" o "sentbox", con la data. E al suo interno mettere i file txt con mittente, oggetto e data nel nome del file.
Ovviamente se hai suggerimenti non ti fare scrupoli.



A breve dovremmo avere un primo script.
Non saprei come regolarmi, per postare il materiale (con licenza e tutto il resto).
Che dici, edito il primo messaggio lasciando il solo ultimo script aggiornato, con magari uno storico delle eventuali modifiche apportate?
Dici che può andare?

p.s.:
per i dettagli su come si cancellano, si può leggere (ridendo) questa discussione.
:lol:

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 8:59
da cristian_c
Se lancio lo script senza parametri, ottengo sempre l'errore:

Codice: Seleziona tutto

python mp.py
Traceback (most recent call last):
  File "mp.py", line 4, in <module>
    import argparse
  File "/home/cristian/mp/argparse.py", line 1
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    ^
SyntaxError: invalid syntax
Per quanto riguarda la funzione 'empty', prima di rischiare fare danni, vorrei sapere se via via che viene svuotata la casella inbox, essa viene riempita dai messaggi in attesa (tenuti fuori perché la casella era piena). Può essere un problema? :)
A breve dovremmo avere un primo script.
Non saprei come regolarmi, per postare il materiale (con licenza e tutto il resto).
Che dici, edito il primo messaggio lasciando il solo ultimo script aggiornato, con magari uno storico delle eventuali modifiche apportate?
Dici che può andare?
Io posterei il nuovo script in allegato, al posto di quello attuale, e scriverei il changelog sempre nel primo post (tipo: 'aggiunta funzionalità xyz, ecc...) :)
p.s.:
per i dettagli su come si cancellano, si può leggere (ridendo) questa discussione.
La discussione può essere utile per chiunque si imbatta nello stesso problema (a livello didattico) :)

Comunque, con questo script stai andando forte. Sei ufficialmente uno sviluppatore di software :D

P.S. Non dimenticarti il 'versioning' :lol:

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 10:20
da vaeVictis
L'errore che ottieni... te l'aveva spiegato crap0101
Hai scaricato la pagina e non il pacchetto argparse... anche perché temo di aver dato male il link :D
Per scaricare il pacchetto argparse clicca qui... poi dovresti avere il modulo argparse.py nella directory dove il tuo browser salva i file. Prendilo e mettilo nella directory dove hai anche lo script.
Per quanto riguarda la funzione 'empty', prima di rischiare fare danni, vorrei sapere se via via che viene svuotata la casella inbox, essa viene riempita dai messaggi in attesa (tenuti fuori perché la casella era piena). Può essere un problema?
Buona osservazione, non ci avevo pensato.
Devo controllare... quando trovo il tempo di riempirmi la cartella degli inbox con mondezza varia, per verificare il comportamento.
Un metodo per aggirare il problema, di sicuro, lo trovo :)
Comunque, con questo script stai andando forte. Sei ufficialmente uno sviluppatore di software
BOOM! Lalléro! :p
P.S. Non dimenticarti il 'versioning'
Sarebbe?

Ciao.

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 10:43
da cristian_c
Ok, ho fatto. Ora è uscito un altro errore (sempre lanciando lo script senza argomenti):

Codice: Seleziona tutto

python mp.py
Traceback (most recent call last):
  File "mp.py", line 4, in <module>
    import argparse
  File "/home/cristian/mp/argparse.py", line 609
    yield from get_subactions()
             ^
SyntaxError: invalid syntax
Buona osservazione, non ci avevo pensato.
Devo controllare... quando trovo il tempo di riempirmi la cartella degli inbox con mondezza varia, per verificare il comportamento.
Potresti autoinviarti mp spammosi, e se vuoi contribuisco anch'io. Anzi, utenti di tutti il forum, potete rimpire la casella messaggi di vaevictis con tonnellate di spam. È per una buona causa :lol:
Sarebbe?
Semplicemente, puoi numerare i vari rilasci dello script tramite numero progressivo (ad esempio 0.1, 0.2, ecc...) :D

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 10:48
da vaeVictis
NUOOOO! Pure argparse buggato!!!
Io questa versione non l'ho mai usata ma importando mi dà lo stesso errore:

Codice: Seleziona tutto

>>> import argparse
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "argparse.py", line 609
    yield from get_subactions()
             ^
SyntaxError: invalid syntax
Ora non ho modo di controllare, ma credo sia un errore di retrocompatibilità.
Scarica il modulo argparse da qui.
Come prima, clicca e poi hai argparse.py nella directory degli scaricati.
È quello che sto usando io e che non dovrebbe dare problemi con la tua versione di python (che se ricordo bene è la 2.6.qualcosa)

Re: [Progetto Script] Recuperare il propri messaggi privati

Inviato: martedì 9 ottobre 2012, 11:18
da cristian_c
Ok, ora l'help appare:

Codice: Seleziona tutto

python mp.py
usage: mp.py [-h] --folder {inbox,outbox,sentbox} [{inbox,outbox,sentbox} ...]
             --action
             {downloadPlain,downloadXML,downloadCSV,downloadCSV_Excel,empty}
             [{downloadPlain,downloadXML,downloadCSV,downloadCSV_Excel,empty} ...]
mp.py: error: argument --folder is required
È quello che sto usando io e che non dovrebbe dare problemi con la tua versione di python (che se ricordo bene è la 2.6.qualcosa)
2.7.3 :)

Mi raccomando, non ti ammazzare di lavoro per questo script. Piano piano si fa tutto :D