이 문서는 teamwink ALDA HEALTH METRICS 중 하나인 설치와 관련한 정보를 스크래핑하고, 이를 저장하기 위한 스크립트에 대하여 설명하고 있습니다.
ALDA Health Metrics는 노출 - 획득 - 유지 - 활성 등으로 구분이 됩니다. 이 가운데 획득 부문에서 설치는 각각의 스토어 정보에 로그인하여 입력해야하는 번거로움이 있던 바, 이를 자동화할 수 있는 스크립트를 제작하기에 이르렀습니다.
애플과 구글 모두 API를 기반으로 통신하며, 레포트 출력은 물론,다운로드까지 지원합니다. 설치를 제외한 모든 데이터는 서버에서 출력하고 있으니, 설치와 관련한 데이터를 내부에 축적할 수 있다면 procedure를 만드는 것도 가능하지 않을까요 ?
부푼 꿈을 안고 삽질을 시작해보도록 하겠습니다.
시작은 늘 자신감과 함께 해야합니다. 그래야 최소 능이버섯이라도 됩니다.
Apple App Store Api 문서가 친절하게 설명해주고 있습니다. 따라하면 됩니다.
PyPI에 올라온 appstoreconnect를 이용해보겠습니다.
pip install appstoreconnect
출력
# 준비한 데이터를 입력해줍니다 ..
# API KEY의 접근은 특정 어플리케이션에 한정지을 수 없습니다.
from appstoreconnect import Api
api = Api(key_id, path_to_key_file, issuer_id)
# list all apps
apps = api.list_apps()
for app in apps:
print(app.name, app.sku)
# download sales report
api.download_sales_and_trends_reports(
filters={'vendorNumber': 'vendorNumber', 'frequency': 'WEEKLY', 'reportDate': 'YYYY-MM-DD'}, save_to='report.csv')
위의 appstoreconnect 패키지를 사용하지 않고 해보겠습니다. 도큐멘트의 내용을 찬찬히 살펴보면서 진행해보도록 합시다.
통신을 하는데 있어서, API를 생성해야하고, API 요청을 검증하기 위해서 JWT를 생성해야 합니다.
appstoreconnect-v1
사용할 패키지들을 임포트해줍니다.
from datetime import datetime, timedelta, timezone, time
from jose import jwt, jws
from jose.utils import base64url_decode
import ecdsa
import requests
import json
위에서처럼 입력에 필요한 데이터를 정의합니다. request 를 이용해 json으로 전달할 것입니다.
# Define variables
KEY_ID = "KEY_ID "
ISSUER_ID = "ISSUER_ID "
with open('path', 'r') as f:
PRIVATE_KEY = f.read()
TIMESTAMP = int( (datetime.now() + timedelta(minutes = 35)).timestamp())
#Create the JWT Payload
claim = {"iss" : ISSUER_ID,
"exp" : TIMESTAMP,
"aud" : "appstoreconnect-v1"}
# Create the JWT Header
header = {
"alg": "ES256",
"kid": KEY_ID,
"typ": "JWT"
}
# Create the JWT
encoded = jwt.encode(claim, PRIVATE_KEY, algorithm='ES256', headers=header)
JWT = 'Bearer ' + encoded
## URL = 'https://api.appstoreconnect.apple.com/v1/apps'
URL = 'https://api.appstoreconnect.apple.com/v1/apps' # apps
HEAD = {'Authorization': JWT}
print(HEAD)
응답 결과를 저장해봅시다.
R = requests.get(URL, headers=HEAD)
print 했을때 <Response [200]>
이 출력되면 통신이 되고 있는 것입니다. 다만 endpoint 마다 response 의 형식이 다릅니다. 우리가 진행한 샘플은 json이므로 가볍게 출력을 해주면 됩니다
앱스토어 커넥트의 경험을 바탕으로 구글 플레이스토어도 해봅시다.
google은 api 문서가 매우 친절하고 google-api-python-client 패키지도 제공합니다. 이걸 이용해서 능이버섯을 탈출해봅시다.