✨ use tandoor json, directly from the api
This commit is contained in:
parent
f89a9683e0
commit
b2ab88b216
80 changed files with 20922 additions and 1996 deletions
97
0_get_recipes.py
Normal file
97
0_get_recipes.py
Normal file
|
@ -0,0 +1,97 @@
|
|||
import requests
|
||||
import os
|
||||
import json
|
||||
from pathvalidate import validate_filename
|
||||
|
||||
from config import *
|
||||
|
||||
headers = {}
|
||||
if TANDOOR_API_TOKEN:
|
||||
headers["Authorization"] = f"Bearer {TANDOOR_API_TOKEN}"
|
||||
|
||||
|
||||
def fetch_keyword_id(keyword):
|
||||
endpoint = "/api/keyword"
|
||||
page = 1
|
||||
|
||||
while True:
|
||||
params = {"query": keyword, "page": page}
|
||||
response = requests.get(
|
||||
f"{TANDOOR_URL}{endpoint}", params=params, headers=headers
|
||||
)
|
||||
if response.status_code != 200:
|
||||
print(f"Error: Received status code {response.status_code}")
|
||||
return None
|
||||
|
||||
data = response.json()
|
||||
|
||||
results = data.get("results", [])
|
||||
for item in results:
|
||||
if item.get("name") == keyword:
|
||||
return item.get("id")
|
||||
|
||||
if not data.get("next"):
|
||||
break
|
||||
|
||||
page += 1
|
||||
|
||||
raise RuntimeError(f"Keyword '{keyword}' not found.")
|
||||
|
||||
|
||||
def fetch_recipes(keyword_id):
|
||||
recipes = []
|
||||
endpoint = "/api/recipe"
|
||||
page = 1
|
||||
|
||||
while True:
|
||||
params = {"keywords": keyword_id, "page": page}
|
||||
response = requests.get(
|
||||
f"{TANDOOR_URL}{endpoint}", params=params, headers=headers
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"Error: Received status code {response.status_code}")
|
||||
return None
|
||||
|
||||
data = response.json()
|
||||
|
||||
results = data.get("results", [])
|
||||
for item in results:
|
||||
recipe = fetch_recipe(item.get("id"))
|
||||
recipes.append(recipe)
|
||||
|
||||
if not data.get("next"):
|
||||
break
|
||||
|
||||
page += 1
|
||||
|
||||
return recipes
|
||||
|
||||
def fetch_recipe(recipe_id):
|
||||
endpoint = "/api/recipe"
|
||||
|
||||
response = requests.get(
|
||||
f"{TANDOOR_URL}/api/recipe/{recipe_id}", headers=headers
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"Error: Received status code {response.status_code}")
|
||||
return None
|
||||
|
||||
recipe = response.json()
|
||||
return recipe
|
||||
|
||||
def main():
|
||||
keyword_id = fetch_keyword_id(TANDOOR_KEYWORD)
|
||||
recipes = fetch_recipes(keyword_id)
|
||||
|
||||
for recipe in recipes:
|
||||
json_fn = f"{recipe.get('name', 'Untitled Recipe')}.json"
|
||||
validate_filename(json_fn)
|
||||
os.makedirs(OUTDIR_JSON, exist_ok=True)
|
||||
with open(os.path.join(OUTDIR_JSON, json_fn), "w") as f:
|
||||
json.dump(recipe, f, sort_keys=True, indent=2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue