他のrssは読み込めるのに、au one ブログ読めません - PHPプロ!Q&A掲示板

700

  • 500P

他のrssは読み込めるのに、au one ブログ読めません

質問日時 / 2007年10月16日 01:33    回答数 / 7件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

キーワード / rss    正規表現   

  1.  <?php 
  2. // URLの指定 
  3. $rdf_url = "http://blog.auone.jp/pluswan/atom/"
  4.  
  5. // RSSを取得 
  6. $content = file_get_contents($rdf_url)
  7.   
  8. // rdfを解析する (下の関数で処理) 
  9. $datas = analyze_rdf($content)
  10. mb_convert_variables("SJIS","UTF-8",$datas);  
  11.   
  12. // rdf ファイルを解析するための関数 
  13. function analyze_rdf($cnt) { 
  14.     // <item> ~ </item> を切り出す 
  15.     $ptn = '/<entry[^>]*>(.+)<\/entry>/sU'
  16.     preg_match_all($ptn$cnt$matches)
  17.   
  18.     // マッチしてれば 
  19.     if (count($matches) > 0) { 
  20.         // 配列に入れる 
  21.         $items = $matches[1]
  22.     } else { 
  23.         return FALSE
  24.     }    
  25.    
  26.     // パターンの指定  
  27.     $ptns["link"] =  '/<link[^>]*>(.+)<\/link>/sU';  
  28.     $ptns["title"] = '/<title[^>]*>(.+)<\/title>/sU'
  29.     $return_array = array()
  30.   
  31.     // link の抜き出し 
  32.     foreach ($items as $val) { 
  33.         $res = array()
  34.   
  35.         preg_match($ptns["link"]$val$matches)
  36.         $res["link"] = $matches[1]
  37.         preg_match($ptns["title"]$val$matches)
  38.         $res["title"] = $matches[1]
  39.   
  40.         $return_array[] = $res
  41.      
  42.     } 
  43.   
  44.     // 配列を返す 
  45.     return $return_array
  46. } 
  47.  
  48.   
  49.     // $count 個分の配列を生成 
  50.     for ($i = 0$i < $count$i++) { 
  51.         $tmp_array[] = $i
  52.     } 
  53.   
  54.   
  55. // HTML に整形するための関数 
  56.  
  57. function make_html($data) { 
  58.     $str = "<a target=\"_parent\" href=\"" . $data["link"] . "\">"
  59.     $str .= $data["title"]."</a>";
  60.     return $str
  61. } 
  62.  
  63. print make_html($datas[0]);
  64.  
  65. ?>

いつもありがとうございます。 
 
便利に使っているブログのrss読み込みphpなんですけど、

 http://blog.auone.jp/pluswan/atom/

だと読み込めないのです。

 - <title>
- <![CDATA[ 一年を振り返って・・・
  ]]> 
  </title>
 というパターンを どのように表現したらいいのかわかりません。

 正規表現が違うから読み込めないんだと思うのです。


 http://www.phppro.jp/qa/611 


 に書いてあるのと ほとんど同じです(*^.^*)

 助けてください。 すみません。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01galluがると申します。 RSSは普通にXMLフォーマットになり
 ┗A01-1yumisaiki   php4 XML パースで検索したら、  http://ko
  ┗A01-1-1yumisaiki http://www.kotono8.com/2005/05/30rssv2.html を
   ┗A01-1-1-1moochomoochoと申します。 繰り返さなくていいということ
    ┗A01-1-1-1-1yumisaikiありがとうございます。 こっちこそ 素人な質問です
     ┗A01-1-1-1-1-1weekendphp読み込めなかった、というよりは、表示されなかっただ
      ┗A01-1-1-1-1-1-1yumisaikiなるほど! 実験してみます。

回答一覧

並び替え:

A01 満足
answerergallu [10月16日 10:55]

がると申します。
RSSは普通にXMLフォーマットになりますので(問題になっているCDATAもまた、XMLの表記方法のひとつです)。
素直にXMLのパーサを使われると非常に楽かと思うのですがいかがでしょうか?

PHP5であれば標準のパーサも多々ありますし、PHP4でも、ググってみると、案外にパーサは存在しているようですので。

