書籍管理アプリを作ってみる
所属しているコワーキングスペースで書籍の貸出サービスがあるのですが、しばしば書籍が行方不明になることも。。。
「ちゃんと管理した方が良いよね」、「どんなのが誰に借りられてるか見るのも面白そうだし」、ということで貸出を前提とした書籍管理アプリを作ってみました。
多分初スマホアプリ開発。
目次
ゴール
求める機能はこんなとこ。他は随時追加するということで。
- 管理者が新しい書籍を入れる時は、バーコードを読み込んで書籍情報を取得して登録
- ユーザが借りる時は、バーコードを読み込んでアカウントと紐付けて貸出
- 登録、貸出時にslackで通知
こんな感じ。シンプルに。
1. ISBNを受け取ると書籍情報を取得するAPIサーバ
AmazonのProduct Advertising APIを利用します。
Google Books APIでも良いんですが、日本語の書籍(特に新刊)だと割と引っかからなかったりしたので。
ただし事前にAmazonアソシエイト・プログラム(アフェリエイト)への登録が必要です。
ブログやってる人とかならすんなり取れますが、ちょっと手間なので無理だったらGoogle Books APIに読み替えてください。
最悪力技のスクレイピングでも。。。
1-1. 下準備にProduct Advertising API登録
Product Advertising APIに飛びます。
まずアソシエイトタグを確認。右上のアソシエイトIDというやつです。
「利用をはじめる」をクリックするとアクセスキーとシークレットキーが表示されます。大事に保存。
この時点で、以下の3つが手に入りました。
- アソシエイトタグ
- アクセスキー
- シークレットキー
1-2. Pythonスクリプトでテスト
公式ドキュメントを軽く読んでどんなURL叩いてるかなんとなく把握しときます。
Lookup by ISBNあたりに書いています。
便利なライブラリがあるので使わせていただきます。
pip install bottlenose
Githubのチュートリアルに書いてある通り、こんな感じに書けば良いです。
一点だけハマりポイント。bottlenose.Amazon()でRegionをJPに指定してください。
アソシエイトIDのリージョンとずれていると弾かれます(400エラー)。
import bottlenose amazon = bottlenose.Amazon(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ASSOCIATE_TAG, Region='JP') isbn = '0596520999' response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="Images", SearchIndex="Books", IdType="ISBN") print(response)
responseはXML形式で返ってきます。
ここで、bottlenose.Amazon()の引数としてParserをリンク先のように渡してあげると、レスポンスがパースされた状態で返ってきます。
BeautifulSoupで扱うことができます。
もう一つ、必要な情報はResponseGroupに含める必要があります。
具体的にどのような情報が取得できるかは公式のResponse Groupsのページに書いてあります。
今回は、
- Images: 画像
- BrowseNodes: カテゴリ
- ItemAttributes:
カテゴリの取得が少し難しくて、商品ページでは以下のようにツリー構造になっているので最下層のカテゴリ名だけ取りたいのですが、
こんな感じに必ずしも全て一致しているわけではないし、例えば「本」と「IT」が同じ階層にあったりするので綺麗に欲しいものだけを取り出すことができませんでした。
やろうと思ったら予めリストを用意してそれに引っかかったものだけ取得、ですかね。面倒だから後回し。
1-3. AWS Lambdaに設置
とりあえず先ほど指定したResponse Groupsから以下の情報を返すようなスクリプトを書きました。
- タイトル
- 著者名
- 出版社
- カテゴリ
- 画像のURL
これをAWS Lambdaに配置、Amazon API Gatewayと繋げてAPIサーバを構築します。
chaliceを使ってパパッと作ります。詳細は過去記事を参考に。
こんな感じでISBNを投げると書籍情報を返してくれることをPostmanで確認しました。
2. カメラでバーコードからISBNを読み取りAPIサーバに投げるiOSアプリ
APIサーバができたので、これと通信するスマホ側を作っていきます。
が、その前にiOSアプリ開発を復習。すごい前にちょっと触っただけなので実質初学です。
Appleのチュートリアルを参考に思い出したり覚えたり。
- The Swift Programming Language (Swift 4.1): About Swift
- Start Developing iOS Apps (Swift): Jump Right In
バーコードスキャンに関してはここら辺を参考に勉強しました。
実際にはライブラリを使用します。
プロジェクトファイルを開いて、
pod init