Categories
php tecnologia

Migrare il proprio blog da Splinder a WordPress 2.3.x

splinder to wordpress importer
Qualche giorno fa, un losco individuo, mi ha chiesto di aggiornare un plugin per migrare blog da Splinder/Motime a WordPress. Ne è uscito un piccolo lavoro di riscrittura ed aggiornamento che pare, dai test fatti, funzionare discretamente.

Il fatto è che attualmente il plugin, anzi l’importer, necessita di un po’ di test.

Quindi se avete intenzione di migrare il vostro blog da Splinder ad una installazione locale di WordPress (niente supporto diretto a WordPress.com, ma si può fare in altri modi) scaricatevi lo script in questione e copiatelo nella cartella wp-admin/import dell’installazione di WordPress sul vostro server.

Dopo di che aggiornate la template di Splinder facendo in modo che sia presente il seguente codice:

[code]

:POSTTITLE:<$BlogItemTitle$>:ENDPOSTTITLE:
:TESTO:<$BlogItemBody$>:ENDTESTO:
:POSTCATEG:<$BlogItemCategories$>:ENDPOSTCATEG:
:POSTCOMMENT:<$BlogItemCommentList$>:ENDPOSTCOMMENT:


:BLOGPAGER:<$BlogPager$>:ENDBLOGPAGER:
[/code]

Infine seguite gli stessi passi riguardanti la configurazione dell’account di Splinder che chiedeva anche Francesco Terenzani, cioè:

Attivare l’impaginazione del blog.
Configura > Impaginazione > Attiva la paginazione del blog: spuntate la voce “Sì”
Potete anche aumentare il numero di post per pagina, questo velocizzerà un po’ l’importazione. Con certe configurazioni di PHP aumentare il numero di post per pagina è indispensabile per evitare un timeout dello script.

Cambiare il formato dell’ora.
Configura > Impaginazione > Formato dell’ora: Selezionate il formato simile a questo “27/09/2006 17:25″

Adesso dal backend di WordPress andate in Manage->Import->Splinder/MoTime e seguite le istruzioni a video.

Ultime note riguardo a questa prima fase di test dell’importer:

  • per funzionare l’importer ha bisogno di PHP 5.2 con modulo CURL abilitato. Se non sapete se il vostro server lo supporta o meno, chiedetelo all’ help-desk, non a me
  • mi piacerebbe ricevere segnalazioni di bug, non richieste di features (a meno che non siano indispensabili).
  • lo script tende, per blog molto corposi e con molti messaggi, ad ammazzare i server o ad andare in timeout… usatelo con cautela, in futuro valuterò di trovare soluzioni alternative per lo spider o almeno a risolvere problemi di timeout facendo ripartire la sessione da dove è stata interrotta.
  • è possibile, una volta importati i post da un blog di Splinder, cancellarli tutti in automatico. Quindi potete provare più volte la stessa importazione senza troppi problemi
  • non è presente un controllo per post doppi o senza titolo, se il post è doppio comparirà due volte se è senza titolo verrà inserito un titolo fittizio.
  • Infine, cosa più importante di tutte, non migro blog di chicchessia! Per questo genere di lavoro c’è già chi si impegna anima e corpo…

Qui trovate il file incriminato: splinder importer 0.6.7 e la sua vecchia versione 0.6.6.

UPDATE
Ho aggiornato l’importer (riscaricatelo) tra le novità introdotte:

  • controllo dei post già importati per evitare post doppi
  • migliorata l’importazione in caso di timeout
  • fatta un po’ di pulizia del codice
  • cancellazione dei post importati e dei metadati salvati

UPDATE 2
Ulteriore aggiornamento (ora la versione è la 0.6), tra le novità:

  • possibilità di scaricare ogni singola pagina degli archivi indipendentemente
  • possibilità di analizzare il blog prima di iniziare i download (da fare per abilitare il primo punto)
  • ulteriore pulizia del codice e refactoring dei metodi di importazione
  • possibilità di limitare il numero di post da importare per ogni giro (per evitare il timeout)

UPDATE 3
Ulteriore aggiornamento (ora la versione è la 0.6.4), tra le novità:

  • migliore importazione dopo errori
  • fix per caratteri non utf8
  • addslash per titoli con apici (e mal interpretati da wp 2.3.2)

UPDATE 4
Ulteriore aggiornamento (ora la versione è la 0.6.5), tra le novità:

  • corretto il baco che non permetteva di salvare le opzioni

