scripts/nutrition_search.py
scripts/nutrition_search.pyBrowse 4 files
716 tokens
2,641 bytes
Token encoding: o200k_base
Snapshot 24fd22b
← Back to SKILL.md
1#!/usr/bin/env python32"""3nutrition_search.py — Search USDA FoodData Central for nutrition info.4 5Usage:6 python3 nutrition_search.py "chicken breast"7 python3 nutrition_search.py "rice" "eggs" "broccoli"8 echo -e "oats\\nbanana\\nwhey protein" | python3 nutrition_search.py -9 10Reads USDA_API_KEY from environment, falls back to DEMO_KEY.11No external dependencies.12"""13import sys14import os15import json16import time17import urllib.request18import urllib.parse19 20API_KEY = os.environ.get("USDA_API_KEY", "DEMO_KEY")21BASE = "https://api.nal.usda.gov/fdc/v1"22 23 24def search(query, max_results=3):25 encoded = urllib.parse.quote(query)26 url = (27 f"{BASE}/foods/search?api_key={API_KEY}"28 f"&query={encoded}&pageSize={max_results}"29 f"&dataType=Foundation,SR%20Legacy"30 )31 try:32 req = urllib.request.Request(url, headers={"Accept": "application/json"})33 with urllib.request.urlopen(req, timeout=15) as r:34 return json.loads(r.read())35 except Exception as e:36 print(f" API error: {e}", file=sys.stderr)37 return None38 39 40def display(food):41 nutrients = {n["nutrientName"]: n.get("value", "?") for n in food.get("foodNutrients", [])}42 cal = nutrients.get("Energy", "?")43 prot = nutrients.get("Protein", "?")44 fat = nutrients.get("Total lipid (fat)", "?")45 carb = nutrients.get("Carbohydrate, by difference", "?")46 fib = nutrients.get("Fiber, total dietary", "?")47 sug = nutrients.get("Sugars, total including NLEA", "?")48 49 print(f" {food.get('description', 'N/A')}")50 print(f" Calories : {cal} kcal")51 print(f" Protein : {prot}g")52 print(f" Fat : {fat}g")53 print(f" Carbs : {carb}g (fiber: {fib}g, sugar: {sug}g)")54 print(f" FDC ID : {food.get('fdcId', 'N/A')}")55 56 57def main():58 if len(sys.argv) < 2:59 print(__doc__)60 sys.exit(1)61 62 if sys.argv[1] == "-":63 queries = [line.strip() for line in sys.stdin if line.strip()]64 else:65 queries = sys.argv[1:]66 67 for query in queries:68 print(f"\n--- {query.upper()} (per 100g) ---")69 data = search(query, max_results=2)70 if not data or not data.get("foods"):71 print(" No results found.")72 else:73 for food in data["foods"]:74 display(food)75 print()76 if len(queries) > 1:77 time.sleep(1) # respect rate limits78 79 if API_KEY == "DEMO_KEY":80 print("\nTip: using DEMO_KEY (30 req/hr). Set USDA_API_KEY for 1000 req/hr.")81 print("Free signup: https://fdc.nal.usda.gov/api-key-signup/")82 83 84if __name__ == "__main__":85 main()