Как загрузить пакет приложений (.aab) в play Store с помощью Google Play Publisher API

#python #google-play #google-play-developer-api

#python #google-play #google-play-developer-api

Вопрос:

Я настроил и использовал API для загрузки файлов .apk, и он отлично работает с использованием этого файла кода.

     """Uploads an apk to the alpha track."""

import argparse
import sys
from apiclient import sample_tools
from oauth2client import client

TRACK = 'alpha'  # Can be 'alpha', beta', 'production' or 'rollout'

# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('package_name',
                       help='The package name. Example: com.android.sample')
argparser.add_argument('apk_file',
                       nargs='?',
                       default='test.apk',
                       help='The path to the APK file to upload.')


def main(argv):
  # Authenticate and construct service.
  service, flags = sample_tools.init(
      argv,
      'androidpublisher',
      'v3',
      __doc__,
      __file__, parents=[argparser],
      scope='https://www.googleapis.com/auth/androidpublisher')

  # Process flags and read their values.
  package_name = flags.package_name
  apk_file = flags.apk_file

  try:
    edit_request = service.edits().insert(body={}, packageName=package_name)
    result = edit_request.execute()
    edit_id = result['id']

    apk_response = service.edits().apks().upload(
        editId=edit_id,
        packageName=package_name,
        media_body=apk_file).execute()

    print 'Version code %d has been uploaded' % apk_response['versionCode']

    track_response = service.edits().tracks().update(
        editId=edit_id,
        track=TRACK,
        packageName=package_name,
        body={u'releases': [{
            u'name': u'My first API release',
            u'versionCodes': [str(apk_response['versionCode'])],
            u'status': u'completed',
        }]}).execute()

    print 'Track %s is set with releases: %s' % (
        track_response['track'], str(track_response['releases']))

    commit_request = service.edits().commit(
        editId=edit_id, packageName=package_name).execute()

    print 'Edit "%s" has been committed' % (commit_request['id'])

  except client.AccessTokenRefreshError:
    print ('The credentials have been revoked or expired, please re-run the '
           'application to re-authorize')

if __name__ == '__main__':
  main(sys.argv)
  

Но этот код не работает для пакетов приложений.

Комментарии:

1. Вы не предоставили достаточно информации, чтобы кто-либо мог вам помочь. Как изменить код для файлов aab (вы меняете имя файла?). Когда вы говорите, что это «не работает», какое сообщение об ошибке вы получаете?

2. Обратите внимание, что код в основном скопирован отсюда: github.com/googlesamples/android-play-publisher-api/blob/master /…

Ответ №1:

Если googleapiclient.errors.UnknownFileType возникает исключение, попробуйте добавить следующий код:

 import mimetypes

mimetypes.add_type("application/octet-stream", ".apk")
mimetypes.add_type("application/octet-stream", ".aab")
  

И если socket.timeout возникает исключение, попробуйте добавить следующий код:

 import socket

socket.setdefaulttimeout(7 * 24 * 60 * 60)
  

Ответ №2:

Google publishing API предоставляет метод пакетов. Вы можете попробовать следующее:

 service.edits().bundles().upload(
        editId=edit_id,
        packageName=package_name,
        media_body=aab_file).execute()
  

Комментарии:

1. Мне все равно пришлось добавить media_mime_type="application/octet-stream" аргумент к этому методу.