web
2017.04.27

ブログのRSSフィードのURLを取得するphp関数[wordpress向け]

こんにちは、ゾノ( @ozonosho )です。

今日は僕がサイトを制作する途中で欲しくなったブログのRSSフィードのURLを取得するphp関数を載せます。

利用場面としては、複数のブログからRSSフィードを取得して情報を表示したいときを想定しています。
各ブログサービスごとにRSSフィードのURLは異なるので「1つ1つRSSフィード用のURLを調べて取得するのは面倒だ!」なんて困ったときに利用してください。

ブログのRSSフィードのURLを取得するphp関数

※ブログのトップページのURLを引数に入れたらRSSフィード用のURLを返します

[php]
function get_rss_url($url) {
$rss_url = "";
//yaplog!
if(strpos($url,’yaplog.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/index1_0.rdf’;
}
//FC2
else if(strpos($url,’blog.fc2.com’) !== false){
$rss_url = untrailingslashit($url) . ‘?xml’;
}
//ライブドア
else if(strpos($url,’blog.livedoor.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/index.rdf’;
}
//JUGEM
else if(strpos($url,’jugem.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/?mode=rss’;
}
//goo
else if(strpos($url,’blog.goo.ne.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/index.rdf’;
}
//Seesaa
if(strpos($url,’seesaa.net’) !== false){
$rss_url = untrailingslashit($url) . ‘/index.rdf’;
}
//Blogger
else if(strpos($url,’blogspot’) !== false){
$rss_url = untrailingslashit($url) . ‘/feeds/posts/default?alt=rss’;
}
//ココログ
else if(strpos($url,’cocolog-nifty.com’) !== false){
$rss_url = untrailingslashit($url) . ‘/index.rdf’;
}
//ウェブリ
else if(strpos($url,’webry.info’) !== false){
$rss_url = untrailingslashit($url) . ‘/rss/index.rdf’;
}
//忍者
else if(strpos($url,’blog.shinobi.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/RSS/’;
}
//はてな
else if(strpos($url,’hatenablog.com’) !== false){
$rss_url = untrailingslashit($url) . ‘/feed/’;
}
//Yahoo!
else if(strpos($url,’blogs.yahoo.co.jp’) !== false){
$rss_url = untrailingslashit($url) . ‘/rss.xml’;
}
//楽天
else if(strpos($url,’plaza.rakuten.co.jp’) !== false){
$id_start = strpos($url,’plaza.rakuten.co.jp/’) + strlen(‘plaza.rakuten.co.jp/’);
$id = untrailingslashit(substr($url, $id_start));
$rss_url = ‘http://api.plaza.rakuten.ne.jp/’ . $id . ‘/rss/’;
}
//アメブロ
else if(strpos($url,’ameblo.jp’) !== false){
$id_start = strpos($url,’ameblo.jp/’) + strlen(‘ameblo.jp/’);
$id = untrailingslashit(substr($url, $id_start));
$rss_url = ‘http://rssblog.ameba.jp/’ . $id . ‘/rss.html’;
}
//エキサイト
else if(strpos($url,’exblog.jp’) !== false){
$id_start = strpos($url,’exblog.jp/’) + strlen(‘exblog.jp/’);
$id = untrailingslashit(substr($url, $id_start));
$rss_url = ‘http://rss.exblog.jp/rss/exblog/’ . $id . ‘/index.xml’;
}
else {
$rss_url = $url;
}
return $rss_url;
}
[/php]

基本的にはどのブログサービスもURLの末尾に何かを足せばRSSが表示されますが、アメブロ・エキサイトブログ・楽天ブログはRSSフィードのURLがドメイン自体から異なるため一手間増えています。

尚、末尾のスラッシュがあっても無くても正しく取得できるように、渡されたURLについては一旦untrailingslashitで末尾のスラッシュを削除してから再度スラッシュをつけて返すようにしました。

実際の利用場面

僕の場合、ただいま釣りサイトを制作していて「各船業者が配信している釣果情報(どれぐらいの魚が釣れたのか)を取得したい」という要望がありました。

これを叶えるために、各船業者のURLを渡したら自動でRSSフィードを取得して表示する↓の関数を作りました。

[php]
function set_rss_top_item($url) {

include_once(ABSPATH . WPINC . ‘/feed.php’);
date_default_timezone_set(‘Asia/Tokyo’);

$rss_url = get_rss_url($url);

$rss = fetch_feed($rss_url);
if (!is_wp_error( $rss )) {
$maxitems = $rss->get_item_quantity(1);
$rss_items = $rss->get_items(0, $maxitems);
$item = $rss_items[0];
if($item) {
$first_img = "";
$html = "";
$html .= ‘<a target="_blank" href="’ . $item->get_permalink() . ‘">’;
$html .= ‘<li>’;
if ( preg_match( ‘/<img.+?src=[\’"]([^\’"]+?)[\’"].*?>/msi’, $item->get_content(), $matches ) ) {
$first_img = $matches[1];
}
if (!empty( $first_img )) {
$html .= ‘<img src="’ . $first_img . ‘">’;
}
$html .= ‘<div class="rss_text_area">’;
$html .= ‘<p class="entry-date">最終更新:’ . $item->get_date("Y年n月j日") . ‘</p>’;
$html .= ‘<h4>’ . $item->get_title() . ‘</h4>’;
$html .= ‘<p class="entry-content">’ . wp_trim_words( $item->get_content(), 50, ” ) . ‘</p>’;
$html .= ‘</div>’;
$html .= ‘</li>’;
$html .= ‘</a>’;
echo $html;
}
}
}
[/php]

たくさんのブログからRSSの情報を取得するため、URLを渡したら自動的にそのブログサービスのRSSフィードを返してくれる関数get_rss_urlをつくり、あとはwordpressに用意されているfetch_feedを使ってfeedの情報を取得します。

僕の場合は画像も表示したかったため、preg_matchを使用して記事内最初の画像を読み込んでいます。
※フィード先の記事にアイキャッチ画像が設定されているとは限らないため

アンテナサイトなどでも使える関数だと思いますので、同じような用途がある方はぜひ使ってあげてください。

ゾノについて

興味ある方を探しています!