• ベストアンサー

atomのフィードをphpで出力したい

よろしくお願い致します。 phpの勉強を最近始めまして、 ブログの更新情報をphpで作ったページに出力させたいと思っています。 <?PHP require_once("RSS.php"); $rss=new XML_RSS("http://xmlのアドレス?"); $rss->parse(); ?> <h1><?php print(mb_convert_encoding($rss->channel['title'],"EUC-JP","auto")); ?></h1> <ul> <?php foreach($rss->items as $item){ ?> <?PHP print(mb_convert_encoding($item['$title'],"EUC-JP","auto")); ?> <li> <a href="<?php print($item['link']); ?>"> <?php print(mb_convert_encoding($item['title'],"EUC-JP","auto")); ?> </a> </li> <?php } ?> </ul> こんなスクリプトでrss1.0はタイトルとリンクが上手く表示されるのですが、atomのフィードで表示させようとするとtitleは表示されるのですがlinkが上手く取得できません。 ネットで検索してみたのですが、 通常atomのフィードはMagpieRSS等を利用してrss1.0等に変換したのちに上記のようなスクリプトを利用して表示させるという考え方でよろしいでしょうか? またatomのフィードをスクリプトで表示させる参考になるおすすめのサイトをご存知でしたらURLを教えていただけますでしょうか? どうぞ皆様ご指導よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • oka5130
  • ベストアンサー率66% (35/53)
回答No.1

MagpieRSSを使えば、rss1.0、rss2.0、atomなどを気にせずフィードを取得できます。 私はMagpieRSSを使って、以下のような書き方で書いています。 <?php // MagpieRSSのrss_fetch.incをインクルード require_once 'rss_fetch.inc'; // URL $url = "○○"; // フィード取得 $rss = fetch_rss($url); // ページタイトル $page_title = mb_convert_encoding($rss->channel['title'], 'EUC-JP', 'UTF-8'); // 記事データ $data = $rss->items; for ($i=0; $i<count($data); $i++) { // 記事1つ1つのタイトルや本文などをエンコード foreach ($data[$i] as $key => $value) { $data[$i][$value] = mb_convert_encoding($value, 'EUC-JP', 'UTF-8'); } } echo $page_title; print_r($data); ?> URLをいろいろと変えてみて、動作確認してみてはいかがでしょう。 MagpieRSSがあまりに便利だったので、他のものは試していません^^;

参考URL:
http://www.hyuki.com/yukiwiki/wiki.cgi?MagpieRSS
singosingosingo
質問者

お礼

MagpieRSSだとrss1.0やatom等、 気にせずに使えるのは便利ですね^^ 教えていただきありがとうございます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

PHP5 が使えるならSimpleXML を使って <?php $atom = simplexml_load_file("アドレスatom.xml"); ?> <h1><?php print(mb_convert_encoding($atom->{'title'},"EUC-JP","auto")); ?></h1> <ul> <?php foreach($atom->{'entry'} as $item){ ?> <?php $attr=$item->{'link'}->attributes(); ?> <li> <a href="<?php print $attr['href']; ?>"> <?php print mb_convert_encoding($item->{'title'},"EUC-JP","auto"); ?> </a> </li> <?php } ?> </ul> でできます。

singosingosingo
質問者

お礼

simpleXMLでアトムのlinkを取得するには $attr=$item->{'link'}->attributes(); $attr['href']; と辿って行くんですね、勉強になりました^^ 教えていただきありがとうございました。

