読者です 読者をやめる 読者になる 読者になる

すこしふしぎ.

VR/HI系院生による技術ブログ.まったりいきましょ.(友人ズとブログリレー中.さぼったら焼肉おごらなきゃいけない)

【python】バーコードリーダで遊ぶ・isbnコードで書籍検索【楽天API】

python web api

こんばんは.1000chです. 先日四国まで旅行に行ってまいりました. 3泊4日で4県巡ってきましたが,四国なかなか良いとこですね. 山あるし海あるし川あるし. いつかまた行きたいなぁ.

さて今回は,ISBNコードから書籍データにアクセスしてみようと思います.

こんなの買った

f:id:ism1000ch:20140812001025j:plain

バーコードリーダー! amazonで3000円くらい. レーザーでバーコードピッピできるよ!1

購入きっかけは「たまった本の整理をしたい!」と思ったこと. 最近積んどく本が増えて,「やべダブって買ってしまった」なんてことが多々あり, また自宅の本棚がいい感じに埋まってきたのです. なので上手いこと整理するシステム作れないかなーと思い購入することに.

「アプリでバーコードリーダ使えばいんじゃね?」ってツッコミはなしですよ. サーバにapiだけ用意すればインタフェースは何でも使えるしね!1

ともあれ,いざ開封の義!

f:id:ism1000ch:20140812001046j:plain

f:id:ism1000ch:20140812001110j:plain

本体とケーブルが付属

f:id:ism1000ch:20140812001151j:plain

PC側がUSB,本体側がLANケーブルのコネクタになってます.

LANコネクタは一度接続すると外すのがちょっと面倒.爪楊枝か何かが必要になります.

f:id:ism1000ch:20140819205849j:plain

がっちゃんこ〜

f:id:ism1000ch:20140819205947j:plain

黄色いトリガー引いてるとレーザーが!かっけえ!

PCにつなぐと,PC側ではUSBキーボードとして認識されます. イメージとしてはテンキーですね. バーコードをピッ!とすると,その数字が入力されます.

Macでもwinでも使えるっぽいですね. トリガー時連続読み取りとか,無音設定とか,付属のバーコードを読み取ることでいろいろ設定できるみたいです.

あそんでみる

というわけで早速バーコードリーダつかって遊んでみます. やりたかった書籍検索をやってみます.

という訳で早速amazonの商品検索apiを試してみたが...

意外とめんどくせえ....

デベロッパ登録に加えて,アフィリエイトの登録まで必要っぽい..? その上でapi利用時の認証もちょこちょこ面倒そう.

ちょっと検索したいだけなんだけどなー(´・ω・) 商品紹介してお小遣いとか考えてないんだけどなー(´・ω・)

そこで「isbn api」でググったら楽天apiが出てきました. 触ってみたらこちらがかなり楽だったので,今回はコレのご紹介.

楽天API

オフィシャルはこちら.

楽天ウェブサービス

このなかで,書籍検索apiが使えそうです.

api利用にはアプリケーションIDが必要となるので,上部からアプリIDを発行します. 楽天IDがあれば,入力も少なく簡単に発行できました.

IDが発行できたら,実際にapiを触ってみましょう. APIテストフォームからisbnで書籍検索してみます.

ターゲットとして利用するのは,いつもお世話になってるこちらの本.

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理

isbnは"9784274206504"です.

入力してみる

f:id:ism1000ch:20140819214203p:plain

GETしてみる

f:id:ism1000ch:20140819212608p:plain

おお!データとれた!

pythonから叩く

データもとれるっぽいので,「ピッ」して自動で検索するプログラムを作ります.

何時ぞも使ったrequestsを使いますよ.

#coding:utf-8
import requests as req

if __name__ == '__main__':
    url = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20130522" #最後の日付はapiのバージョンっぽい
    app_id  = "0000000000000000" #自分のapp_idを入力
    #isbn    = "9784274206504" #ベタうちならこんな感じ
    isbn    = input("please input isbn code!:") #つないだ状態でピッするならこっち

    payload = {
            'format':'json',
            'isbn':isbn,
            'applicationId':app_id
            }

    res = req.get(url,params=payload)
    data = res.json()
    print(data)

実行結果

(py3)masa% test.py
please input isbn code!:9784274206504
[{'Item': {'reviewAverage': '4.0', 'seriesNameKana': '', 'listPrice': 0, 'availability': '4', 'subTitleKana': 'サウンド エフェクト ノ シンゴウ ショリ', 'itemUrl': 'http://books.rakuten.co.jp/rb/5938973/', 'contents': '', 'booksGenreId': '001005005004', 'isbn': '9784274206504', 'largeImageUrl': 'http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2742/27420650.jpg?_ex=200x200', 'reviewCount': 1, 'affiliateUrl': '', 'discountRate': 0, 'titleKana': 'シー ゲンゴ デ ハジメル オト ノ プログラミング', 'mediumImageUrl': 'http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2742/27420650.jpg?_ex=120x120', 'title': 'C言語ではじめる音のプログラミング', 'postageFlag': 1, 'publisherName': 'オーム社', 'subTitle': 'サウンドエフェクトの信号処理', 'smallImageUrl': 'http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2742/27420650.jpg?_ex=64x64', 'authorKana': 'アオキ,ナオフミ', 'limitedFlag': 0, 'salesDate': '2008年12月', 'size': '単行本', 'chirayomiUrl': '', 'discountPrice': 0, 'seriesName': '', 'author': '青木直史', 'itemCaption': '', 'itemPrice': 2808}}]

得られるデータにimageurl等もあるので,マイ本棚とか作れそうですねー. 惜しむらくは取れるデータにページ数が無いこと.. 読書履歴管理にはちょっと弱いかもしれんね.

所感

書籍検索のapiはapp_idだけで認証できるぽいので楽ですね. ブックマーク系apioauth認証が必要なのでtoken取得だのなんだのが必要となります.

と,いうか楽天apiはほとんどapp_idだけでごにょごにょできるっぽいです. トラベルとかレシピとかもあって,なかなか面白そうですね.