Archive for the ‘python’ tag
Migrare da Bloggers.it a Movable Type e Wordpress
Oggi è possibile. Forse lo era anche ieri, ma nessuno sa se lo sarà anche domani. Fossi in voi approfitterei dell’occasione: esportate il vostro blog da Bloggers.it oggi, ed evitate il rischio che vi siano in futuro cambi di formato di export, o impossibilità dello stesso. Scusate, eh, signori di Bloggers.it, ma già come lettore sono molto scontento; figuriamoci poi se avessi un blog sulla vostra piattaforma: sarei viola di rabbia. Perciò ritengo un Diritto Inviolabile del Blogger fare uso di questo script e farvi ciao ciao con la manina. Senza rancore.
StM in associazione con Obi-Fran Kenobi.
Script
Senza tante parole, se già sapete di cosa si tratta, a voi lo script di conversione. Perché possiate scaricarlo è necessario che io mantenga l’estensione .txt, ma normalmente dovrebbe avere estensione .py.
La data di revisione è contenuta all’interno. La licenza di utilizzo è quella di attribuzione.
A chi interessa
Questo post interessa chiunque sia in possesso di un blog sulla piattaforma bloggers.it (ora, dicono, blogdrops.com) e che voglia trasferire il contenuto del proprio blog (post, autori, categorie, commenti) su piattaforma Movable Type o Wordpress (su dominio proprio o sulla piattaforma gratuita wordpress.com). Qui si terrà conto solo dell’import su Wordpress in quanto non si conosce Movable Type.
Funzionamento in breve e requisiti
Il vostro backup da bloggers.it, contenuto in un set di file .xml, viene convertito in un file di testo costruito secondo il formato di export di Movable Type (che consiglio a chiunque voglia cimentarsi in attività del genere, in quanto completo e molto semplice). Per effettuare questa operazione avete bisogno, oltre che dello script, anche dell’interprete python per eseguirlo. Potete scaricare e installare tale interprete per il vostro sistema operativo da qui (se non l’avete già installato, e se usate linux potrebbe essere questo il caso):
http://www.python.org/download/
Se siete già pratici di programmazione e/o python, invocate una volta lo script senza parametri o date uno sguardo al codice per avere le istruzioni di utilizzo. Altrimenti continuate a leggere.
Procedura passo-passo: 1 - Esportazione da Bloggers.it
Sezione a cura di Obi-Fran Kenobi.
Salvare il backup dei vostri interventi è meccanicamente facile, il problema sta nel beccare quei dieci minuti in cui i server di bloggers rimangono up.
Prima di tutto, ovviamente, loggate nel pannello di amministrazione. Gli interventi che volete siano inclusi nel file di backup devono essere prima archiviati con lo script integrato. Controllate quindi che sulla colonna di sinistra non appaia il messaggio “E’ necessario archiviare”. In caso appaia, cliccatelo e attendete che bloggers archivi i vostri post. Se non l’avete mai fatto (e in questo caso sareste stati più saggi e intelligenti di me) occorreranno alcuni minuti.
Una volta finita l’archiviazione, dal pannello principale, cliccate su “Profilo utente“, nel riquadro in basso a sinistra chiamato “Modifica” (img 1).
(img1)
Arriverete alla pagina “I miei dati personali“. Cliccate sull’ultima opzione, “Backup del blog” (img2).
(img2)
Infine, sulla finestra che apparirà, cliccare “Scarica” e salvate il file .zip che il browser vi porgerà dove preferite (img3).
(img3)
Procedura passo-passo: 2 - Download e configurazione dello script
Scaricate lo script dal link che trovate qui in giro, e apritelo con un editor di testo; in effetti al momento del download avrà probabilmente estensione .txt (per permettervi di scaricare il sorgente senza problemi). Noterete che il sorgente è già ricolmo di commenti (tutto ciò che segue un # viene ignorato dall’interprete al momento dell’esecuzione), ma ripeterò qui tutti i concetti rilevanti.
A voi interessa solo impostare alcune variabili, ma potete ignorare il resto del codice.
importa_chiusura_commenti=0
Questa variabile, se impostata a 1, fa in modo che lo script legga da Bloggers.it per quali post non sia più possibile inserire commenti, e riporti tale informazione su wordpress. Da come mi è stato spiegato, la procedura di archiviazione di bloggers comporta tra le altre cose la chiusura dei commenti per i post che vengono archiviati. Vista l’assurdità della cosa, io fossi in voi lascerei questa variabile a 0, ma impostatela a 1 se invece preferite così.
url_immagini_bloggers="http://www.bloggers.it/{nomeblog}/itcommenti/"
url_immagini_destinazione="http://www.nomedominio.boh/wp-content/uploads/imgbloggers/"
Le due variabili qua sopra effettuano nei post (e solo nei post, attualmente) la sostituzione di una particolare stringa con un’altra; tendenzialmente la cosa dovrebbe servirvi qualora intendiate caricare sul vostro dominio le immagini che al tempo furono caricate su bloggers.it, cosa quantomai consigliabile. Verificate che effettivamente su bloggers.it le immagini fossero nella sottocartella /itcommenti/, e mettete in url_immagini_destinazione la url completa di dove avete caricato le immagini. Ricordatevi comunque che l’output sarà un normale file di testo, su cui perciò potrete effettuare tutte le sostituzioni ed elaborazioni del caso. Se non intendete fare uso di questa sostituzione automatica, date alle due variabili il valore della stringa vuota (”") o due valori identici.
Date uno sguardo alla sezione Questioni di Encoding se scoprite/pensate di avere problemi di codifica caratteri, per qualche impostazione aggiuntiva.
Procedura passo-passo: 3 - Esecuzione dello script
A questo punto potreste cambiare l’estensione del file da .txt a .py, almeno per motivi filologici (altrimenti sostituite .txt ogni volta che scrivo .py nel seguito). L’invocazione pura e semplice dello script, per chi sa maneggiare python, consta del seguente comando:
$ [eventuale path]python Bloggers2MovableType.py bloggers.it/basedati/nomeblog/archivio > mt-export.txt
Dove “python” è un interprete python, “bloggers.it/basedati/nomeblog/archivio” è dove sono conservati tutti i file .xml dell’archivio di bloggers, e “mt-export.txt” è il vostro file di output. Se omettete la parte “> mt-export.txt”, il risultato dell’elaborazione vi verrà visualizzato a schermo. Per [eventuale path] s’intende il nome della cartella in cui si trova l’eseguibile dell’interprete python (su windows si chiama python.exe, altrove solo python), qualcosa tipo “\Python\bin” (verificate dove lo avete installato), necessario se non è nella vostra variabile PATH.
Esempio pratico
Supponiamo che:
- python sia installato in C:\Python25\, e quindi l’eseguibile dell’interprete sia C:\Python25\python.exe
- abbiate gli archivi in C:\bloggers.it\basedati\nomeblog\archivio
- abbiate lo script in C:\Bloggers2MovableType.py
- vogliate ottenere il file convertito in C:\export.txt
La sequenza di comandi diventa:
$ cd C:\ $ \Python25\python.exe Bloggers2MovableType.py \bloggers.it\basedati\nomeblog\archivio > export.txt
Ed è tutto.
L’elaborazione si interrompe se incappa in un qualsiasi errore non gestito: ve ne accorgete perché le ultime (uniche, se state scrivendo su file) righe di output a schermo parlano di eccezioni o qualcosa del genere. Se non vedete errori una volta terminata l’elaborazione (in fondo a tutto, se state visualizzando a schermo), allora questa è filata liscia.
Se non avete la minima idea di cosa sia e come funzioni questo python che vi ho fatto scaricare, abbiate pazienza e prima o poi scriverò qualche istruzione anche per voi.
Procedura passo-passo: 4 - Import in Wordpress
(Va da sé che vi consiglio fare una prova di importazione in un blog creato apposta ed eliminabile)
Accedete alla dashboard di Wordpress. Fate un controllo in Options -> Reading se la codifica caratteri sia UTF-8, e in caso contrario date una scorsa alla sezione Questioni di Encoding prima di procedere. Per l’import vero e proprio, andate in Manage -> Import, e cliccate su “Movable Type and TypePad”, caricate il file e seguite le istruzioni. Una nota, se vi è capitato di scrivere post con nomi utente diversi quando in realtà eravate sempre voi: avrete possibilità, nella pagina successiva, di mappare ciascuno di essi a utenti esistenti o di crearne di nuovi; in seguito potrete comunque eliminare gli utenti che non vi servono e specificare a Wordpress di attribuire i loro post ad un altro utente.
Terminato l’import non c’è più molto da dire: divertitevi col vostro nuovo vecchio blog su Wordpress!
Questioni di encoding
Esclusa la documentazione, un terzo del tempo di scrittura dello script è stato assorbito dalla gestione dei problemi di codifica caratteri. Tutti i file xml dell’export di Bloggers.it dichiarano di essere codificati in UTF-8; ma quelli più vecchi, se dati in pasto a un parser (=lettore e interprete) xml, generano errore a causa della presenza di caratteri non UTF-8 all’interno del file. Tali caratteri, in genere, sono le lettere accentate tanto amate da noi italiani. Lo script, in caso di errore durante la lettura di un file xml, fa un secondo tentativo, provando con un’altra codifica caratteri, attualmente la ISO-8859-1 (altrimenti detta Latin-1), che è quella che usa la stragrande maggioranza degli utenti italiani (corrispondente grossomodo a una qualche codifica di Windows che ha un nome diverso). Lo script restituisce come output un testo con codifica UTF-8, che è la codifica raccomandata per Wordpress. Se tutto va bene, non dovrete intervenire in queste lambiccate faccende.
Se qualcosa va male, ma non troppo, potreste dover modificare una o più di queste variabili nello script:
# codifica caratteri dichiarata nel file xml di export (vedere prima riga, in genere UTF-8) declared_charset_encoding="UTF-8" # codifica caratteri presumibilmente REALE di alcuni file xml di export (per archivi vecchi) real_charset_encoding="ISO-8859-1" # codifica caratteri desiderata per il file di output. UTF-8 e' il default per Wordpress, # ed e' consigliato. wanted_charset_encoding="UTF-8"
Ovviamente speriamo di no.
Assistenza e suggerimenti
Questo è il mio primo script in python, perciò può non essere perfetto: saranno molto graditi suggerimenti da programmatori esperti del linguaggio. Attualmente la gestione degli errori è molto limitata, quindi in caso di errori vi vedrete apparire messaggi “strani” (per chi non è programmatore) piuttosto che spiegazioni stilate di mio pugno. Il senso in genere è comprensibile ugualmente, altrimenti (sigh) chiedete assistenza qui nei commenti riportando il messaggio di errore per intero (se non è già presente).
Di una cosa sola vi prego: non fate domande prima di aver letto e cercato di comprendere tutto il post. Io ho impiegato del tempo a scriverlo proprio per evitare di fare assistenza permanente, che per esperienza so essere in grado di fagocitare porzioni rilevanti della vita di un essere umano. Le vostre domande potranno comunque contribuire a migliorare lo script o la documentazione, quindi non vi sto vietando di farne :D
Potrebbe essre che prima o poi modificheranno qualcosa nel formato di export di Bloggers.it (abitudine diffusa nel mondo informatico, specie tra i perdenti o coloro che non stanno vincendo quanto vorrebbero). Quando e se succederà, spero avrò tempo per dedicarmi alle modifiche, o in caso contrario che ci sia qualcuno che possa occuparsene.
Problemi & Soluzioni
Problema potenziale: per via del formato di export di Movable Type, se nel vostro blog esiste una riga costituita solo dalla stringa “—–” o “——-” (esattamente all’inizio della riga), potrebbe esserci una perdita di dati durante il trasferimento (quelle stringhe vengono interpretate come fine sezione). Sto pensando se me ne devo preoccupare o no, visto che da quel che ho visto è probabile che il problema si verifichi solo nei commenti.
Problema: mi dice “xml.parsers.expat.ExpatError: no element found: line 1, column 0″. Adesso ti picchio. Soluzione: nella cartella contenente gli archivi xml ci dev’essere qualche file intruso - ad esempio è capitato che vi fossero file di lunghezza nulla (0 byte). Eliminate quei file e riprovate.
Versioni
20080202 - impostato ISO-8859-1 come charset predefinito (e io che mi credevo che ISO-8859-15 andasse bene).
20080210 - ora lo script legge solo i file .xml contenuti nella cartella (visto che in alcuni sistemi operativi o usando alcuni programmi vengono creati in giro file che non c’entrano niente).
