From 8c969979de8ab0a6a9a96aacf5ea876e046f50f7 Mon Sep 17 00:00:00 2001 From: Rafael Perez Date: Tue, 6 Dec 2011 22:20:18 +0900 Subject: [PATCH 1/3] Added OAuth functionality --- lib/yql.rb | 4 +++- lib/yql/client.rb | 33 +++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) 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) From b490f6d8dd55423185eb54f8302af8622b23b6c4 Mon Sep 17 00:00:00 2001 From: Rafael Perez Date: Tue, 6 Dec 2011 22:22:55 +0900 Subject: [PATCH 2/3] Added OAuth intructions --- README.rdoc | 6 ++++++ 1 file changed, 6 insertions(+) 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. From a3557e44f422b17f4ac736fa99f012470ced84c5 Mon Sep 17 00:00:00 2001 From: Rafael Perez Date: Fri, 16 Dec 2011 02:01:51 +0900 Subject: [PATCH 3/3] Deleted has_rdoc --- lib/test.rb | 15 +++++++++++++++ nbproject/private/private.properties | 2 ++ nbproject/private/private.xml | 4 ++++ nbproject/project.properties | 7 +++++++ nbproject/project.xml | 14 ++++++++++++++ yql-0.0.2.gem | Bin 0 -> 7680 bytes yql.gemspec | 2 +- 7 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 lib/test.rb create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 yql-0.0.2.gem 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/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 0000000000000000000000000000000000000000..12546ad05756d78d25250b4b94f194cd81185f19 GIT binary patch literal 7680 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 uvcb^z3#`W9?pB|>`25FQ+1~