Проблемы с синтаксическим анализом Google Data Booksearch API XML в Ruby - PullRequest
1 голос
/ 19 ноября 2011

Я пытаюсь проанализировать какой-то XML, полученный из API Google Data Booksearch , и у меня возникают проблемы при попытке нацеливания на конкретный элемент.В настоящее время мой код выглядит так:

require 'gdata'

client = GData::Client::BookSearch.new
feed = client.get("http://books.google.com/books/feeds/volumes?q=Foundation").to_xml

books = []

feed.elements.each('entry') do |entry|
  book = {
  :title   => entry.elements['title'].text,
  :author  => entry.elements['dc:creator'].text,
  :book_id => entry.elements['dc:identifier'].text
  }

  books.push(book)
end

p books

, и все это отлично работает, но я хочу добавить миниатюрный URL-адрес к хэшу книги.Тег с миниатюрным URL каждой книги выглядит так:

<feed>
  <entry>
    ...
    <link rel="http://schemas.google.com/books/2008/thumbnail" type="image/x-unknown" href="http://bks6.books.google.com/books?id=ID5P7xbmcO8C&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_gdata"/>
    ...
  </entry>
</feed>

Я хочу получить содержимое атрибута href из этого элемента, и я не совсем уверен, как.Может ли кто-нибудь помочь мне здесь?

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Похоже, библиотека Ruby GData уже использует REXML , поэтому я думаю, что вы могли бы добавить что-то подобное в хэш своей книги (заимствуя XPath Марка):

:thumb_href => entry.get_elements('//link[@rel="http://schemas.google.com/books/2008/thumbnail"]')[0].attribute('href').to_s

Я почтизабыл ".to_s", который вам понадобится, если вы хотите рассматривать его как строку.: -)

1 голос
/ 19 ноября 2011

Используя этот запрос, я смог извлечь href в XML Copy Editor.

//link[@rel="http://schemas.google.com/books/2008/thumbnail"]/@href

Вам нужно открыть документ с помощью Nokogiri, а затем запустить xpath для этого документа, что-то вроде этого:

doc = Nokogiri::HTML(open('http://books.google.com/books/feeds/volumes?q=Foundation'))
doc.xpath('//link[@rel="http://schemas.google.com/books/2008/thumbnail"]/@href').each do |link|
    puts link.content
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...