Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/342-0769cc98

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

【Ruby】Nokogiri xpathの第2パラメータ

Yahoo APIのXMLのレスポンスをNokogiriでパースを試みる。
http://developer.yahoo.co.jp/webapi/chiebukuro/chiebukuro/v1/detailsearch.html
上記URLにのってる、サンプルレスポンスを例に以下コードを示す。


#!/opt/local/bin/ruby
require 'rubygems'
require "nokogiri"

doc=Nokogiri::XML(DATA.read)
namespaces={
"chiebukuro"=>"urn:yahoo:jp:chiebukuro"
}


puts doc.xpath('//chiebukuro:ResultSet',namespaces).attribute('totalResultsReturned').value

puts doc.xpath('//chiebukuro:AnswerId',namespaces).text
__END__
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns="urn:yahoo:jp:chiebukuro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:jp:chiebukuro http://chiebukuro.yahooapis.jp/Chiebukuro/V1/detailSearchResponse.xsd" totalResultsAvailable="0" totalResultsReturned="0" firstResultPosition="1" maxPosition="0" prevFirstPosition="1" maxItems="100">
<Result>
<QuestionId>123456789</QuestionId>
<CategoryId>2078297572</CategoryId>
<SpaceIdDetail>2079587465</SpaceIdDetail>
<Title><![CDATA[質問タイトル]]></Title>
<Content><![CDATA[質問全体]]></Content>
<BestAnswerContent><![CDATA[ベストアンサー本文]]></BestAnswerContent>
<ViewCount>0</ViewCount>
<VoteCount>0</VoteCount>
<ReviewCount>0</ReviewCount>
<QuestionPostDate>2010-12-14T19:24:00+09:00</QuestionPostDate>
<QuestionEditDate/>
<QuestionVoteDate/>
<QuestionEndDate>2010-12-21T19:24:00+09:00</QuestionEndDate>
<QuestionFinishDate>2010-12-14T19:46:35+09:00</QuestionFinishDate>
<RewardDate>2010-12-14T19:46:35+09:00</RewardDate>
<Reward><![CDATA[お礼本文]]></Reward>
<PcQuestionUrl><![CDATA[http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q123456789]]></PcQuestionUrl>
<MobileQuestionUrl><![CDATA[http://chie.mobile.yahoo.co.jp/p/chie/qa/view?qid=123456789]]></MobileQuestionUrl>
<Image/>
<AttributeCode><![CDATA[]]></AttributeCode>
<CategoryIdPath>2078297513|2078297558|2078297572</CategoryIdPath>
<Category><![CDATA[あの人は今]]></Category>
<CategoryPath><![CDATA[エンターテインメントと趣味|芸能人|あの人は今]]></CategoryPath>
<QuestionStatus>solved</QuestionStatus>
<AnswerCount>1</AnswerCount>
<AnswerList>
<BestAnswer>
<AnswerId>123456789</AnswerId>
<AnswerStatus>ba</AnswerStatus>
<Content><![CDATA[ベストアンサー本文]]></Content>
<AnswerPostDate>2010-12-14T19:45:18+09:00</AnswerPostDate>
<AnswerEditDate/>
<AttributeCode><![CDATA[]]></AttributeCode>
<Image/>
</BestAnswer>
</AnswerList>
</Result>
</ResultSet>


doc.xpathの第2パラメータにnamespacesを与えないとダメ。

以下が参考になりました。
http://mebebre.hatenablog.com/entry/2012/09/29/233000
https://classic.scraperwiki.com/scrapers/test_235/edit/

namespacesの中に何を与えたら良いのかはよく解らないが、雰囲気というか空気を読んでカンで設定すればおkです。
xsi:schemaLocationとか、SOAPとかなんですかねぇ。 しらないけど。

nokogiriの使い方を調べて云々するくらいなら、普通に正規表現でscanした方がイイ気がします。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/342-0769cc98

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。