diff --git a/README.rdoc b/README.rdoc index 7084955..c8aada6 100644 --- a/README.rdoc +++ b/README.rdoc @@ -33,6 +33,12 @@ require 'yql' yql = Yql::Client.new +====Use OAuth + +yql.consumer_key = 'Your app key' + +yql.consumer_secret = 'Your app secret' + ====Finders * Query builder takes table as mandatory parameter. diff --git a/lib/test.rb b/lib/test.rb new file mode 100644 index 0000000..f4cb790 --- /dev/null +++ b/lib/test.rb @@ -0,0 +1,15 @@ +require './yql.rb' + + +yql = Yql::Client.new +query = Yql::QueryBuilder.new 'yahoo.finance.quotes' +query.select = 'Symbol, Ask' +query.conditions = "symbol IN ('AAPL', 'GOOG')" +yql.query = query +yql.format = 'json' +yql.consumer_key = 'dj0yJmk9Q25kZTN5YXB1dk40JmQ9WVdrOWFIRkRNRE5RTjJzbWNHbzlPREV5TWpZMk1UWXkmcz1jb25zdW1lcnNlY3JldCZ4PTA0' +yql.consumer_secret = '18ec8d573039ae55d1741d74ff054c6887402cc6' + +response = yql.get + +puts response.show \ No newline at end of file diff --git a/lib/yql.rb b/lib/yql.rb index c4ded29..e8ebeb9 100644 --- a/lib/yql.rb +++ b/lib/yql.rb @@ -9,4 +9,6 @@ require 'yql/error.rb' require 'yql/query_builder.rb' require 'yql/response.rb' -require 'yql/client.rb' \ No newline at end of file +require 'yql/client.rb' +require 'oauth' + diff --git a/lib/yql/client.rb b/lib/yql/client.rb index 3fe52b4..cb55ca9 100644 --- a/lib/yql/client.rb +++ b/lib/yql/client.rb @@ -5,6 +5,7 @@ class Client BASE_URL = 'query.yahooapis.com' VERSION = 'v1' URL_SUFFIX = 'public/yql' + OAUTH_SUFFIX = 'yql' YQL_ENV = 'http://datatables.org/alltables.env' attr_accessor :query, :diagnostics @@ -16,6 +17,8 @@ def initialize(args={}) @format = args[:format] || 'xml' @query = args[:query] @verify_ssl = args[:verify_ssl] || true + @consumer_key = args[:consumer_key] || false + @consumer_secret = args[:consumer_secret] || false raise_when_invalid_format(format) end @@ -28,18 +31,40 @@ def query @query.kind_of?(Yql::QueryBuilder) ? @query.to_s : @query end + def consumer_key=(consumer_key) + @consumer_key = consumer_key + end + + def consumer_secret=(consumer_secret) + @consumer_secret = consumer_secret + end + def path_without_domain "/#{version}/#{URL_SUFFIX}" end + def oauth_path_without_domain + "/#{version}/#{OAUTH_SUFFIX}" + end + + def get if query.nil? raise Yql::IncompleteRequestParameter, "You must set the query attribute for the Yql::Client object before sending the request" end - http = Net::HTTP.new(BASE_URL, Net::HTTP.https_default_port) - http.use_ssl = true - http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @verify_ssl - Yql::Response.new(http.post(path_without_domain, parameters), format) + if (@consumer_key and @consumer_secret) + # With OAuth + consumer = OAuth::Consumer.new(@consumer_key, @consumer_secret, :site => "http://#{BASE_URL}") + access_token = OAuth::AccessToken.new(consumer) + response = access_token.request(:get, "#{oauth_path_without_domain}?#{parameters}") + Yql::Response.new(response, format) + else + # No OAuth + http = Net::HTTP.new(BASE_URL, Net::HTTP.https_default_port) + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @verify_ssl + Yql::Response.new(http.post(path_without_domain, parameters), format) + end end def valid_format?(format) diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..701764d --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,2 @@ +file.reference.yql-lib=/Users/rafael/yql/lib +file.reference.yql-spec=/Users/rafael/yql/spec diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..c1f155a --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..a663ce4 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,7 @@ +file.reference.yql-lib=lib +file.reference.yql-spec=spec +main.file= +platform.active=Ruby_1 +source.encoding=UTF-8 +spec.dir=${file.reference.yql-spec} +src.dir=${file.reference.yql-lib} diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..afa6b57 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,14 @@ + + + org.netbeans.modules.ruby.rubyproject + + + yql + + + + + + + + diff --git a/yql-0.0.2.gem b/yql-0.0.2.gem new file mode 100644 index 0000000..12546ad Binary files /dev/null and b/yql-0.0.2.gem differ diff --git a/yql.gemspec b/yql.gemspec index 15ecd5a..8d4caf1 100644 --- a/yql.gemspec +++ b/yql.gemspec @@ -17,7 +17,7 @@ Gem::Specification.new do |s| "lib/yql/client.rb", "lib/yql/query_builder.rb", ] - s.has_rdoc = true + #s.has_rdoc = true s.homepage = %q{http://github.com/nas/yql} s.rdoc_options = ["--charset=UTF-8"] s.require_paths = ["lib"]