読者です 読者をやめる 読者になる 読者になる

Asterisk - アスタリスク -

説明するほどでもないブログ

PHPでRSSフィードを取得、JSONで出力してみた

プログラム PHP

ニコニコ動画に関連したことで何か面白いこと出来るかな?

PHPでのJSON出力をやってみた。
PHPでRSSフィードを取得してみた

今回は上記2つの記事でやったことを組み合わせてゴニョゴニョしてみました。

<?php
  // URL設定
  $feed = simplexml_load_file("http://www.nicovideo.jp/ranking/fav/daily/vocaloid?rss=2.0&lang=ja-jp");

  // 連想配列を作成
  $arr = array();

  // フィードアイテムの数を取得
  $entry_count = count($feed->channel->item);

  // 各要素をループで繰り返し取得して、連想配列に格納する
  for ($i = 0; $i < $entry_count; $i++){
    $arr[$i]['feed-title'] = (string)$feed->channel->title;
    $arr[$i]['title']      = (string)$feed->channel->item->$i->title;
    $arr[$i]['link']       = (string)$feed->channel->item->$i->link;
    $arr[$i]['guid']       = (string)$feed->channel->item->$i->guid;
    $arr[$i]['pubDate']    = (string)$feed->channel->item->$i->pubDate;

    $string = (string)$feed->channel->item->$i->description;

    preg_match( '/src=\"(.[^\"]*)\"/', $string, $match);
    $arr[$i]['thumbnail'] = $match[1];

    preg_match ( "/<p class=\"nico-description\">(.*?)<\/p>/i", $string, $match);
    $arr[$i]['nico-description'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-number\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-number'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-length\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-length'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-date\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-date'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-total-view\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-total-view'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-total-res\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-total-res'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-total-mylist\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-total-mylist'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-daily-view\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-daily-view'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-daily-res\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-daily-res'] = $match[1];

    preg_match ( "/<strong class=\"nico-info-daily-mylist\">(.*?)<\/strong>/i", $string, $match);
    $arr[$i]['nico-info-daily-mylist'] = $match[1];
  }

  // JSON形式にエンコード
  $json = json_encode($arr,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  //$json = json_encode($arr);

  // エンコード/デコード処理中に発生したエラーを確認
  switch (json_last_error()) {
    case JSON_ERROR_NONE:
      //echo ' - No errors';
      header('Content-type: text/javascript');
      echo $json;
    break;
    case JSON_ERROR_DEPTH:
      echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
      echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
      echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
      echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
      echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
      echo ' - Unknown error';
    break;
  }
?>

以上でござる。