『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

App Store からのアプリのダウンロード数をバッジにするCLIを作った

はじめに

現状、 App Store からのアプリのダウンロード数は App Store Connect API を含む App Store Connect 上からでのみ取得が可能になっており、外部への公開等が難しい状況にありました。
自分も個人アプリを開発をしておりショボい開発者並みにとっさに月のダウンロード数などを答えたいっていう場面がたまにあります。(もちろん MAU とか別の指標も大切だと思うよ)
そこで個人開発者向けに使ってくれる人がいればいいなぁというという淡い期待で CLI を作成しました。

生成物

このツールを使用して生成できるバッジは Shields.io を使用しており、カラースタイルは PyPI のダウンロード数を参考に実装しています。*1

0 DL → red
1 ~ 9 DL → yello
10 ~ 99 DL → yellogreen
100 ~ 999 DL → green
1,000 DL ~ → brightgreen

といった具合です。


https://github.com/nnsnodnb/app-store-download-count-badge-maker?tab=readme-ov-file#examples より

また、バッジは SVG で保存され、名前は Apple Identifier と頻度(Frenquency)で構成しています。

  • Apple Identifier: https://apps.apple.com/us/app/id◯◯◯◯◯◯◯◯◯◯?mt=8 の の部分
  • 頻度: year month week day

ちょっと面倒くさくなってまだ自分ではポートフォリオサイト等に追記していませんが、バッジ生成(後で記述)は行っているので気が向いたタイミングで追加を行っておきます。

使用方法・使用例

$ pip install app-store-download-count-badge-maker

もしくは pipx が導入されていれば

$ pipx install app-store-download-count-badge-maker

でインストールが可能です。

使用方法

  1. App Store Connect から Finance 権限を持つ API キーを生成

    • レポートを取得する API には Finance 権限が必要になるため
  2. config.yml を作成する

  3. ツールを実行

  4. dist にバッジが生成される

使用例

GitHub Actions でスケジュール実行をして GitHub Pages にデプロイをするワークフローを定義して月1回実行をしています。

上記のように GitHub Pages の機能を使用し GitHub Actions から成果物をアップロードするような実装を行っています。あとは Web サイト等でこの URL を埋め込むだけで自動的に更新をすることが可能になります。

使用技術

  • App Store Connect API
  • click
  • httpx
  • pandas
  • PyJWT
  • cryptography
  • PyYAML

今後の課題

Sales and Trends reports are available to download at the following times:

  • Daily reports are available the following day.
  • Weekly reports are available on Mondays.
  • Monthly reports are available five days after the end of the month.
  • Yearly reports are available six days after the end of the year.

Reports are generally available by 8 a.m. Pacific Time (PT).

引用:https://developer.apple.com/help/app-store-connect/reference/sales-and-trends-reports-availability

上記のように、レポートの更新は行われます。

例えば現状では日次レポートは3日前まで問答無用で遡って実行をしています。*2
したがって直前のデータが取得できないので実行時に現在時刻を参照して直近のレポートを取得してバッジを生成するようにすることが挙げられます。

最後に

リリースして3週間経ちましたがダウンロード数が約600に達して完全に停滞したのと、先述した課題周りの自分に対しての戒めとして記事を書きました。


もしこういう機能がほしいとか不具合とかあったら Issue 、 Pull Request 、 SNS 、直接会ったとき、ハガキ*3でもいいので教えてください!

名前長いので良い感じな名前考えたけど何も思いつかなかった(すでに取られていたり)

おまけ

このツールを開発している最中に1つのアプリが去年だけで 6,000件以上ダウンロードされていることを知って大変うれしく思いました。今や、旧 TwitterAPI が有料化され*4とても個人じゃ賄えきれない利用料になってしまってアプリをほぼ使えない状態のまま放置しています。
当時は1日相当数のツイート*5がされたり、有名人の方が使ってくださったり*6、広告収入もそれなりと結構にぎわっていたのかなと思っています。

執筆:@nnsnodnb
Shodoで執筆されました

*1:参考にした程度なので確証はありません

*2:https://github.com/nnsnodnb/app-store-download-count-badge-maker/blob/bb38f6df47b08921db3821410469d20f017c306d/maker/const.py#L33

*3:テロはやめて

*4:https://developer.x.com/en/docs/x-api/getting-started/about-x-api

*5:Proプランが必要なほど

*6:ツイート検索したらわかること