googleplay-api/gpapi/config.py

142 lines
5.9 KiB
Python
Raw Permalink Normal View History

from . import googleplay_pb2
import time
import os
import sys
VERSION = sys.version_info[0]
if VERSION == 2:
import ConfigParser
else:
import configparser
DFE_TARGETS = "CAEScFfqlIEG6gUYogFWrAISK1WDAg+hAZoCDgIU1gYEOIACFkLMAeQBnASLATlASUuyAyqCAjY5igOMBQzfA/IClwFbApUC4ANbtgKVAS7OAX8YswHFBhgDwAOPAmGEBt4OfKkB5weSB5AFASkiN68akgMaxAMSAQEBA9kBO7UBFE1KVwIDBGs3go6BBgEBAgMECQgJAQIEAQMEAQMBBQEBBAUEFQYCBgUEAwMBDwIBAgOrARwBEwMEAg0mrwESfTEcAQEKG4EBMxghChMBDwYGASI3hAEODEwXCVh/EREZA4sBYwEdFAgIIwkQcGQRDzQ2fTC2AjfVAQIBAYoBGRg2FhYFBwEqNzACJShzFFblAo0CFxpFNBzaAd0DHjIRI4sBJZcBPdwBCQGhAUd2A7kBLBVPngEECHl0UEUMtQETigHMAgUFCc0BBUUlTywdHDgBiAJ+vgKhAU0uAcYCAWQ/5ALUAw1UwQHUBpIBCdQDhgL4AY4CBQICjARbGFBGWzA1CAEMOQH+BRAOCAZywAIDyQZ2MgM3BxsoAgUEBwcHFia3AgcGTBwHBYwBAlcBggFxSGgIrAEEBw4QEqUCASsWadsHCgUCBQMD7QICA3tXCUw7ugJZAwGyAUwpIwM5AwkDBQMJA5sBCw8BNxBVVBwVKhebARkBAwsQEAgEAhESAgQJEBCZATMdzgEBBwG8AQQYKSMUkAEDAwY/CTs4/wEaAUt1AwEDAQUBAgIEAwYEDx1dB2wGeBFgTQ"
LANG = "en_US"
TIMEZONE = 'America/New_York'
GOOGLE_PUBKEY = "AAAAgMom/1a/v0lblO2Ubrt60J2gcuXSljGFQXgcyZWveWLEwo6prwgi3iJIZdodyhKZQrNWp5nKJ3srRXcUW+F1BD3baEVGcmEgqaLZUNBjm057pKRI16kB0YppeGx5qIQ5QjKzsR8ETQbKLNWgRY0QRNVz34kMJR3P/LgHax/6rmf5AAAAAwEAAQ=="
# parse phone config from the file 'device.properties'.
# if you want to add another phone, just create another section in
# the file. Some configurations for common phones can be found here:
# https://github.com/yeriomin/play-store-api/tree/master/src/main/resources
if VERSION == 2:
config = ConfigParser.ConfigParser()
else:
config = configparser.ConfigParser()
filepath = os.path.join(os.path.dirname(os.path.realpath(__file__)),
'device.properties')
config.read(filepath)
device = {}
# initialize device, because we need to setup UserAgent
# before the end of login method. If the login defines a different
# device, it won't cause conflicts
for (key, value) in config.items('angler'):
device[key] = value
def getDevicesCodenames():
"""Returns a list containing devices codenames"""
return config.sections()
def getDevicesReadableNames():
"""Returns codename and readable name for each device"""
sections = getDevicesCodenames()
output = []
for s in sections:
output.append({'codename': s,
'readableName': config[s]['userreadablename']})
return output
def getUserAgent():
return "Android-Finsky/7.1.15 (" \
"api=3" \
",versionCode={versionCode}" \
",sdk={sdk}" \
",device={device}" \
",hardware={hardware}" \
",product={product}".format(versionCode=device['vending.version'],
sdk=device['build.version.sdk_int'],
device=device['build.device'],
hardware=device['build.hardware'],
product=device['build.product'])
def getDeviceConfig():
libList = device['sharedlibraries'].split(",")
featureList = device['features'].split(",")
localeList = device['locales'].split(",")
glList = device['gl.extensions'].split(",")
platforms = device['platforms'].split(",")
hasFiveWayNavigation = (device['hasfivewaynavigation'] == 'true')
hasHardKeyboard = (device['hashardkeyboard'] == 'true')
deviceConfig = googleplay_pb2.DeviceConfigurationProto()
deviceConfig.touchScreen = int(device['touchscreen'])
deviceConfig.keyboard = int(device['keyboard'])
deviceConfig.navigation = int(device['navigation'])
deviceConfig.screenLayout = int(device['screenlayout'])
deviceConfig.hasHardKeyboard = hasHardKeyboard
deviceConfig.hasFiveWayNavigation = hasFiveWayNavigation
deviceConfig.screenDensity = int(device['screen.density'])
deviceConfig.screenWidth = int(device['screen.width'])
deviceConfig.screenHeight = int(device['screen.height'])
deviceConfig.glEsVersion = int(device['gl.version'])
for x in platforms:
deviceConfig.nativePlatform.append(x)
for x in libList:
deviceConfig.systemSharedLibrary.append(x)
for x in featureList:
deviceConfig.systemAvailableFeature.append(x)
for x in localeList:
deviceConfig.systemSupportedLocale.append(x)
for x in glList:
deviceConfig.glExtension.append(x)
return deviceConfig
def getAndroidBuild():
androidBuild = googleplay_pb2.AndroidBuildProto()
androidBuild.id = device['build.fingerprint']
androidBuild.product = device['build.hardware']
androidBuild.carrier = device['build.brand']
androidBuild.radio = device['build.radio']
androidBuild.bootloader = device['build.bootloader']
androidBuild.device = device['build.device']
androidBuild.sdkVersion = int(device['build.version.sdk_int'])
androidBuild.model = device['build.model']
androidBuild.manufacturer = device['build.manufacturer']
androidBuild.buildProduct = device['build.product']
androidBuild.client = device['client']
androidBuild.otaInstalled = False
androidBuild.timestamp = int(time.time())
androidBuild.googleServices = int(device['gsf.version'])
return androidBuild
def getAndroidCheckin():
androidCheckin = googleplay_pb2.AndroidCheckinProto()
androidCheckin.build.CopyFrom(getAndroidBuild())
androidCheckin.lastCheckinMsec = 0
androidCheckin.cellOperator = device['celloperator']
androidCheckin.simOperator = device['simoperator']
androidCheckin.roaming = device['roaming']
androidCheckin.userNumber = 0
return androidCheckin
def getAndroidCheckinRequest(device_codename):
for (key, value) in config.items(device_codename):
device[key] = value
request = googleplay_pb2.AndroidCheckinRequest()
request.id = 0
request.checkin.CopyFrom(getAndroidCheckin())
request.locale = LANG
request.timeZone = TIMEZONE
request.version = 3
request.deviceConfiguration.CopyFrom(getDeviceConfig())
request.fragment = 0
return request