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.

conținut scăzut

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:

Parametru necesar Tip Descriere
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:

Nume Descriere obligatorie
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:

  1. 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.
  2. 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.
  3. 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

Cod de stare HTTP Tip de conținut Tip Descriere
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.

descrierea tipului de câmp
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

descrierea tipului de câmp
uri şir Identificator de ontologie
eticheta şir Afișați eticheta
cantitate pluti Cantitatea de unități specificate
unitate şir Unități

Ingredient

Descriere tip câmp
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.

Parametru necesar Tip Descriere
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

Cod de stare HTTP Tip de conținut Tip Descriere
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:

  1. 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.
  2. 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.
  3. 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.

NTR Cod Nume Unitate NTR Cod Nume Unitate
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
h1. Definiții ale etichetei nutriționale

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 .