mattintosh note

技術書典に出たい人生だった…

電子書籍の情報を Elasticsearch で収集する

Raspberry Pi Elasticsearch の検証用に色々とデータを収集。

最近 Amazon プライムで色々と漫画を見てるのだけど、他のストアではどうなんだろうなと思って電子書籍のランキングなんかを拾ってきてる。

ストアによってランキングから拾える情報が異なるため、ストア間の値の紐付けもしないといけないんだけどまだそこまでは手が回っていない。例えば Google Play にはランキングページに出版社情報が無いため、書く書籍のページも巡回しなきゃいけない、など。また、単に電子書籍で漫画と言ってもカテゴリが細かく分かれているのでその辺りの調査も必要だったりする。

Amazon はランキングの更新間隔が1時間と公表されているので毎日よく変動していて、週刊誌の発売(公開)日は特に変動が激しい。逆に Google Play は1日1回程度とあまり変動は見られない。

Amazon は期間限定無料配信をよくやっているので「お、これちょっと読んでみたかったんだよな」と、割と役に立っている。

最近はどのストアを見ても「転スラ」が上位にランクインしていて人気あるのだなぁと感じる。(自分も全巻揃えた)

f:id:mattintosh4:20190109223612p:plain
Elasticsearch/Kibana - Amazon Books

f:id:mattintosh4:20190109223519p:plain
Elasticsearch/Kibana - App Store Books

f:id:mattintosh4:20190109223746p:plain
Elasticsearch/Kibana - Google Play Books

リモートの IP を拾っている部分があるのは API サーバの仕様調査のため。一般に公開されている情報ではないので経験談だが、App StoreiTunes Search APICDN の振り分けで「キャッシュ有り」と「キャッシュ無し」のどこに繋ぎに行くかわからず、ただ単にクローリングしただけでは正しい結果にならない可能性がある(同じ日本国内の同じタイミングでも A さんが見ているランキング結果と B さんが見ているランキング結果が異なることがあるということ)。キャッシュを回避する問い合わせ方法もあるけどそちらは多分推奨されていない。

とりあえずいまはストアごとにクローラーを作ってデータを拾ってこれるかどうか実験中。それが終わったらインデックスの設計やらなんやら考えて、ゆくゆくは電子書籍の新刊情報や無料配信中の情報なんかを全ストアまとめて見れるようなものを作る予定。

最近ようやく Elasticsearch のことがなんとなくわかるようになってきたのでセミナーにでも行って情報収集してみようかな。