質問編集履歴

3

コードとエラー内容を修正しました

2019/05/15 03:04

投稿

nakatsus
nakatsus

スコア11

test CHANGED
File without changes
test CHANGED
@@ -12,37 +12,9 @@
12
12
 
13
13
  ### 発生している問題・エラーメッセージ
14
14
 
15
-
16
-
17
15
  Traceback (most recent call last):
18
16
 
19
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 349, in prepare_key
20
-
21
- key = load_pem_public_key(key, backend=default_backend())
22
-
23
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 20, in load_pem_public_key
24
-
25
- return backend.load_pem_public_key(data)
26
-
27
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1071, in load_pem_public_key
28
-
29
- self._handle_key_loading_error()
30
-
31
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
32
-
33
- raise ValueError("Could not deserialize key data.")
34
-
35
- ValueError: Could not deserialize key data.
36
-
37
-
38
-
39
- During handling of the above exception, another exception occurred:
40
-
41
-
42
-
43
- Traceback (most recent call last):
44
-
45
- File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 84, in <module>
17
+ File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 90, in <module>
46
18
 
47
19
  get_apple_reports(request)
48
20
 
@@ -50,47 +22,17 @@
50
22
 
51
23
  token = __get_apple_store_connect_api_token()
52
24
 
53
- File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 41, in __get_apple_store_connect_api_token
25
+ File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 33, in __get_apple_store_connect_api_token
54
-
55
- headers=headers).decode()
26
+
56
-
57
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jwt.py", line 65, in encode
58
-
59
- json_payload, key, algorithm, headers, json_encoder
60
-
61
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jws.py", line 113, in encode
62
-
63
- key = alg_obj.prepare_key(key)
64
-
65
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 351, in prepare_key
66
-
67
- key = load_pem_private_key(key, password=None, backend=default_backend())
27
+ exp = int(time.mktime((datetime.now() + timedelta(minutes=20)).timetuple()))
68
-
69
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 16, in load_pem_private_key
28
+
70
-
71
- return backend.load_pem_private_key(data, password)
72
-
73
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1045, in load_pem_private_key
74
-
75
- password,
76
-
77
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1271, in _load_key
78
-
79
- self._handle_key_loading_error()
80
-
81
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
82
-
83
- raise ValueError("Could not deserialize key data.")
84
-
85
- ValueError: Could not deserialize key data.
29
+ NameError: name 'time' is not defined
86
-
87
-
88
30
 
89
31
  ### 該当のソースコード
90
32
 
91
33
 
92
34
 
93
- ```ここに言語を入力
35
+ ```python3
94
36
 
95
37
  import json
96
38
 
@@ -138,39 +80,53 @@
138
80
 
139
81
 
140
82
 
83
+ ALGORITHM = 'ES256'
84
+
85
+
86
+
87
+ APP_STORE_KEY_ID = 'XXXXXXXXXX'
88
+
89
+ ISSUER_ID = 'XXXXX-XXXXXX-XXXXX-XXXXX'
90
+
91
+ STORE_AUTH_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.p8'
92
+
93
+
94
+
95
+ secret = ""
96
+
97
+ with open(STORE_AUTH_KEY,'r') as f:
98
+
99
+ secret = f.read()
100
+
141
- jst = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
101
+ exp = int(time.mktime((datetime.now() + timedelta(minutes=20)).timetuple()))
142
-
143
- now_ut = int(datetime.datetime.now(jst).timestamp()) + 20 * 60
102
+
144
-
145
-
146
-
147
- headers = {"alg": "ES256",
103
+ token = jwt.encode(
104
+
148
-
105
+ {
106
+
149
- "kid": 'キーID',
107
+ 'iss': ISSUER_ID,
150
-
151
- "typ": "JWT"}
108
+
152
-
153
- payload = {"iss": 'ISS',
154
-
155
- "exp": now_ut,
109
+ "exp": exp,
156
-
110
+
157
- "aud": "appstoreconnect-v1"}
111
+ "aud": "appstoreconnect-v1"
158
-
159
-
160
-
161
- private_key = 'プライベートキー'
112
+
162
-
163
- private_key = re.sub(r'\n',r'\n',private_key)
164
-
165
-
166
-
167
- token = jwt.encode(payload,
113
+ },
168
-
114
+
169
- private_key,
115
+ secret,
170
-
116
+
171
- algorithm='ES256',
117
+ algorithm=ALGORITHM,
172
-
118
+
173
- headers=headers).decode()
119
+ headers={
120
+
121
+ 'alg': ALGORITHM,
122
+
123
+ 'kid': APP_STORE_KEY_ID,
124
+
125
+ "typ": "JWT"
126
+
127
+ }
128
+
129
+ )
174
130
 
