googleajax 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{googleajax}
8
+ s.version = "1.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["geemus(Wesley Beary)", "Marc-Andre Lafortune"]
12
+ s.date = %q{2010-03-01}
13
+ s.email = %q{me@geemus.com}
14
+ s.extra_rdoc_files = [
15
+ "README.txt"
16
+ ]
17
+ s.files = [
18
+ ".gitignore",
19
+ "History.txt",
20
+ "README.txt",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "googleajax.gemspec",
24
+ "lib/googleajax.rb",
25
+ "lib/googleajax/api.rb",
26
+ "lib/googleajax/as_hash.rb",
27
+ "lib/googleajax/as_open_struct.rb",
28
+ "lib/googleajax/base.rb",
29
+ "lib/googleajax/basic.rb",
30
+ "lib/googleajax/extensions/hash.rb",
31
+ "lib/googleajax/extensions/kernel.rb",
32
+ "lib/googleajax/extensions/string.rb",
33
+ "lib/googleajax/feed.rb",
34
+ "lib/googleajax/filters.rb",
35
+ "lib/googleajax/hash.rb",
36
+ "lib/googleajax/language.rb",
37
+ "lib/googleajax/request.rb",
38
+ "lib/googleajax/results.rb",
39
+ "lib/googleajax/search.rb",
40
+ "spec/googleajax_as_open_struct_spec.rb",
41
+ "spec/googleajax_basic_spec.rb",
42
+ "spec/googleajax_common.rb",
43
+ "spec/googleajax_spec.rb",
44
+ "spec/spec.opts",
45
+ "spec/spec_helper.rb"
46
+ ]
47
+ s.homepage = %q{http://github.com/geemus/googleajax}
48
+ s.rdoc_options = ["--charset=UTF-8"]
49
+ s.require_paths = ["lib"]
50
+ s.rubygems_version = %q{1.3.5}
51
+ s.summary = %q{Ruby wrapper to the Google AJAX API REST interfaces(Feeds, Language and Search).}
52
+ s.test_files = [
53
+ "spec/googleajax_as_open_struct_spec.rb",
54
+ "spec/googleajax_basic_spec.rb",
55
+ "spec/googleajax_common.rb",
56
+ "spec/googleajax_spec.rb",
57
+ "spec/spec_helper.rb",
58
+ "spec/temp_spec.rb"
59
+ ]
60
+
61
+ if s.respond_to? :specification_version then
62
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
63
+ s.specification_version = 3
64
+
65
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
66
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
67
+ s.add_runtime_dependency(%q<json>, [">= 1.0.0"])
68
+ else
69
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
70
+ s.add_dependency(%q<json>, [">= 1.0.0"])
71
+ end
72
+ else
73
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
74
+ s.add_dependency(%q<json>, [">= 1.0.0"])
75
+ end
76
+ end
77
+
@@ -1,6 +1,5 @@
1
+ require 'net/http'
1
2
  require 'cgi'
2
- require 'open-uri'
3
- require 'rubygems'
4
3
  require 'json' unless defined?(Rails)
5
4
 
6
5
  # The following extensions are standard in either Ruby 1.8.7, 1.9 or rails:
@@ -26,7 +26,11 @@ module GoogleAjax
26
26
  Filters::Recursive.remap(data, self)
27
27
  end
28
28
 
29
+ LOOKS_LIKE_HTML = /\w*<html>/i
29
30
  def parse(data)
31
+ if data =~ LOOKS_LIKE_HTML
32
+ raise StandardError, /<title>(.*)<\/title>/.match(data)[1]
33
+ end
30
34
  if defined? Rails
31
35
  ActiveSupport::JSON::decode(data)
32
36
  else
@@ -44,6 +44,7 @@ module GoogleAjax
44
44
  TRUE_OR_FALSE = /^true|(false)$/i
45
45
  INTEGER = /^\d+$/
46
46
  FLOAT = /^\d+\.\d+$/
47
+ TIME = /^[A-Z][a-z]{2}, \d\d [A-Z][a-z]{2} \d{4} \d\d:\d\d:\d\d \S*$/ # Very strict date format
47
48
  def initialize(h)
48
49
  h.each do |key, value|
49
50
  # Won't use Integer.try_convert for 1.8.6 & 7 compatibility
@@ -54,6 +55,9 @@ module GoogleAjax
54
55
  h[key] = value.to_f
55
56
  when TRUE_OR_FALSE
56
57
  h[key] = Regexp.last_match[1].nil?
58
+ when TIME
59
+ require 'time'
60
+ h[key] = Time.parse(value)
57
61
  end
58
62
  end
59
63
  super(h)
@@ -14,9 +14,17 @@ module GoogleAjax
14
14
  # source and destination can be the language code ("en") or a symbol (:english).
15
15
  # source can also be an empty string, in which case Google does an auto-detection and
16
16
  # will set :detected_source_language to the language it used as a source.
17
+ #
18
+ # Google limits GET request to 2000 chars, but allows POST for the translate request
19
+ # so we use this to allow texts up to 5000 chars (another limit imposed by Google).
20
+ #
21
+ # TODO: Give easy way to shorten text downto the acceptable limit.
17
22
  def self.translate(query, source, destination, args = {})
18
- langpair = [source, destination].map{|l| LANGUAGE_CODE[l] || l.to_s}.join("%7C")
19
- args = { :langpair => langpair }.merge(args)
23
+ langpair = [source, destination].map{|l| LANGUAGE_CODE[l] || l.to_s}.join("|")
24
+ args = {
25
+ :langpair => langpair,
26
+ :http_method => :post
27
+ }.merge(args)
20
28
  get(:translate, query, args)
21
29
  end
22
30
 
@@ -1,21 +1,29 @@
1
1
  module GoogleAjax
2
2
  module Request
3
- API_BASE = 'http://ajax.googleapis.com/ajax/services/'
4
-
3
+ HOST = 'ajax.googleapis.com'
4
+ PATH_PREFIX = "/ajax/services/"
5
5
  attr_accessor :api_key
6
6
  attr_accessor :referer
7
7
  alias_method :referrer, :referer # See mispelling section in http://en.wikipedia.org/wiki/HTTP_referrer
8
8
  alias_method :referrer=, :referer=
9
9
 
10
10
  # Api doc is at http://code.google.com/apis/ajaxsearch/documentation/reference.html#_intro_fonje
11
+ # We use one special option (not forwarded to google): :html_method => :post will use a Post instead of a Get.
11
12
  def get(api, method, query, args = nil)
12
13
  raise "You must assign a value to GoogleAjax.referer" unless referer
13
- url = "#{API_BASE}#{api}/"
14
- url += "#{method}?"
15
- url += "&q=#{CGI::escape(query)}"
16
- url += "&key=#{api_key}" if api_key
17
- url += "&" + args.collect {|key, value| "#{key}=#{value}"}.join('&') unless args.nil? || args.empty?
18
- open(url, "Referer" => referer).read
14
+ args ||= {}
15
+ use_post = args.delete(:http_method) == :post
16
+ args = args.merge!('q' => query)
17
+ args['key'] = api_key if api_key
18
+ if use_post
19
+ request = Net::HTTP::Post.new("#{PATH_PREFIX}#{api}/#{method}", "Referer" => referer)
20
+ request.set_form_data(args)
21
+ else
22
+ request = Net::HTTP::Get.new("#{PATH_PREFIX}#{api}/#{method}?" + args.map{|k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join("&"), "Referer" => referer)
23
+ end
24
+ Net::HTTP.new(HOST).start do |http|
25
+ http.request(request).body
26
+ end
19
27
  end
20
28
  end
21
- end
29
+ end
@@ -34,6 +34,7 @@ module GoogleAjax
34
34
  # :call-seq:
35
35
  # news(query, args = {})
36
36
  # Arguments: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_news
37
+ # Contrary to the doc, scoring=d is not an acceptable parameter (nor is scoring=date)
37
38
 
38
39
  ##
39
40
  # :call-seq:
@@ -17,6 +17,20 @@ shared_examples_for "GoogleAjax" do
17
17
  end
18
18
  end
19
19
 
20
+ describe ".news" do
21
+ before :each do
22
+ GoogleAjax.referer = "http://example.com"
23
+ end
24
+
25
+ it "returns fresh news" do
26
+ one_day = 24 * 60 * 60
27
+ yesterday = Time.now - one_day
28
+ results = GoogleAjax::Search.news("", :topic => :h)[:results]
29
+ results.size.should >= 4
30
+ results.all?{|r| r[:published_date].should >= yesterday}
31
+ end
32
+ end
33
+
20
34
  {
21
35
  :blogs => 100_000,
22
36
  :books => 10_000,
@@ -65,6 +79,10 @@ shared_examples_for "GoogleAjax" do
65
79
  it "does an approximate translation" do
66
80
  GoogleAjax::Language.translate("Ruby rocks", "en", "fr")[:translated_text].should == "Ruby roches"
67
81
  end
82
+
83
+ it "translates texts longer than the 2k limit on get requets" do
84
+ GoogleAjax::Language.translate("Ruby rocks. "*250, "en", "fr")[:translated_text].count("Ruby").should == 1000
85
+ end
68
86
  end
69
87
  end
70
88
 
@@ -77,7 +95,7 @@ shared_examples_for "GoogleAjax" do
77
95
  it "returns the right feeds" do
78
96
  feeds = GoogleAjax::Feed.find("Ruby")
79
97
  feeds.size.should == 10
80
- feeds.any?{|result| result[:url] == "http://ruby-lang.org/en/feeds/news.rss"}.should be_true
98
+ feeds.map{|f| f[:url]}.should include "http://www.ruby-lang.org/en/feeds/news.rss"
81
99
  end
82
100
  end
83
101
 
@@ -0,0 +1,9 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/googleajax')
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+
4
+ describe "GoogleAjax (temp)" do
5
+ it "returns results as a hash" do
6
+ GoogleAjax.referer = "http://example.com"
7
+ GoogleAjax::Language.translate("Ruby rocks", "en", "fr").should == "Ruby roches"
8
+ end
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googleajax
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - geemus(Wesley Beary)
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-24 00:00:00 -08:00
13
+ date: 2010-03-01 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -42,10 +42,12 @@ extensions: []
42
42
  extra_rdoc_files:
43
43
  - README.txt
44
44
  files:
45
+ - .gitignore
45
46
  - History.txt
46
47
  - README.txt
47
48
  - Rakefile
48
49
  - VERSION
50
+ - googleajax.gemspec
49
51
  - lib/googleajax.rb
50
52
  - lib/googleajax/api.rb
51
53
  - lib/googleajax/as_hash.rb
@@ -102,3 +104,4 @@ test_files:
102
104
  - spec/googleajax_common.rb
103
105
  - spec/googleajax_spec.rb
104
106
  - spec/spec_helper.rb
107
+ - spec/temp_spec.rb