以上非常に簡単ではありますが、何かの参考にでもなれば幸いです。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryumisaiki [10月16日 20:16] (最終編集:10月16日 20:17)

 
 php4 XML パースで検索したら、
 http://kommy.s254.xrea.com/blog/log/eid16.html が出てきて、初めてPEAR を使おうと思い、
 ロリポップにPEARの XML/RSS.PHP をインストールしてみました。
 参考:http://power.scianto.net/php/note/id22.php

 で、
  1. <?php
  2. require_once("XML/RSS.php");
  3. $rss=new XML_RSS("http://blog.auone.jp/pluswan/rss/");
  4. $rss->parse();
  5. ?>
  6.  
  7. <h1><?php print(mb_convert_encoding(
  8.   $rss->channel['title'],"EUC-JP","auto"))?></h1>
  9. <ul>
  10. <?php foreach($rss->items as $item){ ?>
  11.   <li><a href="<?php print($item['link'])?>">
  12.     <?php print(mb_convert_encoding($item['title'],"EUC-JP","auto"))?>
  13.   </a></li>
  14. <?php } ?>
  15. </ul>

 としたら、http://www.wgpw.jp/test.php とできましたが、
 ちなみに atom はできず rss ならできました。
 これを一つだけ表示させたいんですが、 いろいろ書いたのですが わかりません。

 たぶん よくわかってる人には簡単な質問だと思うのですが…。

 よろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyeryumisaiki [10月16日 22:11]

 http://www.kotono8.com/2005/05/30rssv2.html を見て作ってみました。

  1. <?php
  2.  
  3. require "XML/RSS.php";
  4.  
  5. // URL指定
  6. $rdf =("http://blog.auone.jp/pluswan/rss/");
  7.  
  8. $r =& new XML_RSS($rdf);
  9. $r->parse();
  10. if (!$ch = $r->getChannelInfo()) echo "データが取得でけまへん";
  11. $site_title = mb_convert_encoding($ch['title']"UTF-8""auto");
  12. $site_title = htmlspecialchars($site_title);
  13. $site_link = $ch['link'];
  14.  
  15.  
  16. $num = ($_GET['n']) ? $_GET['n'] : count($r->getItems());
  17. for ($i=0$i<$num$i++) {
  18.   $val = $r->getItems();
  19.   $title = mb_convert_encoding(strip_tags($val[$i]['title'])"UTF-8""UTF-8,EUC-JP,SJIS");
  20.  
  21.  $link = htmlspecialchars($val[$i]['link']);
  22.  
  23.   // 内容
  24.   echo <<<A
  25.  
  26. <a href="$link" target=_new>$title</a><br/>
  27.  
  28. A;
  29. }
  30.  
  31. ?>


繰り返さなくて 1回だけでいいんですけど、どう書いたらいいのかわからない。
基本的なことが わからないので アドバイスお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1 満足
replyermoocho [10月17日 01:50]

moochoと申します。

繰り返さなくていいということは、
最初の1件だけ出力したいということですか?

であれば16行目以降を若干変更して
  1. <?php 
  2.   
  3. require "XML/RSS.php"
  4.   
  5. // URL指定 
  6. $rdf =("http://blog.auone.jp/pluswan/rss/")
  7.   
  8. $r =& new XML_RSS($rdf)
  9. $r->parse()
  10. if (!$ch = $r->getChannelInfo()) echo "データが取得でけまへん"
  11. $site_title = mb_convert_encoding($ch['title']"UTF-8""auto")
  12. $site_title = htmlspecialchars($site_title)
  13. $site_link = $ch['link']
  14.  
  15. $val = $r->getItems()
  16. $title = mb_convert_encoding(strip_tags($val[0]['title'])"UTF-8""UTF-8,EUC-JP,SJIS")
  17.  
  18. $link = htmlspecialchars($val[0]['link'])
  19.  
  20. // 内容 
  21. echo <<<A 
  22.  
  23. <a href="$link" target=_new>$title</a><br/> 
  24.  
  25. A;
  26. }
  27. ?>
という具合に、forでのループを消してしまえばいいということになります。
($numを作成している行はループでしか使わないので削除しました。)

>繰り返さなくて 1回だけでいいんですけど
のニュアンスを取り違えていたらすみません。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1
replyeryumisaiki [10月17日 02:17] (最終編集:10月17日 02:24)

ありがとうございます。 こっちこそ 素人な質問ですみません。

いろいろ書いたのですが、 前に【0】を書くのがわからなかったのです。 本当にどうしてこれがわからなかったのか?? 
助かりました。

 PEARで簡単にできることはわかりましたが、

- <title>- <![CDATA[ 一年を振り返って・・・ ]]>  </title>
 
 になったら どうして読まないのか不思議でしかたないので、もう少し募集の状態にしてみたいと思います。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1 満足
replyerweekendphp [10月31日 16:39]

読み込めなかった、というよりは、表示されなかっただけだと思います。

指定していた正規表現は、<title>から</title>内を取得するスクリプトで、
つまり、「<![CDATA[ 一年を振り返って・・・ ]]>」という文字列を
HTMLとして書き出していたと思います。

通常のHTMLの中に、<![CDATA[ 一年を振り返って・・・ ]]>が入っている場合、
実験すればわかりますが、表示されません。

これは、「<」から「>」がタグとして認識されているためだと思います。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1
replyeryumisaiki [11月1日 02:00]

なるほど! 実験してみます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)