ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

初心者PHP講座コミュのこんにちは。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
tomoです。現在ホームページからRSSを自動生成するPHPを改良して実装したいのですが、うまくRSSを生成してくれません。

ソフトウェアのVer情報を配信しているRSSがなかったので実装しようと思いましたが、どうもうまくいきません。

ソフトウェアの更新情報をRSS化しようとしています、サイト様です。

http://oss.rdy.jp/
http://src.walker.jp/antenna/
http://www2s.biglobe.ne.jp/~takao777/versionupinfo/

以下がソースコードです。

<?php

header("Cache-Control: public");

$itemregexp = "%<table border=0 width=75\% valign=top cellpadding=2 cellspacing=7><tr><td valign=top><a href=\"(.+?)\" id=(.+?)>(.+?)</a><br><font size=-1><font color=#6f6f6f>(.+?) -</font> <nobr>(.+?)</nobr></font><br><font size=-1>(.+?)\n%";
$allowable_tags = "<A><B><BR><BLOCKQUOTE><CENTER><DD><DL><DT><HR><I><IMG><LI><OL><P><PRE><U><UL>";
$site = "";
$url = "http://www2s.biglobe.ne.jp/~takao777/versionupinfo/";

if (phpversion() >= "4.3.0") {
$data = file_get_contents($url);
} else {
if ($fp = @fopen($url, "r")) {
while (!feof($fp)) $data .= fgets($fp, 1024);
fclose($fp);
}
}
$data = mb_convert_encoding($data, "EUC-JP", "auto");

// *******************
// print "<html>";
// print "<pre>";
// print htmlentities($data);
header("Content-Type: text/xml");

eregi("<title>(.*)</title>", $data, $title);
$channel_title = $title[1];

$match_count = preg_match_all($itemregexp, $data, $items);
$match_count = ($match_count > 25) ? 25 : $match_count;

$output .= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
$output .= "<!-- generator=\"Google News RSS RSS\" -->\n";
$output .= "<!DOCTYPE rss >\n";

$output .= "<rss version=\"2.0\">\n";
$output .= " <channel>\n";
$output .= " <title>".$channel_title."</title>\n";
$output .= " <link>". htmlentities($url) ."</link>\n";
$output .= " <description>".$channel_title." - の最新ニュースヘッドラインです。</description>\n";
$output .= " <webMaster>kotatsu</webMaster>\n";
$output .= " <language>ja</language>\n";
$output .= " <generator><a href=\"http://127.0.0.1".$_SERVER['PHP_SELF']."\">Google News RSS</a></generator>\n";


for ($i=0; $i< $match_count; $i++) {
if (substr_count($items[1][$i], "http://") > 0) {
$item_url = $items[1][$i];
} else {
$item_url = $site.$items[1][$i];
}
$title = $items[3][$i];
$title = strip_tags($title);

$source = $items[4][$i];
$source = strip_tags($source);

$days = $items[5][$i];
$days = strip_tags($days);
$days = ereg_replace("年|月", "/", $days);
$days = ereg_replace("日", "", $days);

$desc = $items[6][$i];
$desc = strip_tags($desc);

$output .= " <item>\n";
$output .= " <title>". htmlspecialchars($title)."(". htmlspecialchars($source) .")</title>\n";
$output .= " <link>".htmlspecialchars($item_url) ."</link>\n";
$output .= " <description>".htmlspecialchars($desc) ."</description>\n";
$output .= " <pubDate>".htmlspecialchars($days)."</pubDate>\n";
$output .= " </item>\n";
}
$output .= " </channel>\n";
$output .= "</rss>\n";

$output = mb_convert_encoding($output, "UTF-8", "EUC-JP");
print $output;

//****************
// More debug stuff
// print "<pre>";
// print htmlentities($output);
// print "</pre>";

?>

コメント(4)

自分で作成したいのならお役に立てなくてすいませんです。

(1)RSSを吐いていないサイトから更新情報を取得
(2)RSSを生成
(3)サイトに表示

という過程ですよね。

http://myrss.jp/

にサイトを登録してそれをMagpieRSSでパースというのは不可でしょうか?

参考URL
http://lab.kamawada.com/techmemo/index.cgi?page=MagpieRSS%A4%F2%BB%C8%A4%C3%A4%C6PHP%A4%C7%B4%CA%C3%B1RSS%A5%D1%A1%BC%A5%B9
まめまめこさん回答ありがとうございます^^
そういう過程です><b
My RSS.jpでMagpieRSSでパースの実験はしていたのですが、うまくぬきだせなかったのです^^;

ホームページにRSSを表示する部分にはMagpieRSSを使わせていただいています。
気づいたところだけ。
まず、mb_convert_encodingで第三引数にautoを指定すると、判定に失敗したときにエラーになります。ターゲットページのエンコードがわかっているのですから、ここは素直にSJISにしたほうがイイかと。

あと、$itemregexpで何を抽出しようとしているのかが不明ですが、先方のページにはマッチするような文字列はなさそうですけど?

ので、preg_match_allは失敗し、とどのつまりforループは意味がなくなってしまう(0回ループ)のではないでしょうか。
ginnezさん回答ありがとうございます。^^
$itemregexpで更新されたソフトのリンクなどを文字を抽出したいのです。

以下のサイト様の$itemregexpをかいていただけないでしょうか?^^;

http://oss.rdy.jp/
http://src.walker.jp/antenna/
http://www2s.biglobe.ne.jp/~takao777/versionupinfo/

こちらのサイト様のスクリプトを改良しようとしています。
http://glabel.s56.xrea.com/kotatu/archives/200412/09-2316.php

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者PHP講座 更新情報

初心者PHP講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング