MagpieRSSを使用して自分のHPにxmlを表示させる方法

このQ&Aのポイント
  • データベースよりxmlを生成し、自分のHPに1ページに埋め込みたいと思っています。MagpieRSSを使用して表示させたいのですが、ローカルのxmlは表示できません。
  • 使用しているphpのバージョンは4.34、MagpieRSSのバージョンは0.72です。表示するxmlのURLを変更しましたが、エラーが出てしまいます。
  • 対処方法をご存知の方教えてください。
回答を見る
  • ベストアンサー

MagpieRSSを使用して自分のHPにxmlを表示させる方法

お世話になります。 データベースよりxmlを生成し、自分のHPに1ページに埋め込みたいと思っています。 いろいろなサイトを参考に、MagpieRSSを使用して表示させたいのですが、コードのサンプルに記載されている他サイトのRSS・xmlは表示できるのですが、ローカルのxmlは下記のエラーが出てしまい表示できません。 Warning: MagpieRSS: Failed to parse RSS file. (not well-formed (invalid token) at line 9, column 21) in /aaa/rss/rss_fetch.inc on line 238 変更した部分は、表示するxmlのURLのみです。 使用しているphpのバージョンは4.34、MagpieRSSのバージョンは0.72です。 問題のrss.phpのソース↓ <?php require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $url = 'http://www.aaa.com/rss.xml'; $rss = fetch_rss($url); if ($rss && !$rss->ERROR) { drawRSS($rss); }else{ echo "取得できませんでした。"; } function drawRSS($rss){ $items = array_slice($rss->items, 0, 10); echo "<ul>\n"; foreach ($items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "UTF-8", "auto"); $url = $item[link]; $description = $item[description]; $description = mb_convert_encoding($description, "UTF-8", "auto"); echo "<li><a href=\"$url\">$title</a></li>\n$description"; } echo "</ul>\n"; } ?> 何か、対処方法をご存知の方教えてください。 よろしくお願いいたします。

  • XML
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>9行目21文字目は漢字でした だとしたら、思いつくとしたら「文字コード」なんだけどな。 まさかXML宣言のencodingがないとか間違っている(ファイルがShift_JISだったとか。アルファベットは大半の文字コードでASCIIコードが基準になって共通なため、問題が発生しにくい)ってオチはないですよねぇ?

momo0612
質問者

お礼

xmlの生成の際に、title・descriptionの部分をmb_convert_encodingしてみました!! 無事に表示することが出来ました。 ありがとうございました。

momo0612
質問者

補足

ですよね。。 私もそうだと思って試行錯誤・・・・・ 表示のテストをしているxmlは↓(以下test.xml) <?xml version="1.0" encoding="EUC-JP"?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel rdf:about="http://www.test.daion.ac.jp/"> <title>Web</title> <link>http://www.aaa.com</link> <description>test</description> <dc:language>ja</dc:language> <items> <rdf:Seq> <rdf:li rdf:resource="http://www.aaa.com/test.php?eid=209"/> <rdf:li rdf:resource="http://www.aaa.com/test.php?eid=192"/> </rdf:Seq> </items> </channel> <item rdf:about="http://www.aaa.com/test.php?eid=209"> <dc:date>2007-03-11T15:00:00+01:00</dc:date> <dc:source>18:30</dc:source> <title>aaa</title> <link>http://www.aaa.com/test.php?eid=209</link> <description>aaa</description> </item> <item rdf:about="http://www.aaa.com/test.php?eid=192"> <dc:date>2007-02-24T15:00:00+01:00</dc:date> <dc:source>14:00</dc:source> <title>bbb</title> <link>http://www.aaa.com/test.php?eid=192</link> <description>bbb</description> </item> </rdf:RDF> これは表示OKです。 ただ、phpでxmlを生成しているんですが、phpで新しく生成したファイル(以下new.xml)は<description>の部分でエラーが出ます。 xmlの形はまったく同じで、new.xmlの<item>部分だけをコピーして test.xmlの<item>部分に貼り付けすると、エラーも出ず漢字・かなも表示出来ました。 一度、違う文字コードで、new.xmlを生成してみます!! ありがとうございます!!

その他の回答 (1)

回答No.1

PHP未経験者です。 エラーを見る限りでは >(not well-formed (invalid token) at line 9, column 21) となっていますが そのローカルのXMLファイルは整形式なの?コレ見るとそういうエラー出てるみたいだけど。(9行目、21文字目におかしい文字があるらしい)

