忍者ブログ

追記:非常におおざっぱな更新履歴

2006年8月8日、以下の機能を修正・追加しました。

・表示件数に10を指定しても1件しか表示されない不具合を修正

・要約を表示できる機能を追加(ただし、非常に不安定)

要約表示機能の詳細については、本文をご覧下さい。

以前、hiroさんの作られたcgiをモディファイして公開したやつのPHP版を作ったので公開します。今回は、from scratchで一から自分でコードを書きました。機能的な点から見た主な変更点は、「ATOMにも対応」、「アメブロのフィードを取り損ねる不具合を修正」、といった感じです。



で、設置方法ですが、まずここからzipファイルをDLしてください。DLしたzipファイルを解凍すると、rss.phpとtest.phpという2つのファイルが出来ます。

解凍された2つのファイルのうち、test.phpのほうは直接の挙動にはまったく関係ないんですが、お使いのサーバのPHPにdomxmlモジュールが組み込まれているかをチェックするものなので、まずはこいつをサーバにアップして、パーミッションを644にして呼び出してみてください。サーバにdomxmlが組み込まれている旨の表示が出ればOK。rss.phpの設定に進んでください。サーバにdomxmlが組み込まれていない胸の表示が出た場合は、ごめんなさい、お使いのサーバではrss.phpは動きません。

さて、rss.phpの設定ですが、任意のエディタでファイルを開いてもらって、行頭の「<?php」を除いた最初の4行が設定項目です。以下にその4行を示します。

 $allowed_url="http://www.example.com/";
$new_range=24;
$font_color="red";
$new_string="新着";

まず、$allowed_urlでは呼び出し元のURLを設定します。これは、他のサーバからの呼び出しを防ぐためのものなので、絶対に設定してください。設定しないと動きません。また、以前のヴァージョンでは、呼び出し元のURLが複数指定できたのですが、今回は1つしか指定できません(要望があれば複数指定もできるようにします)。

$new_rangeでは新着表示を何時間以内の投稿記事であれば表示させるようにするかを指定します。デフォルトでは24時間以内の記事であれば新着表示がされるようになっています。

$font_colorでは新着表示の文字列の色を指定します。デフォルトでは赤が指定されています。

$new_stringでは新着表示の文字列を指定します。デフォルトでは「New」が指定されています(ゆえに、$new_range、$font_colorともにデフォルトの場合は、24時間以内の投稿記事には「New」が付加されることになります)。

このように設定を終えたrss.phpをサーバにアップして、パーミッションを644にすれば、ひとまず設置は完了です。あとは、

 <script language="JavaScript" charset="UTF-8" src="..." />

のような記述を、RSS(ATOM)から取得した記事一覧を表示させたい位置にすればいいのですが、ここでの肝は「src="..."」の「...」の部分で、ここは以下のように記述します。

 http://www.example.com/cgi/rss.php?url=...&type=...&num=...

ここで、urlには取得したいRSS(ATOM)のURLを、typeにはRSSかATOMかの指定を(RSSなら「rss」、ATOMなら「atom」を指定します。何も指定しない場合、「rss」がセットされます)、numには表示させたい記事件数を指定します(指定しない場合は1が指定されます)。

2006年8月8日追記: desc=1の指定で記事の要約を表示できるようにしました。ただ、非常に不安定であるので、とりあえずの暫定機能、という感じです。追って修正版をアップしたい、と思います。



と、まあ、こんな感じなのですが、いかんせんやっつけ仕事であり、その上ろくにテストもしていないので、思わぬところでコケる可能性は否定できません。ので、何かあればここのコメント欄にでもご報告ください。

PR
この記事にコメントする
お名前
メールアドレス
URL
コメント
どうもありがとうございます。
何かPHP版を急いで作ってもらったようになってしまい、申し訳ありません。

早速ダウンロード&設定をしているところです。
アメブロもちゃんと表示されています。

そこで、現在はダウンロードした物をブログ本文の一部(description)も表示する様改造中なのですが、まだうまく表示できていません。。。

また質問させていただくかもしれませんが、その際はよろしくお願いします。

どうもありがとうございました。
furu 2006/07/14(Fri)16:05:00 編集
いえいえ、どのみちやろうと思っていたことなので、逆にはずみができれこちらとしてもよかったです。

