GoogleAppsScriptでAppStoreランキング情報を取得してSheet上にリスト化する

今回は先日記事にしたGoogleAppsScriptの使い方の発展として、Appleが提供しているWebAPIを使って情報の取得からSheetへの一覧表示までを実施します。

また以下の記事内容と組み合わせることで定期的にストアのランキング情報をメールで送付することが可能です。

応用することで特定のアプリの種類だけを通知も可能になります。

WebAPIのURLを取得する

はじめに以下AppleのRSSフィードジェネレータのサイトから今回利用するAPIのURLを取得します。

RSS Generator

各選択肢は以下のように選択してください。

  • 国:日本
  • メディアタイプ:iOS/App
  • フィードタイプ:トップ無料
  • ジャンル:ゲーム ※こちらをALLにすることで全Appが対象になります
  • 結果表示数:100
  • フォーマット:JSON

上記の指定を変更することで、ゲームではなく音楽を対象としたり、無料アプリではなくアプリ売り上げを対象とした取得とすることが出来ます。ただしフォーマットは後ほどの作業で扱いやすくするためJSONを指定してください。

選択後にフィードURLをコピーしてブラウザのURLバーに張り付けてみてください。以下の通り、文字列が返ってくれば成功です。

※叩くタイミングによって返ってくる文字列が異なります。ここではJSON形式と呼ばれる{から始まる文字列が返ってくることを確認してください。

スクリプトエディタにて実行されるメソッドの中身を記載する

上記で生成したURLを使って結果を取得後、成形してSheetのセルにセットする記述です。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // ここで事前に生成したURLを呼び出して結果を取得します
  var resJson = UrlFetchApp.fetch("https://rss.itunes.apple.com/api/v1/jp/ios-apps/top-free/games/100/explicit.json");
  // JavaScriptで扱いやすくするため戻ってきた結果をJsonからJavaScriptのオブジェクトに変換します
  var res = JSON.parse(resJson);
  // アプリ毎の配列でループ処理して結果の一部をシートの対象セルにセットします
  for (var cnt in res.feed.results) {
    // rank
    sheet.getRange(parseInt(cnt) + 1, 1).setValue(parseInt(cnt) + 1);
    // アプリ名
    sheet.getRange(parseInt(cnt) + 1, 2).setValue(res.feed.results[cnt].name);
    // アプリ制作会社
    sheet.getRange(parseInt(cnt) + 1, 3).setValue(res.feed.results[cnt].artistName);
  }
}

起動するfunction(前回の記事だとmyFunction)の中身を上記にして実行することで以下の結果となります。

戻ってくるJsonを整形ツールで実行すると見やすい形になりますが、上記のres.feed.resultsの中身は以下のようになります。 ※記事執筆時に1位だったアプリを例に説明します。

{
 "artistName": "Asobism.Co.,Ltd",
 "id": "1450779090",
 "releaseDate": "2019-05-14",
 "name": "ガンビット",
 "kind": "iosSoftware",
 "copyright": "© 2018 Asobism Co., Ltd. All Rights Reserved.",
 "artistId": "542289516",
 "artistUrl": "https://itunes.apple.com/jp/developer/asobism-co-ltd/id542289516?mt=8",
 "artworkUrl100": "https://is4-ssl.mzstatic.com/image/thumb/Purple123/v4/c5/5f/6d/c55f6dd7-9565-3c1c-ba10-e0c2e9bf3de3/AppIcon-0-1x_U007emarketing-0-0-GLES2_U002c0-512MB-sRGB-0-0-0-85-220-0-0-0-7.png/200x200bb.png",
 "genres": [
 {
 "genreId": "6014",
 "name": "ゲーム",
 "url": "https://itunes.apple.com/jp/genre/id6014"
 },
 {
 "genreId": "7001",
 "name": "アクション",
 "url": "https://itunes.apple.com/jp/genre/id7001"
 },
 {
 "genreId": "6016",
 "name": "エンターテインメント",
 "url": "https://itunes.apple.com/jp/genre/id6016"
 },
 {
 "genreId": "7014",
 "name": "ロールプレイング",
 "url": "https://itunes.apple.com/jp/genre/id7014"
 }
 ],
 "url": "https://itunes.apple.com/jp/app/%E3%82%AC%E3%83%B3%E3%83%93%E3%83%83%E3%83%88/id1450779090?mt=8"
}

今回はアプリ名と制作会社を取得したかったため、上記のnameとartistNameだけを取得しています。

ここでIF条件分岐を使うことで以下のような様々な処理が可能になります。

  • artistNameを参照して特定の制作会社だけに絞る
  • genres内を参照してロールプレイングのみを抽出
  • releaseDateを参照して直近1週間にリリースされたアプリのみを対象

まとめ

今回の例を応用することで様々なWebAPIを利用して情報を取得しスプレッドシート上に展開したり、メールやSlackで定期的に取得、送信することも可能になります。

WebAPIの例として以下に色々まとまっていたので参考にしてみてください。

[2018] 個人でも使える!おすすめAPI一覧

次回は今回の記事をベースにして新しくランクインしたアプリを取得する処理を作成してみます。

タイトルとURLをコピーしました