2ちゃんねるまとめサイトなどによく設置されている相互RSS。他のサイトのRSSを読み込んで表示して、アクセスを送りあい、お互いにアクセスアップを図ろうとする仕組みです。
簡単に設置、管理できる無料ツールがライブドアなどから提供されており、かなり優秀なのですが、
- 広告が表示されてしまう
- HTMLが触れない
- 表示が遅い
などのデメリットがあります。まぁ無料なので当たり前ですが。。。
広告が表示されてしまうなどは良いのですが、表示が遅くなってしまうのとHTMLが触れず、rel=”nofollow”を記載できない、表示が遅いなどは検索エンジン対策SEOに響いてくるので、シンプルな相互RSSリーダーを作成してみました。
設定の備忘録含めて紹介です。
この相互RSSリーダーのデメリット
いきなりデメリットというのもアレですが、もっときちんと作れば良いのですが、最低限動くように作っています。動作条件としてPHPが動く、cronが設定できる、ってのが必要です。なので、アメブロやFC2などの無料ブログ系は厳しいかと思います。。。
以下のPHPでは時間やサイト名などは表示せず、記事名だけです。
あと、普通のRSSリーダーのように更新時間順になりません。というか、していません。。もちろん、最新のRSSを取得することはできます。
この相互RSSリーダーのメリット
- もちろん広告なし
- 更新時間順ではないので、優先するサイトを上部に表示させることができる
- HTMLに標準でrel=”nofollowを入れているので、リンクジュースを渡さず、SEOに良い
- 定期的にPHPでHTMLを生成し、それをAjaxで読みこむので早いし、非同期なので他の表示を妨げない
相互RSSリーダーの設定手順
- ドメイン直下にでも適当にディレクトリ(フォルダ)作成(例: rss )
- 以下で紹介するrss.phpを設定(簡単)
- 作成したディレクトリにrss.phpを設置
- phpの動作確認
- jQueryで表示設定
- cron設定
ドメイン直下にでも適当にディレクトリ(フォルダ)作成
適当にドメイン直下にでもディレクトリ(本サイトであれば debate.co.jpのアクセス先)を作成。わかる人はもちろん他の場所でもOKです。適当に説明のためにrssとします。
rss.phpを設定(簡単)
以下のPHPを設置。設定箇所は、以下のとおり。
- 5行目あたりのRSSのリスト(この順番にRSSが表示されます)
16行目あたりのnum_of_data(ひとつのRSSから表示したい記事の件数)
- 43行目あたりの
file_put_contents
ファイル出力先(現状はCent OSの場合で、ディレクトリは適宜変更してください。)
[php]
<?php
//取得するRSSのリスト
$rssList = array(
"https://debate.co.jp/feed/",
"RSSのURL"
);
$outdata = "<ul>\n";
for($n=0;$n< count($rssList ) ;$n++){
//URL設定
$rssdata = simplexml_load_file("$rssList[$n]");
// 件数設定
$num_of_data = 1;
for ($i=0; $i<$num_of_data; $i++){
if($rssdata->channel->item[$i] != null){
$myEntry = $rssdata->channel->item[$i];
$rssDate = $myEntry->pubDate;
$myTitle = $myEntry->title; //タイトル取得
$myLink = $myEntry->link; //リンクURL取得
//出力内容(CSSOK)
$outdata .= ‘<li><a href="’ . $myLink . ‘" target="_blank" rel="nofollow">’ . $myTitle . ‘</a></li>’ . "\n";
}else{
$myEntry = $rssdata->item[$i];
$rssDate = $myEntry->pubDate;
$myTitle = $myEntry->title; //タイトル取得
$myLink = $myEntry->link; //リンクURL取得
}
}
}
$outdata .= ‘</ul>’;
//出力先
file_put_contents("/var/www/htmlドメイン名/rss/rss.html", $outdata);
function _file_put_contents($fname, $data) {
if ($fp = fopen($fname, ‘c’)) {
flock($fp, LOCK_EX);
ftruncate($fp, 0);
fputs($fp, $data);
fclose($fp);
}
return (bool)$fp;
}
?>
[/php]
なにをやっているかというと、RSSを取得して整形して、作成したディレクトリにrss.htmlというhtmlファイルを作成しています。
このphpファイルを1時間に一度まわしてrss.htmlを生成し、それをjQueryで読み込んで表示させようということです。
作成したディレクトリにrss.phpを設置
rssディレクトリにrss.phpを設置します。
rss.phpの動作確認
sshなどで接続してコマンドで確認します。
php /var/www/htmlドメイン名/rss/rss.php
ドメイン名/rss/rss.htmlにアクセスしてRSSがリスト表示されれば成功です。
jQueryで表示設定
表示したい箇所に
<div class="rss_road"></div>
を設置します。
設置箇所のどこか(body最下部とかで良いです。)に下記jQueryコードを記述します。WordPressを想定し$でなくjQueryになっています。
<script type="text/javascript"> jQuery(function() { jQuery.ajax({ type: 'GET', url: 'http://ドメイン名/rss/rss.html', dataType: 'html', success: function(data) { jQuery('.rss_road').append(data); }, error:function() { } }); }); </script>
url部分は前述のrss.htmlの出力先を指定してください。
先ほどのphpを実行した際に生成されたrss.htmlをjQueryで読みこみ、rss_road部分に表示するように指示しています。
cron設定
rss.phpを定期的に実行して、新しいRSSを取得⇒htmlに出力という設定をします。
sshなどでログインし、crontabを編集します。
crontab -e
キーボード i を押して編集モードにして、
0 */1 * * * /usr/bin/php /var/www/html/ドメイン名/rss/rss.php
を加筆、 ESCAPEして :wqで上書き保存です。上記の場合は、1時間に一度、0分の状態で実行してくださいね。という設定。
2時間に一度なら0 */2 * * * 、実行を毎時10分にするなら10 */1 * * *という感じに修正します。
その他
rss.phpやrss,htmlは外部からアクセスさせないようにパーミッションの設定を変えたり、rssディレクトリに.htaccessを置いたり、クロールさせないように設定したり、rss.phpの場所を変えたり、したらもっと幸せかもしれません。
動かない場合は、phpの所有者、パーミッションなどをチェックすると良いかもです。
サーバ負荷をかけないために、RSSのリスト作成をページアクセスごとでなく、定期的に行い、自サーバのhtmlを読み込むことで表示速度も上がるはずです。
表示速度が上がり、外部リンクが減るのでSEOにも良さそうです。