Skip to content

Instantly share code, notes, and snippets.

@thatrandomperson5
Created December 4, 2022 01:29
Show Gist options
  • Save thatrandomperson5/a76a2c79884f913b56cd50e902a65aa4 to your computer and use it in GitHub Desktop.
Save thatrandomperson5/a76a2c79884f913b56cd50e902a65aa4 to your computer and use it in GitHub Desktop.
readthedocs lookup
import requests
from dataclasses import dataclass
import furl
from sys import argv
@dataclass
class RTDIOsearch:
slug: str
query: str
def __repr__(self):
base = "https://readthedocs.org/api/v3/search/?format=json&q="
params = []
params.append(f"project:{self.slug}")
params.append(self.query)
return base + " ".join(params)
def applyHash(url, hash):
url.fragment.path = hash
return url.url
def processBlocks(blocks, domain, path):
url = furl.furl(domain)
url.path = path
for block in blocks:
# if block["type"] == "section": # add if you only want the tutorial like sections and not just the api docs
# yield {"name": block["title"], "url": applyHash(url, block["id"])}
if block["type"] == "domain":
yield {"name": block["name"], "url": applyHash(url, block["id"])}
def extract(data):
data = data["results"] # limit to english: data = [item for item in data["results"] if item["path"].startswith("/en")]
output = []
for item in data:
output.append(
list(
processBlocks(item["blocks"], item["domain"], item["path"])
)
)
return output
def search(slug, query):
url = RTDIOsearch(slug, query)
print(str(url))
data = requests.get(str(url)).json()
return extract(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment