2025-06-06 22:18:53 +02:00
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
2025-06-08 21:17:47 +02:00
2025-06-06 22:18:53 +02:00
def fetch_recipe ( recipe_id ) :
endpoint = " /api/recipe "
2025-06-08 21:17:47 +02:00
response = requests . get ( f " { TANDOOR_URL } /api/recipe/ { recipe_id } " , headers = headers )
2025-06-06 22:18:53 +02:00
if response . status_code != 200 :
print ( f " Error: Received status code { response . status_code } " )
return None
recipe = response . json ( )
return recipe
2025-06-08 21:17:47 +02:00
2025-06-06 22:18:53 +02:00
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 ( )