ぱんぶろ

パンジーの「いいね!」ブログ

rss(atom、rss1.0、rss2.0)から値をphpで取得する方法。

      2016/03/27  

medium_279090726
photo credit: Wesley Fryer via photopin cc

rssって、なぜか複数の型があって複雑です。
違いがあるがゆえに、プログラムを作るときはそれらの違いを吸収してあげる必要があります。

それぞれの構造をハッキリと理解しなくても、
なんとなく「こうすれば、この値が取得できる」
っていうのが分かるようにphpでの取得の仕方を見ていきましょう!!

rssの型には、atom、rss1.0、rss2.0があります。
※値を変数に入れているだけなので、実行しても何も起こりません・・・。

スポンサード リンク

【共通】rss(xml)の構造を取得

 

/* ここは何のRSSでもOK! */
$data['feedurl'][] = 'http://www.calciomatome.net/index.rdf';
$data['feedurl'][] = 'http://blog.livedoor.jp/domesoccer/index.rdf';
$data['feedurl'][] = 'http://football-2ch.com/index.rdf';
$data['feedurl'][] = 'http://blog.livedoor.jp/soccerkusoyarou/index.rdf';
// $data['feedurl'][] = ''; いくらでも追加可能

for ($i = 0; $i < count($data['feedurl']); $i++){
  //rssの構造を取得
  $rssdata = simplexml_load_string($data['feedurl'][$i]);
  //1.atomの場合
  if(ほにゃらら){
  }
  //2.rss1.0の場合
  elseif(ほにゃらら){
  }
  //3.rss2.0の場合
  elseif(ほにゃらら){
  }
}

 

1.atomの場合

 

if($rssdata->entry){
  foreach ($rssdata->entry as $entry){
    /* サイト名 */
    $site = $rssdata->title;
    /* タイトル */
    $title = $entry->title;
    /* リンク */
    $link = $entry->link['href'];
    /* 日付 */
    $date = $entry->updated;
  }
}

 

2.rss1.0の場合

 

if($rssdata->item){
  foreach ($rssdata->entry as $entry){
    /* サイト名 */
    $site = $rssdata->channel->title;
    /* タイトル */
    $title = $entry->title;
    /* リンク */
    $link = $entry->link;
    /* 日付 */
    $date = $entry->children("http://purl.org/dc/elements/1.1/")->date;
  }
}

 

3.rss2.0の場合

 

if($rssdata->channel->item){
  foreach ($rssdata->entry as $entry){
    /* サイト名 */
    $site = $rssdata->channel->title;
    /* タイトル */
    $title = $entry->title;
    /* リンク */
    $link = $entry->link;
    /* 日付 */
    $date = $entry->pubDate;
  }
}

 

まとめると

 

$data['feedurl'][] = 'http://www.calciomatome.net/index.rdf';
$data['feedurl'][] = 'http://blog.livedoor.jp/domesoccer/index.rdf';
$data['feedurl'][] = 'http://football-2ch.com/index.rdf';
$data['feedurl'][] = 'http://blog.livedoor.jp/soccerkusoyarou/index.rdf';
// $data['feedurl'][] = ''; いくらでも追加可能

for ($i = 0; $i < count($data['feedurl']); $i++){
  //rssの構造を取得
  $rssdata = simplexml_load_string($data['feedurl'][$i]);
  //1.atomの場合
  if($rssdata->entry){
    foreach ($rssdata->entry as $entry){
      /* サイト名 */
      $site = $rssdata->title;
      /* タイトル */
      $title = $entry->title;
      /* リンク */
      $link = $entry->link['href'];
      /* 日付 */
      $date = $entry->updated;
    }
  }
  //2.rss1.0の場合
  elseif($rssdata->item){
    foreach ($rssdata->entry as $entry){
      /* サイト名 */
      $site = $rssdata->channel->title;
      /* タイトル */
      $title = $entry->title;
      /* リンク */
      $link = $entry->link;
      /* 日付 */
      $date = $entry->children("http://purl.org/dc/elements/1.1/")->date;
    }
  }
  //3.rss2.0の場合
  elseif($rssdata->channel->item){
    foreach ($rssdata->entry as $entry){
      /* サイト名 */
      $site = $rssdata->channel->title;
      /* タイトル */
      $title = $entry->title;
      /* リンク */
      $link = $entry->link;
      /* 日付 */
      $date = $entry->pubDate;
    }
  }
}

 

こんな感じです。
変数に値を入れているだけなんで、実行してもなにもならないですけどね。

まとめ

atomとrss1.0、rss2.0のそれぞれの形式のxmlから値を取得する方法について見ました。
rssフィードデータを使うときによく利用すると思うので、覚えておくと損はないかと思います。