somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】RSSの取得

今回は、phpでのRSS取得方法についてのメモです。

file_get_contentsでの方法

file_get_contentsで取得したデータをXMLオブジェクトに変換しています。プロキシサーバ経由の場合、データ取得時に設定しないといけません。

<?php
  /**
   * RSSデータの取得
   *
   * @param String $url RSS取得用URL
   * @return SimpleXMLElement XMLオブジェクトに変換したRSSデータ
   */
  function getRss($url) {
    // プロキシ設定(※必要な場合のみ)
    $proxy = array(
      "http" => array(
         "proxy" => 'tcp://IPアドレス:ポート'),
         'request_fulluri' => true,
      ),
    );

    // RSS情報を文字列で取得
    $info_xml_str = file_get_contents($url, false, stream_context_create($proxy));

    // XMLオブジェクトに変換
    return simplexml_load_string($info_xml_str);
  }

  // 例としてlivedoorRSS
  $rss_url = 'http://news.livedoor.com/topics/rss.xml';
  $info_list = getRss($rss_url);

表示部分

XMLオブジェクトはイテレータを実装しているから?foreachに対応しています。要素からデータを取得するには、要素名を指定すればOKです。内容は、取得先のRSSバージョンなどによると思います。

<?php foreach ($info_list as $info) : ?>
  <li><?php echo $info->language ?></li>
  <li><?php echo $info->title ?></li>
  <li><?php echo $info->link ?></li>
  <li><?php echo $info->generator ?></li>
  <li><?php echo $info->description ?></li>
  <li><?php echo $info->lastBuildDate ?></li>
  <li>
    <ul>
    <?php foreach ($info->item as $item) : ?>
      <li>
        <?php echo $item->title ?><br />
        <?php echo $item->link ?><br />
        <?php echo $item->description ?><br />
        <?php echo $item->pubDate ?><br />
        <?php echo $item->guid ?><br />
      </li>
    <?php endforeach; ?>
    </ul>
  </li>
<?php endforeach; ?>

他の方法

両方とも試しましたが、動きませんでした。おそらく、プロキシ設定だと思います。

/*
// simplexml_load_file使用
$feed = simplexml_load_file($rss_url);

// SimplePie使用⇒別途ライブラリが必要
$feed = new SimplePie();
$feed->set_feed_url($rss_url);
$feed->enable_cache(false);
$feed->init();
// 取得
$title = $feed->get_title();
$description = $feed->get_description();
$link = $feed->get_link();
$items = $feed->get_items();
*/