PHP版 RSSリーダー(FC2用)

PHP版 RSSリーダー(FC2用)

どうもKazです。
とりあえず、BLOGを書きたい。そして連携したいと言うクライアント様には
PC表示時の広告表示が小さい FC2 BLOG をススメておりました。
そして、ホームページと連携する際はfeed2.jsを使ってRSSを表示しておりました。

さて、最近ではFC2 BLOGでもアイキャッチが設定できるという事で、RSSからアイキャッチを表示して見栄えのいい「最新情報」的な物が作れるかなと思ったら
RSSでもAromでも一切吐き出す気配がなく
FC2へ問い合わせたところ
『アイキャッチはRSSに出力されません』
と公式な回答を頂いてしましました…

『FC2ではアイキャッチ表示ができるのに、何で引用すると出ないんだ!?』
と言われる事もあると思うので
アチコチ見て参考にしながら、PHP版ですがFC2用のRSS表示する物を作ってみました。
(PHPは記事の最後にあります)

RSSリーダーのポイント

RSSの取得部分

$url = simplexml_load_file("【RSSのURLを設定】");

クロスブラウザの件を解消する簡単な方法としては、PHPで取得するのが手っ取り早いようです。
JavaScriptに詳しいひとなら、この後をJavaScriptだけで書けるかもしれません。

日付などの整形部分

$timestamp = strtotime( $item->children('http://purl.org/dc/elements/1.1/')->date) ;//更新日の整形
$content = $item->children('http://purl.org/rss/1.0/modules/content/') ;// 記事の取得

purl.orgリダイレクトサービスを利用して整形を行います

アイキャッチとして使う画像

記事の一番初めに使われている拡大表示可能なが画像をアイキャッチとして取得します。