175
131
 
176
132
 
@@ -258,8 +214,6 @@
258
214
 
259
215
  get_apple_reports(request)
260
216
 
261
-
262
-
263
217
  ```
264
218
 
265
219
  ### 試したこと

2

修正

2019/05/15 03:04

投稿

nakatsus
nakatsus

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,267 +1,263 @@
1
+ ### 前提・実現したいこと
2
+
3
+
4
+
5
+ pythonにてApp Store Connectからレポートを取得したいのですが、
6
+
7
+ 参考になるサイトが少なく、拾ってきたコードを繋げて実行しているのですが、
8
+
9
+ 上手く動作しません。
10
+
11
+
12
+
13
+ ### 発生している問題・エラーメッセージ
14
+
15
+
16
+
17
+ Traceback (most recent call last):
18
+
19
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 349, in prepare_key
20
+
21
+ key = load_pem_public_key(key, backend=default_backend())
22
+
23
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 20, in load_pem_public_key
24
+
25
+ return backend.load_pem_public_key(data)
26
+
27
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1071, in load_pem_public_key
28
+
29
+ self._handle_key_loading_error()
30
+
31
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
32
+
33
+ raise ValueError("Could not deserialize key data.")
34
+
35
+ ValueError: Could not deserialize key data.
36
+
37
+
38
+
39
+ During handling of the above exception, another exception occurred:
40
+
41
+
42
+
43
+ Traceback (most recent call last):
44
+
45
+ File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 84, in <module>
46
+
47
+ get_apple_reports(request)
48
+
49
+ File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 11, in get_apple_reports
50
+
51
+ token = __get_apple_store_connect_api_token()
52
+
53
+ File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 41, in __get_apple_store_connect_api_token
54
+
55
+ headers=headers).decode()
56
+
57
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jwt.py", line 65, in encode
58
+
59
+ json_payload, key, algorithm, headers, json_encoder
60
+
61
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jws.py", line 113, in encode
62
+
63
+ key = alg_obj.prepare_key(key)
64
+
65
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 351, in prepare_key
66
+
67
+ key = load_pem_private_key(key, password=None, backend=default_backend())
68
+
69
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 16, in load_pem_private_key
70
+
71
+ return backend.load_pem_private_key(data, password)
72
+
73
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1045, in load_pem_private_key
74
+
75
+ password,
76
+
77
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1271, in _load_key
78
+
79
+ self._handle_key_loading_error()
80
+
81
+ File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
82
+
83
+ raise ValueError("Could not deserialize key data.")
84
+
85
+ ValueError: Could not deserialize key data.
86
+
87
+
88
+
89
+ ### 該当のソースコード
90
+
91
+
92
+
1
93
  ```ここに言語を入力
2
94
 
