Acest API acoperă toate cazurile de utilizare cheie legate de prelucrarea limbajului natural al rețetei și textului alimentelor și analiza nutriției. API folosește NLP (Natural Language Processing), care permite extragerea entităților alimentare din text nestructurat.
Cazuri de utilizare acoperite
- Analiza completă a rețetelor alimentare în timp real - extragerea entității, măsurarea și extragerea cantității cu calculul nutriției aplicabile pentru rețetă și etichetele de sănătate și diete aplicabile. În cele din urmă, ajustează cantitatea pentru anumite ingrediente pentru a ține cont de cantitatea de gătit. De exemplu, calculează absorbția uleiului pentru rețetele prăjite, exclude solidele din rețetele din bulion și bulion, calculează absorbția marinată pentru marinate și multe altele.
- Extragerea entităților alimentare cu măsuri și cantități din text nestructurat
- Utilizarea în roboții de chat care transcriu textul natural.
Analiza completă a rețetei
Cale: https://api.edamam.com/api/nutrition-details
Returnează informații nutriționale pe baza unei cereri POST a conținutului rețetei
Următorii parametri fac parte din adresa URL a solicitării POST:
app_id | da | Şir | ID-ul aplicației dvs. pe 3 scări |
app_key | da | Şir | Cheia aplicației dvs. pe 3 scări |
forta | Nu | Forțează reevaluarea rețetei. Valoarea, dacă există, este ignorată. |
Cerere de analiză a rețetei
Veți utiliza o solicitare POST pentru a trimite conținutul rețetei - mai precis titlul rețetei și lista ingredientelor.
Răspunsul pe care îl va returna API va conține analize nutriționale pentru rețetă pe baza informațiilor furnizate.
Conținutul cererii trebuie să fie un obiect JSON cu următorul format:
titlu | da | nume comun al rețetei |
ingr | da | ingrediente (matrice de șiruri) |
url | Nu | adresa URL a locației rețetei |
rezumat | Nu | o scurtă descriere a rețetei |
Randament | Nu | numar de portii * |
ttime | Nu | timpul total pentru pregătire |
img | Nu | link imagine (absolut) |
prep | Nu | instrucțiuni de pregătire (text gratuit) |
bucătărie | Nu | tip de bucătărie |
tip de masă | Nu | tipul mesei |
fel de vase | Nu | tipul de fel de mâncare |
* În timp ce rezultatul nu este o intrare necesară dacă este prezent, ar trebui să aibă sens din perspectiva consumatorului. Greutatea prea mare sau prea mică pe porție va afecta nutriția pe porție, iar rețeta nu va trece de verificarea noastră automată a calității. Dacă se întâmplă acest lucru, API va afișa o eroare 555.
Dacă nu se specifică randamentul, Edamam va calcula randamentul preconizat al rețetei.
Cererea trebuie să conțină antetul
Rețete noi, retrimiterea și licențierea contează
Odată ce trimiteți o rețetă prin intermediul API, începeți să plătiți Edamam o taxă lunară de licențiere pentru fiecare rețetă analizată nouă. Cu toate acestea, uneori este posibil să fie nevoie să reîmprospătați datele nutriționale pentru o rețetă deja trimisă, în cazul în care ați pierdut datele nutriționale, de exemplu. Trimiterea directă a unei rețete va fi considerată ca analizând o rețetă nouă și vi se va percepe din nou taxa de licențiere pentru informațiile nutriționale. Pentru a evita faptul că am implementat un sistem bazat pe mecanismul Etag al HTTP.
În primul rând, fiecare rețetă procesată cu succes va returna, de asemenea, o etichetă în antetul de răspuns ETag. Această valoare trebuie păstrată împreună cu rețeta. Apoi, atunci când retrimiteți rețeta, ar trebui să includeți valoarea în antetul cererii If-None-Match.
Există trei rezultate posibile:
- Folosiți deja cea mai actualizată versiune a datelor Edamam. Adică, aveți deja cea mai nouă versiune a informațiilor nutriționale. În acest caz, sistemul va returna codul de stare HTTP 304 - Nemodificat. Rețineți că puteți forța reevaluarea în acest caz (de exemplu, dacă ați pierdut datele) prin trecerea parametrului forță. Edamam va ști că plătiți deja licența pentru informațiile nutriționale pentru această rețetă și nu veți fi taxat de două ori.
- Ne-am actualizat baza de date, rețeta este procesată din nou. În acest caz, veți primi datele nutriționale posibil actualizate, precum și antetul ETag actualizat. Ar trebui să stocați această nouă valoare și să o utilizați pentru retrimiteri ulterioare.
- Rețeta pe care ați trimis-o a fost modificată de dvs. Deoarece hash-ul ETag conține o „semnătură” pentru conținutul rețetei, sistemul va răspunde cu codul de stare HTTP 409 - Conflict. În cazul în care ați folosit ETag greșit, puteți utiliza codul corect sau, dacă rețeta s-a schimbat, puteți retrimite rețeta ca una nouă (adică fără a trimite antetul If-None-Match).
Exemplu de număr de licențe. Ați analizat 100 de rețete în prima lună, 50 în a doua lună și 1 în a treia lună. Prima lună veți plăti o taxă de licențiere pentru nutriția a 100 de rețete, a doua lună pentru 150 și a treia pentru 151. Dacă nu mai analizați mai multe rețete după a treia lună, veți plăti o taxă de licențiere pentru nutriția pentru în total, 151 de rețete în fiecare lună după aceea.
Exemplu de cerere POST
Iată un exemplu folosind curl:
Aceasta va trimite fișierul recipe.json pentru procesare.
Iată conținutul fișierului recipe.json:
Raspuns
200 OK | aplicație/json | Reţetă | Obiect de rețetă care conține numărul de porții (randament), calorii totale pentru rețetă (calorii), conținutul de nutrienți în funcție de tipul de nutrienți (totalNutrients, totalDaily), clasificare dietă și sănătate (dietLabels, healthLabels) |
404 Nu a fost gasit | text/html | HTML | Adresa URL specificată nu a fost găsită sau nu a putut fi recuperată |
422 Entitate neprocesabilă | text/html | HTML | Nu am putut analiza rețeta sau extrage informațiile nutriționale |
555 | text/html | HTML | Rețetă cu o calitate insuficientă pentru a procesa corect |
Exemplu de răspuns
Aici puteți descărca un eșantion de răspuns cu date nutriționale la nivel de ingredient
Reţetă
Notă: Doar un subset de câmpuri poate fi prezent, în funcție de planul API prin care se obțin datele rețetei. Consultați descrierea specifică a planului pentru detalii.
uri | şir | Identificator de ontologie |
Randament | întreg | Numărul de porții |
calorii | pluti | Energia totală, kcal |
nutrienți totali | NutrientInfo [*] | Nutrienți totali |
totalZilnic | NutrientInfo [*] | % valoare zilnica |
etichete dietetice | enum [] | Etichete dietetice: „echilibrat”, „bogat în proteine”, „bogat în fibre”, „cu conținut scăzut de grăsimi”, „cu conținut scăzut de carbohidrați”, „cu conținut scăzut de sodiu” |
HealthLabels | enum [] | Etichete de sănătate: „vegan”, „vegetarian”, „fără lactate”, „cu conținut scăzut de zahăr”, „abs cu conținut scăzut de grăsimi”, „conștient de zahăr”, „fără grăsimi”, „fără gluten”, „fără grâu” ”” |
Pentru „Definiții ale etichetei nutriționale”, consultați tabelul din partea de jos a acestui document
NutrientInfo
uri | şir | Identificator de ontologie |
eticheta | şir | Afișați eticheta |
cantitate | pluti | Cantitatea de unități specificate |
unitate | şir | Unități |
Ingredient
foodId | şir | Identificator alimentar |
cantitate | pluti | Cantitatea măsurii specificate |
măsura | Măsura | Măsura |
greutate | pluti | Greutatea totală, g |
alimente | Alimente | Alimente |
Analiza textului alimentelor
Cale: https://api.edamam.com/api/nutrition-data
Extrage informații dintr-un scurt text alimentar nestructurat - de obicei o linie de ingredient și returnează:
- Date structurate pentru text - cantitate, măsură și hrană, dacă sunt disponibile
- Etichete de dietă, sănătate și alergeni pentru text
- Cu funcția de înregistrare a alimentelor, permite schimbarea contextului. De exemplu, „orezul” se va potrivi în mod normal cu orezul crud, în timp ce caracteristica de înregistrare a alimentelor se va potrivi cu „orez gătit” gata de mâncare
Cerere de analiză a textului alimentelor
Veți utiliza o solicitare GET pentru a trimite ingredientul.
app_id | da | Şir | ID-ul aplicației dvs. pe 3 scări |
app_key | da | Şir | Cheia aplicației dvs. pe 3 scări (rețineți că app_id/app_key sunt o pereche comandată) |
de tip nutrițional | Nu | Şir | Când este setat la nutriție-tip = înregistrare, activează funcția de înregistrare a alimentelor |
ingr | da | Şir | Ingredientul (nu uitați să codificați URL-ul!) |
API-ul returnează analiza nutrițională pentru textul alimentar specificat.
Exemplu de solicitare GET
De exemplu, să presupunem că vrem să extragem informații din textul „un măr mare”. Ar trebui să includeți întotdeauna cantitatea și măsura dacă doriți să obțineți nutriție pentru linie. În caz contrar, veți obține doar un meci de mâncare. Atunci trebuie URL -cod acest șir. În acest caz, aceasta înseamnă să înlocuiți doar spațiile cu% 20, deci devine „one% 20large% 20apple”. Rețineți că ghilimelele nu fac parte din șir.
De asemenea, este important să rețineți că defalcarea textului la hrană, măsură, cantitate este disponibilă numai pentru planurile în care este activată caracteristica „Extracția hranei și cantității”. Vă rugăm să consultați pagina planului API pentru mai multe detalii.
Iată un exemplu folosind curl:
Dacă utilizați caracteristica contextului de înregistrare a alimentelor, aceasta va modifica răspunsul NLP în felul următor
- Puteți trimite articole fără cantitate. Vom încerca să le potrivim și să le atribuim cantitatea în funcție de mărimea de servire așteptată
- Se vor potrivi numai alimentele gata pentru consum direct - fără carne crudă, produse crude uscate sau legume care au nevoie de gătit, de exemplu
- Edamam poate gestiona numai articole compuse din două părți - adică „Pui” sau „orez ȘI pui”. Asigurați-vă că adresa URL este codată corect
Raspuns
200 OK | aplicație/json | Reţetă | Obiect de rețetă care conține numărul de porții (randament), calorii totale pentru rețetă (calorii), conținutul de nutrienți în funcție de tipul de nutrienți (totalNutrients, totalDaily), clasificare dietă și sănătate (dietLabels, healthLabels) |
404 Nu a fost gasit | text/html | HTML | Adresa URL specificată nu a fost găsită sau nu a putut fi recuperată |
422 Entitate neprocesabilă | text/html | HTML | Nu am putut analiza rețeta sau extrage informațiile nutriționale |
555 | text/html | HTML | Rețetă cu o calitate insuficientă pentru a procesa corect |
Exemplu de răspuns
- Încercați întotdeauna să includeți cantitatea și măsura în cereri, adică trimiteți „un măr mare”
Text alimentar unic/linie igredientă, retrimiterea și numărul de licențe
Odată ce trimiteți o linie de ingrediente prin intermediul API, începeți să plătiți Edamam o taxă lunară de licențiere pentru fiecare nouă linie de ingrediente analizată. Cu toate acestea, uneori, poate fi necesar să reîmprospătați datele nutriționale pentru o linie de ingrediente deja trimise, în cazul în care ați pierdut datele nutriționale, de exemplu. Trimiterea directă a unei linii de ingrediente va fi considerată ca analizând o nouă linie de ingrediente și vi se va percepe din nou taxa de licențiere pentru informațiile nutriționale. Pentru a evita faptul că am implementat un sistem bazat pe mecanismul Etag al HTTP.
În primul rând, fiecare linie de ingredient procesată cu succes va returna, de asemenea, o etichetă în antetul de răspuns ETag. Această valoare trebuie păstrată împreună cu linia ingredientului. Apoi, atunci când retrimiteți linia ingredientului, ar trebui să includeți valoarea în antetul cererii If-None-Match.
Există trei rezultate posibile:
- Folosiți deja cea mai actualizată versiune a datelor Edamam. Adică, aveți deja cea mai nouă versiune a informațiilor nutriționale. În acest caz, sistemul va returna codul de stare HTTP 304 - Nemodificat. Rețineți că puteți forța reevaluarea în acest caz (de exemplu, dacă ați pierdut datele) prin trecerea parametrului forță. Edamam va ști că plătiți deja licența pentru informațiile nutriționale pentru această linie de ingrediente și nu veți fi taxat de două ori.
- Ne-am actualizat baza de date, linia de ingrediente este procesată din nou. În acest caz, veți primi datele nutriționale posibil actualizate, precum și antetul ETag actualizat. Ar trebui să stocați această nouă valoare și să o utilizați pentru retrimiteri ulterioare.
- Linia de ingrediente pe care ați trimis-o a fost modificată de dvs. Deoarece hash-ul ETag conține o „semnătură” pentru conținutul textului, sistemul va răspunde cu codul de stare HTTP 409 - Conflict. În cazul în care ați folosit ETag greșit, puteți utiliza codul corect sau dacă textul/linia igredientă s-a schimbat, puteți retrimite linia ingredientului ca una nouă (adică fără a trimite antetul If-None-Match).
Exemplu de număr de licențe. Ați analizat 1000 de linii de ingrediente în prima lună, 500 în a doua lună și 10 în a treia lună. Prima lună veți plăti o taxă de licențiere pentru nutriția a 1000 de linii de ingrediente, a doua lună pentru 1500 și a treia pentru 1510. Dacă nu mai analizați nicio linie de ingrediente după a treia lună, veți plăti o taxă de licențiere pentru nutriția pentru un total de 1510 linii de ingrediente în fiecare lună după aceea.
CA | Calciu | mg | ENERC_KCAL | Energie | kcal |
CHOCDF | Carbohidrați | g | NIA | Niacina (B3) | mg |
ALEGE | Colesterol | mg | P | Fosfor | mg |
FAMS | Mononesaturat | g | PROCENT | Proteină | g |
FAPU | Polinesaturate | g | RIBF | Riboflavină (B2) | mg |
ZAHĂR | Zaharuri | g | ZAHAR. Adăugat | Zaharuri, adăugate | g |
GRAS | Gras | g | FASAT | Saturați | g |
FATRN | Trans | g | TOCPHA | Vitamina E | mg |
FE | Fier | mg | VITA_RAE | Vitamina A | æg |
FIBTG | Fibră | g | VITB12 | Vitamina B12 | æg |
FOLDFE | Folat (echivalent) | æg | FOLFD | Folat (alimente) | æg |
K | Potasiu | mg | VITC | Vitamina C | mg |
MG | Magneziu | mg | VITD | Vitamina D | æg |
N/A | Sodiu | mg | VITK1 | Vitamina K | æg |
VITB6A | Vitamina B6 | mg | THIA | Tiamina (B1) | mg |
Etichetele nutriționale sunt împărțite atât de rețete, cât și de alimente. Acestea sunt atribuite de Edamam pe baza ingredientelor conținute pe eticheta alimentelor pentru alimentele CPG și a ingredientelor de bază ale fiecărei rețete pentru rețete.
Tipuri
Tipurile compuse sunt descrise în termeni de reprezentare JSON.
Pe parcursul descrierilor, se folosește următoarea notație:
- integer, float și șir stau pentru tipurile primitive JavaScript întregi, float și respectiv șir
- enum reprezintă un câmp șir care preia doar valori dintr-un interval predefinit (intervalul este specificat acolo unde este esențial)
- T [] reprezintă o serie de obiecte de tip T
- T [*] reprezintă un obiect (hartă asociativă) al cărui câmp (element) este de tip T .
- Informații nutriționale pentru McDONALD; S, sos cu conținut scăzut de grăsimi, valorile zilnice și analiza recomandate
- Dimensiunea pieței de nutriție sportivă, tendințe și analize Lumina Intelligence
- Analiza nutrițională a omletelor cu spanac și ciuperci
- Peer Review A Sex-Specific Analysis of Nutrition Label Use and Health, Douglas County, Nebraska,
- Informații nutriționale pentru alimentele pentru copii, fructe, tutti frutti, junior, valorile zilnice recomandate și analiza