spoonacular 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/spoonacular.rb +11 -0
- data/lib/spoonacular/api/base.rb +9 -0
- data/lib/spoonacular/api/compute.rb +44 -0
- data/lib/spoonacular/api/data.rb +19 -0
- data/lib/spoonacular/api/extract.rb +28 -0
- data/lib/spoonacular/api/search.rb +60 -0
- data/lib/spoonacular/querify.rb +22 -0
- data/lib/spoonacular/request.rb +26 -0
- data/lib/spoonacular/version.rb +5 -0
- metadata +72 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2a2724db661b4178218c568e493c9797a6fffbd6
|
4
|
+
data.tar.gz: d84371caaa8c3cf45ae043626b4475cfe866b299
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55c496cc0c46bc8d0617b0373a87613704d5696efaf490745e75dd181d80d21bb03a3f8fd8996df7e842b47b1938fb2b4e5075b889af489a668975058117b44d
|
7
|
+
data.tar.gz: 416bf959be946ba04e54a7d89bcdaf5ba456b4e0dd047406e78659682eaf9dfc7bb0ae147095e91572fa3542fc500f7c1df418fb7e815d7b38441c934f4d2bff
|
data/lib/spoonacular.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'unirest'
|
2
|
+
|
3
|
+
require 'spoonacular/version'
|
4
|
+
require 'spoonacular/request'
|
5
|
+
require 'spoonacular/querify'
|
6
|
+
|
7
|
+
require 'spoonacular/api/base'
|
8
|
+
require 'spoonacular/api/compute'
|
9
|
+
require 'spoonacular/api/data'
|
10
|
+
require 'spoonacular/api/extract'
|
11
|
+
require 'spoonacular/api/search'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Spoonacular
|
2
|
+
|
3
|
+
class API
|
4
|
+
def match_recipes_to_calories(target_calories, time_frame)
|
5
|
+
method = "/recipes/mealplans/generate"
|
6
|
+
query = "targetCalories=#{target_calories}&timeFrame=#{time_frame}"
|
7
|
+
uri = Spoonacular.build_endpoint(method, query)
|
8
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
9
|
+
return response
|
10
|
+
end
|
11
|
+
|
12
|
+
def summarize_recipe(id)
|
13
|
+
method = "/recipes/#{id}/summary"
|
14
|
+
uri = Spoonacular.build_endpoint(method, "")
|
15
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
16
|
+
return response
|
17
|
+
end
|
18
|
+
|
19
|
+
def visualize_ingredients(options={})
|
20
|
+
method = "/recipes/visualizeIngredients"
|
21
|
+
uri = Spoonacular.build_endpoint(method, "")[0..-2]
|
22
|
+
params = "#{querify(options)}"
|
23
|
+
response = Spoonacular.post({key: @key, uri: uri, content_form: true, params: params})
|
24
|
+
return response
|
25
|
+
end
|
26
|
+
|
27
|
+
def visualize_nutrition(options={})
|
28
|
+
method = "/recipes/visualizeNutrition"
|
29
|
+
uri = Spoonacular.build_endpoint(method, "")[0..-2]
|
30
|
+
params = "#{querify(options)}"
|
31
|
+
response = Spoonacular.post({key: @key, uri: uri, content_form: true, params: params})
|
32
|
+
return response
|
33
|
+
end
|
34
|
+
|
35
|
+
def visualize_price_breakdown(options={})
|
36
|
+
method = "/recipes/visualizePriceEstimator"
|
37
|
+
uri = Spoonacular.build_endpoint(method, "")[0..-2]
|
38
|
+
params = "#{querify(options)}"
|
39
|
+
response = Spoonacular.post({key: @key, uri: uri, content_form: true, params: params})
|
40
|
+
return response
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Spoonacular
|
2
|
+
|
3
|
+
class API
|
4
|
+
def get_product_information(id)
|
5
|
+
method = "/food/products/#{id}"
|
6
|
+
uri = Spoonacular.build_endpoint(method, "")
|
7
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
8
|
+
return response
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_recipe_information(id)
|
12
|
+
method = "/recipes/#{id}/information"
|
13
|
+
uri = Spoonacular.build_endpoint(method, "")
|
14
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
15
|
+
return response
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Spoonacular
|
2
|
+
|
3
|
+
class API
|
4
|
+
def analyze_recipe_search(query)
|
5
|
+
method = "/recipes/queries/analyze"
|
6
|
+
uri = Spoonacular.build_endpoint(method, query)
|
7
|
+
response = Spoonacular.get({key: @key, uri: uri, accept_json: true})
|
8
|
+
return response
|
9
|
+
end
|
10
|
+
|
11
|
+
def extract_recipe(url)
|
12
|
+
method = "/recipes/extract"
|
13
|
+
query = "forceExtraction=false&url=#{url}"
|
14
|
+
uri = Spoonacular.build_endpoint(method, query)
|
15
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
16
|
+
return response
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_ingredients(ingredient_list, servings)
|
20
|
+
method = "/recipes/parseIngredients"
|
21
|
+
uri = Spoonacular.build_endpoint(method, "")[0..-2]
|
22
|
+
params = {"ingredientList" => ingredient_list, "servings" => servings}
|
23
|
+
response = Spoonacular.post({key: @key, uri: uri, content_form: true, params: params})
|
24
|
+
return response
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Spoonacular
|
2
|
+
|
3
|
+
class API
|
4
|
+
def autocomplete_ingredient_search(ingredient)
|
5
|
+
method = "/food/ingredients/autocomplete"
|
6
|
+
query = "query=#{ingredient}"
|
7
|
+
uri = Spoonacular.build_endpoint(method, query)
|
8
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
9
|
+
return response
|
10
|
+
end
|
11
|
+
|
12
|
+
def complex_recipe_search(options={})
|
13
|
+
method = "/recipes/searchComplex"
|
14
|
+
query = "#{querify(options)}"
|
15
|
+
uri = Spoonacular.build_endpoint(method, query)
|
16
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
17
|
+
return response
|
18
|
+
end
|
19
|
+
|
20
|
+
def find_by_ingredients(ingredients, options={})
|
21
|
+
method = "/recipes/findByIngredients"
|
22
|
+
query = "ingredients=#{querify(ingredients)}&#{querify(options)}"
|
23
|
+
uri = Spoonacular.build_endpoint(method, query)
|
24
|
+
response = Spoonacular.get({key: @key, uri: uri, accept_json: true})
|
25
|
+
return response
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_by_nutrients(options={})
|
29
|
+
method = "/recipes/findByNutrients"
|
30
|
+
query = "#{querify(options)}"
|
31
|
+
uri = Spoonacular.build_endpoint(method, query)
|
32
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
33
|
+
return response
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_similar_recipes(id)
|
37
|
+
method = "/recipes/#{id}/similar"
|
38
|
+
uri = Spoonacular.build_endpoint(method, "")
|
39
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
40
|
+
return response
|
41
|
+
end
|
42
|
+
|
43
|
+
def search_grocery_products(options={})
|
44
|
+
method = "/food/products/search"
|
45
|
+
query = "#{querify(options)}"
|
46
|
+
uri = Spoonacular.build_endpoint(method, query)
|
47
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
48
|
+
return response
|
49
|
+
end
|
50
|
+
|
51
|
+
def search_recipes(options={})
|
52
|
+
method = "/recipes/search"
|
53
|
+
query = "#{querify(options)}"
|
54
|
+
uri = Spoonacular.build_endpoint(method, query)
|
55
|
+
response = Spoonacular.get({key: @key, uri: uri})
|
56
|
+
return response
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
def querify(object)
|
2
|
+
if object.is_a? String
|
3
|
+
return object.gsub(/,\s?/, "%2C").gsub(" ", "+")
|
4
|
+
elsif object.is_a? Array
|
5
|
+
return object.join("%2C").gsub(" ", "+")
|
6
|
+
elsif object.is_a? Hash
|
7
|
+
result = []
|
8
|
+
object.each do |key, value|
|
9
|
+
result << "#{to_camel_case(key.to_s)}=#{querify(value)}"
|
10
|
+
end
|
11
|
+
return result.join("&")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_camel_case(string)
|
16
|
+
string.chars.length.times do |i|
|
17
|
+
if string[i] == "_"
|
18
|
+
string[i+1] = string[i+1].upcase
|
19
|
+
end
|
20
|
+
end
|
21
|
+
return string.delete "_"
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spoonacular
|
2
|
+
|
3
|
+
BASE_PATH = "https://spoonacular-recipe-food-nutrition-v1.p.mashape.com"
|
4
|
+
|
5
|
+
def self.build_endpoint(method, query)
|
6
|
+
return "#{BASE_PATH}#{method}?#{query}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.get(options)
|
10
|
+
headers = {"X-Mashape-Key" => options[:key]}
|
11
|
+
headers["Accept"] = "application/json" if options[:accept_json]
|
12
|
+
response = Unirest.get options[:uri], headers: headers
|
13
|
+
return response
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.post(options)
|
17
|
+
headers = {"X-Mashape-Key" => options[:key]}
|
18
|
+
headers["Accept"] = "application/json" if options[:accept_json]
|
19
|
+
headers["Content-Type"] = "application/json" if options[:content_json]
|
20
|
+
headers["Content-Type"] = "application/x-www-form-urlencoded" if options[:content_form]
|
21
|
+
params = options[:params]
|
22
|
+
response = Unirest.post options[:uri], headers: headers, parameters: params
|
23
|
+
return response
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spoonacular
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Woznicki
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: unirest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.1'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.1.2
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.1'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.1.2
|
33
|
+
description: gem for the Spoonacular API
|
34
|
+
email: daniel.woznicki@gmail.com
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files: []
|
38
|
+
files:
|
39
|
+
- lib/spoonacular.rb
|
40
|
+
- lib/spoonacular/api/base.rb
|
41
|
+
- lib/spoonacular/api/compute.rb
|
42
|
+
- lib/spoonacular/api/data.rb
|
43
|
+
- lib/spoonacular/api/extract.rb
|
44
|
+
- lib/spoonacular/api/search.rb
|
45
|
+
- lib/spoonacular/querify.rb
|
46
|
+
- lib/spoonacular/request.rb
|
47
|
+
- lib/spoonacular/version.rb
|
48
|
+
homepage: https://github.com/dwoznicki/spoonacular
|
49
|
+
licenses:
|
50
|
+
- MIT
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.4.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: Spoonacular-gem
|
72
|
+
test_files: []
|