All RSS Feeds Broken?
-
I have been working on a site for a client and he just let me know that all the rss feeds are broken. I have tried downgrading to 1.0.1 and upgrading to 1.0.2 but in neither of them the feeds work. The rss displays the title but the rest is blank. For example: http://canadianrugby.ca/forums/rss/topic/canadian-players-overseas
wordpress is installed and deep integrated at http://canadianrugby.ca and bbpress is http://canadianrugby.ca/forums
Any help would be appreciated.
-
Ah crap, everything is breaking today
@Reboot Now: That looks like a different issue. Could you post line 13 of the broken RSS feed (view source)?
Ok, I got it! Or close to that…
I happen to have this patch on my system
https://bbpress.org/forums/topic/updated-to-desmond-but-theme-not-working#post-4254
As I disable that, the magic is done and rss comes back to life!
While I cannot say “what” is wrong with such a patch, I’m happy to confirm that just eliminating it does the trick. In case anybody else has the same issue…
Thanks for the kind help to everybody, with a special thank to kawauso
@kawauso, that line in the error is the source on line 13: “<?xml version=”1.0″?><!– generator=”bbPress” –>”
I should have looked at the source though. It seems that the xml has two headers. Could this be related to deep integration?
<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.8.4" -->
<rss version="0.92">
<channel>
<title>[SITENAME] » Page not found</title>
<link>http://[HOST]</link>
<description>Just another [HOST] weblog</description>
<lastBuildDate>Sun, 06 Sep 2009 14:07:54 +0000</lastBuildDate>
<docs>http://backend.userland.com/rss092</docs>
<language>en</language>
</channel>
</rss>
<?xml version="1.0"?><!-- generator="bbPress" -->
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<channel>
<title>[SITENAME] Forum » Recent Posts</title>
<link>http://[FORUM URL]b/</link>
<description>[SITENAME] » Recent Posts</description>
<language>en</language>
<pubDate>Mon, 07 Sep 2009 19:27:36 +0000</pubDate>
<item>Removing deep integration with WPMU 2.4a fixes the issue and the top level feed works fine.
I guess I should start a new topic on this issue, since it is different to the one covered in this thread.
Yeah that looks like WordPress is attempting to handle the RSS as well as bbPress, so it’s definitely a deep integration issue. I’m not sure how to detangle that, but hopefully someone else can or I’ll try and have a look tomorrow.
Was there another thread started about this that I’m not seeing? I’m running deep integration and absolutely no feeds either, with the diffs applied.
@ kawauso
I applied the patches suggested via the trac and your comments but my rss feed is still returning invalid in Chrome, Opera and Firefox (in Safari it works fine)
it does seem to be something wrong with the markup via an extra space in front of the xml declaration somewhere…
Anyone have any ideas??
Chrome:
error on line 1 at column 6: XML declaration allowed only at the start of the document
Opera:
XML parsing failed: syntax error (Line: 1, Character: 1)
Error:XML declaration not at beginning of document
and it shows a space in front of the initial
<? xml
Firefox:
XML Parsing Error: XML or text declaration not at start of entity
Location: /rss.php?topic=2074
Line Number 1, Column 2: <?xml version=”1.0″ encoding=”UTF-8″?>
-^
I’ve been wondering about this. I applied the patch and had the same experience. So my question is, how do RSS feeds actually work? Should the feed be shown using the patched rss.php file immediately, or is there some time delay, or do you need to publish some content to update the feed? When you call up a feed URL in the browser, what happens?
My experience was the same when applying the patch, but then I wondered how soon I should have seen the results.
Is there somebody who knows how to fix the rss problem?
I think a patch was posted. Have you tried that? https://trac.bbpress.org/ticket/1209
I solved the problem!
I removed all “
»
” in the rss.phpReplace the code of your rss.php with the following code and it should work:
<?php<br />
require('./bb-load.php');</p>
<p>// Determine the type of feed and the id of the object<br />
if ( isset($_GET['view']) || bb_get_path() == 'view' ) {</p>
<p> // View<br />
$feed = 'view';<br />
$feed_id = isset($_GET['view']) ? $_GET['view'] : bb_get_path(2);</p>
<p>} elseif ( isset($_GET['topic']) || bb_get_path() == 'topic' ) {</p>
<p> // Topic<br />
$feed = 'topic';<br />
$topic = get_topic(isset($_GET['topic']) ? $_GET['topic'] : bb_get_path(2));<br />
$feed_id = $topic->topic_id;</p>
<p>} elseif ( isset($_GET['profile']) || bb_get_path() == 'profile' ) {</p>
<p> // Profile<br />
$feed = 'profile';<br />
$feed_id = isset($_GET['profile']) ? $_GET['profile'] : bb_get_path(2);</p>
<p>} elseif ( isset($_GET['tag']) || bb_get_path() == 'tags' ) {</p>
<p> if ( isset($_GET['topics']) || bb_get_path(3) == 'topics' ) {<br />
// Tag recent topics<br />
$feed = 'tag-topics';<br />
} else {<br />
// Tag recent posts<br />
$feed = 'tag-posts';<br />
}<br />
$feed_id = isset($_GET['tag']) ? $_GET['tag'] : bb_get_path(2);</p>
<p>} elseif ( isset($_GET['forum']) || bb_get_path() == 'forum' ) {</p>
<p> if ( isset($_GET['topics']) || bb_get_path(3) == 'topics' ) {<br />
// Forum recent topics<br />
$feed = 'forum-topics';<br />
} else {<br />
// Forum recent posts<br />
$feed = 'forum-posts';<br />
}<br />
$forum = bb_get_forum(isset($_GET['forum']) ? $_GET['forum'] : bb_get_path(2));<br />
$feed_id = $forum->forum_id;</p>
<p>} elseif ( isset($_GET['topics']) || bb_get_path() == 'topics' ) {</p>
<p> // Recent topics<br />
$feed = 'all-topics';</p>
<p>} else {</p>
<p> // Recent posts<br />
$feed = 'all-posts';</p>
<p>}</p>
<p>// Initialise the override variable<br />
$bb_db_override = false;<br />
do_action( 'bb_rss.php_pre_db' );</p>
<p>if ( !$bb_db_override ) {</p>
<p> // Get the posts and the title for the given feed<br />
switch ($feed) {<br />
case 'view':<br />
if ( !isset($bb_views[$feed_id]) )<br />
die();<br />
if ( !$bb_views[$feed_id]['feed'] )<br />
die();<br />
if ( !$topics_object = new BB_Query( 'topic', $bb_views[$feed_id]['query'], "bb_view_$feed_id" ) )<br />
die();</p>
<p> $topics = $topics_object->results;<br />
if ( !$topics || !is_array($topics) )<br />
die();</p>
<p> $posts = array();<br />
foreach ($topics as $topic) {<br />
$posts[] = bb_get_first_post($topic->topic_id);<br />
}</p>
<p> $title = esc_html( sprintf( __( '%1$s View: %2$s' ), bb_get_option( 'name' ), $bb_views[$feed_id]['title'] ) );<br />
$link = get_view_link($feed_id);<br />
$link_self = bb_get_view_rss_link($feed_id);<br />
break;</p>
<p> case 'topic':<br />
if ( !$topic = get_topic ( $feed_id ) )<br />
die();<br />
if ( !$posts = get_thread( $feed_id, 0, 1 ) )<br />
die();<br />
$title = esc_html( sprintf( __( '%1$s Topic: %2$s' ), bb_get_option( 'name' ), get_topic_title() ) );<br />
$link = get_topic_link($feed_id);<br />
$link_self = get_topic_rss_link($feed_id);<br />
break;</p>
<p> case 'profile':<br />
if ( bb_get_option( 'mod_rewrite' ) === 'slugs' ) {<br />
$user = bb_get_user_by_nicename( $feed_id );<br />
} else {<br />
$user = bb_get_user( $feed_id );<br />
}<br />
if ( !$user ) {<br />
die();<br />
}<br />
if ( !$posts = get_user_favorites( $user->ID ) ) {<br />
die();<br />
}<br />
$title = esc_html( sprintf( __( '%1$s User Favorites: %2$s' ), bb_get_option( 'name' ), $user->user_login ) );<br />
$link = bb_get_profile_link($feed_id);<br />
$link_self = get_favorites_rss_link($feed_id);<br />
break;</p>
<p> case 'tag-topics':<br />
if ( !$tag = bb_get_tag( $feed_id ) )<br />
die();<br />
if ( !$topics = get_tagged_topics( array( 'tag_id' => $tag->tag_id, 'page' => 0 ) ) )<br />
die();</p>
<p> $posts = array();<br />
foreach ($topics as $topic) {<br />
$posts[] = bb_get_first_post($topic->topic_id);<br />
}</p>
<p> $title = esc_html( sprintf( __( '%1$s Tag: %2$s - Recent Topics' ), bb_get_option( 'name' ), bb_get_tag_name() ) );<br />
$link = bb_get_tag_link($feed_id);<br />
$link_self = bb_get_tag_topics_rss_link($feed_id);<br />
break;</p>
<p> case 'tag-posts':<br />
if ( !$tag = bb_get_tag( $feed_id ) )<br />
die();<br />
if ( !$posts = get_tagged_topic_posts( array( 'tag_id' => $tag->tag_id, 'page' => 0 ) ) )<br />
die();<br />
$title = esc_html( sprintf( __( '%1$s Tag: %2$s - Recent Posts' ), bb_get_option( 'name' ), bb_get_tag_name() ) );<br />
$link = bb_get_tag_link($feed_id);<br />
$link_self = bb_get_tag_posts_rss_link($feed_id);<br />
break;</p>
<p> case 'forum-topics':<br />
if ( !$topics = get_latest_topics( $feed_id ) )<br />
die();</p>
<p> $posts = array();<br />
foreach ($topics as $topic) {<br />
$posts[] = bb_get_first_post($topic->topic_id);<br />
}</p>
<p> $title = esc_html( sprintf( __( '%1$s Forum: %2$s - Recent Topics' ), bb_get_option( 'name' ), get_forum_name( $feed_id ) ) );<br />
$link = get_forum_link($feed_id);<br />
$link_self = bb_get_forum_topics_rss_link($feed_id);<br />
break;</p>
<p> case 'forum-posts':<br />
if ( !$posts = bb_get_latest_forum_posts( $feed_id ) )<br />
die();<br />
$title = esc_html( sprintf( __( '%1$s Forum: %2$s - Recent Posts' ), bb_get_option( 'name' ), get_forum_name( $feed_id ) ) );<br />
$link = get_forum_link($feed_id);<br />
$link_self = bb_get_forum_posts_rss_link($feed_id);<br />
break;</p>
<p> // Get just the first post from the latest topics<br />
case 'all-topics':<br />
if ( !$topics = get_latest_topics() )<br />
die();</p>
<p> $posts = array();<br />
foreach ($topics as $topic) {<br />
$posts[] = bb_get_first_post($topic->topic_id);<br />
}</p>
<p> $title = esc_html( sprintf( __( '%1$s Recent Topics' ), bb_get_option( 'name' ) ) );<br />
$link = bb_get_uri();<br />
$link_self = bb_get_topics_rss_link();<br />
break;</p>
<p> // Get latest posts by default<br />
case 'all-posts':<br />
default:<br />
if ( !$posts = bb_get_latest_posts( 35 ) )<br />
die();<br />
$title = esc_html( sprintf( __( '%1$s Recent Posts' ), bb_get_option( 'name' ) ) );<br />
$link = bb_get_uri();<br />
$link_self = bb_get_posts_rss_link();<br />
break;<br />
}<br />
}</p>
<p>bb_send_304( $posts[0]->post_time );</p>
<p>if (!$description = esc_html( bb_get_option('description') )) {<br />
$description = $title;<br />
}<br />
$title = apply_filters( 'bb_title_rss', $title, $feed );<br />
$description = apply_filters( 'bb_description_rss', $description, $feed );<br />
$posts = apply_filters( 'bb_posts_rss', $posts, $feed );<br />
$link_self = apply_filters( 'bb_link_self_rss', $link_self, $feed );</p>
<p>bb_load_template( 'rss2.php', array('bb_db_override', 'title', 'description', 'link', 'link_self'), $feed );</p>
<p>?>WTF is the problem?
Errore interpretazione XML: la dichiarazione XML o testuale non è all’inizio di un’entità
Indirizzo: http://ciobomario.com/forum/rss/forum/presentati
Linea numero 2, colonna 1:<?xml version=”1.0″ encoding=”UTF-8″?>
^
There’s a space character before <?xml
Ho provato a fare tutte le modifiche possibile, ma non ho trovato soluzione… come risolvo? Ho anche sostituito i file rss2.php, rss.php con quelli di default (anche se prima non li avevo toccati) ma nulla
(In english please). I don’t know. I don’t have problems with feeds.
CioboMario, this is the same problem I had. The files do not contain an extra space before the <?xml but when output the error comes up. Try replacing your files with the latest versions – https://trac.bbpress.org/ticket/1181
I think I’ve created a quite strong code for the RSS. It allows plugins to apply their filters (example: smilies!!!). It fixes problems with double apersand encoding and ” ” not working well with UTF-8. It also fixes the date of items which is not valid if you use localization, even if the options array sets “false” on “localize”.
Feel free to try the code for yourself, it works with stock bbPress 1.0.2. You JUST need to put this content in your rss2.php (check the theme folder).
<?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 " " 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("&", "&", $buffer);
$spaced = str_replace(" ", " ", $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>Sorry for comments in italian.
BTW @ yoyopop, I don’t remember in which topic, but I read on this forum that the problem is related to some plugins having extra spaces in their code before the opening “<?php” tag. Check it…
- You must be logged in to reply to this topic.