google-cse 1.0.1

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.
@@ -0,0 +1,11 @@
1
+ *.gem
2
+ *.rbc
3
+ .tmproj
4
+ .bundle
5
+ .config
6
+ .rvmrc
7
+ .rspec
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ tmp
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
6
+ - jruby-18mode
7
+ - jruby-19mode
8
+ script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in google-cse.gemspec
4
+ gemspec
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ google-cse (0.0.1)
5
+ json
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.1.3)
11
+ fuubar (1.1.0)
12
+ rspec (~> 2.0)
13
+ rspec-instafail (~> 0.2.0)
14
+ ruby-progressbar (~> 1.0.0)
15
+ json (1.7.6)
16
+ rspec (2.12.0)
17
+ rspec-core (~> 2.12.0)
18
+ rspec-expectations (~> 2.12.0)
19
+ rspec-mocks (~> 2.12.0)
20
+ rspec-core (2.12.2)
21
+ rspec-expectations (2.12.1)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-instafail (0.2.4)
24
+ rspec-mocks (2.12.2)
25
+ ruby-progressbar (1.0.2)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ fuubar
32
+ google-cse!
33
+ rspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Achilles Charmpilas
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,48 @@
1
+ # google-cse [![Build Status](https://travis-ci.org/Achillefs/google-cse.png?branch=master)](https://travis-ci.org/Achillefs/google-cse)
2
+
3
+ A wee Google CSE client. Use it to easily query your custom search engine. Supports image search.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'google-cse'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install google-cse
18
+
19
+ ## Usage
20
+
21
+ Set it up:
22
+
23
+ require 'google_cse'
24
+ GoogleCSE::CX = 'a-cse-identifier'
25
+ GoogleCSE::KEY = 'a-googleapis-app-key'
26
+
27
+ If you are on a rails app, you should stick the constants in an initializer
28
+
29
+ Run a search and visit the first result, 'feeling lucky' style (on a mac):
30
+
31
+ g = GoogleCSE.search('Ian Kilminster')
32
+ `open -a Safari #{g.fetch.results.first.link}`
33
+
34
+ Do the same for an image:
35
+
36
+ g = GoogleCSE.image_search('Ian Kilminster')
37
+ img = g.fetch.results.first.link
38
+ file = img.split('/').last
39
+ File.open(file,'w') {|f| f.write(open(img).read)}
40
+ `open -a Preview #{file}`
41
+
42
+ ## Contributing
43
+
44
+ 1. Fork it
45
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
46
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
47
+ 4. Push to the branch (`git push origin my-new-feature`)
48
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'google_cse/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "google-cse"
8
+ gem.version = GoogleCSE::VERSION
9
+ gem.authors = ["Achilles Charmpilas"]
10
+ gem.email = ["ac@humbuckercode.co.uk"]
11
+ gem.description = %q{A wee Google CSE client}
12
+ gem.summary = %q{A wee Google CSE client. Use it to easily query your custom search engine. Supports image search.}
13
+ gem.homepage = "http://humbuckercode.co.uk/licks/gems/google-cse"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency('json')
21
+ gem.add_development_dependency('rspec')
22
+ gem.add_development_dependency('fuubar')
23
+ end
@@ -0,0 +1,44 @@
1
+ require "google_cse/query"
2
+ require "google_cse/result"
3
+ require "google_cse/version"
4
+
5
+ module GoogleCSE
6
+ class MissingKey < StandardError
7
+ def initialize
8
+ super "You need to specify a Google CSE Key (GoogleCSE::KEY = 'my-key-goes-here')"
9
+ end
10
+ end
11
+
12
+ class MissingCX < StandardError
13
+ def initialize
14
+ super "You need to specify a Google CSE CX (GoogleCSE::CX = 'my-cx-goes-here')"
15
+ end
16
+
17
+ end
18
+
19
+ def self.search query, params = {}
20
+ query({:q => query}.merge(params))
21
+ end
22
+
23
+ def self.image_search query, params = {}
24
+ query({:searchType => :image, :q => query}.merge(params))
25
+ end
26
+
27
+ private
28
+ def self.query params
29
+ begin
30
+ Query.new(:params => default_params.merge(params))
31
+ rescue NameError => e
32
+ case e.message
33
+ when 'uninitialized constant GoogleCSE::CX'
34
+ raise MissingCX
35
+ when 'uninitialized constant GoogleCSE::KEY'
36
+ raise MissingKey
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.default_params
42
+ { :cx => CX, :key => KEY }
43
+ end
44
+ end
@@ -0,0 +1,67 @@
1
+ require 'json'
2
+ require 'cgi'
3
+ require 'open-uri'
4
+
5
+ module GoogleCSE
6
+ class Query
7
+ @@endpoint = 'https://www.googleapis.com/customsearch/v1'
8
+ attr_accessor :params, :results, :info, :response, :current_index, :total, :per_page, :time
9
+
10
+ def initialize opts = {}
11
+ opts.map {|k,v| send(:"#{k}=",v)}
12
+ end
13
+
14
+ def search_uri
15
+ "#{@@endpoint}?#{params.map {|k,v|"#{k}=#{CGI.escape(v.to_s)}"}.join('&')}"
16
+ end
17
+
18
+ def fetch
19
+ @response = JSON.parse(open(search_uri).read)
20
+ parse_response!
21
+ self
22
+ end
23
+
24
+ def fetch!
25
+ fetch
26
+ nil
27
+ end
28
+
29
+ def next
30
+ if next?
31
+ @params.merge!({:start => @next_page_params.first['startIndex']})
32
+ fetch
33
+ end
34
+ end
35
+
36
+ def previous
37
+ if previous?
38
+ @params.merge!({:start => @prev_page_params.first['startIndex']})
39
+ fetch
40
+ end
41
+ end
42
+
43
+ def next?
44
+ !(@next_page_params.nil? || @next_page_params.empty?)
45
+ end
46
+
47
+ def previous?
48
+ !(@prev_page_params.nil? || @prev_page_params.empty?)
49
+ end
50
+
51
+ def page
52
+ (current_index / per_page.to_f).ceil
53
+ end
54
+
55
+ def parse_response!
56
+ @results = @response['items'].map { |i| Result.new(i) }
57
+ @next_page_params = @response['queries']['nextPage']
58
+ @prev_page_params = @response['queries']['previousPage']
59
+ @info = @response['searchInformation']
60
+ @total = @info['totalResults'].to_i
61
+ @time = @info['searchTime'].to_f
62
+ @per_page = @response['queries']['request'].first['count'].to_i
63
+ @current_index = @response['queries']['request'].first['startIndex'].to_i
64
+ nil
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,16 @@
1
+ module GoogleCSE
2
+ class Result < Hash
3
+ def initialize(hash = {}, default = nil, &block)
4
+ default ? super(default) : super(&block)
5
+ update(hash)
6
+ end
7
+
8
+ def method_missing name, *args, &block
9
+ if self.key?(name.to_s)
10
+ self[name.to_s]
11
+ else
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module GoogleCSE
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,239 @@
1
+ {
2
+ "kind": "customsearch#search",
3
+ "url": {
4
+ "type": "application/json",
5
+ "template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
6
+ },
7
+ "queries": {
8
+ "nextPage": [
9
+ {
10
+ "title": "Google Custom Search - ian kilminster",
11
+ "totalResults": "72800",
12
+ "searchTerms": "ian kilminster",
13
+ "count": 10,
14
+ "startIndex": 11,
15
+ "inputEncoding": "utf8",
16
+ "outputEncoding": "utf8",
17
+ "safe": "off",
18
+ "cx": "004660295420853704579:8tths02yqhc",
19
+ "searchType": "image"
20
+ }
21
+ ],
22
+ "request": [
23
+ {
24
+ "title": "Google Custom Search - ian kilminster",
25
+ "totalResults": "72800",
26
+ "searchTerms": "ian kilminster",
27
+ "count": 10,
28
+ "startIndex": 1,
29
+ "inputEncoding": "utf8",
30
+ "outputEncoding": "utf8",
31
+ "safe": "off",
32
+ "cx": "004660295420853704579:8tths02yqhc",
33
+ "searchType": "image"
34
+ }
35
+ ]
36
+ },
37
+ "context": {
38
+ "title": "Xegesis Images"
39
+ },
40
+ "searchInformation": {
41
+ "searchTime": 0.375924,
42
+ "formattedSearchTime": "0.38",
43
+ "totalResults": "72800",
44
+ "formattedTotalResults": "72,800"
45
+ },
46
+ "items": [
47
+ {
48
+ "kind": "customsearch#result",
49
+ "title": "Celebrity picks for Derby Dead Pool 2013: K",
50
+ "htmlTitle": "Celebrity picks for Derby Dead Pool 2013: K",
51
+ "link": "http://www.derbydeadpool.co.uk/images/celebs/k/kilmii.jpg",
52
+ "displayLink": "www.derbydeadpool.co.uk",
53
+ "snippet": "[Picture of Ian Kilminster]",
54
+ "htmlSnippet": "[Picture of \u003cb\u003eIan Kilminster\u003c/b\u003e]",
55
+ "mime": "image/jpeg",
56
+ "image": {
57
+ "contextLink": "http://www.derbydeadpool.co.uk/deadpool2013/celebs_K.html",
58
+ "height": 150,
59
+ "width": 127,
60
+ "byteSize": 4291,
61
+ "thumbnailLink": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTl-e4dlEB7YNXjHBozsY6OuasoeI9XRFV8EoBjV2JY__Oizoo4ohc6NXI",
62
+ "thumbnailHeight": 96,
63
+ "thumbnailWidth": 81
64
+ }
65
+ },
66
+ {
67
+ "kind": "customsearch#result",
68
+ "title": "Motörhead's Lemmy in Nazi photoshoot scandal | Music | guardian.",
69
+ "htmlTitle": "Motörhead&#39;s Lemmy in Nazi photoshoot scandal | Music | guardian.",
70
+ "link": "http://static.guim.co.uk/sys-images/Music/Pix/pictures/2008/07/11/Lemmy372.jpg",
71
+ "displayLink": "www.guardian.co.uk",
72
+ "snippet": "Ian \"Lemmy\" Kilmister may",
73
+ "htmlSnippet": "\u003cb\u003eIan\u003c/b\u003e &quot;Lemmy&quot; \u003cb\u003eKilmister\u003c/b\u003e may",
74
+ "mime": "image/jpeg",
75
+ "image": {
76
+ "contextLink": "http://www.guardian.co.uk/music/2008/jul/11/news.culture",
77
+ "height": 192,
78
+ "width": 372,
79
+ "byteSize": 24316,
80
+ "thumbnailLink": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTYAFrCLbG7UyIdwJplLpJSCrXRLeUHRleI9m6c0zW-wZjTgHe9hzq9GQ",
81
+ "thumbnailHeight": 63,
82
+ "thumbnailWidth": 122
83
+ }
84
+ },
85
+ {
86
+ "kind": "customsearch#result",
87
+ "title": "Hard Rock, Pop, Heavy Metal 1980-",
88
+ "htmlTitle": "Hard Rock, Pop, Heavy Metal 1980-",
89
+ "link": "http://web.bryant.edu/~ehu/h364proj/sprg_98/guidice/1980s/motorhead.JPG",
90
+ "displayLink": "web.bryant.edu",
91
+ "snippet": "of the trio Ian Kilminster",
92
+ "htmlSnippet": "of the trio \u003cb\u003eIan Kilminster\u003c/b\u003e",
93
+ "mime": "image/jpeg",
94
+ "image": {
95
+ "contextLink": "http://web.bryant.edu/~ehu/h364proj/sprg_98/guidice/1980s/1980s.htm",
96
+ "height": 225,
97
+ "width": 302,
98
+ "byteSize": 65145,
99
+ "thumbnailLink": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTWUpDFVdB-40rkzNzSl55MPTzqfKsFE8SxgGMsrn0VPlnc26WaoQiyfgw",
100
+ "thumbnailHeight": 86,
101
+ "thumbnailWidth": 116
102
+ }
103
+ },
104
+ {
105
+ "kind": "customsearch#result",
106
+ "title": "This is my Hollywood!",
107
+ "htmlTitle": "This is my Hollywood!",
108
+ "link": "http://tampasm.tripod.com/Me/lemmy.jpg",
109
+ "displayLink": "tampasm.tripod.com",
110
+ "snippet": "IAN KILMINSTER!",
111
+ "htmlSnippet": "\u003cb\u003eIAN KILMINSTER\u003c/b\u003e!",
112
+ "mime": "image/jpeg",
113
+ "image": {
114
+ "contextLink": "http://tampasm.tripod.com/Me/me.htm",
115
+ "height": 340,
116
+ "width": 315,
117
+ "byteSize": 21970,
118
+ "thumbnailLink": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTfVjkRW3OVVzZq6jRb9aIYG34aiVvX16SvOJz-95TSIr69_zyco7AHuR0",
119
+ "thumbnailHeight": 119,
120
+ "thumbnailWidth": 110
121
+ }
122
+ },
123
+ {
124
+ "kind": "customsearch#result",
125
+ "title": "A-150-1226750-1233004263.jpeg",
126
+ "htmlTitle": "A-150-1226750-1233004263.jpeg",
127
+ "link": "http://s.discogss.com/image/A-150-1226750-1233004263.jpeg",
128
+ "displayLink": "www.discogs.com",
129
+ "snippet": "Ian Fraser Kilmister",
130
+ "htmlSnippet": "\u003cb\u003eIan\u003c/b\u003e Fraser \u003cb\u003eKilmister\u003c/b\u003e",
131
+ "mime": "image/jpeg",
132
+ "image": {
133
+ "contextLink": "http://www.discogs.com/artist/Ian+Fraser+Kilmister",
134
+ "height": 100,
135
+ "width": 150,
136
+ "byteSize": 3869,
137
+ "thumbnailLink": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQfQxt-YGPiiX9CZK2TQEF2Ge1s-9qXoAj7Sp7yYCasLFCeZ0uAdW3xzg",
138
+ "thumbnailHeight": 64,
139
+ "thumbnailWidth": 96
140
+ }
141
+ },
142
+ {
143
+ "kind": "customsearch#result",
144
+ "title": "Fame & Fortune: Jethro Tull's Ian Anderson - Telegraph",
145
+ "htmlTitle": "Fame &amp; Fortune: Jethro Tull&#39;s \u003cb\u003eIan\u003c/b\u003e Anderson - Telegraph",
146
+ "link": "http://i.telegraph.co.uk/multimedia/archive/01470/PF-JethroTull_1470859c.jpg",
147
+ "displayLink": "www.telegraph.co.uk",
148
+ "snippet": "Ian Anderson of Jethro Tull",
149
+ "htmlSnippet": "\u003cb\u003eIan\u003c/b\u003e Anderson of Jethro Tull",
150
+ "mime": "image/jpeg",
151
+ "image": {
152
+ "contextLink": "http://www.telegraph.co.uk/finance/personalfinance/fameandfortune/6102159/Fame-and-Fortune-Jethro-Tulls-Ian-Anderson.html",
153
+ "height": 288,
154
+ "width": 460,
155
+ "byteSize": 25146,
156
+ "thumbnailLink": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTwbZEWgH3YGAN0daw9cTG9LBmVEiA_aFNhK3K50GWDRmzSORZKt6gRocg",
157
+ "thumbnailHeight": 80,
158
+ "thumbnailWidth": 128
159
+ }
160
+ },
161
+ {
162
+ "kind": "customsearch#result",
163
+ "title": "SibLINGSHOT ON THE BLEACHERS: December 2010",
164
+ "htmlTitle": "SibLINGSHOT ON THE BLEACHERS: December 2010",
165
+ "link": "http://3.bp.blogspot.com/_FKxj7S66vU4/TRev6mE7PrI/AAAAAAAAF3E/tuYtW02jMf4/s320/asshole",
166
+ "displayLink": "www.siblingshot.com",
167
+ "snippet": "Written by Ian Kilminster.",
168
+ "htmlSnippet": "Written by \u003cb\u003eIan Kilminster\u003c/b\u003e.",
169
+ "mime": "image/",
170
+ "fileFormat": "Image Document",
171
+ "image": {
172
+ "contextLink": "http://www.siblingshot.com/2010_12_01_archive.html",
173
+ "height": 320,
174
+ "width": 320,
175
+ "byteSize": 28365,
176
+ "thumbnailLink": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSshKEPebT1AUpl65KlNUy-NwYdxl6X3Nk2FRJ4TAJ8abBXC6_bMJVZg6g",
177
+ "thumbnailHeight": 118,
178
+ "thumbnailWidth": 118
179
+ }
180
+ },
181
+ {
182
+ "kind": "customsearch#result",
183
+ "title": "Lemmy bass tabs and techniques",
184
+ "htmlTitle": "Lemmy bass tabs and techniques",
185
+ "link": "http://www.guitarmagazine.co.uk/img_cache/tagged/400/716693b4-2937-11e0-9e31-002215530376.jpg",
186
+ "displayLink": "www.guitarmagazine.co.uk",
187
+ "snippet": "Born Ian Fraser Kilminster",
188
+ "htmlSnippet": "Born \u003cb\u003eIan\u003c/b\u003e Fraser \u003cb\u003eKilminster\u003c/b\u003e",
189
+ "mime": "image/jpeg",
190
+ "image": {
191
+ "contextLink": "http://www.guitarmagazine.co.uk/articles/lemmy-bass-tabs-and-techniques/",
192
+ "height": 574,
193
+ "width": 400,
194
+ "byteSize": 27523,
195
+ "thumbnailLink": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRu7rPpgD_c6F_Dlupouoq1QUic2teJ2fVX1CdHlbbyYPfyy1MJoIPgoZsW",
196
+ "thumbnailHeight": 134,
197
+ "thumbnailWidth": 93
198
+ }
199
+ },
200
+ {
201
+ "kind": "customsearch#result",
202
+ "title": "Experts | Wimborne Food Festival - October 27th & 28th 2012 | A ...",
203
+ "htmlTitle": "Experts | Wimborne Food Festival - October 27th &amp; 28th 2012 | A \u003cb\u003e...\u003c/b\u003e",
204
+ "link": "http://www.wimbornefoodfestival.co.uk/images/expert-ian-gibbs.jpg",
205
+ "displayLink": "www.wimbornefoodfestival.co.uk",
206
+ "snippet": "Ian Gibbs",
207
+ "htmlSnippet": "\u003cb\u003eIan\u003c/b\u003e Gibbs",
208
+ "mime": "image/jpeg",
209
+ "image": {
210
+ "contextLink": "http://www.wimbornefoodfestival.co.uk/experts.php",
211
+ "height": 205,
212
+ "width": 150,
213
+ "byteSize": 18387,
214
+ "thumbnailLink": "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSBraI2afwJXWYLiaUljFpyM-CkkXJr8vULn31Rvp7iUc4CM7HSdySePw",
215
+ "thumbnailHeight": 105,
216
+ "thumbnailWidth": 77
217
+ }
218
+ },
219
+ {
220
+ "kind": "customsearch#result",
221
+ "title": "RockUnited Reviews",
222
+ "htmlTitle": "RockUnited Reviews",
223
+ "link": "http://www.rockunited.com/lemmythemovie.jpg",
224
+ "displayLink": "www.rockunited.com",
225
+ "snippet": "Ian Kilminster, Lemmy to you",
226
+ "htmlSnippet": "\u003cb\u003eIan Kilminster\u003c/b\u003e, Lemmy to you",
227
+ "mime": "image/jpeg",
228
+ "image": {
229
+ "contextLink": "http://www.rockunited.com/reviews2010_10_12.htm",
230
+ "height": 250,
231
+ "width": 175,
232
+ "byteSize": 13393,
233
+ "thumbnailLink": "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSQPkTAdf-vPnZzuK6h0h5ROVB9vUKE5Q53rOYNHp4lYj3FN-R5goSt7g",
234
+ "thumbnailHeight": 111,
235
+ "thumbnailWidth": 78
236
+ }
237
+ }
238
+ ]
239
+ }