ところで、description表示はできましたでしょうか? もし何でしたら、その機能も盛りこんだものを再アップしますが、どういたしましょうか?
はやし 2006/07/15(Sat)01:14:00 編集
初めて書き込みさせて頂きます。
一つ質問があるのですが、test.phpにて問題がなかったため
設置を試みたのですが、
called from invarid referer.
と出てしまいます。
&lt;script language=&quot;JavaScript&quot; charset=&quot;UTF-8&quot; src=&quot;<a href="http
といった感じにHTMLへ記述したのですが、何か問題ありますでしょうか。
kony 2006/08/04(Fri)18:52:00 編集
konyさん、はじめまして。お使いいただきありがとうございます。

さてご質問の事項ですが、まず以下の二点をご確認願います。

1) $allowed_urlの設定は間違いないか
2) スクリプトが動いてるサーバは変数$HTTP_REFERERを取得可能な仕様になっているか

2に関してはサーバがapacheであれば間違いなく取得できるのですが、そうでなければごくまれに取得できない場合もあるようです。

また、スクリプトrss.phpの設置場所がルートディレクトリ直下であると、invalidの表示が出てしまう、という事例があるようですが、当方ではちょっと再現しない事例なので、もしkonyさんがスクリプトをルートディレクトリ直下に設置されている場合、たとえばscriptなどのディレクトリを作成し、そこに設置して試してみてください。

ご迷惑をおかけしますが、よろしくお願いします。
はやし 2006/08/05(Sat)05:50:00 編集
はやしさん、丁寧なご説明有難う御座います。
まず、サーバで$HTTP_REFERERが取得出来るか確認してみます。
.php自体はルート直下でなく、3階層目くらいに設置してあるので、恐らく$HTTP_REFERERの部分かなと思います。
有難う御座いました。
kony 2006/08/07(Mon)11:31:00 編集
konyさん、あまりお役に立てず申し訳ないです。

もしよろしければ、お使いのサーバを教えていただけると、こちらで調査のうえ対応できるかも、です。
はやし 2006/08/08(Tue)01:11:00 編集
今はたと、konyさんのお使いの環境下ではregister_globals変数がオフになっているのかもしれない、と思い当たり、そうした環境下でもリファラ取得が可能なようコードを書き換えました。

これでうまくいく、と断言はできませんが、よろしければ再度rss.zipをDLしてお試しください。
はやし 2006/08/08(Tue)01:29:00 編集
はやしさん、どうもありがとうございます!
使っているサーバは@Niftyの専用サーバです。
色々調べていたんですが、@Niftyは色々とクセがあるみたいで大変のようですね・・。
先ほど、新しいVerのrss.phpを設置させて頂いたところ
1件分、表示を確認することが出来ました。


&lt;script language=&quot;JavaScript&quot; charset=&quot;UTF-8&quot; src=&quot;<a href="http

というような表記をしており、&quot;num=10&quot;で表示件数を10件にしているのですが、実際に表示されるのは1件です。
また、一つお聞きしたいのですが、【$allowed_url】の部分はそのHPのトップページのアドレスでも問題ないのでしょうか。&quot;<a href="http
トップページと実際に設置してるディレクトリを指定する場合と両方やってみましたが、表示は1件分のみの状態でした。


