AmebaブログをRSS取得したときの文字化け対策

先日、とあるウェブサイトのAmebaブログの記事の新着情報をRSSで取得したところ、日本語が使用されているタイトルだけ文字化けしてしまった。

結論から言うと、

「simplexml_load_file」

が原因でした。

おそらく、XMLファイルが一般的でない?

一度、「file_get_contents」でXMLファイルを読み込み、「simplexml_load_string」でオブジェクトデータに変換することで、他のコードは変えずに済みました。

$file = file_get_contents("http://feedblog.ameba.jp/rss/ameblo/ブログID/rss20.xml");
$rssdata = simplexml_load_string($file);

最初は、文字コードを疑って「mb_convert_encoding」でUTF-8/SJIS/EUC-JP全て試すもダメ。

色々試した結果、「simplexml_load_file」に辿り着きました。

「Access-Control-Allow-Origin」エラーが発生する場合

ちなみに、Amebaブログの記事を外部ウェブサイトに埋め込もうとすると、「Access-Control-Allow-Originエラー」が表示されます。

数年前は普通に動いてたコードなのに・・・

どうやら、クロスドメイン系のセキュリティが厳しくなったもよう。

JavaScriptだけではRSSが取得できなくなったので、PHPを介す必要があります。

PHP

<?php

	// RSSfeedのURL設定(RSSへのURL)
	$file = file_get_contents("http://feedblog.ameba.jp/rss/ameblo/ブログID/rss20.xml");
	$rssdata = simplexml_load_string($file);

	//var_dump($rssdata);

	// 読込み最大MAX件数
	$num_of_data = 3;
		
	// 出力内容を空に初期化
	$outdata = "";
				 
	// 設定した読込み件数分だけ取得を繰り返す
	$i = 0;
	while($i < $num_of_data){
		
		//記事1個取得
		$myEntry = $rssdata->channel->item[$i];
		//タイトル取得
		$myTitle = $myEntry->title;

		if(substr($myTitle,0,3) !="PR:"){

			// 日付取得し通常タイプに変換
			$myDate = $myEntry->pubDate;
			$myDate = strtotime($myDate); 
			$myDate = date('Y年m月d日',$myDate);
				
			// リンクURL取得
			$myLink = $myEntry->link; 

			// タイトルが空ならストップ
			if($myTitle == ""){
				break;
			}


			$outdata .= "<div>\n";

			// 出力内容に日付けを挿入
			$outdata .= "<dt>" . $myDate . "</dt>\n";
			// 出力内容にリンク付きタイトルを挿入
			$outdata .= "<dd><a href=" . $myLink . ">" . $myTitle . "</a></dd>\n";

			$outdata .= "</div>\n";

		}
			
		// タイトル頭が「PR:」ならMAX件数増加
		if(substr($myTitle,0,3) =="PR:"){
			$num_of_data++;
		}

		$i++;

	}

	//すべてを出力する
	echo "<dl>" . $outdata . "</dl>";

?>

HTML(heaer内)

<script type="text/javascript">
     ;(function($){
      $(function(){
        $.get('rss/rss.php',function(data){
          $('#feed').html(data);

        })
      })
    })(jQuery);
</script>

HTML(body内)

<div id="feed"></div>

【参考サイト】ウェブサイト内に無料ブログのRSSを読み込ませて新着記事化する - WPホームページ研究所