if( preg_match_all('/<a([\s\S]+?)>/is', $content, $matches) ){

$img_ct=0; //初期化
$sub_img=array(); //初期化

foreach( $matches[0] as $img ){
    if( preg_match('/href=[\'"](.+?jpe?g)[\'"]/', $img, $m) ){
                $sub_img[$img_ct] = $m[1];
            }
    $img_ct++;
}

if ( is_null($sub_img[0])){}else{$item->thumbnail = $sub_img[0];}

記事中の<a>タグで囲まれている<img>タグをかき集めて、一番初めの物を最終的に取得しています。

この一連の作業を指定回数回して、リストとして出力する事でアイキャッチ付きのRSSを表示できます。

RSSリーダー PHP版(FC2用) DL fc2rss.php※写真がない場合の画像は、同一ディレクトリ内に「img」フォルダを作ってファイル名を「noimage.jpg」として画像を入れてください。

カスタマイズする事でイロイロと使えると思いますので、試して見てください。


PHPによるRSS取得後、書出し

WEBサイトのトップページにRSSを書き出して表示する、新着情報を埋め込みたい事はよくあります。
PHP5以降であれば、 simplexml_load_fileを使ってわりと簡単に取得できます。
以下はPHPを使って、このブログのRSS2フィードを取得後、書き出すまでのサンプルです。

<?php

//設定
//RSS出力アドレス
$RDF = simplexml_load_file("http://www.agn.jp/blog/?feed=rss2");
//掲載日数
$days = 5;

//日数分記事を取得して書き出す
for($a=0;$a<$days;$a++) {

    //各記事の情報を取得
    $T = $RDF->channel->item[$a]->title;
    $L = $RDF->channel->item[$a]->link;
    $D = $RDF->channel->item[$a]->pubDate;
    $C = $RDF->channel->item[$a]->description;

    //日付の整形
    if ($D!= "") {
        $D = date("Y年n月d日",strtotime($D));
    }

    //情報の書出し
    echo " ".$D." <a href=\"".$L."\">".$T."</a><br><hr>";

}

?>

サンプルでは、このブログから、タイトル、記事のURL、投稿日、記事概要を5日分取得して書き出しています。
上記コードをrss.phpなどのphpファイルにしてサーバーにアップすると動作します。
[DEMO]
実際にサイトに埋め込むには、html内にPHPコードを呼び出し、.htaccessを使ってHTMLをPHPとして動かすなどの工夫や、記事が取得出来なかった場合のエラー処理などが必要です。

応用すると、
・アイキャッチ画像も取得して、サムネイル付きの新着情報に。
・複数ブログのRSSを取得して日付で並べ替え。
・カテゴリ情報も同時に取得して、カテゴリ毎にアイコン画像を付ける。
・ちょっとしたのアンテナサイトに。
なんてことも、わりと簡単に実装できます。
上記はWordPressの例ですが、RSS(XML構造のデータ)が取得出来ればどんなブログからも情報を引っ張ることができます。

RSSによる情報取得と埋込みは色々便利に使えますので、工夫して使ってみてください。


PHPからJavaScriptへの変数渡し

もはやアプリ化しているホームページですが、プログラム部分で使われる基本的な言語が『PHP』と『JavaScript』かと思います。
それぞれに得意とする部分がありますので、その得意とする部分で言語を分けて書いて行くと異言語間の変数の共有が必要になってくると思います。
今回、PHPとJavaScriptでの変数の受け渡しについてお教えします。
※[××××××.php]ファイルでの記述方法になります。

【PHPからJavaScriptへ 基本 変数編】
PHPで使っている変数の内容をJavaScriptへ渡しjQueryなんかで処理したい事が多いかもしれません。

JavaScript記述内で

var $aa = ";";

とするだけで変数 $bbの内容が$aaへ代入する事ができます。

【PHPからJavaScriptへ 配列変数編】
まず、基本的にJavaScriptが多次元配列に対応していないため、通常の配列の受け渡しについて説明します。

[PHP側での準備] $ab = implode(“,”,$aa);
『implode』をつかって配列をカンマ区切りの文字列情報へ組み替えます。

JavaScript内で

var $bb_csv = ""; // 変数受け渡し。
$bc = bb_csv.split(",", -1); // bb_csvをsplit()でカンマ区切り配列に再編成。

こうすることで、PHPでデーベースなどの処理を行ない、表示部分ではJavaScriptでjQueryなどを使った柔軟な表示がおこなえます。


CRONジョブのを使って一定時間毎にphpを動かす( コアサーバーの例)

f157251c72cafb1542af36151665e17b_s
一定時間おきにサーバー上のプログラムを動かすCRONジョブ。便利です。
某案件で、一日一回海外の為替レートを見て、ショップの売価に反映させるPHPを動かす必要があって使っています。この案件ではコアサーバーを利用していますが、たいした知識も無くCRONジョブを使おうとして、設定にはまったので、反省と備忘録を兼ねて記事にしておきます。
設定画面
そのものずばり、管理画面のメニューに「CRONジョブ」があります。
 cron01
設定画面を見るとなんとなく、時間とプログラムの場所を書いておけばいいのだなと思いますね。そしてページの下には記述例もありましたので、参考にして処理を書き、該当PHPファイルまでのフルパスと、動かしたい時間(毎朝9時)を書いて設定しました。
こんな感じでした。
間違った記述例
しかし、いつまでたっても動きません。
時間を書き換えてみたり、PHPの内容を確認してみたり、やたらと沢山設定してみたりと、
数日ムダにしてはじめて気がつきます。「たぶん根本的に間違っている。
そこで改めて説明文をよく見てみます。
・上段にCRONジョブの例
・下段にシェルスクリプトの例
が記述してあります。
ここでようやく気がつきます。
CRONジョブはシェルスクリプトを書いて、そのスクリプトを指定時間に動かすサービスである、と。と言うことは「PHPを動かす処理を書いたシェルスクリプト」を書いてサーバーにアップしなくてはなりません。
UNIX使いの方や、サーバー屋さんには当たり前なんでしょうけど、全然分かっていませんでした…。
そもそも説明に

「 「分 時 日 月 曜日」で指定した時間に「/virtual/car/~」で指定したシェルスクリプト(/bin/sh)を実行します。」と書いてあります。よく読まないとダメです。


結局正解はこうなります。
1.シェルスクリプトrate.shを書く
動かしたいPHPをサーバーのフルパスで書いておきます。
#!/bin/sh
#PHP
/usr/local/bin/php /virtual/ユーザーID/public_html/www.aaaa.com/rate.php
exit
2.rate.shをサーバーに置く
 FTPでアップ。
 3.CRONジョブ設定画面でrate.shを動かす時間を指定する。
rate.shをフルパスで記述します。
1日1回毎朝9時だと図のようになります。
cron03
 4.指定時間まで待つ。
動けば、完了です。
これでめでたく動くようになりました。
同じバリュードメイン系サービスのxreaやvalue serverもほぼ同じようです。
上手く活用することで、一定時間おきの処理などをサーバーサイドの時間設定で動かすことが出来ますね。
そして何事も説明はよく読みましょう。