PHPに惚れました

今でも多分惚れてます。

RSS配信スクリプト書き換えました

色々なミスを乗り越えてオリジナルランキングRSS配信スクリプト改良。
改良って言っても現行サービスに流すわけじゃありません。

サイトの引越し先で使います。
URL公開はサイト完成まで待ってね。

前置き

DBに放り込む値の生成クラス。
動画レベル等の算出メソッドの実引数にAPIの値使ってるんですが一部キャスト忘れで
こんなことになってた。

<?php
//$xmlはsimple_xml_file()で取得したXMLオブジェクト//

$view = $xml->channel->view;   //7桁の数値
$comment $xml->channel->comment;   //8桁の数値

print var_dump($view>=$comment);  //True
?>

何で7桁の数値と8桁の数値比較して7桁の方が大きいって出るんだよ!って思ったら
$xmlに入ってるXMLオブジェクトをint型にキャストしてなかった。オブジェクト同士比較してたからTrueになっちゃったのかー。
とは言われてもなんか腑に落ちないですけどね。 ==なら納得しますけど。

使ったパッケージやライブラリ

この二つ。

現行スクリプトはSmartyはおろかパッケージも使ってない。
まさに直打ち。

以下改良点

拡張しやすくなった

 新しいRSS配信する時はSQLとタイトル追加するだけでおk。

例外に柔軟。

 Smartyのおかげです。もしDBに障害あってもXML自体は吐き出します。
 Itemsの中身は空っぽになるけど。これは本家準拠。
 指定外のクエリ文字指定したらhotが呼び出される。

URL指定を分かりやすく。

もう現行のURL文字列意味わかんね。

    • cf_mvr→hot
    • p_cf_mvr→pickup
    • mrd→mlst_rate
    • rand→random

他は変化なし。
今旬の動画であるcf_mvr・・・なんかの頭文字1文字ずつとったんだと思う。
もう俺にもわからんです。

処理はええ

 キャッシュのおかげ。
 現行みたいに似非キャッシュじゃなくてSmartyのキャッシュ使ってる。

RSS全種毎時更新

 これもキャッシュのおかげね。ランダム取得も毎時更新。
 

gdgdと駄弁り

現行スクリプトは全て1ファイルでやってるからDB倒れたらエラー吐かれてアウト。
RSSはリアルタイム更新。無駄にね。
オリジナルランキングは似非キャッシュで多少負荷と表示速度考慮してるけどランダム表示はそう柔軟にはいかないですね。

時間が来たらCronから生成スクリプト動かしてXML生成して、ランキング表示には生成したXMLファイル読み込む。
原始的なやり方です。

あと、feedcreator.class.php使おうかなぁとか思ったけどニコニコのRSS2.0って少しフォーマットが特殊なんですよね。
それで残念ながら現行フォーマットでは再現できず結局自作。

PEAR::MDB2Smarty使えばRSS配信スクリプトなんか簡単に作れますよ。
.phpと.tpl合わせても100行ちょっと。
配信するRSSの種類が1種類なら80行程度で済むんじゃないかな?

時間があれば簡単にチュートリアル記事でも書いてみようかな。


若干眠い中書いた記事。多分もう色々とひどいです。