markauskas-googlereader 0.1.1 → 0.1.2
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/Rakefile +11 -1
- data/lib/google/reader/base.rb +2 -1
- data/lib/google/reader/item.rb +28 -0
- data/lib/google/reader/stream.rb +18 -6
- data/lib/google/reader/subscription.rb +3 -7
- data/lib/google/reader/version.rb +1 -1
- data/lib/google/reader.rb +23 -15
- data/markauskas-googlereader.gemspec +13 -5
- data/test/googlereader_test.rb +1 -2
- data/test/stream_test.rb +88 -0
- data/test/subscription_test.rb +13 -0
- metadata +18 -3
data/Rakefile
CHANGED
@@ -9,9 +9,10 @@ begin
|
|
9
9
|
gemspec.email = "info@tamole.net"
|
10
10
|
gemspec.homepage = "http://github.com/markauskas/googlereader"
|
11
11
|
gemspec.authors = ["Tomas Markauskas", "John Nunemaker"]
|
12
|
+
gemspec.add_dependency('activesupport') # For JSON && deep_merge
|
12
13
|
gemspec.add_dependency('atom', '>= 0.3')
|
13
14
|
gemspec.add_dependency('json', '>= 1.2.0')
|
14
|
-
gemspec.add_dependency('markauskas-googlebase', '>= 0.3.
|
15
|
+
gemspec.add_dependency('markauskas-googlebase', '>= 0.3.2')
|
15
16
|
end
|
16
17
|
|
17
18
|
Jeweler::GemcutterTasks.new
|
@@ -26,3 +27,12 @@ Rake::TestTask.new(:test) do |test|
|
|
26
27
|
end
|
27
28
|
|
28
29
|
task :default => :test
|
30
|
+
|
31
|
+
task :a do
|
32
|
+
require 'yaml'
|
33
|
+
require File.dirname(__FILE__) + '/lib/google/reader'
|
34
|
+
|
35
|
+
GOOGLE_CONFIG = YAML::load(open(File.dirname(__FILE__) + '/test/.credentials.yml'))
|
36
|
+
Google::Base.establish_connection(GOOGLE_CONFIG['username'], GOOGLE_CONFIG['password'])
|
37
|
+
puts Google::Reader::Subscription.all.inspect
|
38
|
+
end
|
data/lib/google/reader/base.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Google
|
2
|
+
module Reader
|
3
|
+
class Item < Base
|
4
|
+
# a = add state
|
5
|
+
# r = remove state
|
6
|
+
# s = feed/stream
|
7
|
+
# i = item
|
8
|
+
# T = token
|
9
|
+
def self.add_label(feed, item, label)
|
10
|
+
token = get_token
|
11
|
+
puts token
|
12
|
+
options = { :form_data => { :s => feed, :a => label, :i => item, :T => token } }
|
13
|
+
result = post(EDIT_LABEL_URL, options)
|
14
|
+
puts result
|
15
|
+
!!result =~ "OK"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.remove_label(feed, item, label)
|
19
|
+
token = get_token
|
20
|
+
puts token
|
21
|
+
options = { :form_data => { :s => feed, :r => label, :i => item, :T => token } }
|
22
|
+
result = post(EDIT_LABEL_URL, options)
|
23
|
+
puts result
|
24
|
+
!!result =~ "OK"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/google/reader/stream.rb
CHANGED
@@ -1,17 +1,29 @@
|
|
1
1
|
module Google
|
2
2
|
module Reader
|
3
3
|
class Stream < Base
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
# Params:
|
5
|
+
# xt - exclude target, e.g. xt=user/-/state/com.google/read
|
6
|
+
# r - order (n - newest first, o - oldest first)
|
7
|
+
# ot - if r=o, only items posted after ot are returned (unix timestamp)
|
8
|
+
# ck - current timestamp?
|
9
|
+
# c - continuation
|
10
|
+
# n - count
|
11
|
+
# client - ?
|
12
|
+
def self.fetch(feed_url, options = {})
|
13
|
+
url = sprintf(STREAM_URL, feed_url)
|
7
14
|
options = {
|
8
15
|
:query_hash => {
|
9
16
|
:ck => Time.now.to_i,
|
10
|
-
:n =>
|
17
|
+
:n => 20
|
11
18
|
}
|
12
|
-
}.
|
19
|
+
}.deep_merge(options)
|
13
20
|
json = get(url, options)
|
14
|
-
data =
|
21
|
+
data = parse_json(json)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.fetch_feed(feed_url, options = {})
|
25
|
+
feed_url = 'feed/' + CGI.escape(normalize_feed_url(feed_url))
|
26
|
+
fetch feed_url, options
|
15
27
|
end
|
16
28
|
end
|
17
29
|
end
|
@@ -1,15 +1,11 @@
|
|
1
|
-
require 'ostruct'
|
2
1
|
module Google
|
3
2
|
module Reader
|
4
3
|
class Subscription < Base
|
5
4
|
class << self
|
6
5
|
def all
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
:google_id => s['id'],
|
11
|
-
:categories => s['categories'].inject([]) { |cats, c| cats << OpenStruct.new(:google_id => c['id'], :name => c['label']) })
|
12
|
-
end
|
6
|
+
json_str = get(SUBSCRIPTION_LIST_URL)
|
7
|
+
json = parse_json json_str
|
8
|
+
json['subscriptions']
|
13
9
|
end
|
14
10
|
end
|
15
11
|
end
|
data/lib/google/reader.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'cgi'
|
1
2
|
require 'uri'
|
2
3
|
require 'net/https'
|
3
4
|
require 'net/http'
|
@@ -5,18 +6,22 @@ require 'rubygems'
|
|
5
6
|
|
6
7
|
gem 'atom', '>= 0.3'
|
7
8
|
gem 'json', '>= 1.2.0'
|
8
|
-
gem 'markauskas-googlebase', '>= 0.3.
|
9
|
+
gem 'markauskas-googlebase', '>= 0.3.2'
|
10
|
+
gem 'activesupport'
|
9
11
|
|
10
12
|
require 'atom'
|
11
13
|
require 'json'
|
14
|
+
require 'active_support'
|
12
15
|
require 'google/base'
|
13
|
-
|
14
|
-
require '
|
15
|
-
require '
|
16
|
-
require '
|
17
|
-
require '
|
18
|
-
require '
|
19
|
-
require '
|
16
|
+
|
17
|
+
require File.dirname(__FILE__) + '/reader/base'
|
18
|
+
require File.dirname(__FILE__) + '/reader/count'
|
19
|
+
require File.dirname(__FILE__) + '/reader/label'
|
20
|
+
require File.dirname(__FILE__) + '/reader/preference'
|
21
|
+
require File.dirname(__FILE__) + '/reader/search'
|
22
|
+
require File.dirname(__FILE__) + '/reader/stream'
|
23
|
+
require File.dirname(__FILE__) + '/reader/subscription'
|
24
|
+
require File.dirname(__FILE__) + '/reader/item'
|
20
25
|
|
21
26
|
module Google
|
22
27
|
module Reader
|
@@ -27,9 +32,10 @@ module Google
|
|
27
32
|
SUBSCRIPTION_LIST_URL = READER_URL + '/api/0/subscription/list?output=json'
|
28
33
|
SUBSCRIPTION_EDIT_URL = READER_URL + '/api/0/subscription/edit'
|
29
34
|
ATOM_FEED_URL = READER_URL + '/atom/feed/%s'
|
30
|
-
|
35
|
+
STREAM_URL = READER_URL + '/api/0/stream/contents/%s'
|
31
36
|
LABELS_URL = READER_URL + '/api/0/tag/list?output=json'
|
32
37
|
LABEL_URL = READER_URL + '/atom/user/-/label/%s'
|
38
|
+
EDIT_LABEL_URL = READER_URL + '/api/0/edit-tag'
|
33
39
|
PREFERENCE_URL = READER_URL + '/api/0/preference/list?output=json'
|
34
40
|
PREFERENCE_STREAM_URL = READER_URL + '/api/0/preference/stream/list?output=json'
|
35
41
|
UNREAD_COUNT_URL = READER_URL + '/api/0/unread-count?all=true&output=json'
|
@@ -37,12 +43,14 @@ module Google
|
|
37
43
|
PACKAGE = "user/-/state/com.google"
|
38
44
|
|
39
45
|
module State
|
40
|
-
READ = "#{PACKAGE}/read"
|
41
|
-
KEPT_UNREAD = "#{PACKAGE}/kept-unread"
|
42
|
-
FRESH = "#{PACKAGE}/fresh"
|
43
|
-
STARRED = "#{PACKAGE}/starred"
|
44
|
-
|
45
|
-
|
46
|
+
READ = "#{PACKAGE}/read" # Read items
|
47
|
+
KEPT_UNREAD = "#{PACKAGE}/kept-unread" # Items marked as unread
|
48
|
+
FRESH = "#{PACKAGE}/fresh" # Unread items
|
49
|
+
STARRED = "#{PACKAGE}/starred" # Starred items
|
50
|
+
SELF = "#{PACKAGE}/self" # Shared + Notes?
|
51
|
+
BROADCAST = "#{PACKAGE}/broadcast" # Shared items from me
|
52
|
+
BROADCAST_FRIENDS = "#{PACKAGE}/broadcast-friends" # Shared items from friends
|
53
|
+
READING_LIST = "#{PACKAGE}/reading-list" # All items
|
46
54
|
TRACKING_BODY_LINK_USED = "#{PACKAGE}/tracking-body-link-used"
|
47
55
|
TRACKING_EMAILED = "#{PACKAGE}/tracking-emailed"
|
48
56
|
TRACKING_ITEM_LINK_USED = "#{PACKAGE}/tracking-item-link-used"
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{markauskas-googlereader}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tomas Markauskas", "John Nunemaker"]
|
12
|
-
s.date = %q{2010-02-
|
12
|
+
s.date = %q{2010-02-12}
|
13
13
|
s.email = %q{info@tamole.net}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.txt"
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
"lib/google/reader.rb",
|
24
24
|
"lib/google/reader/base.rb",
|
25
25
|
"lib/google/reader/count.rb",
|
26
|
+
"lib/google/reader/item.rb",
|
26
27
|
"lib/google/reader/label.rb",
|
27
28
|
"lib/google/reader/preference.rb",
|
28
29
|
"lib/google/reader/search.rb",
|
@@ -33,6 +34,8 @@ Gem::Specification.new do |s|
|
|
33
34
|
"markauskas-googlereader.gemspec",
|
34
35
|
"test/.credentials.sample.yml",
|
35
36
|
"test/googlereader_test.rb",
|
37
|
+
"test/stream_test.rb",
|
38
|
+
"test/subscription_test.rb",
|
36
39
|
"test/test_helper.rb"
|
37
40
|
]
|
38
41
|
s.homepage = %q{http://github.com/markauskas/googlereader}
|
@@ -42,6 +45,8 @@ Gem::Specification.new do |s|
|
|
42
45
|
s.summary = %q{Ruby wrapper for Google Reader}
|
43
46
|
s.test_files = [
|
44
47
|
"test/googlereader_test.rb",
|
48
|
+
"test/stream_test.rb",
|
49
|
+
"test/subscription_test.rb",
|
45
50
|
"test/test_helper.rb"
|
46
51
|
]
|
47
52
|
|
@@ -50,18 +55,21 @@ Gem::Specification.new do |s|
|
|
50
55
|
s.specification_version = 3
|
51
56
|
|
52
57
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
58
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
53
59
|
s.add_runtime_dependency(%q<atom>, [">= 0.3"])
|
54
60
|
s.add_runtime_dependency(%q<json>, [">= 1.2.0"])
|
55
|
-
s.add_runtime_dependency(%q<markauskas-googlebase>, [">= 0.3.
|
61
|
+
s.add_runtime_dependency(%q<markauskas-googlebase>, [">= 0.3.2"])
|
56
62
|
else
|
63
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
57
64
|
s.add_dependency(%q<atom>, [">= 0.3"])
|
58
65
|
s.add_dependency(%q<json>, [">= 1.2.0"])
|
59
|
-
s.add_dependency(%q<markauskas-googlebase>, [">= 0.3.
|
66
|
+
s.add_dependency(%q<markauskas-googlebase>, [">= 0.3.2"])
|
60
67
|
end
|
61
68
|
else
|
69
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
62
70
|
s.add_dependency(%q<atom>, [">= 0.3"])
|
63
71
|
s.add_dependency(%q<json>, [">= 1.2.0"])
|
64
|
-
s.add_dependency(%q<markauskas-googlebase>, [">= 0.3.
|
72
|
+
s.add_dependency(%q<markauskas-googlebase>, [">= 0.3.2"])
|
65
73
|
end
|
66
74
|
end
|
67
75
|
|
data/test/googlereader_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
-
require 'cgi'
|
3
2
|
|
4
3
|
class GooglereaderTest < Test::Unit::TestCase
|
5
4
|
def setup
|
@@ -45,7 +44,7 @@ class GooglereaderTest < Test::Unit::TestCase
|
|
45
44
|
# if feed_url contains a question mark (`?') it has to be escaped since
|
46
45
|
# otherwise it would be interpreted as a part of the google reader url
|
47
46
|
# and not the feed_url
|
48
|
-
response = Google::Reader::Stream.
|
47
|
+
response = Google::Reader::Stream.fetch_feed(feed_url)
|
49
48
|
assert_not_nil response
|
50
49
|
assert_not_nil response['items']
|
51
50
|
assert_not_nil response['title']
|
data/test/stream_test.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class StreamTest < Test::Unit::TestCase
|
4
|
+
def test_reading_list
|
5
|
+
list = Google::Reader::Stream.fetch(Google::Reader::State::READING_LIST, {:query_hash => {:n => 300}})
|
6
|
+
assert_not_nil list
|
7
|
+
assert_not_nil list['items']
|
8
|
+
assert list['items'].is_a?Array
|
9
|
+
list['items'].each do |item|
|
10
|
+
assert_not_nil item['id']
|
11
|
+
|
12
|
+
text = (item['content'] || item['summary'])
|
13
|
+
assert text
|
14
|
+
assert text.is_a?Hash
|
15
|
+
assert text.keys.sort == ['content', 'direction'].sort
|
16
|
+
|
17
|
+
assert_not_nil item['likingUsers']
|
18
|
+
assert item['likingUsers'].is_a?Array
|
19
|
+
item['likingUsers'].each do |liking_user|
|
20
|
+
assert liking_user.is_a?Hash
|
21
|
+
assert liking_user.keys == ["userId"]
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_not_nil item['comments']
|
25
|
+
assert item['comments'].is_a?Array
|
26
|
+
|
27
|
+
assert_not_nil item['author']
|
28
|
+
assert item['author'].is_a?String
|
29
|
+
|
30
|
+
assert_not_nil item['title']
|
31
|
+
|
32
|
+
assert_not_nil item['annotations']
|
33
|
+
assert item['annotations'].is_a?Array
|
34
|
+
|
35
|
+
assert_not_nil item['alternate']
|
36
|
+
assert item['alternate'].is_a?Array
|
37
|
+
assert item['alternate'].length > 0
|
38
|
+
item['alternate'].each do |alt|
|
39
|
+
assert alt.is_a?Hash
|
40
|
+
assert alt.keys.sort == ["href", "type"].sort
|
41
|
+
end
|
42
|
+
|
43
|
+
assert_not_nil item['origin']
|
44
|
+
assert item['origin'].is_a?Hash
|
45
|
+
assert item['origin'].keys.sort == ["title", "htmlUrl", "streamId"].sort
|
46
|
+
|
47
|
+
assert_not_nil item['categories']
|
48
|
+
assert item['categories'].is_a?Array
|
49
|
+
item['categories'].each do |category|
|
50
|
+
assert category.is_a?String
|
51
|
+
end
|
52
|
+
|
53
|
+
assert_not_nil item['crawlTimeMsec']
|
54
|
+
|
55
|
+
assert_not_nil item['published']
|
56
|
+
|
57
|
+
assert_not_nil item['updated']
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_reading_list_without_read_items
|
62
|
+
list = Google::Reader::Stream.fetch(Google::Reader::State::READING_LIST, {:query_hash => {:n => 100, :xt => Google::Reader::State::READ}})
|
63
|
+
assert_not_nil list
|
64
|
+
list['items'].each do |item|
|
65
|
+
item['categories'].each do |category|
|
66
|
+
assert !(category =~ /\Auser\/[0-9]+\/state\/com.google\/read\Z/)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_reading_list_order_by_newest
|
72
|
+
list = Google::Reader::Stream.fetch(Google::Reader::State::READING_LIST, {:query_hash => {:n => 30, :r => :n}})
|
73
|
+
previous = 0
|
74
|
+
list['items'].reverse.each do |item|
|
75
|
+
assert item['crawlTimeMsec'].to_i >= previous
|
76
|
+
previous = item['crawlTimeMsec'].to_i
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_reading_list_order_by_oldest
|
81
|
+
list = Google::Reader::Stream.fetch(Google::Reader::State::READING_LIST, {:query_hash => {:n => 30, :r => :o}})
|
82
|
+
previous = 0
|
83
|
+
list['items'].each do |item|
|
84
|
+
assert item['crawlTimeMsec'].to_i >= previous
|
85
|
+
previous = item['crawlTimeMsec'].to_i
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class SubscriptionTest < Test::Unit::TestCase
|
4
|
+
def test_subscription_list
|
5
|
+
subs = Google::Reader::Subscription.all
|
6
|
+
assert_not_nil subs
|
7
|
+
assert subs.is_a?Array
|
8
|
+
subs.each do |sub|
|
9
|
+
assert sub.is_a?Hash
|
10
|
+
assert_equal sub.keys.sort, ["firstitemmsec", "title", "sortid", "id", "categories"].sort
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markauskas-googlereader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Markauskas
|
@@ -10,9 +10,19 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2010-02-
|
13
|
+
date: 2010-02-12 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activesupport
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
version:
|
16
26
|
- !ruby/object:Gem::Dependency
|
17
27
|
name: atom
|
18
28
|
type: :runtime
|
@@ -41,7 +51,7 @@ dependencies:
|
|
41
51
|
requirements:
|
42
52
|
- - ">="
|
43
53
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.3.
|
54
|
+
version: 0.3.2
|
45
55
|
version:
|
46
56
|
description:
|
47
57
|
email: info@tamole.net
|
@@ -60,6 +70,7 @@ files:
|
|
60
70
|
- lib/google/reader.rb
|
61
71
|
- lib/google/reader/base.rb
|
62
72
|
- lib/google/reader/count.rb
|
73
|
+
- lib/google/reader/item.rb
|
63
74
|
- lib/google/reader/label.rb
|
64
75
|
- lib/google/reader/preference.rb
|
65
76
|
- lib/google/reader/search.rb
|
@@ -70,6 +81,8 @@ files:
|
|
70
81
|
- markauskas-googlereader.gemspec
|
71
82
|
- test/.credentials.sample.yml
|
72
83
|
- test/googlereader_test.rb
|
84
|
+
- test/stream_test.rb
|
85
|
+
- test/subscription_test.rb
|
73
86
|
- test/test_helper.rb
|
74
87
|
has_rdoc: true
|
75
88
|
homepage: http://github.com/markauskas/googlereader
|
@@ -101,4 +114,6 @@ specification_version: 3
|
|
101
114
|
summary: Ruby wrapper for Google Reader
|
102
115
|
test_files:
|
103
116
|
- test/googlereader_test.rb
|
117
|
+
- test/stream_test.rb
|
118
|
+
- test/subscription_test.rb
|
104
119
|
- test/test_helper.rb
|