RDFの配信をトップページを読み込んで自動生成して行いたいと思います。いろいろ探して、kanzaki.comのサンプルスクリプトを見つけたのですが、うまくいきません。cgi-binの中においています。アクセスすればきちんと返ってくるのですが、<rdf:Seq>が空ですし、item rdf:aboutも生成してくれていません。サンプルスクリプトの設定項目は斜体の部分以外に何を設定すればいいのでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2003/07/03 13:33:49
  • 終了:--

回答(4件)

id:shiten No.1

shiten回答回数24ベストアンサー獲得回数02003/07/03 22:01:58

ポイント10pt

while(<>)ではなく

if (open INF, ***){

while(<INF>){

などで読み込む必要があります。

id:sasada No.2

sasada回答回数1482ベストアンサー獲得回数1332003/07/03 14:11:05

ポイント10pt

http://www.kanzaki.com/docs/sw/rss-generation.html

RSS生成スクリプトのサンプル

kanzaki.comのサンプルスクリプトとは、「

http://www.kanzaki.com/docs/sw/rss-generation.html

RSS生成スクリプトのサンプル

」のことでしょうか?

だとすれば、まず頭の3行の変数を設定する必要が有ります。(たぶん、今回の原因はこれだと思います)

あと、日本語を正確に抜き出す為には、jcodeなどを用いて、SHIFT-JISからEUCなどのコードに変換しないと、誤動作するかもしれません。

あと、スクリプトの斜体の部分埋め込みで、メタキャラクタ(”とか)等のPerl上の文法エラーで上手くいってないのかもしれませんので、検証してみては如何でしょうか。

まずは、基本的なところから回答してみました。

id:mcafee

そのスクリプトです。

$item_title = ”h3”; #タイトルとリンクを抜き出す要素

$item_descr = ”p”; #説明文を抜き出す要素

$host = ”http://www.*****.com/index.htm”;

としています。

文法チェックしましたが、問題ありませんでした。文字コード以前に何も読み込んでないようなのですが、何ででしょう・・・(文字コードはすべてUTF-8です)。とりあえず、$hostを読みに行っているとして良いのですよね・・・。

2003/07/03 14:24:11
id:sasada No.3

sasada回答回数1482ベストアンサー獲得回数1332003/07/03 15:13:28

ポイント10pt

 うーん、なんでしょう。。。

 確認ですが、つまり元ファイルは、

 <h3><a href=”*********”>????????</a>

 となっているということで宜しいですね?

 スペースの空き方も、大文字小文字の区別も厳密に。

 そうでなければマッチしないので、各パターンマッチングを修正しなければいけません。

 たとえば、

>if(m|<${item_title}.*?><a href=”(.*?)”>(.*?)</a>|){

 if(m|<${item_title}.*?¥s*>¥s*<a¥s*href=”(.*?)”¥s*>(.*?)</¥s*a¥s*>|i){

に変更するとかです。

 あと、このスクリプトは元ファイルのタグが明示的に閉じている(</?>という閉じタグがある)ことを要件としていますが、ここもOKですか?

 さらに、「文字コードはすべてUTF-8」とのことですので、Perlの処理系に明示した方が良いかもしれません。

 とまで書いて、気がつきました!!

>とりあえず、$hostを読みに行っているとして良いのですよね・・・。

 いえいえ、そうとは限りません。

 このスクリプトは、標準入力から読み込んだxhtmlファイルからRSSを生成して標準出力に書き出すものです。

 標準入力に何か入れてやらないと、入力待ちで止まってしまうような気がします。

 さすがに、これは大丈夫ですかね。。

id:namwonS No.4

namwonS回答回数10ベストアンサー獲得回数02003/07/03 15:32:21

ポイント50pt

 スクリプトみました。

 もし、CGIとして動作させるなら、(CGI-BINに置く以上、そうですよね)

>while(<>){

ではダメで、

$org_filename = ’original file name (inclute path name)’;

if (open INF, $org_filename) {

while(<INF>){

:

:

}

}

としてみてください。

 今のままでは、HTTPのリクエストを読んで、RSSを出力しようとして失敗するはずです。

id:mcafee

なるほど。perlやってる人から見ると、非常に初歩的な問題なのでしょう。自分の勉強不足です。お騒がせしました。

この機にperlを勉強してみようと思います。

2003/07/03 22:05:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません