VEL-Connect/velconnect/routes/oculus_api.py

53 lines
1.5 KiB
Python

from enum import Enum
import fastapi
from pyppeteer import launch
# APIRouter creates path operations for user module
router = fastapi.APIRouter(
prefix="/api",
tags=["Oculus API"],
responses={404: {"description": "Not found"}},
)
class QuestRift(str, Enum):
quest = "quest"
rift = "rift"
@router.get('/get_store_details/{quest_rift}/{app_id}')
async def get_version_nums(quest_rift: QuestRift, app_id: int):
browser = await launch(headless=True, options={'args': ['--no-sandbox']})
page = await browser.newPage()
await page.goto(f'https://www.oculus.com/experiences/{quest_rift}/{app_id}')
ret = {}
# title
title = await page.querySelector(".app-description__title")
ret["title"] = await page.evaluate("e => e.textContent", title)
# description
desc = await page.querySelector(".clamped-description__content")
ret["description"] = await page.evaluate("e => e.textContent", desc)
# versions
await page.evaluate(
"document.querySelector('.app-details-version-info-row__version').nextElementSibling.firstChild.click();")
elements = await page.querySelectorAll('.sky-dropdown__link.link.link--clickable')
versions = []
for e in elements:
v = await page.evaluate('(element) => element.textContent', e)
versions.append({
'channel': v.split(':')[0],
'version': v.split(':')[1]
})
ret["versions"] = versions
await browser.close()
return ret