あと、勝手に想像して【desc=1】とか入れると概要が入るのかと思ってましたが、表示されませんでした(当たり前っすね
色々なサイトを見てて、numとかdescとかは結構共通してたので、これ自体が特定の単語か何かで
これをrssから拾ってきて出力してるのかな〜とか思ってました。
プログラムのことは殆ど分からないのですが、この辺りは少し調べてみて表示出来る様に挑戦してみようかなぁとか無謀にも思ってます。

私から見ると、ソースを見ても殆ど意味不明な暗号が
並んでいるようにしか見えないのですが、htmlのタグや
英語で解読可能な部分を見てると、漠然と
「こんな感じで動いているのかな?」とかほんっっのチョッピリだけ分かったような・・分からないような・・。
という感じでソースを眺めてます。
Kony 2006/08/08(Tue)09:57:00 編集
@niftyの専用サーバは調べたとことapacheが動いているようなので、HTTP_REFERERの出力自体はされています。たぶん、register_globals変数がfalseになっているのでしょう。もっとも、PHPコミュニティの常識として、最初からregister_globalsが効いていないことを見越してコーディングするべきなので、当初のぼくのコードがダメだった、ということです。ご迷惑おかけしました。

また、表示件数を10件にしても1件しか表示されない件についても、ごく単純なバグでしたので、早速修正しました。こちらについてもお詫びします。

記事のサマリー表示について、一応その機能を実装しました。ただ、UTF-8の何らかの制御文字がJavaScriptのパーサとぶつかっていて、JavaScriptの終端文字を殺してしまう、という致命的な症状が確認されていますので、様子を見ながらお使いください。

最後に、ぼくの書いた拙いコードであれ、何か実際に動くコードを解析したり、またはちょっとした機能を追加することほど、コーディング能力の向上に資することはありません。ぜひ、色々といじり倒し、konyさん好みのものに仕立て上げてください。楽しいですよ。
はやし 2006/08/08(Tue)19:01:00 編集
はやしさん、色々と親切にありがとうございます!
ぱぱっと追加出来ちゃうあたりが凄いですね。
私も色々といじってみて何か面白いものが出来ましたら
ご連絡したいと思います。

まだまだチョコチョコいじってみて
自分の思った通りの文字を出すとか、そんなレベルですが
それでも楽しいものですね〜。
kony 2006/08/11(Fri)13:38:00 編集
いえいえ、こちらこそ拙いコーディングのせいでご迷惑をおかけしました。

で、元記事に書き忘れたのですが、konyさんの独自拡張版ができたあかつきには、どうぞご自由にご自身のページ等で配布なさってください。

それでは、また何かありましたら遠慮なくご質問ください。
はやし 2006/08/12(Sat)21:13:00 編集
こんばんは。検索からRSS表示方法を調べているとこちらのサイトへたどり着くことが出来て、スクリプトをDLさせていただいたのですが、表示に関しては思い通りで大変貴にいっております。
ただ、テーブル内に表示させているのですがテーブル枠のサイズが決まっている為長いタイトルは折り返して表示されてしまいます。

これを何とかタイトルを20バイトまで表示とか、10文字まで表示とかにする方法と言うのはあるんでしょうか?もしお教えいただけるようでしたらよろしくお願いいたします。
STAN 2007/04/04(Wed)12:10:00 編集
現在やや多忙につき、すぐには対応できませんが、時間ができ次第、STANさんご所望の機能の実装にかかりたいと思いますので、しばらくお待ちください。
はやし 2007/04/04(Wed)12:33:00 編集
すいません、、、
自分で出来ればいいんですが、何分まだPHP書籍を買って読み始めたところで。

ソースを見て理解するのでさえまだ出来ないので。

お忙しいところ申し訳ありません。
STAN 2007/04/04(Wed)12:37:00 編集
いえいえ、こういうふうにご要望をいただいて、そうした機能を実装するというのもたのしい作業なので、何の問題もなしです。

たぶん、一両日中にはコードの改訂版か、もしくは、改造のためのインストラクションを提供できることと思いますので、よろしくお願いします。
はやし 2007/04/04(Wed)12:41:00 編集
インストラクションだけなら、いまお教えできますので、とりあえず以下を試してみてください。

ソース44行目の&quot;$title_array[$i]-&gt;get_content()&quot;を

mb_substr($title_array[$i]-&gt;get_content(), 0, 切り出したい文字数)

もしくは

substr($title_array[$i]-&gt;get_content(), 0, 切り出したいバイト数)

と置き換える。

たぶん、以上の方法でいけるのでは、と思うので、お試しください。

とりいそぎ。
はやし 2007/04/04(Wed)12:51:00 編集
こんばんは、お世話になります。
早速ありがとうございます、&quot;$title_array[$i]-&gt;get_content()&quot;をsubstr($title_array[$i]-&gt;get_content(), 0, 20)に変えてみたのですが、タイトル部分がsubstr(Object-&gt;get_content(), 0, 20)となり取得できません。
STAN 2007/04/05(Thu)23:15:00 編集
STANさん、こんにちは。

こちらで提示させていただいたコード、当方の環境では想定された動作を示しました。もう一度トライしていただいてだめな場合は、$title_array[$i]-&gt;get_content()を、たとえば$entry_titleなどの変数に代入後、それにsubstrをかましてみてください。

なお、書き換えたスクリプトをいちおう以下にアップしておきます。
<a href="http

ご迷惑をおかけしますが、よろしくお願いします。
はやし 2007/04/06(Fri)13:19:00 編集
こんにちは。
ソースのほうは一部分ミスがったので切り出したい文字数でタイトルを表示することが出来るようになりました。
ところがブラウザによっては動作が違う事があるみたいで、
**********&amp;#65533;&amp;#65533;[2007/04/06 20
**********&amp;#65533;[2007/04/06 20
**********[2007/04/06 20
**********&amp;#65533;&amp;#65533;[2007/04/05 18
**********&amp;#65533;&amp;#65533;[2007/04/05 16
**********[2007/04/05 16
*********&amp;#65533;[2007/04/05 16
*********&amp;#65533;&amp;#65533;[2007/04/05 15
や&amp;#65533;&amp;#65533;の部分が/a&gt;となり日付までもがリンク対象になってしまいます。&amp;#65533;&amp;#65533;がついていない行はタイトルのみがリンク掛かってるます。

これは何が悪いんでしょうか?よろしくお願いします。
(<a href="http
STAN 2007/04/08(Sun)12:07:00 編集
ソースは、拡張子を間違えていました。正しくは以下です。
<a href="http

STANさん報告の不具合は、たぶんsubstrによって切ってはならないバイト区切りで文字を切ってしまっており、それが周囲の文字と干渉しているものと思われますが、とりあえず取得するタイトルが日本語である場合、substrではなくmb_substrを使うことで問題が回避できるかもしれません。

また、詳しくは、使用ブラウザやOSなど、関連する情報が必要です。もう少し詳しい問題発生状況をお知らせください。
はやし 2007/04/08(Sun)16:10:00 編集
お手間を取らせてすいません。

mb_substr($title_array[$i]-&gt;get_content(), 0, 21)にした状態で表示の具合は下記のURL画像のとおりです。
<a href="http
STAN 2007/04/08(Sun)17:56:00 編集
だいたい状況は分かりましたので、対策を講じてみます。いましばらくお待ちください。
はやし 2007/04/09(Mon)23:41:00 編集
申し訳ありません、よろしくお願いします。
STAN 2007/04/10(Tue)21:55:00 編集
手近にWindows環境がないもので、お返事が遅れました。申し訳ありません。

さて、如上の理由により、テストも覚束ない状態なのですが、たぶん原因はエンコーディングを顧慮せず半端な位置でバイトコードをぶった切っていること、と思われますので、

mb_substr($title_array[$i]-&gt;get_content(), 0, 21, &quot;UTF-8&quot;)

とエンコ指定をしてみてください。
はやし 2007/04/11(Wed)17:51:00 編集
解決しました、ありがとうございます。また、お手数取らせて申し訳ありませんでした。
STAN 2007/04/14(Sat)16:06:00 編集
いえいえ、どういたしまして。また何かありましたら、お気軽にどうぞ。
はやし 2007/04/15(Sun)15:23:00 編集
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
02 2017/03 04
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 15 16 17 18
19 20 22 23 24 25
26 27 28 29 30 31
最新トラックバック
メール
ブログ作成者(はやし)に直接訴えたいことがある、という場合は、下のアドレスにメールをどうぞ。

thayashi#ucalgary.ca
(#を@に置換してください)

ブログ内検索
Google
WWW を検索 このブログ内を検索

はやしのブログ内で紹介された
 書籍の検索はこちら
 音盤の検索はこちら
ランダムおすすめ
(忍者ブログに引越してから、うまくうごかなくなってしまいました。いつか、直します)
Randombook
このブログで紹介したことのある本をランダム表示。
Randomusic
このブログで紹介したことのある音をランダム表示。
自分がらみのリンク
はやしのブログ書籍一覧
このブログで言及された書籍の一覧。
はやしのブログ音盤一覧
このブログで言及された音盤の一覧。
最近のおすすめ本
最近のおすすめ音

Copyright © [ はやしのブログ ]
No right reserved except those which belong to someone else.
Special Template : 忍者ブログ de テンプレート and ブログアクセスアップ
Special Thanks : 忍者ブログ
Commercial message : [PR]