Capítulo 2. Consultando a Play Store com Python

Uma página, uma busca filtrada, paginação e um laço de novas tentativas educado, em cerca de trinta linhas de Python.

Uma página

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"])

Uma busca filtrada

/search aceita qualquer combinação de filtros. Apps de educação com um milhão de instalações e avaliação 4,5 ou maior, os mais bem avaliados primeiro:

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")

Paginação

As respostas trazem page, per e pages. Percorra as páginas até chegar a pages; os resultados param no 10.000º item, então divida conjuntos grandes por gênero ou faixa de instalações.

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

Custos

Uma página de app custa um crédito, uma página de busca, dois. Os 1.000 créditos mensais do plano gratuito cobrem cerca de 500 páginas de busca. As respostas ficam em cache por horas, então repetir uma consulta durante o desenvolvimento sai barato.