def download_reference_apk(self): api = GooglePlayAPI(self.android_id) api.login(self.google_login, self.google_password) package = api.details(self.results['package']) doc = package.docV2 version = doc.details.appDetails.versionCode offer_type = doc.offer[0].offerType ref_path = path.join(self.tmpdir, "ref.apk") data = api.download(self.results['package'], version, offer_type) with open(ref_path, "wb") as out: out.write(data) return ref_path
if (len(sys.argv) < 2): print "Usage: %s packagename [filename]" print "Download an app." print "If filename is not present, will write to packagename.apk." sys.exit(0) packagename = sys.argv[1] if (len(sys.argv) == 3): filename = sys.argv[2] else: filename = packagename + ".apk" # Connect api = GooglePlayAPI(ANDROID_ID) api.login(GOOGLE_LOGIN, GOOGLE_PASSWORD, AUTH_TOKEN) # Get the version code and the offer type from the app details m = api.details(packagename) doc = m.docV2 vc = doc.details.appDetails.versionCode ot = doc.offer[0].offerType # Download print "Downloading %s..." % sizeof_fmt( doc.details.appDetails.installationSize), data = api.download(packagename, vc, ot) open(filename, "wb").write(data) print "Done"
from __future__ import unicode_literals import helpers from googleplay_api.googleplay import GooglePlayAPI packagenames = "com.reliancejio.mobilesecurity" # read config from config.py config = GooglePlayAPI.read_config() # connect to GooglePlayStore api = GooglePlayAPI(config['ANDROID_ID']) api.login(config['GOOGLE_LOGIN'], config['GOOGLE_PASSWORD'], config['AUTH_TOKEN']) # Only one app if (len(packagenames) == 1): response = api.details(packagenames[0]) for item in response.docV2.details.appDetails.permission: print(helpers.str_compat(item)) else: # More than one app response = api.bulkDetails(packagenames) for entry in response.entry: if (not not entry.ListFields()): # if the entry is not empty print(entry.doc.docid + ":") for item in entry.doc.details.appDetails.permission: print(" " + helpers.str_compat(item)) print()
sys.exit(0) packagename = sys.argv[1] filename = None if (len(sys.argv) == 3): filename = sys.argv[2] # read config from config.py config = GooglePlayAPI.read_config() # connect to GooglePlayStore api = GooglePlayAPI(config['ANDROID_ID']) api.login(config['GOOGLE_LOGIN'], config['GOOGLE_PASSWORD'], config['AUTH_TOKEN']) # Get the version code and the offer type from the app details m = api.details(packagename) doc = m.docV2 vc = doc.details.appDetails.versionCode ot = doc.offer[0].offerType if filename == None: filename = "%s_%s.apk" % (packagename, vc) # Download print("Downloading to file %s with size %s..." % (filename, helpers.sizeof_fmt(doc.details.appDetails.installationSize))) data = api.download(packagename, vc, ot) io.open(filename, "wb").write(data) print("Done")
class ApiClient(object): def __init__(self, android_id=None, username=None, password=None, auth_token=None, proxy=None, max_login_retries=10, language=None, debug=False): self._api = GooglePlayAPI(android_id, language, debug) self._username = username self._password = password self._auth_token = auth_token self._proxy = proxy self._max_login_retries = max_login_retries self._login_lock = Lock() self._logged_in = False def is_logged_in(self): return self._logged_in def login(self): self._logged_in = False with self._login_lock: logger.info('Executing login') login_error = None for _ in xrange(self._max_login_retries): try: self._api.login(self._username, self._password, self._auth_token, self._proxy) self._logged_in = True break except LoginError as err: login_error = err time.sleep(0.2) else: logger.error('Failed to log in: %s', login_error) raise ApiLoginException(login_error) @_with_login def search(self, package_prefix): logger.info('Searching for %s', package_prefix) results = list() response = self._api.search(package_prefix) if len(response.doc): document = response.doc[0] for child in document.child: package_name = child.details.appDetails.packageName if not package_name.startswith(package_prefix): continue item = self._extract_api_item(child, simple=True) results.append(item) return results def developer(self, developer_name): raise NotImplementedError('Searching by developer is not supported') @_with_login def get_details(self, package_name): logger.info('Fetching details for %s', package_name) details = self._api.details(package_name) return self._extract_api_item(details.docV2, simple=False) @staticmethod def _extract_api_item(api_object, simple): details = api_object.details.appDetails item = ApiItem() item.package_name = details.packageName item.title = api_object.title item.creator = api_object.creator item.upload_date = details.uploadDate item.num_downloads = details.numDownloads item.version_code = details.versionCode item.share_url = api_object.shareUrl if not simple: item.description_html = api_object.descriptionHtml item.developer_name = details.developerName item.developer_website = details.developerWebsite item.version_string = details.versionString item.recent_changes_html = details.recentChangesHtml images = list() for image_object in api_object.image: image = ApiItem() image.type = image_object.imageType image.url = image_object.imageUrl if not simple: image.width = image_object.dimension.width image.height = image_object.dimension.height image.position = image_object.positionInSequence images.append(image) item.images = images item.ratings = { 'stars': api_object.aggregateRating.starRating, 'total': api_object.aggregateRating.ratingsCount, 'comments': api_object.aggregateRating.commentCount, 'count': { 1: api_object.aggregateRating.oneStarRatings, 2: api_object.aggregateRating.twoStarRatings, 3: api_object.aggregateRating.threeStarRatings, 4: api_object.aggregateRating.fourStarRatings, 5: api_object.aggregateRating.fiveStarRatings } } return item
from pprint import pprint from google.protobuf import text_format from config import * from googleplay_api.googleplay import GooglePlayAPI if (len(sys.argv) < 2): print "Usage: %s packagename1 [packagename2 [...]]" % sys.argv[0] print "Display permissions required to install the specified app(s)." sys.exit(0) packagenames = sys.argv[1:] api = GooglePlayAPI(ANDROID_ID) api.login(GOOGLE_LOGIN, GOOGLE_PASSWORD, AUTH_TOKEN) # Only one app if (len(packagenames) == 1): response = api.details(packagenames[0]) print "\n".join(i.encode('utf8') for i in response.docV2.details.appDetails.permission) else: # More than one app response = api.bulkDetails(packagenames) for entry in response.entry: if (not not entry.ListFields()): # if the entry is not empty print entry.doc.docid + ":" print "\n".join(" "+i.encode('utf8') for i in entry.doc.details.appDetails.permission) print