Skip to content

Commit 29bb273

Browse files
authored
follow API changes in NDL Search (#1854)
1 parent add3da3 commit 29bb273

File tree

65 files changed

+2774
-4122
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+2774
-4122
lines changed

app/helpers/enju_biblio/application_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def identifier_link(identifier)
5757
when 'doi'
5858
link_to identifier.body, "https://doi.org/#{identifier.body}"
5959
when 'iss_itemno'
60-
link_to identifier.body, "https://iss.ndl.go.jp/books/#{identifier.body}"
60+
link_to identifier.body, "https://ndlsearch.ndl.go.jp/books/#{identifier.body}"
6161
when 'lccn'
6262
link_to identifier.body, "https://lccn.loc.gov/#{identifier.body}"
6363
when 'ncid'

app/models/concerns/enju_ndl/enju_manifestation.rb

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ def import_isbn(isbn)
88
manifestation
99
end
1010

11+
def ndl_bib_doc(ndl_bib_id)
12+
url = "https://ndlsearch.ndl.go.jp/api/sru?operation=searchRetrieve&version=1.2&query=itemno=#{ndl_bib_id}&recordSchema=dcndl&onlyBib=true"
13+
Nokogiri::XML(Nokogiri::XML(URI.parse(url).read).at('//xmlns:recordData').content)
14+
end
15+
1116
# Use http://www.ndl.go.jp/jp/dlib/standards/opendataset/aboutIDList.txt
1217
def import_ndl_bib_id(ndl_bib_id)
13-
url = "https://iss.ndl.go.jp/books/R100000002-I#{ndl_bib_id}-00.rdf"
14-
doc = Nokogiri::XML(Faraday.get(url).body)
15-
import_record(doc)
18+
import_record(ndl_bib_doc(ndl_bib_id))
1619
end
1720

1821
def import_from_ndl_search(options)
@@ -105,6 +108,10 @@ def import_record(doc)
105108
when 'http://purl.org/dc/dcmitype/StillImage'
106109
content_type = ContentType.find_by(name: 'still_image')
107110
end
111+
112+
# NDLサーチのmaterialTypeは複数設定されているが、
113+
# content_typeはその最初の1件を用いて取得する
114+
break if content_type
108115
end
109116

110117
admin_identifier = doc.at('//dcndl:BibAdminResource[@rdf:about]').attributes['about'].value
@@ -238,14 +245,15 @@ def create_additional_attributes(doc, manifestation)
238245
end
239246

240247
def search_ndl(query, options = {})
241-
options = { dpid: 'iss-ndl-opac', item: 'any', idx: 1, per_page: 10, raw: false, mediatype: 1 }.merge(options)
248+
options = { dpid: 'iss-ndl-opac', item: 'any', idx: 1, per_page: 10, raw: false, mediatype: 'books' }.merge(options)
242249
doc = nil
243250
results = {}
244251
startrecord = options[:idx].to_i
245252
startrecord = 1 if startrecord == 0
246-
url = "https://iss.ndl.go.jp/api/opensearch?dpid=#{options[:dpid]}&#{options[:item]}=#{format_query(query)}&cnt=#{options[:per_page]}&idx=#{startrecord}&mediatype=#{options[:mediatype]}"
253+
url = "https://ndlsearch.ndl.go.jp/api/opensearch?dpid=#{options[:dpid]}&#{options[:item]}=#{format_query(query)}&cnt=#{options[:per_page]}&idx=#{startrecord}&mediatype=#{options[:mediatype]}"
254+
247255
if options[:raw] == true
248-
Faraday.get(url).body
256+
URI.parse(url).read
249257
else
250258
RSS::Rss::Channel.install_text_element('openSearch:totalResults', 'http://a9.com/-/spec/opensearchrss/1.0/', '?', 'totalResults', :text, 'openSearch:totalResults')
251259
RSS::BaseListener.install_get_text_element 'http://a9.com/-/spec/opensearchrss/1.0/', 'totalResults', 'totalResults='
@@ -263,14 +271,16 @@ def normalize_isbn(isbn)
263271

264272
def return_xml(isbn: nil, jpno: nil)
265273
if jpno.present?
266-
rss = search_ndl(jpno, dpid: 'iss-ndl-opac', item: 'jpno')
274+
url = "https://ndlsearch.ndl.go.jp/api/sru?operation=searchRetrieve&version=1.2&query=jpno=#{jpno}&recordSchema=dcndl&onlyBib=true"
275+
elsif isbn.present?
276+
url = "https://ndlsearch.ndl.go.jp/api/sru?operation=searchRetrieve&version=1.2&query=isbn=#{isbn}&recordSchema=dcndl&onlyBib=true"
267277
else
268-
rss = search_ndl(isbn, dpid: 'iss-ndl-opac', item: 'isbn')
278+
return
269279
end
270280

271-
if rss.items.first
272-
doc = Nokogiri::XML(Faraday.get("#{rss.items.first.link}.rdf").body)
273-
end
281+
response = Nokogiri::XML(URI.parse(url).read).at('//xmlns:recordData')&.content
282+
283+
Nokogiri::XML(response) if response
274284
end
275285

276286
private

app/models/concerns/enju_oai/oai_model.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def to_dcndl
7979
identifiers.each do |identifier|
8080
case identifier.identifier_type.try(:name)
8181
when 'isbn'
82-
xml.tag! "rdfs:seeAlso", "rdf:resource" => "http://iss.ndl.go.jp/isbn/#{identifier.body}"
82+
# xml.tag! "rdfs:seeAlso", "rdf:resource" => "http://iss.ndl.go.jp/isbn/#{identifier.body}"
8383
xml.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/ISBN"
8484
when 'issn'
8585
xml.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/ISSN"

app/models/ndl_book.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def self.search(query, page = 1, _per_page = per_page)
5252
cnt = per_page
5353
page = 1 if page.to_i < 1
5454
idx = (page.to_i - 1) * cnt + 1
55-
doc = Nokogiri::XML(Manifestation.search_ndl(query, cnt: cnt, page: page, idx: idx, raw: true, mediatype: 1).to_s)
55+
doc = Nokogiri::XML(Manifestation.search_ndl(query, cnt: cnt, page: page, idx: idx, raw: true, mediatype: 'books').to_s)
5656
items = doc.xpath('//channel/item').map{|node| new node }
5757
total_entries = doc.at('//channel/openSearch:totalResults').content.to_i
5858

@@ -66,7 +66,7 @@ def self.import_from_sru_response(itemno)
6666
identifier = NdlBibIdRecord.find_by(body: itemno)
6767
return if identifier
6868

69-
url = "https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl&maximumRecords=1&query=%28itemno=#{itemno}%29&onlyBib=true"
69+
url = "https://ndlsearch.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl&maximumRecords=1&query=%28itemno=#{itemno}%29&onlyBib=true"
7070
xml = Faraday.get(url).body
7171
response = Nokogiri::XML(xml).at('//xmlns:recordData')
7272
return unless response.try(:content)
@@ -75,7 +75,12 @@ def self.import_from_sru_response(itemno)
7575
end
7676

7777
def subjects
78-
@node.xpath('//dcterms:subject/rdf:Description').map{|a| {id: a.attributes['about'].content, value: a.at('./rdf:value').content}}
78+
@node.xpath('//dcterms:subject/rdf:Description').map{|a|
79+
{
80+
id: a.attributes['about'].content,
81+
value: a.at('./rdf:value').content
82+
}
83+
}
7984
end
8085

8186
def authors

app/views/ndl_books/index.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<% if @query.present? %>
5050
<div id="submenu" class="ui-corner-all ui-widget-content">
5151
<ul>
52-
<li><%= link_to t('enju_ndl.same_query_in_ndl_search'), "https://iss.ndl.go.jp/books?any=#{u(@query)}" -%></li>
52+
<li><%= link_to t('enju_ndl.same_query_in_ndl_search'), "https://ndlsearch.ndl.go.jp/books?any=#{u(@query)}" -%></li>
5353
</ul>
5454
</div>
5555
<% end %>

app/views/page/about.en.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
</li>
3030
<li>This system has been using bibliographic data from the following services and databases.
3131
<ul>
32-
<li><a href="https://iss.ndl.go.jp/">NDL Search</a></li>
32+
<li><a href="https://ndlsearch.ndl.go.jp/">NDL Search</a></li>
3333
<li><a href="https://crd.ndl.go.jp/jp/public/">National Diet Library Collaborative Reference Database</a></li>
3434
</ul>
3535
</li>

app/views/page/about.ja.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</li>
2929
<li>このシステムは、以下のサービスやデータベースから得た書誌データを利用しています。
3030
<ul>
31-
<li><a href="https://iss.ndl.go.jp/">国立国会図書館サーチ (NDLサーチ)</a></li>
31+
<li><a href="https://ndlsearch.ndl.go.jp/">国立国会図書館サーチ (NDLサーチ)</a></li>
3232
<li><a href="https://crd.ndl.go.jp/jp/public/">国立国会図書館レファレンス協同データベース</a></li>
3333
</ul>
3434
</li>

0 commit comments

Comments
 (0)