Esempio n. 1
0
    sys.exit(0)

request = sys.argv[1]
nb_res = None
offset = None

if (len(sys.argv) >= 3):
    nb_res = int(sys.argv[2])

if (len(sys.argv) >= 4):
    offset = int(sys.argv[3])

# read config from config.py
config = GooglePlayAPI.read_config()

# connect to GooglePlayStore
api = GooglePlayAPI(config)
api.login()

try:
    message = api.search(request, nb_res, offset)
except:
    print("Error: something went wrong. Maybe the nb_res you specified was too big?")
    sys.exit(1)

helpers.print_header_line()
doc = message.doc[0]
for c in doc.child:
    helpers.print_result_line(c)

Esempio n. 2
0
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import helpers
from googleplay_api.googleplay import GooglePlayAPI
import axmlparserpy.apk as apk
ap = apk.APK('Apps/temp.apk')

request =ap.get_package()

# 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'])

message = api.search(request, 1, None)

helpers.print_header_line()
doc = message.doc[0]
for c in doc.child:
    helpers.print_result_line(c) 
Esempio n. 3
0
    sys.exit(0)

request = sys.argv[1]
nb_res = None
offset = None

if (len(sys.argv) >= 3):
    nb_res = int(sys.argv[2])

if (len(sys.argv) >= 4):
    offset = int(sys.argv[3])

# 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'])

try:
    message = api.search(request, nb_res, offset)
except:
    print("Error: something went wrong. Maybe the nb_res you specified was too big?")
    sys.exit(1)

helpers.print_header_line()
doc = message.doc[0]
for c in doc.child:
    helpers.print_result_line(c)

Esempio n. 4
0
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