Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
蔵書管理システム構築
その1~AMAZON APIを用いた蔵書情報の自動補完システム
みなさんこんにちは
HiNaNanohaです
あなた誰?
• 情報理工学部 情報・通信工学科 情報通信システムコース4年(らしい)
• MMA : id hinananoha
• Twitter : 見ないほうが幸せになれる(それでも見たい人は頑張って探してね☆)
• LTやってる人の中で...
#11(2015/05/10)にこれやった人です
みなさん、Surface Pro 4は買いましたか?
さて
みなさん、本は好きですか?
きっと皆さんのご自宅は本の山
さて、質問です。
唐突に「○○という本の何巻を持っているか」と
聞かれて答えられますか?
私「やべぇ……答えられねぇ……」
ただでさえ本屋行って「あれ、これって何巻まで買ったっけ」ってなるのに
私「そうだ!蔵書管理システム作ろう」
そうだじゃねぇよ
そんなわけで今回は
蔵書管理システムです。
実はまだ未完成ですが
今回はAmazon APIを用いた登録情報補完システムをメインに
こんな機能が最低限ほしいですよね
• 蔵書登録・変更・削除
• 蔵書検索
蔵書登録
私「えっ……これ全部の本手入力する
の……?キレた」
slackbot「 < ごめんて」
私「 」
Amazon Product Advertising API
• https://affiliate.amazon.co.jp/gp/advertising/api/detail/main.html
• AmazonからISBNコードを使って情...
参考:日本図書コードの仕組み
(日本図書コード管理センターより)
• 本の後ろにバーコードと並んで書いてあるアレ
• 上段はISBNコード(国際標準図書番号)
• International Standard Book Number
• 下段は...
参考:日本図書コードの仕組み
(日本図書コード管理センターより)
• ISBNコードの仕組み
• ISBN978 – L – XXXXXXXX – Q
• ISBN978:接頭数字(ISBN-10と呼ばれる10桁のISBNコードはここを省略する...
参考:日本図書コードの仕組み
(日本図書コード管理センターより)
• X: 出版者記号および書名記号
• 出版者記号は2~7桁、残りの桁が書名記号
• 登録可能書籍数によって会社によって出版
者記号の桁数が異なる
• (株)KADOKAWA –...
おそらく皆さんの家の本を見てみると…
I S B N 9 7 8 – 4 – 0 4 – X X X X X X – Q
という本がいっぱいあるのではないでしょうか
家庭の本棚を支配するKAD*KAWA
家 庭
オタクの本棚を支配するKAD*KAWA
???「おのれカド*ワァァァァァァァ!!!」
さらに余談
• 出版者記号が2桁(100万冊登録可)なのは00~19まで(すでに全部使用済み)
出版者記号 出版社名 出版者記号 出版社名
00 (株)岩波書店 10 (株)新潮社
01 (株)旺文社 11 (株)全音楽譜出版社
02 (株)朝...
これを使って情報を取得しよう
• やりたいこと
• PHPを用いてAmazonAPIから情報を取得し
• そのうち必要な部分を配列に格納して返す
• ※参考:「PHPを使って Amazon Product Advertising APIから商品...
フロー図(その1)
AmazonAPIに投げ込む前までの動作
フロー図(その2)
Amazon APIに入れてからの処理
実際にやってみた
超簡単!!!最高!!
:clap:
Amazon API での処理
データの取得方法
• XMLで返ってくる
• アクセスキーなどの情報と検索するための情報をもとにURLを作成
• コードはあとでゆっくり見てください
XML取得のPHP
function ItemLookup ($id) {
$params = array();
// Require
$access_key_id = ‘{ACCESS_KEY_ID}';
$secret_access_key...
XML取得のPHP
// make sending url and signature.
$canonical_string = '';
foreach ($params as $k => $v) {
$canonical_string .= ...
XML取得のPHP
function urlencode_rfc3986($str) {
return str_replace('%7E', '~', rawurlencode($str));
}
function request($url){...
XMLの構造
• 書籍情報:ItemLookupResponse->Items->Item->ItemAttributes以下
• 取得できる情報
• 今回は太字の情報を配列に格納する
• 著者、作者
• 発行形態(単行本・コミックス・など)
...
XMLから要素を取得
function returndata($item){
$items = array();
$items['ISBN'] = $item->Items->Item->ItemAttributes->EAN;
$items[...
こんな感じで構築中です
• 現在できた項目
• 蔵書登録・編集・削除
• 蔵書検索
• 既読・未読管理
• 貸出登録(簡易)
• 現在は仮でテーブルを組んでいたものをちゃんと考えて作りなしている
こんなのも入れたいよね
• シリーズ管理
• 一括登録
• 貸出登録(詳細)
• 複数人での利用(ログインシステム)
• ISBNコードのない本の管理
• 500円くらいで夏と冬に有明に行くと買える奴
デザインも……
という指摘を受けたので
ナウでヤングなデザインにしたい……
したくない?
まだまだ構築は続きます
実際に動くようになるまでまだまだ時間はかかりそうです。
次回予告(?)
たぶん次回はこれの続きやると思います。
お わ り
蔵書管理システム構築 公開用
Upcoming SlideShare
Loading in …5
×

蔵書管理システム構築 公開用

63 views

Published on

Amazon APIを用いた蔵書管理システムの構築です。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

蔵書管理システム構築 公開用

  1. 1. 蔵書管理システム構築 その1~AMAZON APIを用いた蔵書情報の自動補完システム
  2. 2. みなさんこんにちは
  3. 3. HiNaNanohaです
  4. 4. あなた誰? • 情報理工学部 情報・通信工学科 情報通信システムコース4年(らしい) • MMA : id hinananoha • Twitter : 見ないほうが幸せになれる(それでも見たい人は頑張って探してね☆) • LTやってる人の中では一番弱い(?)人 • 斧や鉞はぜひ鞄の中にしまって机の下に置いていただけるとありがたいです • 本が大好き。死ぬときは本に囲まれて死にたい
  5. 5. #11(2015/05/10)にこれやった人です みなさん、Surface Pro 4は買いましたか?
  6. 6. さて
  7. 7. みなさん、本は好きですか?
  8. 8. きっと皆さんのご自宅は本の山
  9. 9. さて、質問です。 唐突に「○○という本の何巻を持っているか」と 聞かれて答えられますか?
  10. 10. 私「やべぇ……答えられねぇ……」 ただでさえ本屋行って「あれ、これって何巻まで買ったっけ」ってなるのに
  11. 11. 私「そうだ!蔵書管理システム作ろう」 そうだじゃねぇよ
  12. 12. そんなわけで今回は 蔵書管理システムです。 実はまだ未完成ですが 今回はAmazon APIを用いた登録情報補完システムをメインに
  13. 13. こんな機能が最低限ほしいですよね • 蔵書登録・変更・削除 • 蔵書検索
  14. 14. 蔵書登録 私「えっ……これ全部の本手入力する の……?キレた」 slackbot「 < ごめんて」 私「 」
  15. 15. Amazon Product Advertising API • https://affiliate.amazon.co.jp/gp/advertising/api/detail/main.html • AmazonからISBNコードを使って情報を取得できる • アクセス可能数:1アクセス/1秒 • ただしこのAPIを用いて発生した購入があればアクセス可能数は増える • 必要なもの • アソシエイトタグ • アクセスキー • シークレット • 詳しくは上のリンク見てね
  16. 16. 参考:日本図書コードの仕組み (日本図書コード管理センターより) • 本の後ろにバーコードと並んで書いてあるアレ • 上段はISBNコード(国際標準図書番号) • International Standard Book Number • 下段は日本図書コード独自の規格 • 図書分類と税抜き本体価格を表す • Q.さて、この本は何でしょう?
  17. 17. 参考:日本図書コードの仕組み (日本図書コード管理センターより) • ISBNコードの仕組み • ISBN978 – L – XXXXXXXX – Q • ISBN978:接頭数字(ISBN-10と呼ばれる10桁のISBNコードはここを省略する) • L: 国番号(日本は4) • Q: チェックデジット(C/D) – 以下の計算式で求める • a = 978から始まるISBNの奇数桁の数字の和 • b = 978から始まるISBNの偶数桁の数字の和 x 3 • Q : a+b の下一桁の数字を10から引いた数字(但し下一桁が0だった場合はQ=0)
  18. 18. 参考:日本図書コードの仕組み (日本図書コード管理センターより) • X: 出版者記号および書名記号 • 出版者記号は2~7桁、残りの桁が書名記号 • 登録可能書籍数によって会社によって出版 者記号の桁数が異なる • (株)KADOKAWA – 04, • (株)メディアファクトリー – 8401(,88991) • ※余談だが現在はメディアファクトリーは (株)KADOKAWA傘下なので出版者記号は04 である。 • ちなみにここで調べられます • http://www.isbn-center.jp/cgi- bin/isbndb/isbn.cgi
  19. 19. おそらく皆さんの家の本を見てみると…
  20. 20. I S B N 9 7 8 – 4 – 0 4 – X X X X X X – Q という本がいっぱいあるのではないでしょうか
  21. 21. 家庭の本棚を支配するKAD*KAWA
  22. 22. 家 庭 オタクの本棚を支配するKAD*KAWA ???「おのれカド*ワァァァァァァァ!!!」
  23. 23. さらに余談 • 出版者記号が2桁(100万冊登録可)なのは00~19まで(すでに全部使用済み) 出版者記号 出版社名 出版者記号 出版社名 00 (株)岩波書店 10 (株)新潮社 01 (株)旺文社 11 (株)全音楽譜出版社 02 (株)朝日新聞出版 12 (株)中央公論新社 03 (株)偕成社 13 一般財団法人 東京大学出版会 04 (株)KADOKAWA 14 (株)NHK出版 05 (株)学研プラス 15 (株)早川書房 06 (株)講談社 16 (株)文藝春秋 07 (株)主婦の友社 17 独立行政法人 国立印刷局 08 (株)集英社 18 明治図書出版(株) 09 (株)小学館 19 (株)徳間書店
  24. 24. これを使って情報を取得しよう • やりたいこと • PHPを用いてAmazonAPIから情報を取得し • そのうち必要な部分を配列に格納して返す • ※参考:「PHPを使って Amazon Product Advertising APIから商品情報取得」 http://runble1.com/amazon-api-php-xml/ • ある程度の例外処理も定義する • Amazon APIでのISBN検索はISBNコードとして不適切な形を入力するとなにも返さない • 蔵書システムへの重複登録の回避 • 取得した情報が必ずしも正しいとは限らない
  25. 25. フロー図(その1) AmazonAPIに投げ込む前までの動作
  26. 26. フロー図(その2) Amazon APIに入れてからの処理
  27. 27. 実際にやってみた
  28. 28. 超簡単!!!最高!! :clap:
  29. 29. Amazon API での処理
  30. 30. データの取得方法 • XMLで返ってくる • アクセスキーなどの情報と検索するための情報をもとにURLを作成 • コードはあとでゆっくり見てください
  31. 31. XML取得のPHP function ItemLookup ($id) { $params = array(); // Require $access_key_id = ‘{ACCESS_KEY_ID}'; $secret_access_key = ‘{SECRET_ACCESS_KEY}'; $params['AssociateTag'] = ‘{ASSOSIATE_TAG}'; $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; // Params $params['Service'] = 'AWSECommerceService'; $params['AWSAccessKeyId'] = $access_key_id; $params['Version'] = '2011-08-01'; $params['Operation'] = 'ItemLookup'; $params['ItemId'] = $id; $params['IdType'] = 'ISBN'; $params['SearchIndex'] = "Books"; $params['ResponseGroup'] = 'ItemAttributes'; $params['Timestamp'] = gmdate('Y-m-d¥TH:i:s¥Z'); ksort($params);
  32. 32. XML取得のPHP // make sending url and signature. $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); $parsed_url = parse_url($baseurl); $string_to_sign = "GET¥n{$parsed_url['host']}¥n{$parsed_url['path']}¥n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); $url = $baseurl . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); // get xml $xml = request($url); // return Object return $xml; }
  33. 33. XML取得のPHP function urlencode_rfc3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } function request($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); $response = curl_exec($ch); curl_close($ch); //return $response; return simplexml_load_string($response); //オブジェクトとして返す場合 }
  34. 34. XMLの構造 • 書籍情報:ItemLookupResponse->Items->Item->ItemAttributes以下 • 取得できる情報 • 今回は太字の情報を配列に格納する • 著者、作者 • 発行形態(単行本・コミックス・など) • ISBN(10桁・13桁ともに) • レーベル(MF文庫J など) • 言語 • 値段 • ページ数 • 本のサイズ • 発行年月日(初版、年月のみのことも) • 出版社(KADOKAWA など) • タイトル
  35. 35. XMLから要素を取得 function returndata($item){ $items = array(); $items['ISBN'] = $item->Items->Item->ItemAttributes->EAN; $items['Title'] = $item->Items->Item->ItemAttributes->Title; $items['Author'] = $item->Items->Item->ItemAttributes->Author; $items['Creator'] = $item->Items->Item->ItemAttributes->Creator; $items['Publ_date'] = $item->Items->Item->ItemAttributes->PublicationDate; $items['Publisher'] = $item->Items->Item->ItemAttributes->Publisher; $items['Price'] = $item->Items->Item->ItemAttributes->ListPrice->Amount; return $items; }
  36. 36. こんな感じで構築中です • 現在できた項目 • 蔵書登録・編集・削除 • 蔵書検索 • 既読・未読管理 • 貸出登録(簡易) • 現在は仮でテーブルを組んでいたものをちゃんと考えて作りなしている
  37. 37. こんなのも入れたいよね • シリーズ管理 • 一括登録 • 貸出登録(詳細) • 複数人での利用(ログインシステム) • ISBNコードのない本の管理 • 500円くらいで夏と冬に有明に行くと買える奴
  38. 38. デザインも…… という指摘を受けたので
  39. 39. ナウでヤングなデザインにしたい…… したくない?
  40. 40. まだまだ構築は続きます 実際に動くようになるまでまだまだ時間はかかりそうです。
  41. 41. 次回予告(?) たぶん次回はこれの続きやると思います。
  42. 42. お わ り

×