IT

さくらのブログでRSSfeedに構文エラーが発生した際の対処

更新日:

今日のブログはいつもの田舎暮らし等の内容とは全く違うのですが、お許し下さい。

現在業務でWEB関連の案件をいくつか抱えているのですが、今朝作業をしようと思ってサイトを開くとサイトトップにエラーが発生していて仰天しました。

サイトトップに更新情報を表示するため、RSSでブログ(さくらのブログ)の更新情報を読み込むという仕様だったのですが、その欄にエラーメッセージが表示されていました。

サイトイメージ
↑こんな感じです。

このWEBサイトは僕が作成したものではなく、まだ手を一切加えてなかったので正直驚いたのですが、クライアント様も何か変更を加える方ではなかったので、とりあえず対処することにしました。

MagpieRSSに手を加える

出ていたエラーは「Warning, MagpieRSS: Failed to parse RSS file.」というものでした。

RSSエラー

で、このエラーからRSSをパースするのにMagpieRSSが使われてる事が分かったのですが、僕がその「MagpieRSS」というRSSパーサーを使用したことがなかったのでとりあえずググりました。

MagpieRSSの仕組みを調べて思いついたのが、「特殊文字を認識できないのでエラーを吐いているのではないだろうか」という事でした。というのも最新のブログのタイトルに特殊文字が入っていたので…。

ちなみに参考にさせて頂いたのが(MagpieRSSでのWarningについて/hatotaka's Blog)という記事です。 パースする前に認識できない文字を消そうと思い、rss_fetch.incの289行目を以下の様に書き換えました。

before

function _response_to_rss ($resp) {
 $rss = new MagpieRSS( $resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING );

after

function _response_to_rss ($resp) {
mb_substitute_character('none');
$resp_results = mb_convert_encoding($resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_OUTPUT_ENCODING);
$rss = new MagpieRSS( $resp_results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING );

で、結論から言うとなおりませんでした!!ブログのタイトルも特殊文字を使わないものに修正してして頂いたのですが…。

phpのエラーメッセージを非表示に

で、とりあえず、PHPのエラーメッセージがでてるのは問題なので、該当のページにエラーメッセージを非表示にさせる一文を追加。

<?php
	 error_reporting(E_ERROR); 

RSSfeedに問題が…!

紆余曲折あり、そもそもRSSfeedを正常に吐き出していないことが発覚。

WordPress等だと真っ先に疑うべきなのですが、さくらのブログだと自動的にやってくれるし、HTMLの問題も発生しにくいと思っていたので盲点でした。

さくらのブログの表示画面にある「RSS2.0」をクリックした際、通常であれば記事のRSSが表示されるべきなのですが、コード上のエラーで表示できないという文字が…!

RSSエラー

↑IEだとこのような表示に。(普段使っているブラウザはFireFoxです)

あとは簡単でした。

FEED ValidatorにURL(RSSfeedのURL)を入れて構文チェックをして、エラーの原因を調べると、なぜか

<br />

が引っかかっていたので、一旦その改行を消すとfeedが正常になりました。

正直、なぜそれがエラーになっていたかよくわからないんですよね。というのもさくらのブログではタグを書くのではなく、Enterで改行しておけば勝手に<br />を入れてくれる仕様になっているので書き間違うことはないと思うのですが…。しかも他の<br />は正常なのにその部分だけエラーが出ているんですよ。

まぁとにかく、そういうことで一件落着です。勉強させて頂きました。

-IT

Copyright© いなかプラス , 2017 All Rights Reserved.