RSS validi e robusti in bbPress

Nel mio precedente articolo sulle risorse più utili per bbPress vi avevo preannunciato alcuni problemi con i feed RSS, almeno quelli del tema di default (Kakumei). Credo comunque che molti temi derivati utilizzino il template degli RSS di default, in quanto non c’è poi molto da cambiare.

Questa è la lista dei problemi che ho riscontrato finora e che ho risolto (spero) nel sito che amministro:

  • Il contenuto dei messaggi non viene processato dai plugin. Se ad esempio uso il plugin che mi sostituisce le emoticon digitate con immagini di smilies, nei feed RSS continuo a vedere le emoticon testuali, e così via.
  • Una descrizione del sito lunga o con il carattere di virgoletta doppia “»” (che viene inserito automaticamente da bbPress!) spesso “rompe” l’anteprima del feed in Firefox, mentre ad esempio su Google Reader funziona.
  • Le date vengono tradotte in lingua se si usano dei file di localizzazione, violando il formato RFC-822 e quindi quello RSS.
  • Bisogna assicurarsi che il feed non contenga codice HTML puro, o in alternativa che questo venga opportunamente isolato nei tag CDATA e filtrato (c’è un problema con il carattere di spazio lungo   per esempio).
  • Quando si prende il testo del messaggio processato dai plugin si ottiene una doppia codifica (e pure insolita) per il carattere ampersand “&”.

Bando alle ciance, questo è il codice. Dovete aprire la cartella del vostro tema, cercare il file rss2.php e sostituire integralmente il contenuto con questo:


<?php
header( 'Content-Type: text/xml; charset=UTF-8' );
echo '<' . '?xml version="1.0" encoding="UTF-8"?' . '>' . "\n";
bb_generator( 'comment' );

function datefix($buffer) {
	/*
	 * fix della data in modo da tenerla in inglese, rispettando
	 * le specifiche dei feed RSS
	 */
	 return gmdate('D, d M Y H:i:s +0000', $buffer);
}

function callback($buffer)
{
	/*
	 * sistema il codice rimuovendo la doppia codifica di "&" e
	 * rimuove il carattere "&nbsp;" che crea problemi con UTF-8
	 * in questo modo ho il testo del post dopo che i plugin (tipo
	 * le faccine) hanno applicato le loro modifiche html e ritorno
	 * il codice html senza entities ma in forma pura
	 */

	$single = str_replace("&#"."038;", "&", $buffer);
	$spaced = str_replace("&nbsp;", " ", $single);
	return html_entity_decode($spaced);
}

?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><?php echo $title; ?></title>
		<link><?php echo $link; ?></link>
		<description><![CDATA[<?php echo $description; ?>]]></description>
		<language><?php esc_html( bb_option('language') ); ?></language>
		<pubDate><?php echo gmdate('D, d M Y H:i:s +0000'); ?></pubDate>
		<?php bb_generator( 'rss2' ); ?>
		<textInput>
			<title><![CDATA[<?php _e('Search'); ?>]]></title>
			<description><![CDATA[<?php _e('Search all topics from these forums.'); ?>]]></description>
			<name>q</name>
			<link><?php bb_uri('search.php'); ?></link>
		</textInput>
		<atom:link href="<?php echo $link_self; ?>" rel="self" type="application/rss+xml" />

<?php foreach ($posts as $bb_post) : ?>
		<item>
			<title><?php post_author(); ?> <?php _e('on')?> "<?php topic_title( $bb_post->topic_id ); ?>"</title>
			<link><?php post_link(); ?></link>
			<pubDate><?php

			ob_start("datefix");
			bb_post_time('U');
			ob_end_flush();

			?></pubDate>
			<dc:creator><?php post_author(); ?></dc:creator>
			<guid isPermaLink="false"><?php post_id(); ?>@<?php bb_uri(); ?></guid>
			<description><![CDATA[<?php

			ob_start("callback");
			post_text();
			ob_end_flush();

			?>]]></description>
		</item>
<?php endforeach; ?>

	</channel>
</rss>

Potete verificare che il codice generato è correttamente validato sul sito del validatore W3C. Quello del sito dei Giovani Matematici di Vicenza è valido. 😛

Sono contento di aver risolto i problemi del feed (sperando di non averne causati altri) ma soprattutto questo mi ha permesso di imparare qualcosa in più sul formato RSS (che mi ha sempre affascinato ma di cui non ho mai saputo nulla). Fatemi sapere se avete problemi col codice o se volete suggerirmi delle migliorie!

Con i feed di Blogger, Feed Sifter batte Yahoo! Pipes

Se devo essere sincero, non so dire se si tratti di un caso isolato, fatto sta che mi sono trovato di fronte a dover risolvere un problemino della piattaforma Blogger. Ho deciso di iscrivermi tramite RSS al blog di Innovatel. Tuttavia (in tutta sincerità) devo dire che non sono appassionato di ciclismo, pertanto quella parte di post non suscitava il mio interesse. 😛

Ho deciso di sottoscrivere pertanto solo la categoria Linux, e nel caso non ci fossero state le categorie, il tag omonimo. In WordPress, fare una cosa del genere è semplicissimo, basta modificare l’indirizzo del blog in questo modo: https://andrealazzarotto.com/tag/linux/feed/

Né più né meno. Invece per Blogger non sono riuscito a fare una cosa del genere. Ho deciso quindi di utilizzare Yahoo! Pipes, uno strumento molto potente e versatile per manipolare i feed RSS in modo miratissimo. Ha anche una interfaccia semplice (anche se all’inizio può confondere). Il problema però si è presentato qui. Non so per quale motivo, Pipes non riusciva a filtrare il feed correttamente.  Neppure il feed Feedburner del blog migliorava le cose (forse non era attivo l’ottimizzatore di compatibilità?).

Stanco di essere lì a tirare fuori box, cambiare parametri, collegare, scollegare, spostare… Ho deciso di cercare una alternativa. L’ho trovata in Feed Sifter!

Semplicissimo e senza registrazione, ho inserito le parole che obbligatoriamente ci dovevano essere nel post (ogni riga è un filtro indipendente, basta che uno sia soddisfatto). Così ora ho l’indirizzo del feed filtrato. Sono contento! Posso seguire i post di Innovatel riguardanti l’argomento che preferisco, e tutto in modo semplice semplice. 🙂

Ah… ovviamente lo ringrazio perché ho usato il suo feed per fare questo articolo. 😉