質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2544閲覧

AtomAPIからGETし,Xpathで指定ワードのURLを全て取得する

raaacho

総合スコア28

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

XPath(XML Path)

XML Path Language (XPath; XMLパス言語)は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文の事をいいます。XPathはXMLとは別の構文を使用します。XMLドキュメントの抽象、論理ストラクチャ上で動作します。

XMLパーサ

XML文書のテキストデータだけを抜き出して、アプリケーションソフトが利用しやすい形式に変換させるソフトウェアをXMLパーサと呼びます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/12/28 12:49

編集2016/12/28 14:56

有報キャッチャー(http://resource.ufocatch.com/)というAtomAPIを実装し、このURL(http://resource.ufocatch.com/atom/edinet/query/6190)に対してGETリクエストをし、四半期報告書のURLを全て取得したいです.
そこで,以下のようなコードを考えたのですが、これではページの一番初めに出てくる四半期報告書のURIしか取得できません. 全ての四半期報告書のURIを取得するにはどのようなコードを組めばいいでしょうか?
アドバイスお願いいたします.

ruby

1require 'net/http' 2require 'uri' 3require 'rexml/document' 4 5uri = URI.parse("http://resource.ufocatch.com/atom/edinet/query/6190") 6doc = REXML::Document.new(Net::HTTP.get(uri)) 7 8shihanki_uri = REXML::XPath.match(doc,'/feed/entry/title[contains(text(),"四半期報告書")]/following-sibling::link[1]') 9shihanki_uri = shihanki_uri.to_s 10shihanki_uri = shihanki_uri.match(/href='(.+)'/) 11 12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

shihanki_uri = REXML::XPath.match(doc,'/feed/entry/title[contains(text(),"四半期報告書")]/following-sibling::link[1]')
上のコードのlink[1][1]を指定しているため、一番初めに出てくる四半期報告書のURIしか取得できない状態になっています。
下のように[1]を外して、全て取得して、pdfのパスのみ取得することで実現できます。
shihanki_uri_list = REXML::XPath.match(doc,'/feed/entry/title[contains(text(),"四半期報告書")]/following-sibling::link')

ruby

1require 'net/http' 2require 'uri' 3require 'rexml/document' 4 5uri = URI.parse("http://resource.ufocatch.com/atom/edinet/query/6190") 6doc = REXML::Document.new(Net::HTTP.get(uri)) 7 8shihanki_uri_list = REXML::XPath.match(doc,'/feed/entry/title[contains(text(),"四半期報告書")]/following-sibling::link') 9 10url_list = 11 shihanki_uri_list.reduce([]) do |list, shihanki_uri| 12 matched = shihanki_uri.to_s.match(/href='(.+\/pdf\/.+?)'/) 13 next list unless matched 14 15 list.push matched[1] 16 end 17 18p url_list 19#=> ["http://resource.ufocatch.com/pdf/edinet/ED2016111401720", "http://resource.ufocatch.com/pdf/edinet/ED2016081201593"]

投稿2016/12/29 02:31

cameluby

総合スコア891

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問