momo0612
質問者

お礼

おはようございます。 9行目21文字目は漢字でした。 ためしに、xmlの中のテキスト部分をすべて英数字にしてみると ちゃんと表示が出来ました。 日本語の表示の部分みたいですが・・・・なかなか良い解決方法が見つかりません。 回答ありがとうございました。

関連するQ&A

  • PHPパーサー MagpieRSSについて

    PHPパーサーのMagpieRSSを使用しています。 読み込むxmlが更新されてもそれが反映されません。 また、htmlとして書き出す際に<p>タグにid名を付けたいのですが、idをつけるとエラーがでます。これはPHPでは文法的にまずいんでしょうか?下記が使用しているソースです。 重ねて質問なんですが、下記のソースでは1つのxmlしか読み込んでいませんが、複数のxmlを読み込むにはどうしたらいいのでしょうか。 よろしくお願いします。 <?php require_once 'rss_fetch.inc'; require_once 'rss_utils.inc'; $url = 'http://www.xxxxx/xxxxxx/index.xml'; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "UTF-8", "auto"); $rss->items = array_slice($rss->items, 0, 1); foreach ($rss->items as $item ) { $description = $item[description]; $description = mb_convert_encoding($description, "UTF-8", "auto"); $url = $item[link]; $date = date("Y.m.d", $item['date_timestamp']); echo "$description?n"; } ?>

    • ベストアンサー
    • PHP
  • MagpieRSSで異なる複数のブログを表示

    お世話になります。PHPの初心者です。 MagpieRSSを使用して、異なる複数のブログを1つの更新欄にまとめ、 最新記事を5件表示させたいです。 いろいろ参考にしながら、下記のようなソースを組み、 なんとか複数のブログを1つにまとめるまでは出来ました。 しかしながら件数の指定方法がわからず、困っています。 どのようにしたら5件表示できるようになるでしょうか? 宜しくお願い致します。 <?php require_once 'rss_fetch.inc'; require_once 'rss_utils.inc'; require_once 'jcode.php'; include_once 'rss_utils.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); define('MAGPIE_CACHE_ON', false); $url = array( 'http://example1.com/index.xml', 'http://example2.com/index.xml', 'http://example3.com/index.xml', 'http://example4.com/index.xml'); for ($i = 0; isset($url[$i]); $i++) { $rss = fetch_rss($url[$i]); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "Shift_JIS", "UTF-8"); $rss->items = array_slice($rss->items, 0, 5); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "Shift_JIS", "UTF-8"); $item_url = $item[link]; $itemday = date('Y-n-j',strtotime(substr($item['dc']['date'],0,10))); $mday = date('w',strtotime(substr($item['dc']['date'],0,10))); echo "<li><strong>${itemday} $youbi[$mday] ${itemtime}</strong><a href=\"$item_url\">$title</a></li>\n"; } echo "\n"; } ?>

    • ベストアンサー
    • PHP
  • 動的なPHPを静的なhtmlページに変換したい

    動的なPHPページ(RSS)を静的なhtmlのページとして、変換したいのですが、どのようにしたら良いでしょうか? 書いたPHPは下記のようなモノです。 <?php error_reporting(E_ERROR); require_once 'rss_fetch.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $url = 'http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fwww.lucky-bag.com'; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo "<h3>$title</h3>\n"; echo "<dl>\n"; foreach ($rss->items as $item ) { $title = htmlspecialchars($item['title']); $title = mb_convert_encoding($title, "EUC-JP", "auto"); $description = htmlspecialchars($item['description']); $url = htmlspecialchars($item['link']); echo "<dt><a href=\"$url\">$title</a></dt>\n"; $description = mb_convert_encoding($description, "EUC-JP", "auto"); echo "<dd>$description</dd>\n"; } echo "</dl>\n"; ?> どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • MagpieRSSでRSSを取得し、ランダムに表示

    <?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'xmlアドレス'; $rss = fetch_rss($url); $title = $rss->channel['title']; //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 4); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 4); $url = $item[link]; $description = $item[description]; $description = mb_convert_encoding($description, "Shift_JIS", "auto"); $description = mb_strimwidth($description, 0, 120, "" , "Shift_JIS"); echo "<li><a href=\"$url\">$title</a><br>$description</li>\n"; } ?> と記述し、 <ul> <!--#include virtual="上記phpファイルのアドレス" --> </ul> でサイトにRSSを表示しているのですが、 通常上が新しいものが表示されているのですが、 これをランダムに表示したいと考えています、 shuffleを使えばできるような感じですが、記述方法が全く分かりません。 何を記述すれば、ランダム表示されますか。

    • ベストアンサー
    • PHP
  • RSSを取得したいのですが

    下記サイトを参考に、以下のコードを埋め込んだのですが、 http://plaza.rakuten.co.jp/kemusiro/diary/200601150000/ 日付が (1970/01/01 00:00:00) と表示された上に文字化けしてしまいます。 MagpieRSSはmagpierss-0.72.tar.gzから必要ファイルを、index.phpの下におきました。 正常に表示させるためには、どう直せばよいでしょうか? <?php require_once('magpierss/rss_fetch.inc'); define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $count = 5; $length = 60; $url = 'http://api.plaza.rakuten.ne.jp/kemusiro/rss/'; $rss = fetch_rss($url); echo "<ul>"; array_splice($rss->items, $count); foreach ($rss->items as $item) { $href = $item['link']; $title = mb_convert_encoding($item['title'], "SJIS", "auto"); $date = date('Y/m/d H:i:s', parse_w3cdtf($item['dc']['date'])); $description = mb_convert_encoding($item['description'], "SJIS", "auto"); if (mb_strlen($description) > $length) { $description = mb_strcut($description, 0, $length) . "..."; } echo "<li>"; echo "<FONT color=\"#ff8040\">(" . $date . ")</FONT> "; echo "<a href=$href>" . $title . "</a><BR>"; echo $description . "</li>"; } echo "</ul>"; ?>

    • 締切済み
    • PHP
  • Parse error: parse error, unexpected $ エラーについて

    MagpieRSS-0.72を利用して、RSSをサイトに反映させるように苦戦しています。。 HTML内でRSS.PHPをインクルードさせると、以下のようなエラーがでて困っています。。 Parse error: parse error, unexpected $ in /var/www/vhosts/*********.com/httpdocs/rss/rss.php on line 21 RSS.PHPファイルの内容 <?php require_once 'rss_fetch.inc’; // ここから MagpieRSS 0.61 を入手→ http://magpierss.sourceforge.net/ $men = array ("http://japan.****.com/rss/index.rdf", "http://www.******.com/stafflog/atom.xml"); foreach ($men as $pre) { $url = $pre; $rss = fetch_rss($url); $title = $rss->channel[title]; $title = mb_convert_encoding($title, "shift_jis", "auto"); $url = $rss->channel[link]; echo "<div class=\"RSSsite\"><p class=\"tdbg\"><a href=\"$url\" target=\"_blank\">$title</a></p></div>\n"; $rss->items = array_slice($rss->items, 0, 5); // 表示件数を5にしている foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "shift_jis", "auto"); // 文字コードは適時変更 $url = $item[link]; echo "<div class=\"RSSline\"><li><a href=\"$url\" target=\"_blank\">$title</a></li></div>\n"; $description = $item[description]; //タイトルだけなら下の行とも削除 $description = mb_convert_encoding($description, "shift_jis", "auto"); // 文字コードは適時変更 echo "<p class=\"spc\">$description</p>\n"; } ?> 以下のサイトを参考にして作りました。 http://muto.wordpress.com/2006/06/28/%e8%a4%87%e6%95%b0%e3%81%ae%e3%83%95%e3%82%a3%e3%83%bc%e3%83%89%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%95%e3%81%9b%e3%82%8bphp/

    • 締切済み
    • PHP
  • Magpie RSSを使用して日付表示できないエラー

    初めまして、お世話になります。 PHPに関しては初心者です。 Magpie RSSを使用してフィードをトップページに表示させたいのですが タイトルは問題ないなく表示されるのですが、日付を表示させようとすると1970年01月01日 と表示され取得出来ない状態です。 MagpieRSSのバージョンは0.72でRSS2.0です。 取得先はwordpress バーション2.61になります。 色々と調べてみて Magpie0.7より使用できる$item['date_timestamp']という参照方法も試してみたのですがだめでした。 サーバーの問題かと思い複数のサーバーでも試したのですが1970年01月01日と表示されてしまします。 具体的なソースは下記の通りです。 <?php require_once 'rss_fetch.inc'; define('MAGPIE_FETCH_TIME_OUT', 30); // タイムアウトまでの define('MAGPIE_CACHE_AGE', 30*60); // キャッシュ更新の時間 $url = 'フィードのURL'; $rss = fetch_rss($url); $title = $rss->channel['title']; echo "<li class=\"ItemTitle\"><a href=\"$url\">RSS記事一覧を表示</a></li>\n"; $title = mb_convert_encoding($title, "UTF-8", "auto"); $rss->items = array_slice($rss->items, 0, 10); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "UTF-8", "auto"); $url = $item[link]; $date_str = date("m月d日 ", $item['date_timestamp']); if ($date >= time() - 3600 * 24 * 7) { $date_str = "<EM>" . $date_str . "</EM>"; } echo "<li class=\"ItemTitle\">$date_str<a href=\"$url\">$title</a></li>\n"; }; $url = $rss->channel['link']; ?> どなたか対処法をご存じの方がおられましたらご教授頂けると 幸いに思います。 以上、よろしくお願いいたします。

    • 締切済み
    • PHP
  • magpierssを利用して携帯サイトにRSS情報を表示

    magpierssを利用して携帯サイトにRSS情報を表示 magpierssを利用して携帯サイトにツイッターのつぶやきを表示させたいと思っています。 現時点でサイトにつぶやきを表示するところまでいきましたが、 つぶやき内容に書かれてあるURLを自動リンクにしたいのですが可能でしょうか? 現在は、リンクをクリックすると、PCのツイッターのページへリンクされております。 このリンクではなく、つぶやきにURLが書かれていた場合、そのURLを自動リンクにしたいと思っております。 PHPに関しては知識がないもので、 下記PHP表記も他サイト様に掲載されていた情報を元に作成しました。 rssはssiを利用して読み込んでおります。 -------------------- rss.phpの表記 <?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'http://twitter.com/statuses/user_timeline/ツイッターID.rss'; $rss = fetch_rss($url); $title = $rss->channel['title']; // 表示する件数の上限 $rss = fetch_rss($url); $rss->items = array_slice($rss->items, 0, 5); //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 2); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 2); $url = $item[link]; echo '<dt><a href="'.$url.'">'.$title.'</a></dt>'; } ?> ------------------------------- 読み込むhtmlの表記 <dl> <!--#include virtual="../magpie/rss.php"--> </dl> 色々なサイトを見てみましたが、基本的なPHPの知識がなく、 まったくわからない状態です。 どなたかご教授いただければと思います。よろしくお願いいたします。

    • 締切済み
    • PHP
  • MagpieRSSを使ってrss取得の際の表示件数

    MagpieRSSを使ってrssを取得したく下記のphpを作成しました。 <?php define('MAGPIE_OUTPUT_ENCODING','UTF-8'); require_once('rss_fetch.inc'); $url="xxxx.rdf"; $rss = fetch_rss($url); foreach($rss->items as $item){ foreach($item[dc] as $key => $daytime){ if($key == "date"){ $rssdate = strtotime("$daytime"); $today = strtotime(date("Y/m/d H:i")); } if($rssdate > $today){ print("$item[title]"); } } } ?> 過去から未来の予定が書いてあるRSS(rdf)があり、 現在の時間のデータを取得して、未来の予定のを表示したいです。 現在、print("$item[title]");で未来の予定がズラっと取得できる状態です。 そして、ここからが問題なのですが、 ここ(print("$item[title]");)の表示を最新の1件にしたいのですが、どうしてもうまくいきません。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • さくらレンタルサーバーでのMagpieRSS設置方法

    さくらインターネットサーバーを使用しています。 RSSをサイトに表示しようとしています。javaタイプではなく、ロボット検索エンジンに認識されるものとしてPHPを試しています。 そこで、MagpieRSSを利用したいと考えているのですが、 http://www.kosaki.name/cms/movable-type/rss-html/ http://ameblo.jp/yamasita-94nsr/entry-10018566158.html を参考に、 indexと同じ階層に magpie / rss.php(属性755)      │  jcode.php      │  code_table.ucs2jis      │  rss_cache.inc      │  rss_fetch.inc      │  rss_parse.inc      │  rss_utils.inc      │      ├ extlib / Snoopy.class.inc      │      └ cache (属性755) をアップロードし、rss.php内を <?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'httpから始まるRSSのURL'; $rss = fetch_rss($url); $title = $rss->channel['title']; //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 2); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 2); $url = $item[link]; echo "<li><a href=\"$url\">$title</a></li>\n"; } ?> と記述。 http://www.サイトURL/magpie/rss.phpを表示して動作確認をしようとしたのですが、真っ白で何も表示されません。 設定方法がおかしいのでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう