PHPやります!PHPでスクリプト/CGI作ります! -5ページ目

【設計】ブログを簡単に見るヤツ6

オレ専用RSSの仕様

基本的に、RSS2.0準拠!?みたいな。

なので、RSS1.0が登録されている場合は、2.0に変換する必要があります。

なんか、【ブログを簡単に見るヤツ】のキモな気がします。
1.0と2.0のRSSから必要なデータを抜き出します。

2.0の場合
rss
channel
title //ブログタイトル
link //ブログURL
description //ブログの見出し

item //各記事
title //記事タイトル
description //記事本文
link //記事URL
pubDate //更新日時
/item

/channel
/rss

1.0の場合
rdf:RDF
channel
title
link
description
/channel

item
link
title
description
/item

/rdf:RDF

これらをマージして、↓のようなXMLにします。

xml version="1.0" encoding="utf-8"
rss version="2.0"
channel
title
link
description
language
atom:link

item
title
description
link
pubDate
/item
/channel
/rss

PHPでのRSSの解析

RSSについて

RSSには、いくつかのバージョンが存在するようです。
wikiを見ると、

RSS 0.9
RSS 0.91
RSS 1.0
RSS 2.0

ん~、迷う必要はなくRSS2.0を使うことに決定です。0,9なんて半端なバージョンなんて使わないよね。
1.0は、ちょっと対応した方がいいかな。とりあえず、2.0で作ります。

早速、アメブロのRSSを見てみます。

中見です。
rss
channel
title //ブログタイトル
link //ブログURL
description //ブログの見出し
language //言語(日本語 ja)
atom:link //RSSのURL

item //各記事
title //記事タイトル
description //記事本文
link //記事URL
pubDate //更新日時
/item
item //各記事
title //記事タイトル
description //記事本文
link //記事URL
pubDate //更新日時
/item


/channel
/rss

ついでに、FC2のRSSも見てみます。
rdf:RDF
channel
title
link
description
dc:language
items
rdf:Seq
rdf:li
rdf:li
rdf:li
/rdf:Seq
/items
/channel

item
link
title
description
content:encoded
dc:subject
dc:date
dc:creator
dc:publisher
/item
item
link
title
description
content:encoded
dc:subject
dc:date
dc:creator
dc:publisher
/item
/rdf:RDF


だいぶ違いますね・・・
FC2はRSS1.0みたいです。こりゃ、1.0から対応した方がよさそうです。
しかし、RSSのバージョンってどこみればわかるのかな。
見たかんじ、ルートノードがか、かでバージョン判断するしかないかな。

そんなことないねwXML/RSS使えば簡単に出来そうじゃん。
↓のコードでうまく取得出来そう。

require_once("XML/RSS.php");
$rss =& new XML_RSS("1.0.xml");
$rss->parse();

foreach ($rss->getItems() as $item)
{
echo $item['title']."\n";
}
echo "\n----------------\n\n\n";

$rss2 =& new XML_RSS("2.0.xml");
$rss2->parse();

foreach ($rss2->getItems() as $item)
{
echo $item['title']."\n";
}

実行結果
# php parse.php
【コーディング】ブログを簡単に見るヤツ8
【コーディング】ブログを簡単に見るヤツ7
【コーディング】ブログを簡単に見るヤツ6
【コーディング】ブログを簡単に見るヤツ5
ブログを簡単に見るヤツの予定
【コーディング】ブログを簡単に見るヤツ4
PHPのログ
【設計】ブログを簡単に見るヤツ5
PR: 【NEC】固定回線のない場所でFAX!?
【コーディング】ブログを簡単に見るヤツ3
【コーディング】ブログを簡単に見るヤツ2

----------------


【コーディング】ブログを簡単に見るヤツ8
【コーディング】ブログを簡単に見るヤツ7
【コーディング】ブログを簡単に見るヤツ6
【コーディング】ブログを簡単に見るヤツ5
ブログを簡単に見るヤツの予定
PR: 大手・注目の広告・Web会社の転職ならマスメディアン
【コーディング】ブログを簡単に見るヤツ4
PR: 大手・注目の広告・IT会社への転職ならマスメディアン
PHPのログ
【設計】ブログを簡単に見るヤツ5
【コーディング】ブログを簡単に見るヤツ3
【コーディング】ブログを簡単に見るヤツ2

途中に入る広告が気になる。。。




【コーディング】ブログを簡単に見るヤツ8

メール送信時間を変更する処理です。

まず、必要なパラメータ。
ID アカウントのID
MAILTIME 設定する値


処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック → エラーがあったら、X-StatにERR_ID_INVALID(502)を設定してレスポンス。
・ID 数値であること。
・MAILTIME 0~23であること。

3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
前回と同じ方法で存在するか確認

4.MAILTIMEを更新する。 → 更新成功したら、X-StatにSUCCESS(200)を設定してレスポンス。
使うSQL
update tbl_user set MAILTIME = ? where ID = ?
$stmt->bind_param("si", $mailtime, $id);



---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録
・メール送信時間設定

---------まだ---------
・アカウント登録
・アカウント削除
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)


次は・・・オレ専用RSS作成処理かな。

アカウントの登録/削除を後回しにしてるのは、最近は大体登録したら狩り登録メールって届きますよね。
それやりたいんですよ。
だから、メールサーバの設定が必要なんですが、これほんと難しいんですよね。
どうしよっかな・・・

【コーディング】ブログを簡単に見るヤツ7

メールアドレスを変更する処理です。

まず、必要なパラメータ。
ID アカウントのID
MAIL 設定する値


処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック → エラーがあったら、X-StatにERR_ID_INVALID(502)を設定してレスポンス。
・ID 数値であること。
・MAIL 正しいメールアドレス形式であること。

3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
前回と同じ方法で存在するか確認

4.MAILを更新する。 → 更新成功したら、X-StatにSUCCESS(200)を設定してレスポンス。
使うSQL
update tbl_user set MAIL = ? where ID = ?
$stmt->bind_param("si", $mail, $id);



---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定
・メールアドレス変更/登録

---------まだ---------
・アカウント登録
・アカウント削除
・メール送信時間設定
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)



次は、メール送信時間設定。

【コーディング】ブログを簡単に見るヤツ6

メール送信フラグ設定を変更する処理です。

まず、必要なパラメータ。
ID アカウントのID
MAILFLAG 設定する値(1か0)


処理の流れ
1.ログインチェック → ログインしていなかったら、セッションクリアしてTOPにリダイレクト

2.パラメータチェック → エラーがあったら、X-StatにERR_ID_INVALID(502)を設定してレスポンス。
・ID 数値であること。
・MAILFLAG 0 か1 であること。

3.設定対象のIDが存在すること。 → 存在しない場合は、X-StatにERR_NOTFOUND(402)を設定してレスポンス。
使うSQL
select count(id) from tbl_user where ID = ?
$stmt->bind_param("i", $id);

4.MAILFLAGを更新する。 → 更新成功したら、X-StatにSUCCESS(200)を設定してレスポンス。
使うSQL
update tbl_user set MAILFLAG = ? where ID = ?
$stmt->bind_param("ii", $flag, $id);



---------出来た---------
・ログイン
・ログインチェック
・RSS登録
・RSS解除
・ログアウト
・メール送信フラグ設定

---------まだ---------
・アカウント登録
・アカウント削除
・メール送信時間設定
・メールアドレス変更/登録
・オレ専用RSS作成
・メール送信(※sendmailの設定が必要)


次は、メールアドレス変更/登録あたりかな。

メール関連は、一番最後に廻そう。