|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
Index: lib/alexandria/book_providers/worldcat.rb
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
===================================================================
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
--- lib/alexandria/book_providers/worldcat.rb (revision 1088)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+++ lib/alexandria/book_providers/worldcat.rb (revision 1089)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
@@ -23,7 +23,11 @@
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
# New WorldCat provider, taken from the Palatina MetaDataSource and
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
# modified to fit the structure of Alexandria book providers.
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
# (25 Feb 2009)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+#
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+# Updated from Palatina, to reflect changes in the worldcat website.
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+# (1 Sep 2009)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
require 'cgi'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
require 'alexandria/net'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
@@ -136,7 +140,17 @@
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
raise NoResultsError
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- title_header = doc%'h1.item-title'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ if doc % 'table.table-results'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ log.info { "Found multiple results for lookup: fetching first result only" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ search_results = parse_search_result_data(html)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ first = search_results.first
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ rslt2 = transport.get_response(URI.parse(first[:url]))
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ html2 = rslt2.body
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ doc = Hpricot(html2)
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ title_header = doc%'h1.title'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
title = title_header.inner_text if title_header
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
unless title
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
log.warn { "Unexpected lack of title from WorldCat lookup" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
@@ -145,18 +159,25 @@
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
log.info { "Found book #{title} at WorldCat" }
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
authors = []
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- authors_div = doc%'div.item-author'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- if authors_div
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- (authors_div/:a).each do |a|
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ authors_tr = doc%'tr#details-allauthors'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ if authors_tr
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ (authors_tr/:a).each do |a|
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
authors << a.inner_text
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
# can we do better? get the City name?? or multiple publishers?
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- publisher_row = doc%'td.label[text()*=Publisher]/..'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ bibdata = doc % 'div#bibdata'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ bibdata_table = bibdata % :table
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ publisher_row = bibdata_table % 'th[text()*=Publisher]/..'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
if publisher_row
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
publication_info = (publisher_row/'td').last.inner_text
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- publication_info =~ /:*([^;,]+)/
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ if publication_info.index(':')
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ publication_info =~ /:[\s]*([^;,]+)/
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ publication_info =~ /([^;,]+)/
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ end
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
publisher = $1
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
publication_info =~ /([12][0-9]{3})/
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
year = $1.to_i if $1
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
@@ -167,7 +188,7 @@
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
isbn = search_isbn
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
unless isbn
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
- isbn_row = doc%'td.label[text()*=ISBN]/..'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
+ isbn_row = doc % 'tr#details-standardno' ##bibdata_table % 'th[text()*=ISBN]/..'
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
if isbn_row
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
isbns = (isbn_row/'td').last.inner_text.split
|
|
![](https://seccdn.libravatar.org/avatar/5c7f8fd6810ac2f480ef0a688f6b506f4e9d92a6c7de14adb8942de524cb17d4?s=16&d=retro) |
113d69e |
isbn = Library.canonicalise_isbn(isbns.first)
|