/lib/DDG/Spice/Nutrition.pm

https://github.com/pardocz/zeroclickinfo-spice · Perl · 30 lines · 22 code · 6 blank · 2 comment · 1 complexity · 7a0a565627b7cff3bf8d67fa4d62cc79 MD5 · raw file

  1. package DDG::Spice::Nutrition;
  2. use DDG::Spice;
  3. primary_example_queries "calories in a banana";
  4. description "Shows nutrition information for food items";
  5. name "Nutrition";
  6. code_url "https://github.com/duckduckgo/zeroclickinfo-spice/blob/master/lib/DDG/Spice/Nutrition.pm";
  7. icon_url "/i/nutritionix.com.ico";
  8. topics "food_and_drink";
  9. category "food";
  10. my $attribute_regex = qr/(?^:(?^:(?:c(?:a(?:l(?:ories(?: from fat)?|cium|s)|rb(?:ohydrate)?s)|holesterol)|p(?:olyunsaturated fat|rotein)|trans(?: fat(?:ty acid)?|-fat)|s(?:aturated fat|odium|ugar)|monounsaturated fat|dietary fiber|f(?:iber|at)|vitamin [ac]|kcals|iron)))/;
  11. triggers any => 'kcals', 'cals','calories','fiber','dietary fiber','fat','trans-fat','trans fat','trans fatty acid','calories from fat','saturated fat','monosaturated fat','polyunsaturated fat','cholesterol','sodium','sugar','protein','carbs','carbohydrates','vitamin c','vitamin a','calcium','iron';
  12. # brand_id is hard coded to USDA for now. Eventually could support searches across brands (i.e. packaged goods or restaurants, but requires multiple
  13. # calls to their API so waiting for now):
  14. spice to => 'http://api.nutritionix.com/v1_1/search/$1?results=0%3A20&brand_id=513fcc648110a4cafb90ca5e&fields=*&appId={{ENV{DDG_SPICE_NUTRITIONIX_APPID}}}&appKey={{ENV{DDG_SPICE_NUTRITIONIX_APIKEY}}}';
  15. spice wrap_jsonp_callback => 1;
  16. handle query_lc => sub {
  17. if (/^(?:how|what)?\s?(?:'s |is |are |many |much )?(?:the |there )?(?:total |amount of |number of )?$attribute_regex\s?(?:are |contained |is )?(?:there )?(?:in )?(?:a |an )?(.+?)(?:\?)?$/) {
  18. return $1 if $1;
  19. }
  20. return;
  21. };
  22. 1;