Source code for reddit.get_all_subreddits
from typing import Any, Dict, List
from urllib.parse import urljoin
from reddit.util import set_up_session
url = "https://np.reddit.com"
[docs]def get_subreddits_from_response(js: Dict[str, Any], lang="en") -> List[Dict[str, Any]]:
return [
sub["data"]["url"]
for sub in js["data"]["children"]
if sub["data"].get("lang") == lang
]
[docs]def get_all_subreddits(lang="en") -> List[Dict[str, Any]]:
"""
Retrieves all subreddits of a given language.
:param lang:
:return:
"""
subs = []
session = set_up_session()
response = session.get(urljoin(url, "/reddits.json?limit=100"))
subs.extend(get_subreddits_from_response(response.json(), lang))
last_id = response.json()["data"]["after"]
while True:
response = session.get(urljoin(url, f"reddits.json?limit=100&after={last_id}"))
if response.ok:
js = response.json()
subs.extend(get_subreddits_from_response(js, lang))
print(subs)
last_id = js["data"].get("after")
if not last_id:
break
return subs
if __name__ == "__main__":
subs = get_all_subreddits("de")
print(subs)
with open("subs-de.txt", "w") as file:
file.write(",".join([s["displayName"] for s in subs]))