Class: Alexandria::BookProviders::WorldCatProvider

Inherits:
WebsiteBasedProvider show all
Includes:
Logging
Defined in:
lib/alexandria/book_providers/worldcat.rb

Constant Summary collapse

SITE =
'http://www.worldcat.org'
BASE_SEARCH_URL =

type, term

"#{SITE}/search?q=%s%s&qt=advanced"

Instance Attribute Summary

Attributes inherited from AbstractProvider

#fullname, #name, #prefs

Instance Method Summary collapse

Methods included from Logging

included, #log

Methods inherited from WebsiteBasedProvider

#html_to_doc, #text_of

Methods inherited from AbstractProvider

#<=>, abstract?, #abstract?, #action_name, #enabled, #reinitialize, #remove, #toggle_enabled, #transport, unabstract, #variable_name

Constructor Details

#initializeWorldCatProvider

Returns a new instance of WorldCatProvider.



45
46
47
48
49
# File 'lib/alexandria/book_providers/worldcat.rb', line 45

def initialize
  super('WorldCat', 'WorldCat')
  # prefs.add("enabled", _("Enabled"), true, [true,false])
  prefs.read
end

Instance Method Details

#search(criterion, type) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/alexandria/book_providers/worldcat.rb', line 51

def search(criterion, type)
  # puts create_search_uri(type, criterion)
  req = create_search_uri(type, criterion)
  puts req if $DEBUG
  html_data = transport.get_response(URI.parse(req))
  # Note: I tried to use Alexandria::WWWAgent,
  #       but this caused failures here (empty pages...)
  #       find out how the requests differ

  # puts html_data.class
  if type == SEARCH_BY_ISBN
    parse_result_data(html_data.body, criterion)
  else
    results = parse_search_result_data(html_data.body)
    raise NoResultsError if results.empty?

    results.map { |result| get_book_from_search_result(result) }
  end
end

#url(book) ⇒ Object



71
72
73
74
75
76
# File 'lib/alexandria/book_providers/worldcat.rb', line 71

def url(book)
  create_search_uri(SEARCH_BY_ISBN, book.isbn)
rescue => ex
  log.warn { "Cannot create url for book #{book}; #{ex.message}" }
  nil
end