はじめに
発表された当時こちらの記事をみつつ、実装される言語のサンプルはrubyが多く、他での対応はあまり進んでない状況なのね、と。
https://togetter.com/li/1268268
Slackやchatworkのような情報を一元化したところで
アプリ情報を追加したり、ユーザを追加したり削除したりってのを表示させたり、chatbotと対話して更新作業ができるかしら、とモヤモヤ。
API経由で自動化する有名どころには、ここ数年fastlaneが一番手かと思っていて、Appleが非公開にしているAPIを地道に探して更新されている昨日もありつつ
公式のAPIが顕在化した中、fastlane自体もその対応が迫られている状況があります。2FA認証は大きな契機になるかも?
私自身はCIでのビルドは、fastlaneに頼っていないので
どちらかといえば、ユーザ追加や削除を月次でチェックするような作業を自動化したいところです。加えて、テストユーザの追加削除。
App Store Connect API についてはこちらに仕様を確認しつつ、実装方針がrubyは嫌かな、程度に書きました。
https://developer.apple.com/documentation/appstoreconnectapi
コードを書くまえの準備
qiitaの記事をみました。
https://qiita.com/kurikazu/items/135a791ba09121d7a534
issがなんの略なのか、kidに何をセットしたらいいのかまず迷いました。
詰まる。確信はない
ポイントはjwtでjsonでパラメータ類をぶん投げるところと、日本語が混じってる現実からjson.dumpsにensure_ascii=Falseを追加したところです。
公式ページのオススメは割とざっくりしすぎている印象。
なんとなくpyjwt
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 |
import json import jwt import time import requests from datetime import datetime, timedelta ALGORITHM = 'ES256' APP_STORE_KEY_ID = 'XXXXXxxxxx' ISSUER_ID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' STORE_AUTH_KEY = '/Users/y-fujii/Downloads/AuthKey_XXXXXxxxxx.p8' secret = "" with open(STORE_AUTH_KEY,'r') as f: secret = f.read() exp = int(time.mktime((datetime.now() + timedelta(minutes=20)).timetuple())) token = jwt.encode( { 'iss': ISSUER_ID, "exp": exp, "aud": "appstoreconnect-v1" }, secret, algorithm=ALGORITHM, headers={ 'alg': ALGORITHM, 'kid': APP_STORE_KEY_ID, "typ": "JWT" } ) url = 'https://api.appstoreconnect.apple.com/v1/users' hed = {'Authorization': 'Bearer {}'.format(token.decode('ascii'))} data = {} response = requests.get(url, headers=hed) data = response.json() print(response.status_code) print(json.dumps(data, ensure_ascii=False, indent=4)) |
ユーザーの一覧引けた
最後に
Slack用にデータ整形したり、諸々は続きますが、ざっくりとはこんな感じでした。
ちゃんと書いてる!な感じの私ではない人のコードも見つけてます。
https://github.com/Ponytech/appstoreconnectapi
まだまだ数が足りない感じなので、もっといい感じのコードを書く人が増えたらいいなと。