ツイートとレビューを取得する
この雑記帖スクリプトでは、公式APIが使いにくい・デザインが合わないブログパーツなどに関しては、HTMLから直接取得している。
twitterの「その他」→「ツイートをサイトに埋め込む」
この機能は便利なのに、表示・デザインに自由度がなくて、サイトに埋め込むと
このありさま。どっちが本文でどっちが引用(ツイート)なのかわからない我が侭な自己主張。ユーザビリティ、デザイン的にこれはない。
twitterとしては、表示をコントロール下において広告などで収益を視野に入れて展開したい、んだろうけど。サイトはこちらのもの。大きな顔をされては困る。
Amazon AWS の API でレビューが取得できなくなっていた(もう2年も前の話。今さら気づくのんきな父さん)
商品情報に含まれているのは、ユーザーレビューがあるかないか(true false)ユーザーレビューページのURL(24時間の期限付き)。このURLをインラインフレームで埋め込んでね、ということらしい。インラインフレーム表示させると、サイトの統一感を壊してしまって、楽天のチラシのような見た目になってしまう。
Amazonとしては、レビューの品質を上げるためにレビューをコントロール下において、レビューの精査・削除などしていきたいんだろう。
しかたないので、twitterもAmazonも公式APIを使わずに、HTMLを解析して取得、スタイルシートなど調整して、サイトにおさめるようにした(スクリプトのソースはちょっと内緒。HTMLのどこを見てるかあまりおおっぴらにするのは良くない=ルール違反かなあ)
見やすいサイト、使いやすいサイトは、サイトに掲載される情報の分類がきちんとわかりやすくレイアウトデザインされていて、動線も明確でリンクをクリックしたら何が起こるのかわかりやすくなっている。
アートは感性・デザインは理屈。サイトもデザインと同じで、どうしてこの位置にこのブロックがあるのか、なぜ動線はこっちに向けてるのかなどなど、いちいち説明がなければならない。
情報設計=インフォメーションアーキテクチャ=IA というらしい。初めて聞いたときは、また妙な、きっとくだらないカタカナ言葉でひとを騙そうとしやがって、だったんだけど本を読んでみると、IAに関してはWEBに関わるひとにとって必須。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
KindleストアでKDP個人作家判定は無理?
現時点では、KDPの個人出版物を判定するのは難しい、というのがわかった。
アマゾンAWSのAPIで情報を取得してごにょごにょするのが基本。
APIで取得するXMLには商品のほぼすべての情報が入っているんだけど、kindleストアの電子書籍に関しては販売価格がなかったし、今回取得したXMLを加工なし状態で覗いたところ、どこを探してもKDP(Kindle Direct Publishing=個人のセルフ出版物)だという要素は見当たらなかった。
法人との仕入れ契約は個人とは全然別のはずだから、裏側というかバックヤード系のデータベースにはしっかり登録されて、区別がつくようになっているんだろうけど、ショップサイドに使うデータとしてAPIでは提供されていなかった(今日時点)
APIの仕様などの一次情報はこちら「Product Advertising API」
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html
とりあえずのその場しのぎで、KDPの個人出版物かどうか判定する方法としては。
・既存の出版社から出ている印刷本もあるKindle本は、アメリカのアマゾン .com では販売されていない。
・個人のKDPの場合は .com でも販売されている。
・アマゾンが管理する ASIN コードは一意のものなので、販売する国が違ってもASINは同じ。
てことで、日本のアマゾン .co.jp とアメリカの .com でASINを検索して両方で販売されていたら KDP個人出版物、だろう。
パブー経由のKindle本は、出版社ではないのに .com での販売はないらしいが、数的に取りこぼしても問題はない
スクリプトでAPIを叩いて回ってもいいし、ブラウザで日米のアマゾンを開いておいてASIN検索してもいい。
上記、ASINを入力して調べるやりかた。
でも、ひとつずつ入力するのは面倒なので、各カテゴリをリストしてその中でKDPかどうか判定して表示させたい。
と思ったら、こっちも難しかった。
たとえば「文芸・評論」→「日本文学」で絞って、APIからXMLを取得して表示させたら夏目漱石の「坊ちゃん」をはじめとする青空文庫が大量に出てきた。当然KDPではない。「有料」だけをカテゴリした BrowseNodeId があるはず、と探して回ったけど見当たらず。一括一網打尽の地引き網で有料のコンテンツだけを引っ張り出すのは無理(何か方法があれば、ぜひ教えてください)
「Kindle本のXMLに販売価格の要素がない」ことと何か関係でもあるのかな。
結局、ASINを入力してKDPかどうかを判断するスクリプトが一本できただけ…ブラウザで手作業でASIN検索することを考えると、ほんの少しだけラクかも知れないけど、あまり役に立たないなあ、とガッカリ。
- 『おかえりください』サウンドノベルWINDOWS版
- 『おかえりください』本編を加筆修正、6つのバッドエンド分岐シナリオを追加してサウンドノベル化!
音と映像が、血まみれのこっくりさんの惨劇を蘇らせる。 - 【無料体験版】はこちら
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
kindle本の価格が取得できない
AWSのAPIで取得するXMLの中には listpriceという要素があって、これが表示販売価格。なんだけど。kindle本に関してはXMLのどこにもlistpriceが存在しない。
AWSのAPIではkindle本の価格が取得できないのだ。
あれ?ほんまかいな、と検索かけまくったところ、AWSのDiscussion Forums の書き込みを発見。
https://forums.aws.amazon.com/thread.jspa?messageID=395843
「In Product Advertising API(JP), there is no price of kindle ebooks」
2012年10月25日の書き込みで、今日時点まだ解決していない。
AWSを使ったWEBサービスで金額が表示できないのは困る。値段のわからないものなど見に行く気にならない。商品にとって値段というのは重要情報。
てことで、ASINを元に、まずAWSのAPIにリクエストして販売価格以外の情報を取得。次にASINを元に本の詳細ページをwww.amazon.co.jpにリクエストして、HTMLをパースして価格を取得。
とかやってみたんだけど、ひとつの本の情報を取るために2回もHTTPリクエスト。って、そもそも、取得したいのは、自分でKindleストアに並べた本=自分で各種情報も定価も知ってるウチのkindle本だ。こりゃどう考えても無駄だし、ページが重くなるだけだった。
AWSの規約ではASIN以外のデータは24時間以上キャッシュしてはいけない、となっている。時間を見るようにするか検討しつつ、スクリプトの設定ファイルに本の各種データを登録して、そっちをまず利用するように変更した。
でも、なんでまた、Kindle本のXMLには価格が入ってないんだろう。バグか仕様か微妙な感じ、だ。
そういや。12月17日に KDPセレクトで無料キャンペーンや70%著者印税 で、初めて無料キャンペーンを1日やった時は30冊ほどダウンロードされて、意外と効果がありそう、などと言ってしまったけど、その後2回ほどやった時は、海外アマゾンも含めて10冊程度しかダウンロードされなかった。同じ間隔でtwitterにbotで告知を流したので条件は同じはず。2回目ってことで新鮮味がなかったか。
もし次、別の本でやるときはちまちま分けずに1回で5日間を使い切る感じでやってみるか。
いろいろ試行錯誤は続くなあ。
- 『おかえりください』サウンドノベルWINDOWS版
- 『おかえりください』本編を加筆修正、6つのバッドエンド分岐シナリオを追加してサウンドノベル化!
音と映像が、血まみれのこっくりさんの惨劇を蘇らせる。 - 【無料体験版】はこちら
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
amazon、kindleストアの販売力
以前も同じような記事を書いた。
「Kindleストアの販売力」https://t2aki.doncha.net/?id=1356587440
現実。ウチの場合app storeとKindleストアに並べてるけど、Kindleストアの圧勝。また、配信事業者に他の電子書店のことを聞いても、koboやgoogleplayは話にならないらしい。
レコメンドメールで、KDPの個人作家の本をおすすめしてくれたので、スクリーンショットを公開。
また、アソシエイトプログラム、AWSの存在が大きい。
個人がブログなどにウィジェットを貼付けるのはもちろん。それ以上に、AWS(アマゾンウエブサービス)のAPIを使ったWEBサービスの存在が大きいのだ。
たとえば、ウチの 趣味は読書2
ここは購入した本、読んだ本を記録していく読書記録、WEB本棚サービスなんだけど、AWSを利用していてアフィリエイトができるようになっている。アマゾンに登録のある本であれば、当然、KDP作家の本も登録できるのでこういうところで表出・露出が期待できる。
ウチの場合は、クローズドで展開してるけど、 ブクログ や 読書メーター といった、大手で会員数も多いWEB本棚サービスでもKDP作家の本は取り上げられている。そのほか、AWSを利用したサービスはすでにいくつも立ち上がっているので、その数だけ宣伝効果告知効果が得られるはず。
宣伝力のない個人でもアマゾンなら期待してもいい、というのがこういうところ。ほかの電子書店で、アフィリエイトだけじゃなくて、APIを公開して広めているところは知らない。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
アマゾンの画像表示をココにも
アマゾンの表紙画像を貼り付けられるようにしてみた。
ウチのサイトの構成上、雑記帖、 お言葉データベース 、 カメラ 、 リンクページ 、 プロフィール など、全部ひとつのモジュールで賄ってるんで、お言葉データベースに表紙画像を貼りつけられる、イコールどのページにもつけられる。
先日のところにも書いたように、いちいちアマゾンにリクエストを飛ばさなきゃいけないので、濫用するとレスポンス低下に直結するけど、アクセス数も知れてるんで、ちょろっと。
いまんとこ、宮部みゆきのおれさまベストがこれ。
キャラ全員に履歴書背負わせるスティーブンキングズウエイ。「わたし」をもう少しうしろに引いてくれれば、純正統ハードボイルドになるなあ。
[07/12 12:11:10]
ついで、というか。
サイトのtitleやdescriptionのつけかたを変更。あまり深く考えてなかったところだったんだけど、ぐーぐる様に言わせると、よろしくないらしい。このあたりの表示も共通モジュールなんで、ちゃっちゃと変更。
Chrome OSがMS WINDOWSとガチ勝負となって、腐れエクセルも叩き潰してくれるといいんだけど…んなことにはならんだろうなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
amazon のAPIで認証が必要になる
英文のメールが来ていたのは知ってた。ふーん、なんか変わるのか、ぐらいで流し…てたら、日本語のメールも来る。AWSという名称を変更するそうだ。
てのは、どうでもよくて、アマゾンにデータを取りにいくのに認証が必要になるらしい。それも5月11日から。猶予期間は3ヶ月ほどあるらしいけど、それまでにパラメータや認証キーを仕込みなおさないとまずいぢゃん。
当然ながら、今日時点では、ありがたく使わせていただけそうな例もまだないのでメモだけ。
新しくパラメータにTimestampが必要
RESTのURI+αを、SECRET KEYをキーにしてSHA256でHASHしてSignatureを生成してくっつける、らしい。
https://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?rest-signature.html
perl のDigest SHA
https://search.cpan.org/~mshelor/Digest-SHA-5.47/lib/Digest/SHA.pm
って、まだ全然わかってないんだけど。
use Digest::SHA qw(hmac_sha256_base64);
my $key = 'ABCD0987';
my $data = 'aiueo12345xyz';
my $digest = hmac_sha256_base64($data, $key);
print $digest;
認証のための署名はこれで作れる。
情報収集して対応しないといけません。
[05/11 10:56:47]
$digest .= '=' while length($digest) % 4;
4で割って余りが出ないように、「=」で埋める必要があるらしい。
https://blog.livedoor.jp/dankogai/archives/51211577.html
[05/11 23:46:32]
てことでチェックできた。
従来のURIにTimestampを追加。
Timestamp=2009-05-11T23:34:12Z
署名のためのデータを上記URIから作る。&でバラしてkeyをsortして並べ替えてURLエンコードしておく。
GET
webservices.amazon.co.jp
/onca/xml
上記URI
の4行のデータ。これをアマゾンの秘密鍵をキーに、SHA256でハッシュ化して署名を作る。
URIの最後にURLエンコードした署名をくっつけてできあがり(&Signature=署名)
と、エラソに書いたけど、ハマリがひとつ。何度やっても署名が間違ってる、と撥ねられて、しばし悶絶。あーだこーだパラメータをひとつずつ潰していったら、URLエンコードが原因でびっくりした。
今までずっと
s/(W)/sprintf("%%%02X",unpack("C", $1))/eg
とやっていて何も問題なかったんだよなあ。
# RFC3986
# URI の生成を行うものは
# ALPHA (%41-%5A と %61-%7A),
# DIGIT (%30-%39), hyphen (%2D),
# period (%2E), underscore (%5F), tilde (%7E)
# の範囲におけるパーセントエンコードされたオクテットを
# 生成すべきではない
ううううむ。てことで
s/([^0-9a-zA-Z~._-])/sprintf("%%%02X",unpack("C", $1))/eg
にしたら、無事通過。
ひっかかったのはTimestampの2009-05-11のハイフンあたりだったようだ。
とりあえずチェックスクリプトはこれでOKだったんで、週末にでも実装してしまおう。
参考:
https://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?BasicAuthProcess.html
https://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?rest-signature.html
↑こいつを見てたら、ハイフンがエンコードされてないんで、変だなあ、と。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」