Source code for src.rossmassey.fetch_leetcode_problem._leetcode_api
"""
Functions to fetch data from LeetCode API
"""
import requests
from ._cookies import get_cookies
PROBLEM_API = 'https://leetcode.com/api/problems/all/'
GRAPHQL_API = 'https://leetcode.com/graphql'
COOKIE = None
[docs]
def fetch_problems() -> list:
"""
Fetch all problems from LeetCode API
Returns:
list: tuples with num, title, slug, and question id for each problem
"""
response = requests.get(PROBLEM_API, cookies=COOKIE)
data = response.json()
problems = []
for item in data['stat_status_pairs']:
stat = item['stat']
num = stat['frontend_question_id']
title = stat['question__title']
slug = stat['question__title_slug']
question_id = stat['question_id']
problems.append((num, title, slug, question_id))
return problems
[docs]
def _fetch_graphql(payload: dict) -> dict:
"""
Fetch data from LeetCode GraphQL API
Args:
payload (dict): json payload to send
Returns:
dict: json response
"""
response = requests.post(GRAPHQL_API, json=payload, cookies=COOKIE)
return response.json()
[docs]
def fetch_synced_code(question_id: int) -> dict:
"""
Fetch synced code from LeetCode GraphQL API
Args:
question_id (int): problem question id (not frontend id)
Returns:
dict: json response with synced code
"""
python_language_id = 11 # only get python for now
payload = {
"query": """
query SyncedCode($questionId: Int!, $lang: Int!) {
syncedCode(questionId: $questionId, lang: $lang) {
code
}
}
""",
"variables": {
"questionId": question_id,
"lang": python_language_id
}
}
return _fetch_graphql(payload)['data']['syncedCode']
[docs]
def fetch_problem_info(slug: str) -> dict:
"""
Fetch problem info
Args:
slug (str): problem title slug
Returns:
dict: json response with problem info
"""
payload = {
"query": """
query questionCustom($titleSlug: String!) {
question(titleSlug: $titleSlug) {
questionId
questionFrontendId
title
titleSlug
difficulty
content
codeSnippets {
lang
langSlug
code
}
}
}
""",
"variables": {
"titleSlug": slug
}
}
return _fetch_graphql(payload)['data']['question']
def set_cookie(cookie_path: str):
global COOKIE
COOKIE = get_cookies(cookie_path)