rbuzz 0.2 → 0.3.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/README.md CHANGED
@@ -6,21 +6,21 @@ A simple Ruby wrapper to help retrieve and parse the Google Buzz Atom Feed.
6
6
  Coming soon - subscribing to updates, posting to feed
7
7
 
8
8
  Note: This library was renamed from Buzzr to Ruby Buzz. Buzzr.com sent me a friendly trademark
9
- infringement notice and threatened a lawsuit if I didn't rename the library immediately.
9
+ infringement notice and threatened a lawsuit.
10
10
 
11
11
  Install
12
12
  -------
13
13
 
14
14
  gem install rbuzz
15
15
 
16
- Ruby Buzz is hosted on the Gemcutter repository. It depends on the RAtom library - http://github.com/seangeo/ratom
17
-
18
16
  Example
19
17
  -------
20
18
 
21
19
  require 'rbuzz'
22
20
 
23
21
  feed_url = Rbuzz::Feed.discover("conorhunt")
22
+ # Or, using webfinger (see https://groups.google.com/group/webfinger/browse_thread/thread/fb56537a0ed36964/c51e559c8f8d5455)
23
+ # Rbuzz::Feed.discover_by_email("bradfitz@gmail.com")
24
24
  feed = Rbuzz::Feed.retrieve(feed_url)
25
25
 
26
26
  feed.entries.each do |entry|
@@ -62,6 +62,11 @@ Example
62
62
  puts
63
63
  end
64
64
 
65
+ CONTRIBUTORS
66
+ ------------
67
+
68
+ Alexandr Zykov (github: alexandrz)
69
+
65
70
  COPYRIGHT
66
71
  ---------
67
72
 
@@ -1,5 +1,6 @@
1
1
  require 'atom'
2
2
  require 'open-uri'
3
+ require 'libxml'
3
4
  require 'rbuzz/feed'
4
5
  require 'rbuzz/feed_entry'
5
6
  require 'rbuzz/feed_reply'
@@ -14,14 +14,34 @@ module Rbuzz
14
14
  feed.fetch
15
15
  feed
16
16
  end
17
+
18
+ # Extract the feed url from the users's google profile name
19
+ def self.discover(profile_name)
20
+ self.discover_by_url "http://www.google.com/profiles/#{profile_name}"
21
+ end
22
+
23
+ # Extract the feed url from the users's e-mail using the webfinger protocol
24
+ def self.discover_by_email(email)
25
+ resource = Net::HTTP.get(URI.parse("http://www.google.com/s2/webfinger/?q=acct:#{email}"))
26
+ begin
27
+ doc = XML::Document.string(resource)
28
+ rescue XML::Error => e
29
+ raise FeedError, "Could not find google profile for #{email}"
30
+ end
31
+ if profile_url = doc.find('//XRD:Alias', 'XRD:http://docs.oasis-open.org/ns/xri/xrd-1.0').first
32
+ self.discover_by_url profile_url.content
33
+ else
34
+ raise FeedError, "Could not find google profile page for #{email}"
35
+ end
36
+ end
17
37
 
18
38
  # Extract the feed url from the users's google profile page
19
- def self.discover(profile_name)
39
+ def self.discover_by_url(profile_url)
20
40
  begin
21
- page = open("http://www.google.com/profiles/#{profile_name}").read
41
+ page = open(profile_url).read
22
42
  rescue OpenURI::HTTPError => e
23
43
  if e.io.status[0] == '404'
24
- raise FeedError, "Could not find profile for #{profile_name} at - http://www.google.com/profiles/#{profile_name}"
44
+ raise FeedError, "Could not find profile at #{profile_url}"
25
45
  end
26
46
  end
27
47
 
@@ -34,19 +34,23 @@ module Rbuzz
34
34
  end
35
35
 
36
36
  def urls
37
- @links ||= @atom_entry.links.find_all {|l| l.type =~ %r{text/html}i }.collect {|l| l.href}
37
+ @links ||= @atom_entry.links.find_all {|l| l.type =~ %r{text/html}i }.collect {|l| l.href}.uniq
38
38
  end
39
39
 
40
40
  def images
41
- @images ||= @atom_entry.links.find_all {|l| l.type =~ /image/i }.collect {|l| l.href}
41
+ @images ||= @atom_entry.links.find_all {|l| l.type =~ /image/i }.collect {|l| l.href}.uniq
42
42
  end
43
43
 
44
44
  def videos
45
- @videos ||= @atom_entry.links.find_all {|l| l.type =~ %r{application/x-shockwave-flash}i }.collect {|l| l.href}
45
+ @videos ||= @atom_entry.links.find_all {|l| l.type =~ %r{application/x-shockwave-flash}i }.collect {|l| l.href}.uniq
46
46
  end
47
47
 
48
48
  def author
49
49
  @atom_entry.authors[0] if @atom_entry.respond_to?(:authors)
50
50
  end
51
+
52
+ def id
53
+ @atom_entry.id
54
+ end
51
55
  end
52
56
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbuzz
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 1
9
+ version: 0.3.1
5
10
  platform: ruby
6
11
  authors:
7
12
  - Conor Hunt
@@ -14,14 +19,30 @@ default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: ratom
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 6
30
+ - 3
23
31
  version: 0.6.3
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: libxml-ruby
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :runtime
45
+ version_requirements: *id002
25
46
  description: Ruby wrapper for Google Buzz atom feeds
26
47
  email: conor.hunt@gmail.com
27
48
  executables: []
@@ -51,18 +72,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
51
72
  requirements:
52
73
  - - ">="
53
74
  - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
54
77
  version: "0"
55
- version:
56
78
  required_rubygems_version: !ruby/object:Gem::Requirement
57
79
  requirements:
58
80
  - - ">="
59
81
  - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
60
84
  version: "0"
61
- version:
62
85
  requirements: []
63
86
 
64
87
  rubyforge_project:
65
- rubygems_version: 1.3.5
88
+ rubygems_version: 1.3.6
66
89
  signing_key:
67
90
  specification_version: 3
68
91
  summary: Ruby wrapper for Google Buzz atom feeds