30 March 2016

    Project: 「楽天Kobo電子書籍新着チェッカー」: GitHub

    自分の本が検索されない

     以前からやってみたかった電子書籍出版やってみました(Amazon KDP楽天Kobo)。その顛末については別の記事を書こうと思っていますが、先に「楽天Kobo電子書籍新着チェッカー」を作ってみたのでそれについて書きます。
     楽天Koboの電子書籍出版サービス(KWL、Kobo Writing Life)に自分の本を登録して、リリースまで時間が掛かると書いてあったから「KoboWritingLife新着チェッカー」というサイトを見つけて、自分の本が出版されたかどうかチェックしていました。丸一日ぐらい経った後、まだ自分の本が表示されていなかったので、試しに楽天のサイトから検索してみたら、自分の本がヒットするではないですか、「なんで自分の本は出てこないの?」って感じです。この新着チェッカーがどれほど利用されているのかわかりませんが、「自分の本を表示してくれないサイトが新着チェッカーとしてメジャーになってもらっては困る」、「なんとか自分で世間の人に使って貰えるこれ以上の新着チェッカーを作らなければならない」という使命感に駆られて(嘘です)作ってみることにしました。
     自分で楽天APIを弄ってみてから想像するとおそらく自分の本が表示されないのは、自分の本を登録している「PC・システム開発」というジャンルが検索対象になっていないからだと思いますが、真相はわかりません。自分の本だけ意地悪されているわけでないことは確かでしょう。
     ということでジャンル別に検索する形で作りました。自己責任でご利用ください(免責条項)。楽天のサイトでも簡単にAPIを試してみることも出来ます。試すだけなら開発者用のIDをわざわざ取得しなくても利用できます。

    やっていること(仕様)

    • 使用するのは楽天Kobo系APIだけ(「楽天ブックス系API」と「楽天Kobo系API」に分かれているようです)
      ※深くは追求してませんが、件のサイトで自分の本が検索出来なかったのはこのAPIの違いによるものかもしれません。APIを分けている理由も知りませんが、Kobo系は簡易版みたいな感じかもしれません。
    • 予約販売分は検索対象外(予約販売分を含めると未来の発売日分のデータばかりになるため)
    • サイトにアクセスがあると、その都度最新のジャンルデータを取得して表示し差分を保存する
    • ジャンルがクリックされると、一度のAPIで取得出来る最大30件の最新出版データを保存して日付の新しい順に過去に取得した分を含めて最大50件表示
      ※最初は先頭3桁が”123”のもの(KWLの分だけ)に限定しようと思ったのですがデータが少なくてあまりにも寂しい検索結果になるので他のものも表示することにしました。
    • 発売日から30日経過を目処に古い新着データは削除していく(ジャンルデータ取得時に日付をチェックして削除)。
      ※herokuの無料枠で運用しているのでデータが大量に溜まると困ると思ってこうしています。更新頻度が高いジャンルは30日経過していなくても表示されなくなります。

    使用しているAPI

     発行しているAPIは以下の二種類だけです。

    • 楽天Koboジャンル検索APIで電子書籍のジャンル一覧を取得
       例、koboGenreId=101、101は電子書籍
      HTTPS https://app.rakuten.co.jp/services/api/Kobo/GenreSearch/20131010?applicationId=XXXXXXXXXXXXXXXXXXX&format=json&koboGenreId=101
    • 楽天Kobo電子書籍検索APIでジャンル別の新着データを取得
       例、salesType=0は予約販売でない、koboGenreId=101912は「PC・システム開発」
      HTTPS https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20140811?applicationId=XXXXXXXXXXXXXXXXXXX&format=json&koboGenreId=101912&salesType=0&sort=-releaseDate

    kwl-checker

    ER図

    ご覧の環境では、object要素がサポートされていないようです。PDFファイルをダウンロードしてください




    blog comments powered by Disqus