rgoogle 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []