monkeyhelper-muddyit_fu 0.1.0 → 0.1.1

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.
data/CHANGELOG CHANGED
@@ -1,5 +1,11 @@
1
1
  muddyit_fu Changelog
2
2
 
3
+ 0.2.1
4
+ - Updated to reflect new api
5
+
6
+ 0.2.0
7
+ - Added new oauth style authentication method
8
+
3
9
  0.1.0
4
10
  - Moved to using Jeweller for gem management, should fix previously empty gems
5
11
 
data/README.rdoc CHANGED
@@ -1,20 +1,38 @@
1
- = muddyit-fu
1
+ = muddyit_fu
2
+
3
+ == Installation
4
+
5
+ sudo gem install muddyit-fu
2
6
 
3
7
  == Getting started
4
8
 
5
- You need to first get an account a muddy.it and create a site to hold content.
9
+ muddy.it uses oauth to manage it's api access. To access the muddy.it data
10
+ programmatically you will need to register an application. Login and visit :
6
11
 
7
- == Installation
12
+ http://www.muddy.it/oauth_clients/
13
+
14
+ You can register an application here, a callback URI isn't required.
15
+
16
+ The 'consumer token' and 'consumer secret' are used to generate a token for
17
+ accessing muddy.it. For further details and an example of how to programatically
18
+ generate a new access token for muddy.it see here :
8
19
 
9
- sudo gem install muddyit-fu
20
+ http://stakeventures.com/articles/2008/02/23/developing-oauth-clients-in-ruby
21
+
22
+ See the 'Authorising clients using irb' section for a sample irb session.
23
+
24
+ These details are then used to provide access to the service. The credentials
25
+ can be stored in a yml file, an example of which is provided below.
10
26
 
11
27
  == Example muddyit.yml
12
28
 
13
- ---
14
- access_key_id: "YOUR KEY"
15
- secret_access_key: "YOUR SECRET"
29
+ ---
30
+ consumer_key: "YOUR_CONSUMER_KEY"
31
+ consumer_secret: "YOUR_CONSUMER_SECRET"
32
+ access_token: "YOUR_ACCESS_TOKEN"
33
+ access_token_secret: "YOUR_ACCESS_TOKEN_SECRET"
16
34
 
17
- == Sites example
35
+ == Retrieving a site
18
36
 
19
37
  require 'muddyit_fu'
20
38
  muddyit = Muddyit.new('muddyit.yml')
@@ -27,13 +45,15 @@ secret_access_key: "YOUR SECRET"
27
45
  require 'muddyit_fu'
28
46
  muddyit = Muddyit.new('muddyit.yml')
29
47
  site = muddyit.sites.first
30
- site.pages.categorise(:identifier => 'http://news.bbc.co.uk/1/hi/uk_politics/8011321.stm')
48
+ site.pages.categorise({:identifier => 'http://news.bbc.co.uk/1/hi/uk_politics/8011321.stm'}, {:minium_confidence => 0.2})
31
49
 
32
50
  == View categorised pages
33
51
 
34
52
  require 'muddyit_fu'
35
- muddyit = Muddyit.new(:access_key_id => 'aaaaaaaaaaaaaa',
36
- :secret_access_key => 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
53
+ muddyit = Muddyit.new(:consumer_key => 'aaa',
54
+ :consumer_secret => 'bbb',
55
+ :access_token => 'ccc',
56
+ :access_token_secret => 'ddd')
37
57
  site = muddyit.sites.first
38
58
  site.pages.index do |page|
39
59
  puts page.content_data.title
@@ -45,8 +65,7 @@ secret_access_key: "YOUR SECRET"
45
65
  == View all pages containing 'Gordon Brown'
46
66
 
47
67
  require 'muddyit_fu'
48
- muddyit = Muddyit.new(:access_key_id => 'aaaaaaaaaaaaaa',
49
- :secret_access_key => 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
68
+ muddyit = Muddyit.new('muddyit.yml')
50
69
  site = muddyit.sites.first
51
70
  site.pages.find_by_entity('http://dbpedia.org/resource/Gordon_Brown') do |page|
52
71
  puts page.identifier
@@ -55,8 +74,7 @@ secret_access_key: "YOUR SECRET"
55
74
  == Find related entities for 'Gordon Brown'
56
75
 
57
76
  require 'muddyit_fu'
58
- muddyit = Muddyit.new(:access_key_id => 'aaaaaaaaaaaaaa',
59
- :secret_access_key => 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
77
+ muddyit = Muddyit.new('muddyit.yml')
60
78
  site = muddyit.sites.first
61
79
  site.pages.related_entities('http://dbpedia.org/resource/Gordon_Brown').each do |entity|
62
80
  puts "#{entity.uri} : #{entity.confidence}"
@@ -65,8 +83,7 @@ secret_access_key: "YOUR SECRET"
65
83
  == Find related content for : http://news.bbc.co.uk/1/hi/uk_politics/7878418.stm
66
84
 
67
85
  require 'muddyit_fu'
68
- muddyit = Muddyit.new(:access_key_id => 'aaaaaaaaaaaaaa',
69
- :secret_access_key => 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
86
+ muddyit = Muddyit.new('muddyit.yml')
70
87
  site = muddyit.sites.first
71
88
  page = site.pages.find('http://news.bbc.co.uk/1/hi/uk_politics/7878418.stm')
72
89
  puts "Our page : #{page.content_data.title}\n\n"
@@ -74,6 +91,56 @@ secret_access_key: "YOUR SECRET"
74
91
  puts "#{results[:page].content_data.title} #{results[:count]}"
75
92
  end
76
93
 
94
+ == Authorising clients using irb
95
+
96
+ robl@fry:~/$ irb
97
+ irb(main):002:0> require 'rubygems'
98
+ => true
99
+ irb(main):003:0> require 'oauth'
100
+ => true
101
+ irb(main):004:0> require 'oauth/consumer'
102
+ => false
103
+ irb(main):005:0> @consumer=OAuth::Consumer.new "yourtoken", "yoursecret", {:site => 'http://www.muddy.it' }
104
+ => #<OAuth::Consumer:0xb7683b7c @key="yourtoken", @secret="yoursecret", @options={:oauth_version=>"1.0",
105
+ :signature_method=>"HMAC-SHA1", :request_token_path=>"/oauth/request_token",
106
+ :site=>"http://www.muddy.it", :scheme=>:header,
107
+ :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token",
108
+ :http_method=>:post}>
109
+ irb(main):006:0> @request_token=@consumer.get_request_token
110
+ => #<OAuth::RequestToken:0xb76778e0 @consumer=#<OAuth::Consumer:0xb7683b7c @key="tokenkey",
111
+ @http=#<Net::HTTP www.muddy.it:80 open=false>, @http_method=:post,
112
+ @secret="tokensecret", @options={:oauth_version=>"1.0", :signature_method=>"HMAC-SHA1",
113
+ :request_token_path=>"/oauth/request_token", :site=>"http://www.muddy.it",
114
+ :scheme=>:header, :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token",
115
+ :http_method=>:post}>, @token="tokenkey", @secret="tokensecret">
116
+ irb(main):007:0> @request_token.authorize_url
117
+ => "http://www.muddy.it/oauth/authorize?oauth_token=tokenkey"
118
+
119
+ To authorise the application, visit the URL, check the 'authorize access' box and
120
+ save. The request token can now be exchanged for an access token :
121
+
122
+ irb(main):008:0> @access_token=@request_token.get_access_token
123
+ => #<OAuth::AccessToken:0xb7667c10 @consumer=#<OAuth::Consumer:0xb7683b7c @key="accesstoken_key",
124
+ @http=#<Net::HTTP www.muddy.it:80 open=false>, @http_method=:post,
125
+ @secret="accesstoken_secret", @options={:oauth_version=>"1.0",
126
+ :signature_method=>"HMAC-SHA1", :request_token_path=>"/oauth/request_token",
127
+ :site=>"http://www.muddy.it", :scheme=>:header, :authorize_path=>"/oauth/authorize",
128
+ :access_token_path=>"/oauth/access_token", :http_method=>:post}>, @token="accesstoken",
129
+ @secret="accesstoken_secret">
130
+
131
+ This token can also be used to access the service :
132
+
133
+ irb(main):016:0> res = @access_token.get "/sites.json"
134
+ => #<Net::HTTPOK 200 OK readbody=true>
135
+ irb(main):017:0> res.body
136
+ ....
137
+
138
+ The access token credentials to be used with muddyit_fu are :
139
+
140
+ irb(main):011:0> @access_token.token
141
+ => "sometoken"
142
+ irb(main):012:0> @access_token.secret
143
+ => "somesecret"
77
144
 
78
145
  == Contact
79
146
 
data/Rakefile CHANGED
@@ -9,6 +9,9 @@ begin
9
9
  gem.email = "robl[at]monkeyhelper.com"
10
10
  gem.homepage = "http://github.com/monkeyhelper/muddyit_fu"
11
11
  gem.authors = ["robl"]
12
+ gem.add_dependency('json', '>= 0.0.0')
13
+ gem.add_dependency('oauth', '>= 0.0.0')
14
+
12
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
16
  end
14
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/muddyit/base.rb CHANGED
@@ -8,12 +8,12 @@ module Muddyit
8
8
  class_attr_accessor :http_open_timeout
9
9
  class_attr_accessor :http_read_timeout
10
10
  attr_accessor :rest_endpoint
11
- attr_reader :access_key_id, :secret_access_key
11
+ attr_reader :consumer_key, :consumer_secret, :access_token, :access_token_secret
12
12
 
13
- @@http_open_timeout = 60
14
- @@http_read_timeout = 60
13
+ @@http_open_timeout = 120
14
+ @@http_read_timeout = 120
15
15
 
16
- REST_ENDPOINT = 'http://www.muddy.it/api'
16
+ REST_ENDPOINT = 'http://www.muddy.it'
17
17
 
18
18
  # Set the request signing method
19
19
  @@digest1 = OpenSSL::Digest::Digest.new("sha1")
@@ -26,10 +26,14 @@ module Muddyit
26
26
  #
27
27
  # You can either pass a hash with the following attributes:
28
28
  #
29
- # * :access_key_id (Required)
30
- # the access key id
31
- # * :secret_access_key (Required)
32
- # the secret access key
29
+ # * :consumer_key (Required)
30
+ # the consumer key
31
+ # * :consumer_secret (Required)
32
+ # the consumer secret
33
+ # * :access_token (Required)
34
+ # the token
35
+ # * :access_token_secret (Required)
36
+ # the token secret
33
37
  # * :rest_endpoint (Optional)
34
38
  # the muddy.it rest service endpoint
35
39
  # or:
@@ -38,24 +42,34 @@ module Muddyit
38
42
  #
39
43
  # Config Example (yaml file)
40
44
  # ---
41
- # access_key_id: YOUR_ACCESS_KEY_ID
42
- # secret_access_key: YOUR_SECRET_ACCESS_KEY
45
+ # consumer_key: AAA
46
+ # consumer_secret: BBB
47
+ # access_token: CCC
48
+ # access_token_secret: DDD
43
49
  #
44
50
  def initialize(config_hash_or_file)
45
51
  if config_hash_or_file.is_a? Hash
46
52
  config_hash_or_file.nested_symbolize_keys!
47
- @access_key_id = config_hash_or_file[:access_key_id]
48
- @secret_access_key = config_hash_or_file[:secret_access_key]
53
+ @consumer_key = config_hash_or_file[:consumer_key]
54
+ @consumer_secret = config_hash_or_file[:consumer_secret]
55
+ @access_token = config_hash_or_file[:access_token]
56
+ @access_token_secret = config_hash_or_file[:access_token_secret]
49
57
  @rest_endpoint = config_hash_or_file.has_key?(:rest_endpoint) ? config_hash_or_file[:rest_endpoint] : REST_ENDPOINT
50
- raise 'config_hash must contain access_key_id and secret_access_key' unless @access_key_id and @secret_access_key
58
+ raise 'config_hash must contain consumer_key and consumer_secret' unless @consumer_key and @consumer_secret
51
59
  else
52
60
  config = YAML.load_file(config_hash_or_file)
53
61
  config.nested_symbolize_keys!
54
- @access_key_id = config[:access_key_id]
55
- @secret_access_key = config[:secret_access_key]
62
+ @consumer_key = config[:consumer_key]
63
+ @consumer_secret = config[:consumer_secret]
64
+ @access_token = config[:access_token]
65
+ @access_token_secret = config[:access_token_secret]
56
66
  @rest_endpoint = config.has_key?(:rest_endpoint) ? config[:rest_endpoint] : REST_ENDPOINT
57
- raise 'config file must contain access_key_id and secret_access_key' unless @access_key_id and @secret_access_key
67
+ raise 'config file must contain consumer_key and consumer_secret' unless @consumer_key and @consumer_secret
58
68
  end
69
+
70
+ @consumer = OAuth::Consumer.new(@consumer_key, @consumer_secret, {:site=>@rest_endpoint})
71
+ @accesstoken = OAuth::AccessToken.new(@consumer, @access_token, @access_token_secret)
72
+
59
73
  end
60
74
 
61
75
  # sends a request to the muddyit REST api
@@ -68,13 +82,12 @@ module Muddyit
68
82
  # * options (Optional)
69
83
  # hash of query parameters, you do not need to include access_key_id, secret_access_key because these are added automatically
70
84
  #
71
- def send_request(api_url, http_method = :get, options= {})
85
+ def send_request(api_url, http_method = :get, opts = {}, body = nil)
72
86
 
73
87
  raise 'no api_url supplied' unless api_url
74
-
75
- res = request_over_http(api_url, http_method, options)
88
+ res = request_over_http(api_url, http_method, opts, body)
76
89
  # Strip any js wrapping methods
77
- #puts res.body
90
+
78
91
  if res.body =~ /^.+\((.+)\)$/
79
92
  r = JSON.parse($1)
80
93
  else
@@ -91,94 +104,26 @@ module Muddyit
91
104
  protected
92
105
 
93
106
  # For easier testing. You can mock this method with a XML file you re expecting to receive
94
- def request_over_http(api_url, http_method, options)
107
+ def request_over_http(api_url, http_method, opts, body)
95
108
 
96
- req = nil
97
- http_opts = { "Accept" => "application/json", "User-Agent" => "muddyit_fu" }
98
- url = URI.parse(api_url)
109
+ http_opts = { "Accept" => "application/json", "Content-Type" => "application/json", "User-Agent" => "muddyit_fu" }
110
+ query_string = opts.to_a.map {|x| x.join("=")}.join("&")
99
111
 
100
112
  case http_method
101
113
  when :get
102
- u = url.query.nil? ? url.path : url.path+"?"+url.query
103
- req = Net::HTTP::Get.new(u, http_opts)
114
+ url = opts.empty? ? api_url : "#{api_url}?#{query_string}"
115
+ @accesstoken.get(url, http_opts)
104
116
  when :post
105
- req = Net::HTTP::Post.new(url.path, http_opts)
117
+ @accesstoken.post(api_url, body, http_opts)
106
118
  when :put
107
- req = Net::HTTP::Put.new(url.path, http_opts)
119
+ @accesstoken.put(api_url, body, http_opts)
108
120
  when :delete
109
- req = Net::HTTP::Delete.new(url.path, http_opts)
121
+ @accesstoken.delete(api_url, http_opts)
110
122
  else
111
123
  raise 'invalid http method specified'
112
124
  end
113
-
114
- options = calculate_signature(http_method, url.path, options)
115
- req.set_form_data(options) unless options.keys.empty?
116
- #req.basic_auth @username, @password
117
-
118
- http = Net::HTTP.new(url.host, url.port)
119
- http.open_timeout = @@http_open_timeout
120
- http.read_timeout = @@http_read_timeout
121
- http.start do |http|
122
- res = http.request(req)
123
- case res
124
- when Net::HTTPSuccess
125
- return res
126
- else
127
- raise Muddyit::Errors.error_for(res.code, 'HTTP Error')
128
- end
129
- end
130
125
 
131
126
  end
132
127
 
133
- # aws request signature methods, taken from http://rightscale.rubyforge.org/right_aws_gem_doc
134
-
135
- def calculate_signature(http_verb, url, options)
136
- endpoint = URI.parse(@rest_endpoint)
137
- options.nested_stringify_keys!
138
- options.delete('Signature')
139
- options['AccessKeyId'] = @access_key_id
140
- options['Signature'] = sign_request_v2(@secret_access_key, options, http_verb.to_s, endpoint.host, url)
141
-
142
- return options
143
- end
144
-
145
- def signed_service_params(aws_secret_access_key, service_hash, http_verb, host, uri)
146
- sign_request_v2(aws_secret_access_key, service_hash, http_verb, host, uri)
147
- end
148
-
149
- def sign_request_v2(aws_secret_access_key, service_hash, http_verb, host, uri)
150
- fix_service_params(service_hash, '2')
151
- # select a signing method (make an old openssl working with sha1)
152
- # make 'HmacSHA256' to be a default one
153
- service_hash['SignatureMethod'] = 'HmacSHA256' unless ['HmacSHA256', 'HmacSHA1'].include?(service_hash['SignatureMethod'])
154
- service_hash['SignatureMethod'] = 'HmacSHA1' unless @@digest256
155
- # select a digest
156
- digest = (service_hash['SignatureMethod'] == 'HmacSHA256' ? @@digest256 : @@digest1)
157
- # form string to sign
158
- canonical_string = service_hash.keys.sort.map do |key|
159
- "#{amz_escape(key)}=#{amz_escape(service_hash[key])}"
160
- end.join('&')
161
- string_to_sign = "#{http_verb.to_s.upcase}\n#{host.downcase}\n#{uri}\n#{canonical_string}"
162
-
163
- # sign the string
164
- amz_escape(Base64.encode64(OpenSSL::HMAC.digest(digest, aws_secret_access_key, string_to_sign)).strip)
165
- end
166
-
167
- # Set a timestamp and a signature version
168
- def fix_service_params(service_hash, signature)
169
- service_hash["Timestamp"] ||= Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S.000Z") unless service_hash["Expires"]
170
- service_hash["SignatureVersion"] = signature
171
- service_hash
172
- end
173
-
174
- # Escape a string accordingly Amazon rulles
175
- # http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/index.html?REST_RESTAuth.html
176
- def amz_escape(param)
177
- param.to_s.gsub(/([^a-zA-Z0-9._~-]+)/n) do
178
- '%' + $1.unpack('H2' * $1.size).join('%').upcase
179
- end
180
- end
181
-
182
-
183
128
  end
184
129
  end
@@ -10,7 +10,7 @@ class Muddyit::Entity < Muddyit::Generic
10
10
 
11
11
  protected
12
12
  def fetch
13
- api_url = "#{@muddyit.rest_endpoint}/entities/#{URI.escape(CGI.escape(@attributes[:uri]),'.')}"
13
+ api_url = "/entities/#{URI.escape(CGI.escape(@attributes[:uri]),'.')}"
14
14
  response = @muddyit.send_request(api_url, :get)
15
15
  response.nested_symbolize_keys!
16
16
  end
data/lib/muddyit/page.rb CHANGED
@@ -12,23 +12,15 @@ class Muddyit::Sites::Site::Page < Muddyit::Generic
12
12
  # Params
13
13
  # * options (Required)
14
14
  #
15
- def refresh(options)
15
+ def refresh(options = {})
16
16
 
17
17
  # Ensure we get content_data as well
18
- options[:include_content] = true unless options.has_key?(:include_content)
18
+ options[:include_content] = true
19
19
 
20
- # Set the URI if not set
21
- options[:uri] = options[:identifier] if options.has_key?(:identifier) && !options.has_key?(:uri) && !options.has_key?(:text)
20
+ body = { :page => { :uri => self.uri }, :options => options }
22
21
 
23
- # Ensure we have encoded the identifier and URI
24
- if options.has_key?(:uri)
25
- options[:uri] = URI.escape(CGI.escape(options[:uri]),'.')
26
- elsif options.has_key?(:identifier)
27
- options[:identifier] = URI.escape(CGI.escape(options[:identifier]),'.')
28
- end
29
-
30
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}/refresh"
31
- response = @muddyit.send_request(api_url, :post, options)
22
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(self.identifier),'.')}"
23
+ response = @muddyit.send_request(api_url, :put, {}, body.to_json)
32
24
  return Muddyit::Sites::Site::Page.new(@muddyit, response.merge!(:site => self.site))
33
25
  end
34
26
 
@@ -51,7 +43,7 @@ class Muddyit::Sites::Site::Page < Muddyit::Generic
51
43
  # delete the page
52
44
  #
53
45
  def destroy
54
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}"
46
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}"
55
47
  response = @muddyit.send_request(api_url, :delete, {})
56
48
  # Is this the correct thing to return ?
57
49
  return true
@@ -63,9 +55,8 @@ class Muddyit::Sites::Site::Page < Muddyit::Generic
63
55
  # * options (Optional)
64
56
  #
65
57
  def related_content(options = {})
66
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}/related/content"
58
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}/related/content"
67
59
  response = @muddyit.send_request(api_url, :get, options)
68
-
69
60
  results = []
70
61
  response.each { |result|
71
62
  # The return format needs sorting out here .......
@@ -76,7 +67,7 @@ class Muddyit::Sites::Site::Page < Muddyit::Generic
76
67
 
77
68
  protected
78
69
  def fetch
79
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}"
70
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(@attributes[:identifier]),'.')}"
80
71
  response = @muddyit.send_request(api_url, :get, {:include_content => true })
81
72
  response.nested_symbolize_keys!
82
73
  end
@@ -84,11 +75,11 @@ class Muddyit::Sites::Site::Page < Muddyit::Generic
84
75
  # Convert results to entities
85
76
  def create_entities
86
77
  results = []
87
- if @attributes.has_key?(:results)
88
- @attributes[:results].each do |result|
78
+ if @attributes.has_key?(:entities)
79
+ @attributes[:entities].each do |result|
89
80
  results.push Muddyit::Entity.new(@muddyit, result)
90
81
  end
91
- @attributes[:results] = results
82
+ @attributes[:entities] = results
92
83
  end
93
84
  end
94
85
 
data/lib/muddyit/pages.rb CHANGED
@@ -12,23 +12,23 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
12
12
  if type.is_a? Symbol
13
13
  case type
14
14
  when :all
15
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages"
15
+ api_url = "/sites/#{self.site.attributes[:token]}/pages"
16
16
  if block_given?
17
17
  token = nil
18
18
  begin
19
19
  response = @muddyit.send_request(api_url, :get, options.merge!(:page => token))
20
- response['resultsets'].each { |page|
20
+ response['pages'].each { |page|
21
21
  yield Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site))
22
22
  }
23
23
  token = response['next_page']
24
24
  # Need to figure out which of the below actually occurs
25
25
  end while !token.nil? || !token == ''
26
26
  else
27
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages"
27
+ api_url = "/sites/#{self.site.attributes[:token]}/pages"
28
28
  response = @muddyit.send_request(api_url, :get, options)
29
29
 
30
30
  pages = []
31
- response['resultsets'].each { |page| pages.push Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site)) }
31
+ response['pages'].each { |page| pages.push Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site)) }
32
32
  return { :next_page => response['next_page'], :pages => pages }
33
33
  end
34
34
  else
@@ -36,9 +36,9 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
36
36
  end
37
37
 
38
38
  elsif type.is_a? String
39
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(type),'.')}"
39
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/#{URI.escape(CGI.escape(type),'.')}"
40
40
  response = @muddyit.send_request(api_url, :get, {})
41
- response.has_key?('results') ? Muddyit::Sites::Site::Page.new(@muddyit, response.merge!(:site => self.site)) : nil
41
+ response.has_key?('identifier') ? Muddyit::Sites::Site::Page.new(@muddyit, response.merge!(:site => self.site)) : nil
42
42
  end
43
43
  end
44
44
 
@@ -49,7 +49,7 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
49
49
  #
50
50
  def related_entities(uri, options = {})
51
51
  raise "no uri supplied" if uri.nil?
52
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/related/entities/#{URI.escape(CGI.escape(uri),'.')}"
52
+ api_url = "/sites/#{self.site.attributes[:token]}/related/entities/#{URI.escape(CGI.escape(uri),'.')}"
53
53
  response = @muddyit.send_request(api_url, :get, options)
54
54
 
55
55
  results = []
@@ -65,25 +65,20 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
65
65
  # Params
66
66
  # * options (Required)
67
67
  #
68
- def categorise(options)
68
+ def categorise(doc = {}, options = {})
69
69
 
70
70
  # Ensure we get content_data as well
71
71
  options[:include_content] = true
72
72
 
73
- # Set the URI if not set
74
- options[:uri] = options[:identifier] if options.has_key?(:identifier) && !options.has_key?(:uri) && !options.has_key?(:text)
75
-
76
73
  # Ensure we have encoded the identifier and URI
77
- if options.has_key?(:uri)
78
- raise if options[:uri].nil?
79
- options[:uri] = URI.escape(CGI.escape(options[:uri]),'.')
80
- elsif options.has_key?(:identifier)
81
- raise if options[:identifier].nil?
82
- options[:identifier] = URI.escape(CGI.escape(options[:identifier]),'.')
74
+ unless doc[:uri] || doc[:text]
75
+ raise
83
76
  end
84
77
 
85
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/categorise"
86
- response = @muddyit.send_request(api_url, :post, options)
78
+ body = { :page => doc, :options => options }
79
+
80
+ api_url = "/sites/#{self.site.attributes[:token]}/pages/"
81
+ response = @muddyit.send_request(api_url, :post, {}, body.to_json)
87
82
  return Muddyit::Sites::Site::Page.new(@muddyit, response.merge!(:site => self.site))
88
83
  end
89
84
 
@@ -146,7 +141,7 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
146
141
  # must contain uri parameter which corresponds to dbpedia uri
147
142
  #
148
143
  def queryAllWithURI(uri, options, &block)
149
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/withentities/#{URI.escape(CGI.escape(uri),'.')}"
144
+ api_url = "/sites/#{self.site.attributes[:token]}/entities/#{URI.escape(CGI.escape(uri),'.')}"
150
145
  query_page(api_url, options, &block)
151
146
  end
152
147
 
@@ -159,7 +154,7 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
159
154
  #
160
155
  #
161
156
  def queryAllWithTerm(term, options, &block)
162
- api_url = "#{@muddyit.rest_endpoint}/sites/#{self.site.attributes[:token]}/pages/withterms/#{URI.escape(CGI.escape(term),'.')}"
157
+ api_url = "/sites/#{self.site.attributes[:token]}/terms/#{URI.escape(CGI.escape(term),'.')}"
163
158
  query_page(api_url, options, &block)
164
159
  end
165
160
 
@@ -174,8 +169,8 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
174
169
  token = nil
175
170
  begin
176
171
  options.merge!(:page => token) unless token.nil?
177
- response = @muddyit.send_request(api_url, :get, options)
178
- response['resultsets'].each { |page|
172
+ response = @muddyit.send_request(api_url, :get, options.merge!(:page => token))
173
+ response['pages'].each { |page|
179
174
  yield Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site))
180
175
  }
181
176
  token = response['next_page']
@@ -185,7 +180,7 @@ class Muddyit::Sites::Site::Pages < Muddyit::Generic
185
180
  response = @muddyit.send_request(api_url, :get, {})
186
181
 
187
182
  pages = []
188
- response['resultsets'].each { |page| pages.push Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site)) }
183
+ response['pages'].each { |page| pages.push Muddyit::Sites::Site::Page.new(@muddyit, page.merge!(:site => self.site)) }
189
184
  return { :next_page => response[:next_page], :pages => pages }
190
185
  end
191
186
  end
data/lib/muddyit/site.rb CHANGED
@@ -6,7 +6,7 @@ class Muddyit::Sites::Site < Muddyit::Generic
6
6
 
7
7
  protected
8
8
  def fetch
9
- api_url = "#{@muddyit.rest_endpoint}/sites/#{@attributes[:token]}"
9
+ api_url = "/sites/#{@attributes[:token]}"
10
10
  response = @muddyit.send_request(api_url, :get, {})
