Python 샘플: 앱, 추가 기능 및 플라이트 제출
이 문서는 이런 작업에 Microsoft Store 제출 API를 사용하는 방법을 설명하는 Python 코드 예제를 제공합니다.
Azure AD 액세스 토큰 가져오기
다음의 예시는 Microsoft Store 제출 API에서 메서드를 호출하는 데 사용할 수 있도록 Azure AD 액세스 토큰을 가져오는 방법을 보여 줍니다. 토큰을 가져온 후 만료되기 전에 이 토큰을 Microsoft Store 제출 API에 대한 호출에 사용할 수 있는 시간은 60분입니다. 토큰이 만료된 후 새 토큰을 생성할 수 있습니다.
import http.client, json
tenantId = "" # Your tenant ID
clientId = "" # Your client ID
clientSecret = "" # Your client secret
tokenEndpoint = "https://login.microsoftonline.com/{0}/oauth2/token"
tokenResource = "https://manage.devcenter.microsoft.com"
tokenRequestBody = "grant_type=client_credentials&client_id={0}&client_secret={1}&resource={2}".format(clientId, clientSecret, tokenResource)
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"}
tokenConnection = http.client.HTTPSConnection("login.microsoftonline.com")
tokenConnection.request("POST", "/{0}/oauth2/token".format(tenantId), tokenRequestBody, headers=headers)
tokenResponse = tokenConnection.getresponse()
print(tokenResponse.status)
tokenJson = json.loads(tokenResponse.read().decode())
print(tokenJson["access_token"])
tokenConnection.close()
추가 기능 만들기
다음의 예시는 추가 기능 만들기 및 삭제 방법을 보여 줍니다.
import http.client, json
accessToken = "" # Your access token
iapRequestJson = "" # Your in-app-product request JSON
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Create a new in-app-product
ingestionConnection.request("POST", "/v1.0/my/inappproducts", iapRequestJson, headers)
createIapResponse = ingestionConnection.getresponse()
print(createIapResponse.status)
print(createIapResponse.reason)
print(createIapResponse.headers["MS-CorrelationId"]) # Log correlation ID
iapJsonObject = json.loads(createIapResponse.read().decode())
inAppProductId = iapJsonObject["id"]
# Delete created in-app-product
ingestionConnection.request("DELETE", "/v1.0/my/inappproducts/" + inAppProductId, "", headers)
deleteIapResponse = ingestionConnection.getresponse()
print(deleteIapResponse.status)
print(deleteIapResponse.headers["MS-CorrelationId"]) # Log correlation ID
ingestionConnection.close()
패키지 플라이트 만들기
다음의 예시는 패키지 플라이트를 생성한 다음 삭제하는 방법을 보여 줍니다.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
flightRequestJson = "" # Your flight request JSON
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Create a new flight, a flight submission will be created together with the flight
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights".format(applicationId), flightRequestJson, headers)
createFlightResponse = ingestionConnection.getresponse()
print(createFlightResponse.status)
print(createFlightResponse.reason)
print(createFlightResponse.headers["MS-CorrelationId"]) # Log correlation ID
flightJsonObject = json.loads(createFlightResponse.read().decode())
flightId = flightJsonObject["flightId"]
submissionId = flightJsonObject["pendingFlightSubmission"]["id"]
# Delete created flight
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/flights/{1}".format(applicationId, flightId), "", headers)
deleteFlightResponse = ingestionConnection.getresponse()
print(deleteFlightResponse.status)
print(deleteFlightResponse.headers["MS-CorrelationId"]) # Log correlation ID
ingestionConnection.close()
앱 제출 만들기
다음 예제는 Microsoft Store 제출 API에서 여러 메서드를 사용하여 앱 제출을 만드는 방법을 보여 줍니다. 이를 위해 코드를 사용하여 마지막으로 게시된 제출의 복제본으로 새 제출을 만든 다음, 복제한 제출을 파트너 센터에 업데이트하고 커밋합니다. 특히 이 예제에서는 다음 작업을 수행합니다.
- 시작하려면 이 예제에서 지정된 앱에 대한 데이터를 가져옵니다.
- 다음으로, 앱에 대한 보류 중인 제출(있는 경우)을 삭제합니다.
- 그런 다음 앱에 대한 새 제출을 생성합니다(새 제출은 마지막으로 게시된 제출의 복사본).
- 새 제출에 대한 세부 정보를 변경하고 제출할 새 패키지를 Azure Blob Storage에 업로드합니다.
- 다음으로, 파트너 센터에 새 제출을 업데이트한 다음, 커밋합니다.
- 마지막으로 제출이 성공적으로 커밋될 때까지 새 제출의 상태를 주기적으로 확인합니다.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
appSubmissionRequestJson = ""; # Your submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get application
ingestionConnection.request("GET", "/v1.0/my/applications/{0}".format(applicationId), "", headers)
appResponse = ingestionConnection.getresponse()
print(appResponse.status)
print(appResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
appJsonObject = json.loads(appResponse.read().decode())
if "pendingApplicationSubmission" in appJsonObject :
submissionToRemove = appJsonObject["pendingApplicationSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/submissions/{1}".format(applicationId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/submissions".format(applicationId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/applications/{0}/submissions/{1}".format(applicationId, submissionId), appSubmissionRequestJson, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/submissions/{1}/commit".format(applicationId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/submissions/{1}/status".format(applicationId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/submissions/{1}/status".format(applicationId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()
추가 기능 제출 만들기
다음 예제는 Microsoft Store 제출 API에서 여러 메서드를 사용하여 추가 기능 제출을 만드는 방법을 보여 줍니다. 이를 위해 코드를 사용하여 마지막으로 게시된 제출의 복제본으로 새 제출을 만든 다음, 복제한 제출을 파트너 센터에 업데이트하고 커밋합니다. 특히 이 예제에서는 다음 작업을 수행합니다.
- 시작하려면 이 예제에서 지정된 추가 기능에 대한 데이터를 가져옵니다.
- 다음으로, 추가 기능에 대한 보류 중인 제출(있는 경우)을 삭제합니다.
- 그런 다음 추가 기능에 대한 새 제출을 만듭니다(새 제출은 마지막으로 게시된 제출의 복사본).
- 제출할 아이콘이 포함된 ZIP 보관 파일을 Azure Blob Storage에 업로드합니다. 자세한 내용은 추가 기능 제출 만들기에서 Azure Blob Storage에 ZIP 보관 파일을 업로드하는 작업에 대한 관련 지침을 참조하세요.
- 다음으로, 파트너 센터에 새 제출을 업데이트한 다음, 커밋합니다.
- 마지막으로 제출이 성공적으로 커밋될 때까지 새 제출 의 상태를 주기적으로 확인합니다.
import http.client, json, requests, time
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
inAppProductId = "" # Your in-app-product ID
updateSubmissionRequestBody = ""; # Your in-app-product submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get in-app-product
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}".format(inAppProductId), "", headers)
iapResponse = ingestionConnection.getresponse()
print(iapResponse.status)
print(iapResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
iapJsonObject = json.loads(iapResponse.read().decode())
if "pendingInAppProductSubmission" in iapJsonObject :
submissionToRemove = iapJsonObject["pendingInAppProductSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/inappproducts/{0}/submissions/{1}".format(inAppProductId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/inappproducts/{0}/submissions".format(inAppProductId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/inappproducts/{0}/submissions/{1}".format(inAppProductId, submissionId), updateSubmissionRequestBody, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/inappproducts/{0}/submissions/{1}/commit".format(inAppProductId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}/submissions/{1}/status".format(inAppProductId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/inappproducts/{0}/submissions/{1}/status".format(inAppProductId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()
패키지 플라이트 제출 만들기
다음 예제에서는 Microsoft Store 제출 API에서 여러 메서드를 사용하여 패키지 플라이트 제출을 만드는 방법을 보여 줍니다. 이를 위해 코드를 사용하여 마지막으로 게시된 제출의 복제본으로 새 제출을 만든 다음, 복제한 제출을 파트너 센터에 업데이트하고 커밋합니다. 특히 이 예제에서는 다음 작업을 수행합니다.
- 시작하려면 이 예제에서는 지정된 패키지 플라이트에 대한 데이터를 가져옵니다.
- 다음으로 패키지 플라이트(있는 경우)에 대한 보류 중인 제출을 삭제합니다.
- 그런 다음 패키지 플라이트에 대한 새 제출을 만듭니다(새 제출은 마지막으로 게시된 제출의 복사본).
- 제출할 새 패키지를 Azure Blob Storage에 업로드합니다. 자세한 내용은 패키지 플라이트 제출 만들기에서 Azure Blob Storage에 ZIP 보관 파일을 업로드하는 작업에 대한 관련 지침을 참조하세요.
- 다음으로, 파트너 센터에 새 제출을 업데이트한 다음, 커밋합니다.
- 마지막으로 제출이 성공적으로 커밋될 때까지 새 제출의 상태를 주기적으로 확인합니다.
import http.client, json, requests, time, zipfile
from azure.storage.blob import BlobClient
accessToken = "" # Your access token
applicationId = "" # Your application ID
flightId = "" # Your flight ID
flightSubmissionRequestJson = "" # Your submission request JSON
zipFilePath = r'*.zip' # Your zip file path
headers = {"Authorization": "Bearer " + accessToken,
"Content-type": "application/json",
"User-Agent": "Python"}
ingestionConnection = http.client.HTTPSConnection("manage.devcenter.microsoft.com")
# Get flight
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}".format(applicationId, flightId), "", headers)
flightResponse = ingestionConnection.getresponse()
print(flightResponse.status)
print(flightResponse.headers["MS-CorrelationId"]) # Log correlation ID
# Delete existing in-progress submission
flightJsonObject = json.loads(flightResponse.read().decode())
if "pendingFlightSubmission" in flightJsonObject :
submissionToRemove = flightJsonObject["pendingFlightSubmission"]["id"]
ingestionConnection.request("DELETE", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}".format(applicationId, flightId, submissionToRemove), "", headers)
deleteSubmissionResponse = ingestionConnection.getresponse()
print(deleteSubmissionResponse.status)
print(deleteSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
deleteSubmissionResponse.read()
# Create submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights/{1}/submissions".format(applicationId, flightId), "", headers)
createSubmissionResponse = ingestionConnection.getresponse()
print(createSubmissionResponse.status)
print(createSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
submissionJsonObject = json.loads(createSubmissionResponse.read().decode())
submissionId = submissionJsonObject["id"]
fileUploadUrl = submissionJsonObject["fileUploadUrl"]
print(submissionId)
print(fileUploadUrl)
# Update submission
ingestionConnection.request("PUT", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}".format(applicationId, flightId, submissionId), flightSubmissionRequestJson, headers)
updateSubmissionResponse = ingestionConnection.getresponse()
print(updateSubmissionResponse.status)
print(updateSubmissionResponse.headers["MS-CorrelationId"]) # Log correlation ID
updateSubmissionResponse.read()
# Upload images and packages in a zip file.
blob_client = BlobClient.from_blob_url(fileUploadUrl)
with open(zipFilePath, "rb") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# Commit submission
ingestionConnection.request("POST", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/commit".format(applicationId, flightId, submissionId), "", headers)
commitResponse = ingestionConnection.getresponse()
print(commitResponse.status)
print(commitResponse.headers["MS-CorrelationId"]) # Log correlation ID
print(commitResponse.read())
# Pull submission status until commit process is completed
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/status".format(applicationId, flightId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
while submissionJsonObject["status"] == "CommitStarted":
time.sleep(60)
ingestionConnection.request("GET", "/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/status".format(applicationId, flightId, submissionId), "", headers)
getSubmissionStatusResponse = ingestionConnection.getresponse()
submissionJsonObject = json.loads(getSubmissionStatusResponse.read().decode())
print(submissionJsonObject["status"])
print(submissionJsonObject["status"])
print(submissionJsonObject)
ingestionConnection.close()