PEAK XOOPS - D3 Pipesの紹介 (3) in englishin japanese

Archive | RSS |
XOOPS
XOOPS : D3 Pipesの紹介 (3)
Poster : GIJOE on 2007-04-23 17:53:02 (11250 reads)

in englishin japanese
外部XML取得パターンの流れをもう少し詳しく見てみましょう。
(A) 外部XML取得パイプ
XML取得 -> UTF8への変換 -> XML解析 -> 内部エンコーディングへの変換 -> 抽出 -> 保存

1) XML取得 (fetch)
オプションで指定されたURIからXML文字列を取ってくるジョイントです。
対象がXMLである必要はありません。HTML等であっても、それをパースできるparseユニットと組み合わせれば良いわけです。
ジョイントの動作としては、HTTPアクセスした結果を渡すだけなので、単純なfopenでも良いのですが、allow_url_fopen=off 環境用に snoopy をデフォルトとしています。

2) UTF-8への変換 (utf8to)
最近はUTF-8でないフィードもほとんどないので、ほとんどのケースでこのジョイントは必要ないと思われます。(そのため、新規パイプ作成でもデフォルトでセットされていない)
フィードがEUCやSJIS、ISO-8859-1等の場合、明示的に指定する必要があります。オプションに変換元のエンコーディングを指定します。
ここでの変換は、文字列->文字列ですが、ジョイントとしては配列にも対応しています。

3) XML解析 (parse)
一番の肝となるジョイントです。
単なる文字列が初めて、意味のあるpipeデータ(配列)になります。
「XML解析」と名づけていますが、文字列の種類はXMLに限りません。
オプションには、XMLタイプを指定します(RDF/RSS/ATOMのいずれか)。
ここを空白にした場合は、可能な限り自動で判別します。
XML取得とペアである必要があります

4) 内部エンコーディングへの変換 (utf8from)
XML解析は基本的にUTF-8で行われるため、pipeデータもUTF-8の配列となっています。
これを内部エンコーディングに変換するのがこのジョイントの仕事です。
オプションには内部エンコーディングを指定します。
特に指定がない場合、一般設定で指定された内部エンコーディングに変換します。

5) 抽出 (filter)
RSS等から欲しい情報(エントリ)だけを取り出すためのジョイントです。
オプションには検索条件を記入します。
この記述法は、クラスによって異なり、mbregexの場合はPOSIX正規表現、pcreの場合は、preg_match()用の正規表現を記述します
mbregexもpcreも、条件にヒットしたエントリだけを残すタイプのフィルターですが、条件にヒットしたエントリを削除するタイプのフィルターを作っても良いでしょう。
このジョイントは、いろいろな場所で挟む可能性があります。
複数の抽出ジョイントを連続して使うケースもあれば、あえて「保存」後にフィルターをかけるケースもありえるでしょう。

6) ローカル保存 (clip)
外部XML取得パターンの最後に入れたいのが、この保存ジョイントです。もちろん、一切保存しない、という選択肢も当然アリでしょうし、集約パイプの最後にだけ入れる、というパターンもあり得ます。
ただ、保存ジョイントを入れた場合と入れない場合では、動作がまったく違ってきます。
ローカル保存した場合、画面表示されたり、RSS出力されたりするのは、保存されたエントリデータとなります。
保存されたエントリデータ1つを、d3pipesでは「切り抜き」と呼びます。
切り抜きには、コメントをつけることが可能です。また、マークをつけることも可能です。
重要なのは、既に保存された(切り抜き化された)データかどうかの判断です。それには、fingerprint(エントリの指紋)と呼ばれるフィールドを利用します。fingerprintが異なるエントリだけが、新しい「切り抜き」として保存されます。
RSS2の場合は<guid>が、ATOMの場合は<id>が、それぞれfingerprintとして利用されます。
ここでのオプションはキャッシュ時間となります。キャッシュが効いている間は、この「ローカル保存」より前のジョイントは通過しません。


以上の説明は、難しかったでしょうか?
まずは、気に入ったフィードを登録して、保存してみてください。
そこにコメントをつけたりしているうちに、なんとなく使い方が判ってくるはずです。


Related articles
Printer friendly page Send this story to a friend

Comments list

GIJOE  Posted on 2007/6/27 3:31
lunallenaさん、こんにちは。

Quote:

2つの Xoops2.016aJP ベースのサイトでのこと。この記事を境に xhld でずっとフィードがとれないでいました。今回ふと思いついて d3pipes0.31 でリトライ。でもまた失敗。
news/index.php?page=rss のソースをみると、ここの記事のところのみ
   D3 Pipesの紹介 (3)</title>
といった具合に <title> 開始タグがおちていました。そのせいかしら、、、?
一度ご確認いただけると幸いです。

EMLHが何か悪影響を及ぼしていたみたいですね。
とりあえず緊急避難的に対処しましたが、もう少し根本的な対策をする必要があるかもしれません。

お知らせいただきありがとうございました。
lunallena  Posted on 2007/6/27 0:59
GIJOE さん

こんにちわ。lunallena です。
SiteNews のところか?こちらか?ずいぶん迷ったのですが、、、

2つの Xoops2.016aJP ベースのサイトでのこと。この記事を境に xhld でずっとフィードがとれないでいました。今回ふと思いついて d3pipes0.31 でリトライ。でもまた失敗。
news/index.php?page=rss のソースをみると、ここの記事のところのみ
   D3 Pipesの紹介 (3)</title>
といった具合に <title> 開始タグがおちていました。そのせいかしら、、、?
一度ご確認いただけると幸いです。

ちなみに d3pipes の「非同期パイプ一覧ブロック」ではフィード取得できています。
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!