【PHP入門】便利な関数を使ってRSSフィードを色々と処理してみる
こんにちは、むっくです。
最近のApp Storeのゲームカテゴリのトップセールスではモンストやパズドラ、ツムツム、白猫などが上位の常連のタイトルになっていますが、いずれも2015年以前のリリースタイトルになります。
今日リリースラッシュからクローズラッシュの波が襲来しているように感じます。
本題
下記のWebサイトで生成されるURLを利用するとApp Storeのランキングやリリース日など簡単なデータが取得できます。
iTunes RSSFeedGenerator
https://rss.itunes.apple.com/jp/
PHPで、ゲームカテゴリトップセールス150位中のリリース年月別の順位と1位のリリース年月のアプリ一覧を出してみました。
それらで使った7つのPHP関数を紹介したいと思います。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
[sourcecode lang="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; } [/sourcecode] |
出力
ゲームカテゴリ トップセールス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ドキュメントは下部にサンプルプログラムがありハマるポイントが載っていたりとても参考になります。
ドキュメントをよく読み、実際に実行して挙動を確かめることが重要です。
それでは、また。