11
11
  response['site'].nested_symbolize_keys!
12
12
  end
data/lib/muddyit/sites.rb CHANGED
@@ -24,7 +24,7 @@ class Muddyit::Sites < Muddyit::Base
24
24
  if type.is_a? Symbol
25
25
  case type
26
26
  when :all
27
- api_url = "#{@muddyit.rest_endpoint}/sites/"
27
+ api_url = "/sites/"
28
28
  response = @muddyit.send_request(api_url, :get, options)
29
29
  sites = []
30
30
  response.each { |site| sites.push Muddyit::Sites::Site.new(@muddyit, site['site']) }
@@ -33,7 +33,7 @@ class Muddyit::Sites < Muddyit::Base
33
33
  raise 'invalid type specified'
34
34
  end
35
35
  elsif type.is_a? String
36
- api_url = "#{@muddyit.rest_endpoint}/sites/#{type}"
36
+ api_url = "/sites/#{type}"
37
37
  response = @muddyit.send_request(api_url, :get, options)
38
38
  return Muddyit::Sites::Site.new(@muddyit, response['site'])
39
39
  else
data/lib/muddyit_fu.rb CHANGED
@@ -3,8 +3,7 @@ require 'net/http'
3
3
  require 'cgi'
4
4
  require 'json'
5
5
  #require 'json/ext'
6
- require 'openssl'
7
- require 'base64'
6
+ require 'oauth/consumer'
8
7
 
9
8
  require 'pp'
10
9
 
data/muddyit_fu.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{muddyit_fu}
5
- s.version = "0.1.0"
5
+ s.version = "0.1.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["robl"]
9
- s.date = %q{2009-06-03}
9
+ s.date = %q{2009-06-23}
10
10
  s.email = %q{robl[at]monkeyhelper.com}
11
11
  s.extra_rdoc_files = [
12
12
  "LICENSE",
@@ -31,20 +31,25 @@ Gem::Specification.new do |s|
31
31
  "lib/muddyit_fu.rb",
32
32
  "muddyit_fu.gemspec"
33
33
  ]
34
- s.has_rdoc = true
35
34
  s.homepage = %q{http://github.com/monkeyhelper/muddyit_fu}
36
35
  s.rdoc_options = ["--charset=UTF-8"]
37
36
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.1}
37
+ s.rubygems_version = %q{1.3.4}
39
38
  s.summary = %q{Provides a ruby interface to muddy.it}
40
39
 
41
40
  if s.respond_to? :specification_version then
42
41
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
43
- s.specification_version = 2
42
+ s.specification_version = 3
44
43
 
45
44
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<json>, [">= 0.0.0"])
46
+ s.add_runtime_dependency(%q<oauth>, [">= 0.0.0"])
46
47
  else
48
+ s.add_dependency(%q<json>, [">= 0.0.0"])
49
+ s.add_dependency(%q<oauth>, [">= 0.0.0"])
47
50
  end
48
51
  else
52
+ s.add_dependency(%q<json>, [">= 0.0.0"])
53
+ s.add_dependency(%q<oauth>, [">= 0.0.0"])
49
54
  end
50
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monkeyhelper-muddyit_fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - robl
@@ -9,10 +9,29 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-03 00:00:00 -07:00
12
+ date: 2009-06-23 00:00:00 -07:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: oauth
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.0
34
+ version:
16
35
  description:
17
36
  email: robl[at]monkeyhelper.com
18
37
  executables: []
@@ -40,7 +59,7 @@ files:
40
59
  - lib/muddyit/sites.rb
41
60
  - lib/muddyit_fu.rb
42
61
  - muddyit_fu.gemspec
43
- has_rdoc: true
62
+ has_rdoc: false
44
63
  homepage: http://github.com/monkeyhelper/muddyit_fu
45
64
  post_install_message:
46
65
  rdoc_options:
@@ -64,7 +83,7 @@ requirements: []
64
83
  rubyforge_project:
65
84
  rubygems_version: 1.2.0
66
85
  signing_key:
67
- specification_version: 2
86
+ specification_version: 3
68
87
  summary: Provides a ruby interface to muddy.it
69
88
  test_files: []
70
89