スキップしてメイン コンテンツに移動

その2) Excel VBA で Amazon Product Advertising API

ISBNでAmazonデータを取ってくるマクロが完成して喜んでたけど、まだまだ面倒な作業が残っているのを思い出した。
  1. ISBNがない本 発行年が昔だったりカバー無かったり。奥付にしか書かない拘りデザインとか。
  2. 洋書 amazon.co.jp未登録なこと多し。これがまた手入力しづらい。キーボード切り替えたり、奥付(ていうか表紙裏)の読み方もよくわからないし。
  3. そして雑誌、、、 特集を書かないと特定できないとか、年月・巻の書き方悩ましいとか、一番の難物。

とりあえず1と2に対処してGithubに置きました。

タイトル・作者・出版社でAmazonのデータを検索する

たとえばタイトルの一部を入力して、マクロを実行すると:












妥当なのを選んで「入力」。ほ~ら嬉しい。



ユーザーフォーム作ったり、なんだかんだ半日はかかっちゃった。ユーザーフォームのことって毎度忘れてる!
  • ユーザーフォームと呼び出し元プロシージャのデータ授受に フォーム名.Tag が便利。
ということを知りました。

ISBNに応じてリクエスト先(endpoint)を切り替える

Product Advertising APIのDeveloper guideに各国のURLが載っていた。
Locale Endpoint
CAhttp://ecs.amazonaws.ca/onca/xml
CNhttp://webservices.amazon.cn/onca/xml
DEhttp://ecs.amazonaws.de/onca/xml
EShttp://webservices.amazon.es/onca/xml
FRhttp://ecs.amazonaws.fr/onca/xml
IThttp://webservices.amazon.it/onca/xml
JPhttp://ecs.amazonaws.jp/onca/xml
UKhttp://ecs.amazonaws.uk/onca/xml
UShttp://webservices.amazon.com/onca/xml
ASINすなわちISBN10は、先頭1~3桁が国・言語・地域を示す。International ISBN Agencyで上のLocaleに対応しそうなものを拾ったらこうなった:
Function endpoints(asin As String) As String
    Dim countryNumber As Integer
    countryNumber = CInt(IIf(CInt(Left(asin, 1)) <= 7, Left(asin, 1), Left(asin, 2)))
    Select Case countryNumber
    Case 2
        endpoints = "ecs.amazonaws.fr"
    Case 3
        endpoints = "ecs.amazonaws.de"
    Case 4
        endpoints = "ecs.amazonaws.jp"
    Case 7
        endpoints = "webservices.amazon.cn"
    Case 84
        endpoints = "webservices.amazon.es"
    Case 88
        endpoints = "webservices.amazon.it"
    Case Else
        endpoints = "webservices.amazon.com"
    End Select
End Function
中南米のスペイン語諸国は84(Spain)と別の国番号なんだけど、esにしたらよかったかなぁ。まぁ数冊もないからいいや私は。
わ~い嬉しい。フランス語は特に嬉しい。


そして雑誌は、、、

やりようあるのかなぁ?
図書館検索 カーリル は雑誌を対象外にしてるようだし、 楽天ブックス雑誌検索APIはJANコードで検索できるけど
  • 実際雑誌に書いてあるのは「雑誌コード」である
  • JANコードへ変換するには、出版社の登録番号を調べないといけない
  • 出品された号しかない。つまり(雑誌によっては)ほとんどない。
うーむむむ。

コメント

  1. こんにちは。初めてコメントさせていただきます。
    蔵書リストが超便利で使わせていただいております。
    欲がでてきてページ数や定価など追加したのですが、ランキングや最安値などは取得できないので、また別にコードを書かないとだめみたいですね。

    また新しいバージョンができたら、ぜひ公開してください。

    本当に管理が楽になりました。
    ありがとうございました。

    返信削除
  2. 小梅さん、コメントありがとうございます。
    ずっと気づいてなくてすみません。
    ランキング、最安値追加してみました(コチラ)。

    返信削除
  3. 雑誌データベース、APIなくてもよければ、ジャンル限定でよければ色々あるんだねえ。
    雑誌記事索引集成データベースはプロ向け(年間12.5万円、明治の雑誌もあるよ)で手が出ない。
    http://info.zassaku-plus.com/#cate2
    http://kw.maruzen.co.jp/ln/ec/ec_kousei01.html

    国会図書館の詳細検索は雑誌名・版元・巻番号くらいしか得られない、雑誌記事検索は学術雑誌に限るし、たとえば大航海は1998年以降しか見つからない。その間のスペックが欲しい、、、。

    返信削除

