Python: Paketnamen von GooglePlay holen

By | 20. November 2016

Hallo, zusammen!

Vor kurzem hat mich jemand gefragt, wie man am einfachsten von GooglePlay die App-Namen und zugehörigen Paketnamen abfragen kann. Meine Antwort war schlicht und einfach: „Da gibt’s doch bestimmt ne API für“

Tatsächlich war ich erschrocken, als ich festgestellt habe, dass es diese eben nicht gibt. Zumindest keine Offizielle. Also habe ich mich einmal dran gesetzt und versucht das ganze in Code zu fassen. 🙂 Geschrieben ist das ganze in Python, weil dies in der Form gebraucht worden ist.

Zum Code:
Der Code fragt direkt bei GooglePlay die Package-Namen der Apps ab. Das Ergebnis ist selbstverständlich abhängig von dem Suchparameter. Diesen könnt ihr anpassen, in dem ihr den Inhalt der Variable „QUERY“ (ganz oben) bearbeitet. Im Moment steht „the+room“ drin (im übrigen ein top Spiel ). Leerzeichen müssen durch ein „+“ gekennzeichnet werden.

Ich habe mir Mühe gegeben den Code zu verständlich wie nur möglich zu kommentieren. Aber kurz zusammengefasst rufe ich GooglePlay mit genau den Suchparamtern auf und parse mir aus der Antwort alle Links heraus („href=“). Diese verweisen weiter auf die Detailseiten der Apps, und der Link enthält den Package-Namen. Schön ist hierbei auch, dass so durch kleine Anpassungen auch der Kiosk und die Filme durchsucht werden können. Derzeit wird aber nur nach Apps gesucht. Hier also der Code:

import urllib2

#Must-Have Data
QUERY = "the+room"
GOOGLE_URL = "https://play.google.com/store/search?q="+QUERY+"&hl=de"

# Variable Suchparameter
SEARCH_TAG = "href=\""
SEARCH_APP_TAG = "/store/apps/details?id="

# Hole den ganzen HTML-Geschiss von GooglePlay
def getGoogleContent():
    return urllib2.urlopen(GOOGLE_URL).read()

# Hole alle URL´s aus dem Quelltext heraus (alle mit Tag "<a href= [...]>") siehe Variable SEARCH_TAG
def parseURLs(content):
    fixPoint = 0
    toReturn = list()
    while content.find(SEARCH_TAG) > 0:
        fixPoint = content.find(SEARCH_TAG) + len(SEARCH_TAG)
        content = content[fixPoint:]
        i = 0
        temp = ""
        while content[i] != "\"":
            if content[i] != "\"":
                temp += content[i]
            i += 1
        toReturn.append(temp)
        i = 0
        fixPoint = 0
    return toReturn

# Überprüfe ob sich das Element bereits in der Liste befindet
# Falls Ja -> Gib "Wahr" zurück
# Falls Nein -> Gib "Falsch" zurück
def isAlreadyInList(value,arr):
    i = 0
    while i < len(arr):
        if arr[i] == value:
            return True
        i += 1
    return False

# Holt aus den geparsten URL´s die Namen der Pakete heraus und befüllt eine weitere Liste mit Hilfe der
# Methode "isAlreadyInList", um Mehrfacheintragungen zu vermeiden
def parseAppNames(appList):
    i = 0
    toReturn = list()
    while i < len(appList):
        if appList[i].find(SEARCH_APP_TAG) > -1:
            temp = appList[i]
            temp = temp[len(SEARCH_APP_TAG):]
            if not isAlreadyInList(temp,toReturn):
                toReturn.append(temp)
        i += 1
    return toReturn

# Hole URL´s
liste = parseURLs(getGoogleContent())

# Parse aus den URL´s die Paketnamen
liste = parseAppNames(liste)

# Gib die ganze Liste aus
i = 0
while i < len(liste):
    print liste[i]
    i += 1

Der Code oben fragt derzeit nur die Paketnamen ab, aber wenn man ihn ein wenig modifiziert, dann funktioniert er auch mit den App-Namen. 🙂

Ich hoffe ich konnte dem einen oder anderen helfen. 🙂

Viele Grüße,

Barny

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

zwei × 5 =