UPDATE 5
Ulteriore aggiornamento (ora la versione è la 0.6.6), tra le novità:

  • aggiungo strip_tags per i titoli di splinder

UPDATE 6
Ulteriore aggiornamento (ora la versione è la 0.6.7), tra le novità:

  • aggiornata la regexp per l’ultima pagina dell’archivio

ciuaz

128 replies on “Migrare il proprio blog da Splinder a WordPress 2.3.x”

Scusa se torno a commentare ma mi sono permesso di fare una modifica al php per risolvere il problema del quale avevo accennato (problema che causava la sostituzione di tutti i post di una stessa pagina con il primo post causando ripetizioni e post non importati)

Il problema stava nella paginazione. Mi sono permesso di sostituire:

# Last page
preg_match("#(ultima|last page)#",$contents,$end);

con

# Last page
preg_match("#(ultima \&raquo\;|last page)#",$contents,$end);

(cioè splinder fa link all’ultima pagina scrivendo “ultima »”) In questo modo funziona tutto egregiamente.

Non funzia. Nel senso che non mi fa caricare il plugin, vai a capire perché.
Sia se vado dal backend di wordpress, uploadando il file .zip, che scompattando l’archivio e caricandolo nella directory dei plugin via FTP.
Se torno nel backend a vedere la lista dei plugin, non me lo vede neanche. Nonostante sia sul server.

Ciao Fullo,
so bene che ci sono poche cose irritanti come il trovarsi a fare assistenza a commentatori ignoti per il solo fatto di aver messo a disposizione di tutti uno script. Epperò non sono il primo e non sarò l’ultimo, quindi vado anch’io con la mia domanda, sperando che tu abbia il tempo di darci un’occhiata.

Sto cercando di importare il mio blog di splinder su un’installazione locale di WP (ultima versione: 2.9.2), e lo script sembra funzionare che è una favola eccezion fatta per un problema: per qualche strano motivo l’autore del post importato è sempre lo stesso (cioè io, admin del blog di splinder e user con ID 1 di WP) invece dell’autore originale di splinder. Ho già creato gli autori come user omonimi su WP e provato a modificarne il ruolo, nonchè a ripetere l’importazione, riavviare il server, radere al suolo precedenti importazioni e modificare il template di splinder (anche se il cui codice :POSTAUTHOR::ENDPOSTAUTHOR: , come puoi notare tu stesso su http://inkiostro.splinder.com stampa correttamente il nome dell’autore in pagina). Ti risultano bug in merito? Hai qualche idea di altri tentativi che potrei provare?

Grazie in anticipo,

ink

Ok, dovrei aver risolto grazie a questo commento postato da Michele Bianchi sul blog del buon Beggi: pare esserci un errore nell’espressione regolare che pesca l’autore.

Bisogna aggiornare la riga dell’importer come indica lui (stando attenti a non copiaincollarla dalla pagina web, che come al solito trasforma le virgolette regolari in quelle storte, con il risultato di rompere completamente l’importer) e a quel punto i post vengono importati con l’autore giusto (che viene automaticamente creato se già non esiste).

Ora procedo con l’import: 3200 post to go. Grazie ancora,

ink

nonostante il suggerimento di ink a me importa sempre tutto come Admin.

Qualche altra soluzione???

avevo aggiunto la U a mano ma non mi ero accorta del segno > in più!

Ciao a tutti,
Stò lavorando al trasferimento del Blog di un cliente da Splinder a WordPress grazie al vostro importer. Il problema che mi si pone è che se inserisco nella casella “Splinder/Motime URL:” l’indirizzo del Blog mi vengono importati solo i primi 10 post sebbene nel Blog ci siano centinaia di Post.
Ho provato per cui ad inserire una ad una gli indirizzi relativi alle pagine successive, ma mi capita che se certi post non hanno titolo il post in questione venga importato 10 volte al posto dei post successivi…
Mi viene quindi da domandare: perchè funzioni lo script è necessario che tutti i post abbiano un titolo? ho notato infatti che se nn c’è titolo non viene visualizzato nel template il link alla pagina del singolo post quindi suppongo sia li il problema…o sbaglio?
In attesa di risposta ringrazio tantissimo per il lavoro svolto!!

Silvio

Silvio stesso problema. Non credo che c’entri con i titoli dei post. Da quello che mi hanno detto è colpa di splinder che ha cambiato la paginazione. Mi sa che bisogna aspettare le nuova versione dell’importer ;)

