2017/12/03

Ruby を使って Kobo の情報を取得する #okinawarb

この記事は Okinawa.rb Advent Calendar 2017 3日目の記事です。
2日目は @_atton さんの「amazon-ecs を使って Kindle マンガの情報を取得する」でした。
というか私ですね。連投です。


経緯

しかし Amazon Advertising API の利用は却下されてしまいました。
取ってしまったドメインを何とか活用しようと思ったログです。


どうして kobo なのか

当初は BookWalker か honto あたりで同じことをする予定でした。
しかし BookWalker ではそれらしきものは無し。
honto は完全に更地でした(これが本家かは不明)。
ということで両方とも無理。

困っていたら本関連のAPI まとめを発見。
軽く見ていると、リンクは辿れませんが楽天のAPIがあります。
楽天と言えば kobo があることを思いだす。

なので kobo の API が無いかなー、と思って探すとありました
ドメイン取っちゃったし、何らかのコンテンツを提供するために使うことにしました。


Rakuten Developers 登録

Amazon Advertising API と同様にまずは token を手に入れるところから。
developer 向けページでアカウントを作成。
New App で Application を作ります。なんだか Twitter みたいですね。
そうしたら
  • (Application|Developer) ID
  • application secret
  • Affiliate ID
が発行されます。
これらのパラメタを使ってリクエストを組み立てることになります。


厚い無料本の山

API endpoint は https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426 です。
これに対して post すれば情報が手に入る。
日付が入ってるのが気になる。リリース日とかなのだろうけれど。
詳細は楽天Kobo電子書籍検索APIにありますが、いくつかの条件を付与可能。

無料本は sort='+itemPrice' とかすると出てくるので問題は無い。
しかし、 minimum_price 相当が無いっぽい。これは痛い。
加えて、kobo には大量の本が登録されているので、sort='+itemPrice' とかしてると有料の本まで取得できない。
具体的には 30 * 10 とかしても無料のものばかり。
分冊版とかおためし版とか青空文庫があるのが原因な気もします。

その辺をフィルタすると50冊くらいにになる。が、無料のものしか無いのは変わらず。
頭が痛い例としては、ユーザアンケート調査が本として登録されているとか。

無料本の何が問題かと言うと、報酬面。
アフィリエイトは有料本を買ってもらわないと報酬が発生しないので、無料本を買って貰っても報酬ゼロ。
なのでマネタイズができない。困った。
結局 ebook-comic.info のドメインは取ったものの、どうしようかは考え中です。
何かアイデアあればください。


ドキュメントについて

ちなみに、ドキュメントは Kobo の方が断然良い。
実際、誰かのブログを見ずに公式ドキュメントだけでリクエストを作れた。
Amazon Advertising API は微妙で、まずドキュメントはログインしないと見られない。
その上、ドキュメントの記述とレスポンスが違ったりする。つらい。
大抵 body にエラーが書いてあるので読めば問題は対処は可能ですが。


リクエストのサンプルコード

なお、koboのリクエスト例はこんな感じ。
API_END_POINT = 'https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426'
APPLICATION_ID = 'hoge'
AFFILIATE_ID = 'fuga'
ElementInformations = ['largeImageUrl', 'title', 'affiliateUrl', 'itemPrice', 'publisherName']
DefaultOpts = {affiliateId: AFFILIATE_ID,
applicationId: APPLICATION_ID,
elements: ElementInformations.join(','),
formatVersion: 2,
field: 0,
hits: 30,
koboGenreId: 101,
language: 'JA',
salesType: 0,
sort: '+itemPrice'}
def post hash
uri = URI.parse(API_END_POINT)
https = Net::HTTP.new(uri.host, 443)
https.use_ssl = true
path = uri.path
path += '?'
path += URI.encode_www_form(DefaultOpts.merge(hash))
request = Net::HTTP::Post.new(path)
https.request(request)
end
post(1) # request 1 page
view raw kobo.rb hosted with ❤ by GitHub
1リクエストで30個(Amazonは10個)取れたりと都合が良いところも多いのです。
しかし、私の周辺では kobo を使っている人を見たことがない……


まとめ

とりあえず無料本を取得するところまではできました。
しかし affiliate の収入が絶望的なので使わない気もする。

ということで Okinawa.rb Advent Calendar 3日目の記事でした。
なお、クリスマスプレゼントはこちらで募集しています。よろしくね。

明日の担当は @_simanman さんです。


環境

  • OS: Ubuntu 16.04.3 LTS 
  • ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]


参考

0 件のコメント:

コメントを投稿