douban-ruby 0.0.8 → 0.0.9
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/.rspec +1 -0
- data/Gemfile.lock +12 -11
- data/History.rdoc +4 -0
- data/README.rdoc +2 -2
- data/Rakefile +1 -1
- data/douban-ruby.gemspec +1 -0
- data/lib/douban.rb +58 -58
- data/lib/douban/authorize.rb +1400 -1369
- data/lib/douban/collection.rb +69 -69
- data/lib/douban/event.rb +80 -80
- data/lib/douban/miniblog.rb +63 -63
- data/lib/douban/note.rb +60 -60
- data/lib/douban/people.rb +48 -48
- data/lib/douban/review.rb +66 -66
- data/lib/douban/subject.rb +119 -119
- data/lib/douban/version.rb +1 -1
- data/spec/douban/authorize_spec.rb +36 -5
- metadata +19 -4
data/lib/douban/collection.rb
CHANGED
@@ -1,69 +1,69 @@
|
|
1
|
-
require 'rexml/document'
|
2
|
-
require 'douban/subject'
|
3
|
-
require 'douban/author'
|
4
|
-
|
5
|
-
module Douban
|
6
|
-
class Collection
|
7
|
-
|
8
|
-
include Douban::Equal
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def attr_names
|
12
|
-
[
|
13
|
-
:tag,
|
14
|
-
:updated,
|
15
|
-
:subject,
|
16
|
-
:author,
|
17
|
-
:title,
|
18
|
-
:summary,
|
19
|
-
:link,
|
20
|
-
:id,
|
21
|
-
:rating,
|
22
|
-
:status
|
23
|
-
]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
attr_names.each do |attr|
|
27
|
-
attr_accessor attr
|
28
|
-
end
|
29
|
-
def initialize(atom)
|
30
|
-
doc = case atom
|
31
|
-
when REXML::Document then atom.root
|
32
|
-
when REXML::Element then atom
|
33
|
-
else REXML::Document.new(atom).root
|
34
|
-
end
|
35
|
-
subject=REXML::XPath.first(doc,"./db:subject")
|
36
|
-
@subject=Subject.new(subject) if subject
|
37
|
-
author=REXML::XPath.first(doc,"./author")
|
38
|
-
@author=Author.new(author.to_s) if author
|
39
|
-
title=REXML::XPath.first(doc,"./title")
|
40
|
-
@title=title.text if !title.nil?
|
41
|
-
updated=REXML::XPath.first(doc,"./updated")
|
42
|
-
@updated=updated.text if updated
|
43
|
-
@summary = REXML::XPath.first(doc, "./summary/text()").to_s
|
44
|
-
@status = REXML::XPath.first(doc, "./db:status/text()").to_s
|
45
|
-
@link = Hash.new
|
46
|
-
REXML::XPath.each(doc, "./link") do |e|
|
47
|
-
@link[e.attributes["rel"]] = e.attributes["href"]
|
48
|
-
end
|
49
|
-
id=REXML::XPath.first(doc,"./id")
|
50
|
-
@id=id.text if id
|
51
|
-
REXML::XPath.each(doc,"./db:tag") do |tag|
|
52
|
-
@tag||=[]
|
53
|
-
@tag<< tag.attributes['name']
|
54
|
-
end
|
55
|
-
rating=REXML::XPath.first(doc,"./db:rating")
|
56
|
-
if rating
|
57
|
-
@rating={}
|
58
|
-
@rating['min']=rating.attributes['min']
|
59
|
-
@rating['value']=rating.attributes['value']
|
60
|
-
@rating['max']=rating.attributes['max']
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def collection_id
|
65
|
-
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'douban/subject'
|
3
|
+
require 'douban/author'
|
4
|
+
|
5
|
+
module Douban
|
6
|
+
class Collection
|
7
|
+
|
8
|
+
include Douban::Equal
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def attr_names
|
12
|
+
[
|
13
|
+
:tag,
|
14
|
+
:updated,
|
15
|
+
:subject,
|
16
|
+
:author,
|
17
|
+
:title,
|
18
|
+
:summary,
|
19
|
+
:link,
|
20
|
+
:id,
|
21
|
+
:rating,
|
22
|
+
:status
|
23
|
+
]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
attr_names.each do |attr|
|
27
|
+
attr_accessor attr
|
28
|
+
end
|
29
|
+
def initialize(atom)
|
30
|
+
doc = case atom
|
31
|
+
when REXML::Document then atom.root
|
32
|
+
when REXML::Element then atom
|
33
|
+
else REXML::Document.new(atom).root
|
34
|
+
end
|
35
|
+
subject=REXML::XPath.first(doc,"./db:subject")
|
36
|
+
@subject=Subject.new(subject) if subject
|
37
|
+
author=REXML::XPath.first(doc,"./author")
|
38
|
+
@author=Author.new(author.to_s) if author
|
39
|
+
title=REXML::XPath.first(doc,"./title")
|
40
|
+
@title=title.text if !title.nil?
|
41
|
+
updated=REXML::XPath.first(doc,"./updated")
|
42
|
+
@updated=updated.text if updated
|
43
|
+
@summary = REXML::XPath.first(doc, "./summary/text()").to_s
|
44
|
+
@status = REXML::XPath.first(doc, "./db:status/text()").to_s
|
45
|
+
@link = Hash.new
|
46
|
+
REXML::XPath.each(doc, "./link") do |e|
|
47
|
+
@link[e.attributes["rel"]] = e.attributes["href"]
|
48
|
+
end
|
49
|
+
id=REXML::XPath.first(doc,"./id")
|
50
|
+
@id=id.text if id
|
51
|
+
REXML::XPath.each(doc,"./db:tag") do |tag|
|
52
|
+
@tag||=[]
|
53
|
+
@tag<< tag.attributes['name']
|
54
|
+
end
|
55
|
+
rating=REXML::XPath.first(doc,"./db:rating")
|
56
|
+
if rating
|
57
|
+
@rating={}
|
58
|
+
@rating['min']=rating.attributes['min']
|
59
|
+
@rating['value']=rating.attributes['value']
|
60
|
+
@rating['max']=rating.attributes['max']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def collection_id
|
65
|
+
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
data/lib/douban/event.rb
CHANGED
@@ -1,80 +1,80 @@
|
|
1
|
-
require 'rexml/document'
|
2
|
-
require 'douban/equal'
|
3
|
-
require 'douban/author'
|
4
|
-
|
5
|
-
module Douban
|
6
|
-
class Event
|
7
|
-
include Douban::Equal
|
8
|
-
class << self
|
9
|
-
def attr_names
|
10
|
-
[
|
11
|
-
:id,
|
12
|
-
:title,
|
13
|
-
:category,
|
14
|
-
:author,
|
15
|
-
:link,
|
16
|
-
:summary,
|
17
|
-
:content,
|
18
|
-
:attribute,
|
19
|
-
:location,
|
20
|
-
:when,
|
21
|
-
:where
|
22
|
-
]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
attr_names.each do |attr|
|
26
|
-
attr_accessor attr
|
27
|
-
end
|
28
|
-
def initialize(atom='')
|
29
|
-
doc = case atom
|
30
|
-
when REXML::Document then atom.root
|
31
|
-
when REXML::Element then atom
|
32
|
-
else REXML::Document.new(atom).root
|
33
|
-
end
|
34
|
-
|
35
|
-
@id=REXML::XPath.first(doc,"./id/text()").to_s
|
36
|
-
title=REXML::XPath.first(doc,"./title")
|
37
|
-
@title=title.text if title
|
38
|
-
@category={}
|
39
|
-
category=REXML::XPath.first(doc,"./category")
|
40
|
-
@category['term']=category.attributes['term'] if category
|
41
|
-
@category['scheme']=category.attributes['scheme'] if category
|
42
|
-
@author||=Author.new
|
43
|
-
name=REXML::XPath.first(doc,"//author/name")
|
44
|
-
@author.name=name.text if name
|
45
|
-
uri=REXML::XPath.first(doc,"//author/uri")
|
46
|
-
@author.uri=uri.text if uri
|
47
|
-
REXML::XPath.each(doc,"//author/link") do |link|
|
48
|
-
@author.link||={}
|
49
|
-
@author.link[link.attributes['rel']]=link.attributes['href']
|
50
|
-
end
|
51
|
-
summary=REXML::XPath.first(doc,"./summary")
|
52
|
-
@summary=summary.text if summary
|
53
|
-
content=REXML::XPath.first(doc,"./content")
|
54
|
-
@content=content.text if content
|
55
|
-
REXML::XPath.each(doc,"./link") do |link|
|
56
|
-
@link||={}
|
57
|
-
@link[link.attributes['rel']]=link.attributes['href']
|
58
|
-
end
|
59
|
-
REXML::XPath.each(doc,"./db:attribute") do |attribute|
|
60
|
-
@attribute||={}
|
61
|
-
@attribute[attribute.attributes['name']]=attribute.text
|
62
|
-
end
|
63
|
-
location=REXML::XPath.first(doc,"./db:location")
|
64
|
-
@location=location.text if location
|
65
|
-
@when={}
|
66
|
-
time=REXML::XPath.first(doc,"./gd:when")
|
67
|
-
if time
|
68
|
-
@when['startTime']=time.attributes['startTime']
|
69
|
-
@when['endTime']=time.attributes['endTime']
|
70
|
-
end
|
71
|
-
where=REXML::XPath.first(doc,"./gd:where")
|
72
|
-
@where=where.attributes['valueString'] if where
|
73
|
-
end
|
74
|
-
|
75
|
-
def event_id
|
76
|
-
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'douban/equal'
|
3
|
+
require 'douban/author'
|
4
|
+
|
5
|
+
module Douban
|
6
|
+
class Event
|
7
|
+
include Douban::Equal
|
8
|
+
class << self
|
9
|
+
def attr_names
|
10
|
+
[
|
11
|
+
:id,
|
12
|
+
:title,
|
13
|
+
:category,
|
14
|
+
:author,
|
15
|
+
:link,
|
16
|
+
:summary,
|
17
|
+
:content,
|
18
|
+
:attribute,
|
19
|
+
:location,
|
20
|
+
:when,
|
21
|
+
:where
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
attr_names.each do |attr|
|
26
|
+
attr_accessor attr
|
27
|
+
end
|
28
|
+
def initialize(atom='')
|
29
|
+
doc = case atom
|
30
|
+
when REXML::Document then atom.root
|
31
|
+
when REXML::Element then atom
|
32
|
+
else REXML::Document.new(atom).root
|
33
|
+
end
|
34
|
+
|
35
|
+
@id=REXML::XPath.first(doc,"./id/text()").to_s
|
36
|
+
title=REXML::XPath.first(doc,"./title")
|
37
|
+
@title=title.text if title
|
38
|
+
@category={}
|
39
|
+
category=REXML::XPath.first(doc,"./category")
|
40
|
+
@category['term']=category.attributes['term'] if category
|
41
|
+
@category['scheme']=category.attributes['scheme'] if category
|
42
|
+
@author||=Author.new
|
43
|
+
name=REXML::XPath.first(doc,"//author/name")
|
44
|
+
@author.name=name.text if name
|
45
|
+
uri=REXML::XPath.first(doc,"//author/uri")
|
46
|
+
@author.uri=uri.text if uri
|
47
|
+
REXML::XPath.each(doc,"//author/link") do |link|
|
48
|
+
@author.link||={}
|
49
|
+
@author.link[link.attributes['rel']]=link.attributes['href']
|
50
|
+
end
|
51
|
+
summary=REXML::XPath.first(doc,"./summary")
|
52
|
+
@summary=summary.text if summary
|
53
|
+
content=REXML::XPath.first(doc,"./content")
|
54
|
+
@content=content.text if content
|
55
|
+
REXML::XPath.each(doc,"./link") do |link|
|
56
|
+
@link||={}
|
57
|
+
@link[link.attributes['rel']]=link.attributes['href']
|
58
|
+
end
|
59
|
+
REXML::XPath.each(doc,"./db:attribute") do |attribute|
|
60
|
+
@attribute||={}
|
61
|
+
@attribute[attribute.attributes['name']]=attribute.text
|
62
|
+
end
|
63
|
+
location=REXML::XPath.first(doc,"./db:location")
|
64
|
+
@location=location.text if location
|
65
|
+
@when={}
|
66
|
+
time=REXML::XPath.first(doc,"./gd:when")
|
67
|
+
if time
|
68
|
+
@when['startTime']=time.attributes['startTime']
|
69
|
+
@when['endTime']=time.attributes['endTime']
|
70
|
+
end
|
71
|
+
where=REXML::XPath.first(doc,"./gd:where")
|
72
|
+
@where=where.attributes['valueString'] if where
|
73
|
+
end
|
74
|
+
|
75
|
+
def event_id
|
76
|
+
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
data/lib/douban/miniblog.rb
CHANGED
@@ -1,63 +1,63 @@
|
|
1
|
-
require'rexml/document'
|
2
|
-
|
3
|
-
require 'douban/author'
|
4
|
-
require 'douban/equal'
|
5
|
-
|
6
|
-
module Douban
|
7
|
-
class Miniblog
|
8
|
-
include Douban::Equal
|
9
|
-
class << self
|
10
|
-
def attr_names
|
11
|
-
[
|
12
|
-
:id,
|
13
|
-
:title,
|
14
|
-
:category,
|
15
|
-
:published,
|
16
|
-
:link,
|
17
|
-
:content,
|
18
|
-
:attribute,
|
19
|
-
:author
|
20
|
-
]
|
21
|
-
end
|
22
|
-
end
|
23
|
-
attr_names.each do |attr|
|
24
|
-
attr_accessor attr
|
25
|
-
end
|
26
|
-
def initialize(atom)
|
27
|
-
doc = case atom
|
28
|
-
when REXML::Document then atom.root
|
29
|
-
when REXML::Element then atom
|
30
|
-
else REXML::Document.new(atom).root
|
31
|
-
end
|
32
|
-
title=REXML::XPath.first(doc,"./title")
|
33
|
-
@title=title.text if title
|
34
|
-
published=REXML::XPath.first(doc,"./published")
|
35
|
-
@published=published.text if published
|
36
|
-
REXML::XPath.each(doc,"./link") do |link|
|
37
|
-
@link||={}
|
38
|
-
@link[link.attributes['rel']]=link.attributes['href']
|
39
|
-
end
|
40
|
-
id=REXML::XPath.first(doc,"./id")
|
41
|
-
@id=id.text if id
|
42
|
-
REXML::XPath.each(doc,"./db:attribute") do |attr|
|
43
|
-
@attribute||={}
|
44
|
-
@attribute[attr.attributes['name']]=attr.text
|
45
|
-
end
|
46
|
-
category=REXML::XPath.first(doc,"./category")
|
47
|
-
if category
|
48
|
-
@category={}
|
49
|
-
@category['term']=category.attributes['term']
|
50
|
-
@category['scheme']=category.attributes['scheme']
|
51
|
-
end
|
52
|
-
content=REXML::XPath.first(doc,"./content")
|
53
|
-
@content=content.text if content
|
54
|
-
author=REXML::XPath.first(doc,"./author")
|
55
|
-
@author=Author.new(author.to_s) if author
|
56
|
-
end
|
57
|
-
|
58
|
-
def miniblog_id
|
59
|
-
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
1
|
+
require'rexml/document'
|
2
|
+
|
3
|
+
require 'douban/author'
|
4
|
+
require 'douban/equal'
|
5
|
+
|
6
|
+
module Douban
|
7
|
+
class Miniblog
|
8
|
+
include Douban::Equal
|
9
|
+
class << self
|
10
|
+
def attr_names
|
11
|
+
[
|
12
|
+
:id,
|
13
|
+
:title,
|
14
|
+
:category,
|
15
|
+
:published,
|
16
|
+
:link,
|
17
|
+
:content,
|
18
|
+
:attribute,
|
19
|
+
:author
|
20
|
+
]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
attr_names.each do |attr|
|
24
|
+
attr_accessor attr
|
25
|
+
end
|
26
|
+
def initialize(atom)
|
27
|
+
doc = case atom
|
28
|
+
when REXML::Document then atom.root
|
29
|
+
when REXML::Element then atom
|
30
|
+
else REXML::Document.new(atom).root
|
31
|
+
end
|
32
|
+
title=REXML::XPath.first(doc,"./title")
|
33
|
+
@title=title.text if title
|
34
|
+
published=REXML::XPath.first(doc,"./published")
|
35
|
+
@published=published.text if published
|
36
|
+
REXML::XPath.each(doc,"./link") do |link|
|
37
|
+
@link||={}
|
38
|
+
@link[link.attributes['rel']]=link.attributes['href']
|
39
|
+
end
|
40
|
+
id=REXML::XPath.first(doc,"./id")
|
41
|
+
@id=id.text if id
|
42
|
+
REXML::XPath.each(doc,"./db:attribute") do |attr|
|
43
|
+
@attribute||={}
|
44
|
+
@attribute[attr.attributes['name']]=attr.text
|
45
|
+
end
|
46
|
+
category=REXML::XPath.first(doc,"./category")
|
47
|
+
if category
|
48
|
+
@category={}
|
49
|
+
@category['term']=category.attributes['term']
|
50
|
+
@category['scheme']=category.attributes['scheme']
|
51
|
+
end
|
52
|
+
content=REXML::XPath.first(doc,"./content")
|
53
|
+
@content=content.text if content
|
54
|
+
author=REXML::XPath.first(doc,"./author")
|
55
|
+
@author=Author.new(author.to_s) if author
|
56
|
+
end
|
57
|
+
|
58
|
+
def miniblog_id
|
59
|
+
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/lib/douban/note.rb
CHANGED
@@ -1,60 +1,60 @@
|
|
1
|
-
require'rexml/document'
|
2
|
-
|
3
|
-
require 'douban/author'
|
4
|
-
require 'douban/equal'
|
5
|
-
|
6
|
-
module Douban
|
7
|
-
class Note
|
8
|
-
include Douban::Equal
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def attr_names
|
12
|
-
[
|
13
|
-
:id,
|
14
|
-
:title,
|
15
|
-
:summary,
|
16
|
-
:updated,
|
17
|
-
:published,
|
18
|
-
:link,
|
19
|
-
:content,
|
20
|
-
:attribute,
|
21
|
-
:author
|
22
|
-
]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
attr_names.each do |attr|
|
26
|
-
attr_accessor attr
|
27
|
-
end
|
28
|
-
def initialize(doc)
|
29
|
-
doc = REXML::Document.new(doc).root unless doc.kind_of?(REXML::Element)
|
30
|
-
doc = doc.root if doc.kind_of?(REXML::Document)
|
31
|
-
|
32
|
-
title=REXML::XPath.first(doc,"./title")
|
33
|
-
@title=title.text if title
|
34
|
-
published=REXML::XPath.first(doc,"./published")
|
35
|
-
@published=published.text if published
|
36
|
-
updated=REXML::XPath.first(doc,"./updated")
|
37
|
-
@updated=updated.text if updated
|
38
|
-
REXML::XPath.each(doc,"./link") do |link|
|
39
|
-
@link||={}
|
40
|
-
@link[link.attributes['rel']]=link.attributes['href']
|
41
|
-
end
|
42
|
-
id=REXML::XPath.first(doc,"./id")
|
43
|
-
@id=id.text if id
|
44
|
-
REXML::XPath.each(doc,"./db:attribute") do |attr|
|
45
|
-
@attribute||={}
|
46
|
-
@attribute[attr.attributes['name']]=attr.text
|
47
|
-
end
|
48
|
-
content=REXML::XPath.first(doc,"./content")
|
49
|
-
@content=content.text if content
|
50
|
-
summary=REXML::XPath.first(doc,"./summary")
|
51
|
-
@summary=summary.text if summary
|
52
|
-
author=REXML::XPath.first(doc,"./author")
|
53
|
-
@author=Author.new(author.to_s) if author
|
54
|
-
end
|
55
|
-
|
56
|
-
def note_id
|
57
|
-
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
1
|
+
require'rexml/document'
|
2
|
+
|
3
|
+
require 'douban/author'
|
4
|
+
require 'douban/equal'
|
5
|
+
|
6
|
+
module Douban
|
7
|
+
class Note
|
8
|
+
include Douban::Equal
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def attr_names
|
12
|
+
[
|
13
|
+
:id,
|
14
|
+
:title,
|
15
|
+
:summary,
|
16
|
+
:updated,
|
17
|
+
:published,
|
18
|
+
:link,
|
19
|
+
:content,
|
20
|
+
:attribute,
|
21
|
+
:author
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
attr_names.each do |attr|
|
26
|
+
attr_accessor attr
|
27
|
+
end
|
28
|
+
def initialize(doc)
|
29
|
+
doc = REXML::Document.new(doc).root unless doc.kind_of?(REXML::Element)
|
30
|
+
doc = doc.root if doc.kind_of?(REXML::Document)
|
31
|
+
|
32
|
+
title=REXML::XPath.first(doc,"./title")
|
33
|
+
@title=title.text if title
|
34
|
+
published=REXML::XPath.first(doc,"./published")
|
35
|
+
@published=published.text if published
|
36
|
+
updated=REXML::XPath.first(doc,"./updated")
|
37
|
+
@updated=updated.text if updated
|
38
|
+
REXML::XPath.each(doc,"./link") do |link|
|
39
|
+
@link||={}
|
40
|
+
@link[link.attributes['rel']]=link.attributes['href']
|
41
|
+
end
|
42
|
+
id=REXML::XPath.first(doc,"./id")
|
43
|
+
@id=id.text if id
|
44
|
+
REXML::XPath.each(doc,"./db:attribute") do |attr|
|
45
|
+
@attribute||={}
|
46
|
+
@attribute[attr.attributes['name']]=attr.text
|
47
|
+
end
|
48
|
+
content=REXML::XPath.first(doc,"./content")
|
49
|
+
@content=content.text if content
|
50
|
+
summary=REXML::XPath.first(doc,"./summary")
|
51
|
+
@summary=summary.text if summary
|
52
|
+
author=REXML::XPath.first(doc,"./author")
|
53
|
+
@author=Author.new(author.to_s) if author
|
54
|
+
end
|
55
|
+
|
56
|
+
def note_id
|
57
|
+
/\/(\d+)$/.match(@id)[1].to_i rescue nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|