Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2018/03/22 (木)

NDLからまとめてデータを取得する&ISBNチェックディジット

| 01:06 | NDLからまとめてデータを取得する&ISBNチェックディジット - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - NDLからまとめてデータを取得する&ISBNチェックディジット - 雪乃☆雫のなでしこ日和 NDLからまとめてデータを取得する&ISBNチェックディジット - 雪乃☆雫のなでしこ日和 のブックマークコメント

 の後たいしたコトはしてませんが、連続して書籍データを取得するのは、10件ほどのデータで1秒隔くらいでお試ししたところ、案外すんなりと快調に取得することが出来ました☆

 ・・・っと思っていたら、なんか突然モノスゴク遅くなることもあるみたい~。

 こっ、コレは、こんなにクエリ送ってくんなと怒られてるんですかね><

 んなに無茶な送りっぷりでは無いつもりだったんですがね・・・

 それとも単に向こうさんが何らかの事情で遅くなってる?

 まあ、応答なしとかになって焦っても、最終的には正常終了してデータも取れてるので、パソコンやインターネットなんて遅いモノだと思っていれば、何の問題もありません(違;)

 どっちにしても、タイトルがびみょーだったり、ISBNで検索しても、点字の資料とか何とかで2個以上上がってきちゃうとかあるし(mediatypeの設定で解決するかと思ったらしなかった)で、結局は修正が必要そうだし、バーコードでも読めるんならいいですが、ISBN入力するだけでも結構めんどーで、一度にんな大量に処理する予定は無いんですけどね。


 でっ、こんな感じ?

 肝心の部分は、前のと何も変わってないんですけどね;;;

書籍データ=。取得データ=。
ファイル名=今日の「/」を置換「-」の「:」を置換「.csvISBNデータ=「9784591153062
9784041047675
9784416311165
9784091898425
9784861349157
9784885745669
9784101445069
9784122062023
4893635360
4893635840」

(ISBNデータの要素数
  ISBNデータ[回数-1]で書籍情報取得。
  取得データに書籍データを一行追加。
  書籍データは。
  1秒待つ。
取得データをファイル名に保存終わる。
#-----------------------------------------------------------
# http://iss.ndl.go.jp/information/api/
*書籍情報取得(ISBNで)
  検索URLは「http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl_simple&query=mediatype=1 AND isbn={ISBN}」
  検索URLからHTTPデータ取得。
  データ=それUTF8_SJIS変換。
  
  ISBNISBNチェック。
  もしそれ=0ならば、書籍データは「エラー!,"{ISBN}"」。戻る。
  ヒット数=データから「numberOfRecords」のタグ切り出しし、それタグ削除。
  もし、ヒット数=0ならば、書籍データは「未検出!,"{ISBN}"」。戻る。
  
  データ=データから「record」のタグ切り出し。
  データを「</record>」で区切る。
  (データの要素数
    C=回数-1。
    書籍データ[C][0]=データ[C]から「dc:title」のタグ切り出しし、それタグ削除。
    書籍データ[C][1]=データ[C]から「dcndl:titleTranscription」のタグ切り出しし、それタグ削除。
    書籍データ[C][2]=データ[C]から「dc:creator」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
    書籍データ[C][3]=データ[C]から「dcndl:creatorTranscription」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
    書籍データ[C][4]=データ[C]から「dcndl:volume」のタグ切り出しし、それタグ削除。
    書籍データ[C][5]=データ[C]から「dcndl:seriesTitle」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
    書籍データ[C][6]=データ[C]から「dc:publisher」のタグ切り出しし、それタグ削除。
  
    一時=データ[C]から「dc:identifier」のタグ切り出し。
    (一時の要素数)
      一時[回数-1]を「URI」で正規表現マッチ。
      もしそれ=「URIならば、書籍データ[C][7]=一時[回数-1]のタグ削除。
      一時[回数-1]を「ISBN」で正規表現マッチ。
      もしそれ=「ISBNならば、
        ISBN=一時[回数-1]のタグ削除。
        書籍データ[C][8]=書籍データ[C][8]ISBN「 ; 」。
      もし回数=(一時の要素数)ならば、書籍データ[C][8]の3文字右端削除。
#-----------------------------------------------------------
#ISBNチェックディジット計算
# 計算式はウィキペディアによる。
# https://ja.wikipedia.org/wiki/ISBN
#-----------------------------------------------
*ISBNチェック(ISBNの|ISBNを)
  ISBNISBN文字列分解。A=0。
  もしISBN要素数=10ならば、
    9
      B=ISBN\(回数-1)。
      C=10-(回数-1)。
      A=A+B*C。
    D=11-A%11。
    もし、D=10ならば、D=「X」。
    もし、D=11ならば、D=0。
    もし、(D=ISBN\9)ならばはい戻る。
    違えばいいえ戻る。
  違えばもしISBN要素数=13ならば、
    12
      B=ISBN\(回数-1)。
      回数%2=0ならば、C=3。
      違えば、C=1。
      A=A+B*C。
    もし、A%10=0ならば、D=0。
    違えば、D=10-A%10。
    もし、(D=ISBN\12)ならばはい戻る
    違えばいいえ戻る。
  違えばいいえ戻る。
#-----------------------------------------------------------

 そうそうISBNコードとゆう物を学びまして、日本の場合ですが先頭の「9784」は固定であることや(見りゃ分かるでしょとか言わないで~;)最後の一桁は、チェックディジットと言って、コードが違ってないか確認するためのヤツだというコトを知りました。

 前のコード部分を計算して、このチェックディジットと合わなければ、どっか入力ミスってるよ!と分かるって仕掛けです。おぉ!

 計算式がウィキペディアに載っていたので、チェックできるようにしてみました☆

 なにせ、世の中で一番信用できないのは自分! ってくらいに迂闊な人ですからねぇ~。入力ミスらないワケ無いですからっ(爆)



 とりあえずは、こんなモノかな。

ゲスト



トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20180322