3
- コード
4
-
5
- ```### 前提・実現したいこと
6
-
7
-
8
-
9
- pythonにてApp Store Connectからレポートを取得したいのですが、
10
-
11
- 参考になるサイトが少なく、拾ってきたコードを繋げて実行しているのですが、
12
-
13
- 上手く動作しません。
14
-
15
-
16
-
17
- ### 発生している問題・エラーメッセージ
18
-
19
-
20
-
21
- Traceback (most recent call last):
22
-
23
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 349, in prepare_key
24
-
25
- key = load_pem_public_key(key, backend=default_backend())
26
-
27
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 20, in load_pem_public_key
28
-
29
- return backend.load_pem_public_key(data)
30
-
31
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1071, in load_pem_public_key
32
-
33
- self._handle_key_loading_error()
34
-
35
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
36
-
37
- raise ValueError("Could not deserialize key data.")
38
-
39
- ValueError: Could not deserialize key data.
40
-
41
-
42
-
43
- During handling of the above exception, another exception occurred:
44
-
45
-
46
-
47
- Traceback (most recent call last):
48
-
49
- File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 84, in <module>
95
+ import json
96
+
97
+ import jwt
98
+
99
+ import requests
100
+
101
+ import logging, os, sys, re
102
+
103
+ import pprint
104
+
105
+ import urllib.request, urllib.error
106
+
107
+ import datetime
108
+
109
+
110
+
111
+ def get_apple_reports(request):
112
+
113
+
114
+
115
+ token = __get_apple_store_connect_api_token()
116
+
117
+
118
+
119
+ date_str = request.args.get('date')
120
+
121
+ (code, content, date_str) = __get_reports(token, date_str)
122
+
123
+
124
+
125
+ filename_header = 'test/'
126
+
127
+ filename = filename_header + 'S_D_' + '80051256' \
128
+
129
+ + '_' + date_str.replace('-','') + '.txt.gz'
130
+
131
+
132
+
133
+ return (None,200,None)
134
+
135
+
136
+
137
+ def __get_apple_store_connect_api_token():
138
+
139
+
140
+
141
+ jst = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
142
+
143
+ now_ut = int(datetime.datetime.now(jst).timestamp()) + 20 * 60
144
+
145
+
146
+
147
+ headers = {"alg": "ES256",
148
+
149
+ "kid": 'キーID',
150
+
151
+ "typ": "JWT"}
152
+
153
+ payload = {"iss": 'ISS',
154
+
155
+ "exp": now_ut,
156
+
157
+ "aud": "appstoreconnect-v1"}
158
+
159
+
160
+
161
+ private_key = 'プライベートキー'
162
+
163
+ private_key = re.sub(r'\n',r'\n',private_key)
164
+
165
+
166
+
167
+ token = jwt.encode(payload,
168
+
169
+ private_key,
170
+
171
+ algorithm='ES256',
172
+
173
+ headers=headers).decode()
174
+
175
+
176
+
177
+ logging.debug('Apple Store Connect API token: ' + token)
178
+
179
+
180
+
181
+ return token
182
+
183
+
184
+
185
+ def __get_reports(token,date_str=None):
186
+
187
+ base_url = 'https://api.appstoreconnect.apple.com/v1/salesReports'
188
+
189
+
190
+
191
+ if not date_str:
192
+
193
+ jst = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
194
+
195
+ date_str = (datetime.datetime.now(jst) - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
196
+
197
+ query_parameters = {
198
+
199
+ "filter[frequency]": "DAILY",
200
+
201
+ "filter[reportSubType]": "SUMMARY",
202
+
203
+ "filter[reportType]": "SALES",
204
+
205
+ "filter[vendorNumber]": '80051256',
206
+
207
+ "filter[reportDate]": date_str
208
+
209
+ }
210
+
211
+
212
+
213
+ url = base_url
214
+
215
+
216
+
217
+ logging.debug("url: " + url)
218
+
219
+ logging.debug("query_params[filter[reportDate]]: " + date_str)
220
+
221
+
222
+
223
+ headers = {'Authorization': 'Bearer ' + token,
224
+
225
+ 'Accept': '*/*'}
226
+
227
+
228
+
229
+ req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(query_parameters)), headers=headers)
230
+
231
+ try:
232
+
233
+ with urllib.request.urlopen(req) as res:
234
+
235
+ content = res.read()
236
+
237
+ code = 200
238
+
239
+ except (urllib.error.HTTPError, urllib.error.URLError) as e:
240
+
241
+ logging.error("Error occered in urllib.request.Request().\n code: " + str(e.code) + \
242
+
243
+ "\n reason: " + e.reason)
244
+
245
+ code = e.code
246
+
247
+ content = e.reason
248
+
249
+
250
+
251
+ return (code, content, date_str)
252
+
253
+
254
+
255
+ if __name__ == '__main__':
256
+
257
+ request = {"args": {"date_str": None}}
50
258
 
51
259
  get_apple_reports(request)
52
260
 
53
- File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 11, in get_apple_reports
54
-
55
- token = __get_apple_store_connect_api_token()
56
-
57
- File "c:/Users/nakatsus/Documents/AppleAPI/GetReport.py", line 41, in __get_apple_store_connect_api_token
58
-
59
- headers=headers).decode()
60
-
61
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jwt.py", line 65, in encode
62
-
63
- json_payload, key, algorithm, headers, json_encoder
64
-
65
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\api_jws.py", line 113, in encode
66
-
67
- key = alg_obj.prepare_key(key)
68
-
69
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jwt\algorithms.py", line 351, in prepare_key
70
-
71
- key = load_pem_private_key(key, password=None, backend=default_backend())
72
-
73
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 16, in load_pem_private_key
74
-
75
- return backend.load_pem_private_key(data, password)
76
-
77
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1045, in load_pem_private_key
78
-
79
- password,
80
-
81
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1271, in _load_key
82
-
83
- self._handle_key_loading_error()
84
-
85
- File "C:\Users\nakatsus\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1329, in _handle_key_loading_error
86
-
87
- raise ValueError("Could not deserialize key data.")
88
-
89
- ValueError: Could not deserialize key data.
90
-
91
-
92
-
93
- ### 該当のソースコード
94
-
95
-
96
-
97
- ```ここに言語を入力
98
-
99
- import json
100
-
101
- import jwt
102
-
103
- import requests
104
-
105
- import logging, os, sys, re
106
-
107
- import pprint
108
-
109
- import urllib.request, urllib.error
110
-
111
- import datetime
112
-
113
-
114
-
115
- def get_apple_reports(request):
116
-
117
-
118
-
119
- token = __get_apple_store_connect_api_token()
120
-
121
-
122
-
123
- date_str = request.args.get('date')
124
-
125
- (code, content, date_str) = __get_reports(token, date_str)
126
-
127
-
128
-
129
- filename_header = 'test/'
130
-
131
- filename = filename_header + 'S_D_' + '80051256' \
132
-
133
- + '_' + date_str.replace('-','') + '.txt.gz'
134
-
135
-
136
-
137
- return (None,200,None)
138
-
139
-
140
-
141
- def __get_apple_store_connect_api_token():
142
-
143
-
144
-
145
- jst = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
146
-
147
- now_ut = int(datetime.datetime.now(jst).timestamp()) + 20 * 60
148
-
149
-
150
-
151
- headers = {"alg": "ES256",
152
-
153
- "kid": 'キーID',
154
-
155
- "typ": "JWT"}
156
-
157
- payload = {"iss": 'ISS',
158
-
159
- "exp": now_ut,
160
-
161
- "aud": "appstoreconnect-v1"}
162
-
163
-
164
-
165
- private_key = 'プライベートキー'
166
-
167
- private_key = re.sub(r'\n',r'\n',private_key)
168
-
169
-
170
-
171
- token = jwt.encode(payload,
172
-
173
- private_key,
174
-
175
- algorithm='ES256',
176
-
177
- headers=headers).decode()
178
-
179
-
180
-
181
- logging.debug('Apple Store Connect API token: ' + token)
182
-
183
-
184
-
185
- return token
186
-
187
-
188
-
189
- def __get_reports(token,date_str=None):
190
-
191
- base_url = 'https://api.appstoreconnect.apple.com/v1/salesReports'
192
-
193
-
194
-
195
- if not date_str:
196
-
197
- jst = datetime.timezone(datetime.timedelta(hours=+9), 'JST')
198
-
199
- date_str = (datetime.datetime.now(jst) - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
200
-
201
- query_parameters = {
202
-
203
- "filter[frequency]": "DAILY",
204
-
205
- "filter[reportSubType]": "SUMMARY",
206
-
207
- "filter[reportType]": "SALES",
208
-
209
- "filter[vendorNumber]": '80051256',
210
-
211
- "filter[reportDate]": date_str
212
-
213
- }
214
-
215
-
216
-
217
- url = base_url
218
-
219
-
220
-
221
- logging.debug("url: " + url)
222
-
223
- logging.debug("query_params[filter[reportDate]]: " + date_str)
224
-
225
-
226
-
227
- headers = {'Authorization': 'Bearer ' + token,
228
-
229
- 'Accept': '*/*'}
230
-
231
-
232
-
233
- req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(query_parameters)), headers=headers)
234
-
235
- try:
236
-
237
- with urllib.request.urlopen(req) as res:
238
-
239
- content = res.read()
240
-
241
- code = 200
242
-
243
- except (urllib.error.HTTPError, urllib.error.URLError) as e:
244
-
245
- logging.error("Error occered in urllib.request.Request().\n code: " + str(e.code) + \
246
-
247
- "\n reason: " + e.reason)
248
-
249
- code = e.code
250
-
251
- content = e.reason
252
-
253
-
254
-
255
- return (code, content, date_str)
256
-
257
-
258
-
259
- if __name__ == '__main__':
260
-
261
- request = {"args": {"date_str": None}}
262
-
263
- get_apple_reports(request)
264
-
265
261
 
266
262
 
267
263
  ```

1

コードにインデントを挿入しました。

2019/05/15 02:21

投稿

nakatsus
nakatsus

スコア11

test CHANGED
@@ -1 +1 @@
1
- Apple Store ConnectからAPIを使ってレポートを取得したい
1
+ App Store ConnectからAPIを使ってレポートを取得したい
test CHANGED
@@ -1,4 +1,8 @@
1
+ ```ここに言語を入力
2
+
3
+ コード
4
+
1
- ### 前提・実現したいこと
5
+ ```### 前提・実現したいこと
2
6
 
3
7
 
4
8
 
@@ -90,6 +94,8 @@
90
94
 
91
95
 
92
96
 
97
+ ```ここに言語を入力
98
+
93
99
  import json
94
100
 
95
101
  import jwt
@@ -258,6 +264,8 @@
258
264
 
259
265
 
260
266
 
267
+ ```
268
+
261
269
  ### 試したこと
262
270
 
263
271