コメントを投稿

このブログの人気の投稿

GAS 同一カラムを複数条件でfilterできない件

Google Apps Script でSpreadsheetをデータベース代わりにwebアプリをポチポチ作ってて、スクリプトからSpreadsheetにフィルタかける場合、同一カラムに複数条件を設定できないことを知って残念……。 フィルタのかけ方はこんな感じ。 日付を範囲指定したいけど、After、Before片方しかつけられない。 var dataFile = SpreadsheetApp.openById(DATA_FILE_ID); var sh = dataFile.getSheetByName(LOG_SHEET_NAME); var criteriaDateAfter = SpreadsheetApp.newFilterCriteria().whenDateAfter(new Date(targetDate)).build(); var criteriaUserEqual = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(user.id).build(); if (sh.getFilter()) { sh.getFilter().remove(); } var r = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()) .createFilter() .setColumnFilterCriteria(DATE_COL, criteriaDateAfter) .setColumnFilterCriteria(USER_ID_COL, criteriaUserEqual) .getRange(); FilterCriteriaに2回条件設定してみたり var criteriaDateRange = SpreadsheetApp.newFilterCriteria() .whenDateAfter(new Date(date1)) .whenDateBefore(new Date(date2)).build(); 同じカラムに2回条件設定してみたり var r = sh.getRange(1, 1, sh.get...

ジップロックで堆肥づくり

2012/11/02『家庭でできる堆肥づくり百科』を見てビニール袋と生ゴミで堆肥づくりに初挑戦。 ・生ごみ 250ml (細かく刻む) ・庭の土 120ml ・水 大さじ2 ・アルファルファ粉末 大さじ1 (ウサギのペレットを砕いた) 袋はジップロック大を使用。 毎日揉む(切り返し)、1日おきに空気を入れ替える。4~8週間でできるらしい。 保温のことは書いてなかったけど発砲スチロール箱に入れてみた。うまく行くといいなあ。 2012/11/07 道路掃除の方に落ち葉をもらったので一掴みいれてみる。生ゴミは窒素やや多めらしく、炭素系の落ち葉を足したらいいかなと。 2012/11/12 10日経ってニオイが落ちついてきたかも。腐ってる臭いではないけどツンとする臭いがずっとしてた。発泡スチロール箱を蓋すれば気にならない(ジップロックには全く遮断されないので、袋だけで室内に置くのは避けたい)。材料がネギとミカンなせいかなあ。見た目は一向に変わらず。

その4 Excel VBAでAmazon Product Advertising API

引っ越すためついに本気で書籍リストを作っていると、どれほど少しでも省力化したくなり、しつこくバージョンアップ。 ISBNのない外国の本も検索したい ISBNのない本が思ったより多かった。フランス語のアクサンとか入力したくない。ISBNでの検索はamazon.com, amazon.frなど検索先を切り替えているように、タイトル等での検索も各国サイトを利用したい。 最初は「jpで見つからなければcom、見つからなければfr、、、」と思ったけど、だいぶ待たされちゃうし、その本のデータをどこで探したいかは決まってるので、それぞれ別のプロシージャを定義して実行できるようにした。 Public Sub searchBookInfoFromAmazonFr(dummy As Integer) searchBookInfo (amazonFr) End Sub さて、クイックアクセスツールバーに登録するのだけど、用意されてるアイコンじゃわかりづらい。各国の旗がいいんじゃないか。と思ってからが長かった・・・が、まとめれば: 旗アイコンは ここ で入手。 Ribbon Editor でリボンに自前のタブ・ボタンを登録 対象のExcelファイルを開く 右のDocument Explorerペインで「CustomUI Parts」を追加 表示される編集ペインのImageタブを開き、好きな画像を追加(From File System) Codeタブに下記Xmlを書いて保存、終了 Excelを開くとカスタム・ボタンが登録されているので、ふつうにクイックアクセスツールバーにも登録 <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="customMacro" label="custom macro"> <group id="custo...