Class: Alexandria::BookProviders::DoubanProvider
Constant Summary
collapse
- SITE =
"http://www.douban.com"
- BASE_URL =
"http://api.douban.com/book/subjects?q=%s&max-results=5&alt=json"
Instance Attribute Summary
#fullname, #name, #prefs
Instance Method Summary
collapse
Methods included from Logging
included, #log
#<=>, #abstract?, abstract?, #action_name, #enabled, #reinitialize, #remove, #toggle_enabled, #transport, unabstract, #variable_name
Constructor Details
Returns a new instance of DoubanProvider.
24
25
26
27
|
# File 'lib/alexandria/book_providers/douban.rb', line 24
def initialize
super("Douban", "Douban (China)")
prefs.read
end
|
Instance Method Details
#parse_search_result(response) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/alexandria/book_providers/douban.rb', line 70
def parse_search_result(response)
book_search_results = []
begin
dbresult = YAML.safe_load(json2yaml(response))
if dbresult["opensearch:totalResults"]["$t"].to_i > 0
dbresult["entry"].each do |item|
name = item["title"]["$t"]
isbn = nil
publisher = nil
pubdate = nil
binding = nil
item["db:attribute"].each do |av|
isbn = av["$t"] if av["@name"] == "isbn13"
publisher = av["$t"] if av["@name"] == "publisher"
pubdate = av["$t"] if av["@name"] == "pubdate"
binding = av["$t"] if av["@name"] == "binding"
end
authors = if item["author"]
item["author"].map { |a| a["name"]["$t"] }
else
[]
end
image_url = nil
item["link"].each do |av|
image_url = av["@href"] if av["@rel"] == "image"
end
book = Book.new(name, authors, isbn, publisher, pubdate, binding)
book_search_results << [book, image_url]
end
end
rescue StandardError => ex
log.warn(ex.backtrace.join('\n'))
end
book_search_results
end
|
#search(criterion, type) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/alexandria/book_providers/douban.rb', line 33
def search(criterion, type)
keyword = criterion
request_url = BASE_URL % CGI.escape(keyword)
search_response = transport.get_response(URI.parse(request_url))
results = parse_search_result(search_response.body)
raise NoResultsError if results.empty?
if type == SEARCH_BY_ISBN
results.first
else
results
end
end
|
#url(_book) ⇒ Object
29
30
31
|
# File 'lib/alexandria/book_providers/douban.rb', line 29
def url(_book)
nil
end
|