関連するQ&A

  • MagpieRSSについて(PHPでRSSを取得、解析)

    http://works.xrea.jp/headline.php 上記サイトにてPHPを利用したRSSの取得と解析に挑戦しています。 PHPについては全くの素人です。 説明どおりにやってもうまくいきません。ブラウザで見ると下記のように表示されます。 channel['title']; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo "<h4>$title</h4>?n"; echo "<ul>?n"; foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); $url = $item[link]; echo "<li><a href=?"$url?">$title</a></li>?n"; } echo "</ul>?n"; ?> そもそもPHPはhtmlに埋め込んで使えるのでしょうか? htmlはDOCTYPE宣言からはじまるxthmlです。 サーバーはPHPが使えるものです。 教えてください。よろしくお願いします。

    • ベストアンサー
    • 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
  • mb_convert_variablesで変換出来てない??

    PHP初心者で今勉強しているのですが、入門書に書かれたサンプルソースが実行すると文字化けします。以下です。 <html> <head> <title>RSSフィードの読み込み</title> </head> <body> <h1 style="background:#cccccc">RSSフィードの読み込み</h1> <?php require_once("rss_fetch.inc"); $objXml=simplexml_load_file("rss.xml"); foreach($objXml->site as $site) { $objRss=fetch_rss($site->url); mb_convert_variables("EUC-JP","auto",$objRss); ?> <dl> <dt style="font-weight:bold;"><?php if(!is_null($site->title) && $site->title!=""){ print(mb_convert_encoding($site->title,"EUC-JP","auto")); }else{ print($objRss->channel['title']); }?></dt> <dd> <ol> <?php foreach ($objRss->items as $item){ ?> <li> <a href='<?php print($item['link']);?>'> <?php print($item['title']); ?></a> </li> <?php } ?> </ol> </dd> </dl> <hr /> <?php } ?> </body> </html> mb_convert_encodingの所は変換出来てるのですが、mb_convert_variablesで変換したリストの所だけ文字化けします。 php.iniとか見ても多分出来てるようなのですが、わかる方すいませんが宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • 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
  • phpについて~<div>;foreach

    PHP初心者です。<div>の中でforeachって使えるのですか? <?PHP require_once 'rss_fetch.inc'; $url = $td[SITEURL]; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo<<<__EOF__ <div class="dt"> <p class="dtTitle"> <a href="{$_SERVER["PHP_SELF"]}?id={$td["ID"]}&amp;url={$td["SITEURL"]}"> {$td["SITENAME"]} </a> {$listCt} {$flgImg} </p> <p class="dtCategory">コミュニティ:{$td["CATEGORY"]}{$FlgTag}</p> $NAME <p class="dtComment">{$img}{$td["COMMENT"]}</p> $ADMINCOMMENT <p class="dtDate">登録日:{$td["REGISTDATE"]}[<a href="regist.php?id={$td["ID"]}">編集</a>]</p> この部分↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <?php foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); $url = $item[link]; $date = date("Y/m/d H:i:s", strtotime($item['dc']['date'])); ?> <p class="dtComment"> <li><a href=\"$url\">$title</a>$date</li></p> <?PHP } ?> </div> __EOF__; ?> このような書き方しか思いつかないのですが、 <div>~</div>の中でforeachの使い方を教えてください。

    • 締切済み
    • 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
  • RSSに関して

    こんばんは。お世話になっております。 只今、テスト的に以下のサイトのソースを参考に、登録していただいた方のブログの一覧表示(更新題名が1件ずつ)が出来るように組んでいるのですが、非常に重たく、他に上手いやり方がある?などと色々と試行錯誤を繰り返している状況です。 http://works.xrea.jp/headline.php イメージ的に、登録してくれた会員のブログを、ブログランキングサイトのように、検索一覧として1件ずつ更新記事(題名)を表示させたいと考えてます。 ソースの流れは、 while($row = mysql_fetch_array($res, MYSQL_ASSOC)){  $url = $row["url"];  require("./rss_index/rss-test.php");  ・  ・ 以上、検索ファイル 以下、rss-test.php <?php require_once 'rss_fetch.inc'; $url = $url; $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "EUC-JP", "auto"); echo "<h5>$title</h5>\n"; $rss->items = array_slice($rss->items, 0, 1); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "EUC-JP", "auto"); $url = $item[link]; echo "<li><a href=\"$url\">$title</a></li>\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
  • 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

専門家に質問してみよう