SONICMOOV Googleページ

【PHP入門】便利な関数を使ってRSSフィードを色々と処理してみる

【PHP入門】便利な関数を使ってRSSフィードを色々と処理してみる

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

こんにちは、むっくです。

最近のApp Storeのゲームカテゴリのトップセールスではモンストやパズドラ、ツムツム、白猫などが上位の常連のタイトルになっていますが、いずれも2015年以前のリリースタイトルになります。
今日リリースラッシュからクローズラッシュの波が襲来しているように感じます。


本題

下記のWebサイトで生成されるURLを利用するとApp Storeのランキングやリリース日など簡単なデータが取得できます。

iTunes RSSFeedGenerator
https://rss.itunes.apple.com/jp/

PHPで、ゲームカテゴリトップセールス150位中のリリース年月別の順位と1位のリリース年月のアプリ一覧を出してみました。
それらで使った7つのPHP関数を紹介したいと思います。

サンプルコード


<?php
$limit = 150;
$genre = 6014;
$rank  = 3;

echo sprintf("ゲームカテゴリ トップセールス%d位中 リリース年月別 上位%d件",$limit,$rank).PHP_EOL;

# ※1.sprintf URL作成
$url = sprintf('https://itunes.apple.com/jp/rss/topgrossingapplications/limit=%s/genre=%s/json', $limit, $genre);

# ※2.file_get_contents ファイル内容取得
$html = file_get_contents($url);

# ※3.json_decode jsonデコード
$json = json_decode($html, true);

$count = array();
$title = array();
$ii = 1;
foreach ($json['feed']['entry'] as $k => $j) {

  # ※4.substr リリース年月取得
  $d = substr($j['im:releaseDate']['label'],0,7);

  if (isset($count[$d])) {
    $count[$d] = $count[$d]+1;
  } else {
    $count[$d] = 1;
  }
  # 順位とタイトル取得
  $title[$d][] = array($ii, $j['im:name']['label']);

  $ii++;
}

# ※5.arsort 配列を値でソート
arsort($count);

$jj = 0;
echo sprintf("=== 上位%d件 ====",$rank).PHP_EOL;
foreach ($count as $k => $v) {

  # ※6.explode 文字列の分割
  $tmp = explode('-',$k);

  # 上位$rank件
  echo sprintf("%d年%2d月: %2d件",$tmp[0],$tmp[1],$v).PHP_EOL;
  if (++$jj >= $rank) break;

}
echo PHP_EOL;

# ※7.array_keys キー名を取得
$key = array_keys($count)[0];

$tmp = explode('-',$key);
echo sprintf("-- %d年%d月リリースアプリ --",$tmp[0],$tmp[1]).PHP_EOL;
echo "(順位) タイトル".PHP_EOL;

foreach ($title[$key] as $t) {

  # タイトル
  echo sprintf("(%3d) %s",$t[0], $t[1]).PHP_EOL;

}

出力


ゲームカテゴリ トップセールス150位中 リリース年月別 上位3
=== 上位3件 ====
2015年 3月: 10件
2015年10月: 7件
2015年 8月: 6件

-- 2015年3月リリースアプリ --
(順位) タイトル
( 20) 夢王国と眠れる100人の王子様
( 47) 三国大戦スマッシュ!/さんすま!
( 59) ぼくとドラゴン【仲間とわいわいリアルタイムバトル】
( 76) リトル ノア
( 77) 幻獣契約クリプトラクト
( 79) 三国天武~本格戦略バトル~
( 84) キン肉マン マッスルショット
( 99) キングダム -英雄の系譜-
(114) 【18】 キミト ツナガル パズル(エイティーン)
(135) 未来家系図 つぐme

sprintf

フォーマットされた文字列を返す
http://php.net/manual/ja/function.sprintf.php

“%2d”、”%02d”など桁数を合わせるときに便利です。
また、ソースコードの見た目もすっきりします。

file_get_contents

ファイルの内容を全て文字列に読み込む
http://php.net/manual/ja/function.file-get-contents.php

fileを読み込む関数ですが、URLを指定するとhttpコンテンツも取得できます。
簡単なWebAPIの取得に便利です。

json_decode

JSON 文字列をデコードする
http://php.net/manual/ja/function.json-decode.php

第2引数assocにTRUEを指定すると連想配列として扱えます。
WebAPIのJSONレスポンスなどを扱うのに重宝します。

substr

文字列の一部分を返す
http://php.net/manual/ja/function.substr.php

第2引数startは一文字目を取得するときは0を指定します。
“-“を指定すると後ろから取得できます。

arsort

連想キーと要素との関係を維持しつつ配列を逆順にソートする
http://php.net/manual/ja/function.arsort.php

今回は値を保持したまま、キーを降順にソートしました。

配列のソート
http://php.net/manual/ja/array.sorting.php

explode

文字列を文字列により分割する
http://php.net/manual/ja/function.explode.php

文字列分割関数の一つ、その他にはsplitなどあります。
今回は、”2015-03″という文字列を2015と03に分割しました。

配列を区切り文字で連結する場合にはimplodeがあります。
http://php.net/manual/ja/function.implode.php

array_keys

配列のキーすべて、あるいはその一部を返す
http://php.net/manual/ja/function.array-keys.php

配列操作の関数になります。
破壊的な関数で実行した後、引数の配列が変更されます。
返り値には成功失敗のbooleanを返します。

phpの配列関数、いっぱいあります。
http://php.net/manual/ja/ref.array.php

phpは配列操作が得意な言語で、今回は使いませんでしたがコールバック関数を使うと綺麗にかけたりすることがあります。
http://php.net/manual/ja/language.types.callable.php


このようにPHPは豊富な標準関数を備えておりドキュメントも充実しています。
しかし、バージョンによる違いや思わぬ挙動があるので注意が必要です。

e.g.

isset(http://php.net/manual/ja/function.isset.php)
PHP 5.4 以降では、文字列内でのオフセット指定を渡したときの isset() の挙動が変わりました。

in_arrayはデフォルトでは型を含めての判定をしません。
http://php.net/manual/ja/function.in-array.php
参考:PHPのin_arrayは罠が多いので注意喚起が必要

これらは、上げれば切りがないくらい上がってきます。
PHPドキュメントは下部にサンプルプログラムがありハマるポイントが載っていたりとても参考になります。
ドキュメントをよく読み、実際に実行して挙動を確かめることが重要です。

それでは、また。

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

記事作成者の紹介

mukku(システムエンジニア)

生活を豊かにするWebサービスが大好きでそんなシステムに携わり続けていきたいと思いながら、日々の業務に励んでおります。

システムエンジニア募集中!

×

SNSでも情報配信中!ぜひご登録ください。

×

SNSでも
情報配信中!
SONICMOOV Facebookページ SONICMOOV Twitter SONICMOOV Googleページ
システムエンジニア募集中!

新着の記事

mautic is open source marketing automation