Grazie Carlotta…nei prossimi giorni cercherò di studiarmi l’importer e cercare se riesco a dare un contributo per rimetterlo in funzione…non conosco troppo il PHP ma conoscendo altri linguaggi spero di capirci qualcosa…

Nel caso ovviamente farò sapere qui se ho scoperto qualcosa…

Silvio

Visualizzando un solo post per pagina e facendo importare le URL di questo tipo:

http://xxxx.splinder.com/home?from=0
http://xxxx.splinder.com/home?from=1
http://xxxx.splinder.com/home?from=2
http://xxxx.splinder.com/home?from=

manualmente, funziona…stà di fatto che importare centinaia di post uno alla volta è improponibile…XD
Ora mi ributto a cercare di capire cosa c’è che non va…(anche se non mi ritengo troppo sicuro di poter trovare la soluzione eheheh).

Ehm…chiedo scusa…quel tag è gi presente…non l’avevo notato…
Cmq per ora ho fatto qualche prova ma la mia scarsissima conoscenza del PHP si stà dimostrando insufficente per comprendere a pieno lo script e poter quindi intervenire con cognizione di causa…
Attendo qualche aiuto da utenti più esperti :)

Silvio

Ho trovato il problema…e l’ho risolto per ora in modo provvisorio (ma funzionante):

Le due righe:
# Last page
preg_match(“#(ultima \&raquo\;|last page)#”,$contents,$end);
# Skip per page
preg_match(“#2#”,$contents,$page);
non riescono più ad estrarre i valori di $end e $page.

Ho risolto provvisoriamente modificando la funzione get_pages() in questo modo:

function get_pages()
{
$contents = $this->curl_content($this->blog_url);

if($contents){
# Last page
preg_match(“#(ultima \&raquo\;|last page)#”,$contents,$end);
# Skip per page
preg_match(“#2#”,$contents,$page);
# Page 1
$urls[] = $this->blog_url;
# All pages

echo “Gli URL analizzati sul blog: “.$this->blog_url.” sono: “;

$end[1]=3654;
$page[1]=0;
echo $this->blog_url .”?from=$page[1] “;
echo “end “.$end[1].” “;
echo “page “.$page[1].””;
$skip = 10;

while($page[1]blog_url .”?from=$page[1]”;
$page[1] = $page[1]+$skip;
}
$urls[] = $this->blog_url .”?from=$page[1]”;

echo “Ho identificato “.count($urls). ” pagine da importare.”;

echo “”;

$this->pages = $urls;

return true;
}
return false;
}

Ovviamente può essere migliorata e resa automatica ma per quello mi affido a chi conosce meglio di me il PHP :)

Silvio

Io non sono riuscito a imporate più di una pagina….nel frattempo si è trovata una soluzione migliore?
Grazie
Daniele

Con questa modifica funziona tutto.
Grazie Francesco! :-)


function get_pages()
{
$contents = $this->curl_content($this->blog_url);

if($contents){
preg_match("#ultima \&raquo\;#",$contents,$end);
# Skip per page
preg_match("#2#",$contents,$page);
# Page 1
$urls[] = $this->blog_url;
# All pages

echo "La paginazione sul blog : ".$this->blog_url." ";
echo "end: $end[1], page: $page[1]";
if (count($end) > 1)
{
$skip = $page[1];
while($page[1]blog_url ."?from=$page[1]";
$page[1] = $page[1]+$skip;
}
$urls[] = $this->blog_url ."?from=$page[1]";

echo " è attiva. Ho identificato ".count($urls). " pagine da importare.";
} else " non è attiva, sarà indicizzata solo l'homepage del blog";

echo "";

$this->pages = $urls;

return true;
}else "Non c´e´ il content!";

return false;
}

Purtroppo hanno cambiato nuovamente la regexp.
Queste funzionano per me:


preg_match("#(ultima \&raquo\;|last page)#",$contents,$end);
# Skip per page
preg_match("#2#",$contents,$page);

…cioè, funzionano… sembrano funzionare in quanto:


La paginazione sul blog: http://happycactus.splinder.com
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 39 bytes) in /home5/happycac/public_html/blog/wp-admin/import/splinder.php on line 350

… c’è un modo per risolvere? aumentare la memoria non sembra aiutare… sigh.

Riposto le due regexp:


preg_match("#<a href=\"home\?from=([0-9]+)\">(ultima \&raquo\;|last page)#",$contents,$end);
# Skip per page
preg_match("#<a href=\"home\?from=([0-9]+)\">2</a>#",$contents,$page);

(salvo errori dei tag…)

Comments are closed.