Chapitre 2. Interroger le Play Store depuis Python

Une fiche, une recherche filtrée, la pagination et une boucle de relance polie, en une trentaine de lignes de Python.

Une fiche

import os, requests

API = "https://playapi.info/api/v1"
H = {"X-API-Key": os.environ["API_KEY"]}

app = requests.get(f"{API}/app", params={"id": "com.duolingo"}, headers=H, timeout=30).json()["app"]
print(app["title"], app["installs"]["label"], app["rating"]["score"])

Une recherche filtrée

/search accepte n'importe quelle combinaison de filtres. Les apps d'éducation avec un million d'installations et une note d'au moins 4,5, les mieux notées d'abord :

params = {"category": "EDUCATION", "min_installs": 1000000,
          "min_score": 4.5, "sort": "score", "per": 100}
r = requests.get(f"{API}/search", params=params, headers=H, timeout=30).json()
print(r["total"], "listings")

Pagination

Les réponses contiennent page, per et pages. Parcourez les pages jusqu'à pages ; les résultats s'arrêtent au 10 000e élément, alors découpez les grands ensembles par genre ou par tranche d'installations.

def all_pages(path, params):
    page = 1
    while True:
        r = requests.get(f"{API}/{path}", params={**params, "page": page}, headers=H, timeout=30)
        if r.status_code == 429:
            time.sleep(2); continue
        d = r.json()
        yield from d["results"]
        if page >= d["pages"]: break
        page += 1

Coûts

Une fiche coûte un crédit, une page de recherche deux. Les 1 000 crédits mensuels de l'offre gratuite couvrent environ 500 pages de recherche. Les réponses sont mises en cache pendant des heures : répéter une requête pendant le développement coûte peu.