rgoogle 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.
Files changed (3) hide show
  1. data/lib/result.rb +10 -0
  2. data/lib/rgoogle.rb +57 -0
  3. metadata +46 -0
@@ -0,0 +1,10 @@
1
+ class Result
2
+ attr_accessor :title, :abstract, :url, :date
3
+
4
+ def initialize(options)
5
+ options.each do |key, value|
6
+ self.send("#{key}=", value)
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,57 @@
1
+ require 'cgi'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'result'
5
+ require 'uri'
6
+
7
+ class RGoogle
8
+ # API to Google's AJAX search API
9
+ #
10
+ # Example:
11
+ # >> RGoogle.new('[API KEY]', '[Referer]').search('helioid')
12
+ # => [ #<Result:...>, ... ]
13
+ #
14
+ # Arguments:
15
+ # key: (String)
16
+ # referer: (String)
17
+
18
+ NUM_RESULTS_PER_PAGE = 8
19
+ PAGES = 6 # max 8
20
+ API_PATH = "http://ajax.googleapis.com/ajax/services/search/web"
21
+ API_URI = URI.parse(API_PATH)
22
+
23
+ attr_accessor :key, :referer
24
+
25
+ def initialize(key, referer)
26
+ @key = key
27
+ @referer = referer
28
+ end
29
+
30
+ def search(query)
31
+ api = API_URI
32
+ results = []
33
+ params = "?v=1.0&key=#{@key}&q=#{CGI.escape(query)}&rsz=large&start="
34
+ threads = []
35
+ date = Time.now
36
+
37
+ 1.upto(PAGES) do |start|
38
+ threads << Thread.new(start) do |_start|
39
+ data = "#{params}#{(_start - 1) * NUM_RESULTS_PER_PAGE}"
40
+ apicall = Net::HTTP.new(api.host)
41
+ response = apicall.get2(api.path + data, { 'Referer' => @referer })
42
+ response = JSON.parse(response.body)
43
+ results += response["responseData"]["results"].map do |result|
44
+ Result.new({
45
+ :title => result["titleNoFormatting"],
46
+ :abstract => result["content"],
47
+ :url => result["unescapedUrl"],
48
+ :date => date
49
+ })
50
+ end
51
+ end
52
+ end
53
+ threads.each { |thread| thread.join }
54
+ results
55
+ end
56
+ end
57
+
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rgoogle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Peter Lubell-Doughtie
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-26 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: API for Google AJAX search
15
+ email: peter@helioid.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/rgoogle.rb
21
+ - lib/result.rb
22
+ homepage: http://rubygems.org/gems/rgoogle
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.13
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: API for Google AJAX search
46
+ test_files: []