googleplay-api/gpapi/utils.py
2017-12-09 10:06:34 +01:00

95 lines
3.9 KiB
Python

import struct
import sys
from . import googleplay_pb2
VERSION = sys.version_info[0]
def fromDocToDictionary(app):
return {"docId": app.docid,
"title": app.title,
"author": app.creator,
"offer": [{"micros": o.micros,
"currencyCode": o.currencyCode,
"formattedAmount": o.formattedAmount,
"checkoutFlowRequired": o.checkoutFlowRequired,
"offerType": o.offerType}
for o in app.offer],
"images": [{"imageType": img.imageType,
"width": img.dimension.width
if hasattr(img.dimension, "width")
else 0,
"height": img.dimension.height
if hasattr(img.dimension, "height")
else 0,
"url": img.imageUrl,
"supportsFifeUrlOptions": img.supportsFifeUrlOptions}
for img in app.image],
"versionCode": app.details.appDetails.versionCode,
"installationSize": app.details.appDetails.installationSize,
"numDownloads": app.details.appDetails.numDownloads,
"uploadDate": app.details.appDetails.uploadDate,
"files": [{"fileType": f.fileType,
"version": f.versionCode,
"size": f.size}
for f in app.details.appDetails.file],
"unstable": app.details.appDetails.unstable,
"containsAds": app.details.appDetails.containsAds,
"aggregateRating": {"type": app.aggregateRating.type,
"starRating": app.aggregateRating.starRating,
"ratingsCount": app.aggregateRating.ratingsCount,
"oneStarRatings": app.aggregateRating.oneStarRatings,
"twoStarRatings": app.aggregateRating.twoStarRatings,
"threeStarRatings": app.aggregateRating.threeStarRatings,
"fourStarRatings": app.aggregateRating.fourStarRatings,
"fiveStarRatings": app.aggregateRating.fiveStarRatings,
"commentCount": app.aggregateRating.commentCount},
"dependencies": [{"packageName": d.packageName,
"version": d.version}
for d in app.details.appDetails.dependencies.dependency],
"category": {"appType": app.relatedLinks.categoryInfo.appType,
"appCategory": app.relatedLinks.categoryInfo.appCategory},
"detailsUrl": app.detailsUrl}
def readInt(byteArray, start):
"""Read the byte array, starting from *start* position,
as an 32-bit unsigned integer"""
return struct.unpack("!L", byteArray[start:][0:4])[0]
def toBigInt(byteArray):
"""Convert the byte array to a BigInteger"""
array = byteArray[::-1] # reverse array
out = 0
for key, value in enumerate(array):
if VERSION == 3:
decoded = struct.unpack("B", bytes([value]))[0]
else:
decoded = struct.unpack("B", value)[0]
out = out | decoded << key * 8
return out
def hasPrefetch(response):
if type(response) is not googleplay_pb2.ResponseWrapper:
return False
try:
return response.HasField('preFetch')
except ValueError:
return False
def hasListResponse(payload):
if type(payload) is not googleplay_pb2.Payload:
return False
try:
return payload.HasField('listResponse')
except ValueError:
return False
def hasSearchResponse(payload):
if type(payload) is not googleplay_pb2.Payload:
return False
try:
return payload.HasField('searchResponse')
except ValueError:
return False