gcs_api_gem 0.2.0 → 0.4.0
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 +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +24 -11
- data/bin/gcs_api_gem +2 -1
- data/gcs_api_gem.gemspec +3 -3
- data/lib/gcs_api_gem/search_api.rb +88 -51
- data/lib/gcs_api_gem/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b1ea2ce3dab1cc8bec78eebfe4ec094771aead3
|
|
4
|
+
data.tar.gz: cd30351439e67035fc8a1f8e3d64d5f4ee71f9c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 90491d11b00bbfd521680153b67bf644facea5ffe40639aac23f2678a7a24f3b7bac193fd49a434b1e21f88c514326fc282b370856cc835534dc14c4d08c28df
|
|
7
|
+
data.tar.gz: 7be6cd60b4aea32cb7aaa715ce8b7b36dec4917f3a234beee027ca3e844dea0a69884bfb111a09b5a1a63267ebcc9708de289ca9630a3f5de744bc311e173b77
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -45,35 +45,48 @@ If you want to know how to get GOOGLE_CUSTOME_SEARCH_ENGINE_ID and GOOGLE_API_KE
|
|
|
45
45
|
Or see [here](http://ryutamaki.hatenablog.com/entry/2014/01/18/171640).
|
|
46
46
|
|
|
47
47
|
## Usage
|
|
48
|
+
### In a program
|
|
48
49
|
|
|
49
50
|
Write in your program as below:
|
|
50
51
|
|
|
51
52
|
```ruby
|
|
52
|
-
GcsApiGem::
|
|
53
|
+
obj.GcsApiGem::SearchApi.new
|
|
54
|
+
obj.random_image(<keyword>)
|
|
53
55
|
```
|
|
54
56
|
|
|
55
57
|
Then you get a random image searched by keyword.
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
#### Example
|
|
58
60
|
|
|
59
61
|
```
|
|
60
|
-
> GcsApiGem::SearchApi.
|
|
62
|
+
> obj = GcsApiGem::SearchApi.new
|
|
63
|
+
> obj.random_image('cat')
|
|
61
64
|
=> {
|
|
65
|
+
:keyword=>"cat",
|
|
62
66
|
:title=>"Cute Cat - Chrome Web Store",
|
|
63
67
|
:image=>"https://lh3.googleusercontent.com/FnN1_Jabl5WITJrHYLGv80r-GNSNAPI_nwrrSgHh8fRUh5fsHFMmPFkPOjaX16H5Pi-Fwotg=w640-h400-e365",
|
|
64
|
-
:search_result=>"320000000"
|
|
68
|
+
:search_result=>"320000000",
|
|
69
|
+
:start_index=>2
|
|
65
70
|
}
|
|
66
71
|
```
|
|
67
72
|
|
|
68
|
-
|
|
73
|
+
#### Response
|
|
69
74
|
|
|
70
|
-
Response of GcsApiGem::SearchApi
|
|
75
|
+
Response of GcsApiGem::SearchApi#random_image is as below:
|
|
71
76
|
|
|
72
|
-
| key | detail
|
|
73
|
-
| ------------- |
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
+
| key | detail |
|
|
78
|
+
| ------------- | ----------------------------------------------- |
|
|
79
|
+
| keyword | It is using keyword to search image. |
|
|
80
|
+
| title | The title of the web site that got the image. |
|
|
81
|
+
| image | The URL of the got image. |
|
|
82
|
+
| search_result | Number of images hit in search. |
|
|
83
|
+
| start_index | Number of page on which the image is displayed. |
|
|
84
|
+
|
|
85
|
+
### In a command line
|
|
86
|
+
|
|
87
|
+
Write in a command line as below:
|
|
88
|
+
|
|
89
|
+
$ gcs_api_gem -r cat
|
|
77
90
|
|
|
78
91
|
## Contributing
|
|
79
92
|
|
data/bin/gcs_api_gem
CHANGED
data/gcs_api_gem.gemspec
CHANGED
|
@@ -30,10 +30,10 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
31
31
|
spec.require_paths = ["lib"]
|
|
32
32
|
|
|
33
|
-
spec.add_runtime_dependency "httpclient"
|
|
33
|
+
spec.add_runtime_dependency "httpclient", "~> 2.8.3"
|
|
34
34
|
spec.add_development_dependency "bundler", "~> 1.15"
|
|
35
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
36
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
37
|
-
spec.add_development_dependency "pry"
|
|
38
|
-
spec.add_development_dependency "pry-byebug"
|
|
37
|
+
spec.add_development_dependency "pry", "0.10.4"
|
|
38
|
+
spec.add_development_dependency "pry-byebug", "3.5.1"
|
|
39
39
|
end
|
|
@@ -1,68 +1,105 @@
|
|
|
1
1
|
module GcsApiGem
|
|
2
2
|
# SearchApi
|
|
3
3
|
class SearchApi
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def random_image(keyword)
|
|
7
|
-
return { error: 'Please set KEY to environment variable.' } if key_is_ng?
|
|
8
|
-
return { error: 'Please set CSE_ID to environment variable.' } if cse_id_is_ng?
|
|
4
|
+
# Decide to what range of page you want to acquire
|
|
5
|
+
SEARCH_RANGE = 3
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
def initialize
|
|
8
|
+
@items = []
|
|
9
|
+
@search_result = nil
|
|
10
|
+
@keyword = nil
|
|
11
|
+
@start_index = nil
|
|
12
|
+
end
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
# Select one piece randomly from images searched by keyword
|
|
15
|
+
def random_image(keyword)
|
|
16
|
+
return { error: 'Please set KEY to environment variable.' } if key_is_ng?
|
|
17
|
+
return { error: 'Please set CSE_ID to environment variable.' } if cse_id_is_ng?
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
end
|
|
19
|
+
choice(keyword)
|
|
20
|
+
end
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
blank?(ENV['CSE_ID'])
|
|
21
|
-
end
|
|
22
|
+
private
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
def key_is_ng?
|
|
25
|
+
blank?(ENV['KEY'])
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'cx' => ENV['CSE_ID'],
|
|
31
|
-
'searchType' => 'image',
|
|
32
|
-
'q' => keyword,
|
|
33
|
-
'start' => rand(50) + 1
|
|
34
|
-
}
|
|
35
|
-
end
|
|
28
|
+
def cse_id_is_ng?
|
|
29
|
+
blank?(ENV['CSE_ID'])
|
|
30
|
+
end
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
JSON.parse res.body
|
|
41
|
-
end
|
|
32
|
+
def url
|
|
33
|
+
'https://www.googleapis.com/customsearch/v1'
|
|
34
|
+
end
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
def query(keyword)
|
|
37
|
+
{
|
|
38
|
+
'key' => ENV['KEY'],
|
|
39
|
+
'cx' => ENV['CSE_ID'],
|
|
40
|
+
'searchType' => 'image',
|
|
41
|
+
'q' => keyword,
|
|
42
|
+
'start' => rand(SEARCH_RANGE) + 1,
|
|
43
|
+
'imgType' => 'photo'
|
|
44
|
+
}
|
|
45
|
+
end
|
|
53
46
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
def fetch(keyword)
|
|
48
|
+
client = HTTPClient.new
|
|
49
|
+
res = client.get(url, query(keyword))
|
|
50
|
+
JSON.parse res.body
|
|
51
|
+
end
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
image: item['link'],
|
|
63
|
-
search_result: res['searchInformation']['totalResults']
|
|
64
|
-
}
|
|
53
|
+
def choice(keyword)
|
|
54
|
+
if @keyword != keyword
|
|
55
|
+
@keyword = keyword
|
|
56
|
+
pull_data
|
|
65
57
|
end
|
|
58
|
+
formatted_item(select_item)
|
|
59
|
+
rescue => e
|
|
60
|
+
return { error: e.message }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def pull_data
|
|
64
|
+
p 'do pull_data'
|
|
65
|
+
res = fetch(@keyword)
|
|
66
|
+
check_error(res)
|
|
67
|
+
|
|
68
|
+
@items = res['items']
|
|
69
|
+
@search_result = res['searchInformation']['totalResults'].to_i
|
|
70
|
+
@start_index = res['queries']['request'][0]['startIndex']
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def check_error(res)
|
|
74
|
+
raise res['error'].to_s unless blank?(res['error'])
|
|
75
|
+
raise 'Search result was 0.' if count_zero?(res)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def select_item
|
|
79
|
+
pull_data if @items.count.zero?
|
|
80
|
+
|
|
81
|
+
index = [*(0..@items.count - 1)].sample
|
|
82
|
+
item = @items[index]
|
|
83
|
+
@items.delete_at(index)
|
|
84
|
+
item
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def blank?(obj)
|
|
88
|
+
obj.nil? || obj.empty?
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def formatted_item(item)
|
|
92
|
+
{
|
|
93
|
+
keyword: @keyword,
|
|
94
|
+
title: item['title'],
|
|
95
|
+
image: item['link'],
|
|
96
|
+
search_result: @search_result,
|
|
97
|
+
start_index: @start_index
|
|
98
|
+
}
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def count_zero?(res)
|
|
102
|
+
res['searchInformation']['totalResults'].to_i.zero?
|
|
66
103
|
end
|
|
67
104
|
end
|
|
68
105
|
end
|
data/lib/gcs_api_gem/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gcs_api_gem
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yuta Takahashi
|
|
@@ -14,16 +14,16 @@ dependencies:
|
|
|
14
14
|
name: httpclient
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 2.8.3
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 2.8.3
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -70,30 +70,30 @@ dependencies:
|
|
|
70
70
|
name: pry
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - '='
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 0.10.4
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - '='
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: 0.10.4
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: pry-byebug
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- -
|
|
87
|
+
- - '='
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
89
|
+
version: 3.5.1
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- -
|
|
94
|
+
- - '='
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
96
|
+
version: 3.5.1
|
|
97
97
|
description: Google Custom Search API gem.
|
|
98
98
|
email:
|
|
99
99
|
- m1205123ing@gmail.com
|