mirror of
https://github.com/FliegendeWurst/googleplay-api.git
synced 2024-10-18 06:50:45 +00:00
23937e6cb8
* Updated user agent string with data taken from play-store-api * *download* and *delivery* functions will now return a python generator rather than raw bytes, to prevent app loading entire files in memory. This generator can be iterated to get chunk of bytes to write, as discussed in issue #35. * as a consequence of the previous point, there is no more progress bar feature for downloading. It should be implemented by developers using the API.
121 lines
3.2 KiB
Python
121 lines
3.2 KiB
Python
from gpapi.googleplay import GooglePlayAPI, RequestError
|
|
|
|
import sys
|
|
import argparse
|
|
|
|
ap = argparse.ArgumentParser(description='Test download of expansion files')
|
|
ap.add_argument('-e', '--email', dest='email', help='google username')
|
|
ap.add_argument('-p', '--password', dest='password', help='google password')
|
|
|
|
args = ap.parse_args()
|
|
|
|
server = GooglePlayAPI(debug=True, locale='it_IT', timezone='Europe/Rome')
|
|
|
|
# LOGIN
|
|
|
|
print('\nLogging in with email and password\n')
|
|
server.login(args.email, args.password, None, None)
|
|
gsfId = server.gsfId
|
|
authSubToken = server.authSubToken
|
|
|
|
print('\nNow trying secondary login with ac2dm token and gsfId saved\n')
|
|
server = GooglePlayAPI(debug=True, locale='it_IT', timezone='Europe/Rome')
|
|
server.login(None, None, gsfId, authSubToken)
|
|
|
|
# SEARCH
|
|
|
|
apps = server.search('telegram', 34, None)
|
|
|
|
print('nb_result: 34')
|
|
print('number of results: %d' % len(apps))
|
|
|
|
print('\nFound those apps:\n')
|
|
for a in apps:
|
|
print(a['docId'])
|
|
|
|
# DOWNLOAD
|
|
docid = apps[0]['docId']
|
|
print('\nTelegram docid is: %s\n' % docid)
|
|
print('\nAttempting to download %s\n' % docid)
|
|
fl = server.delivery(docid, versionCode=None)
|
|
with open(docid + '.apk', 'wb') as apk_file:
|
|
for chunk in fl.get('data'):
|
|
apk_file.write(chunk)
|
|
print('\nDownload successful\n')
|
|
|
|
# DOWNLOAD APP NOT PURCHASED
|
|
# Attempting to download Nova Launcher Prime
|
|
# it should throw an error 'App Not Purchased'
|
|
|
|
print('\nAttempting to download "com.teslacoilsw.launcher.prime"\n')
|
|
errorThrown = False
|
|
try:
|
|
app = server.search('nova launcher prime', 3, None)
|
|
app = filter(lambda x: x['docId'] == 'com.teslacoilsw.launcher.prime', app)
|
|
app = list(app)[0]
|
|
fl = server.delivery(app['docId'], app['versionCode'])
|
|
except RequestError as e:
|
|
errorThrown = True
|
|
print(e)
|
|
|
|
if not errorThrown:
|
|
print('Download of previous app should have failed')
|
|
sys.exit(1)
|
|
|
|
|
|
# BULK DETAILS
|
|
|
|
testApps = ['org.mozilla.focus', 'com.non.existing.app']
|
|
bulk = server.bulkDetails(testApps)
|
|
|
|
print('\nTesting behaviour for non-existing apps\n')
|
|
if bulk[1] is not None:
|
|
print('bulkDetails should return None for non-existing apps')
|
|
sys.exit(1)
|
|
|
|
print('\nResult from bulkDetails for %s\n' % testApps[0])
|
|
print(bulk[0])
|
|
|
|
# DETAILS
|
|
print('\nGetting details for %s\n' % testApps[0])
|
|
details = server.details(testApps[0])
|
|
print(details)
|
|
|
|
# USER PROFILE
|
|
print('\nGettung user profile information\n')
|
|
user = server.userProfile()
|
|
if 'Noto Sans' not in user['title']:
|
|
raise Exception("Wrong userProfile behaviour")
|
|
sys.exit(1)
|
|
|
|
# REVIEWS
|
|
print('\nGetting reviews for %s\n' % testApps[0])
|
|
revs = server.reviews(testApps[0])
|
|
for r in revs:
|
|
print(r['comment'])
|
|
|
|
# BROWSE
|
|
|
|
print('\nBrowse play store categories\n')
|
|
browse = server.browse()
|
|
for b in browse:
|
|
print(b['name'])
|
|
|
|
print('\nBrowsing the %s category\n' % browse[0]['catId'])
|
|
browseCat = server.browse(browse[0]['catId'])
|
|
for b in browseCat:
|
|
print('%s subcategory with %d apps' % (b['title'], len(b['apps'])))
|
|
|
|
# LIST
|
|
|
|
cat = 'MUSIC_AND_AUDIO'
|
|
print('\nList %s subcategories\n' % cat)
|
|
catList = server.list(cat)
|
|
for c in catList:
|
|
print(c)
|
|
|
|
print('\nList %s apps for %s category\n' % (catList[0], cat))
|
|
appList = server.list(cat, catList[0])
|
|
for app in appList:
|
|
print(app['docId'])
|