# Bookmeter Scraper [![Build Status](https://travis-ci.org/kymmt90/bookmeter_scraper.svg?branch=master)](https://travis-ci.org/kymmt90/bookmeter_scraper) [![Gem Version](https://badge.fury.io/rb/bookmeter_scraper.svg)](https://badge.fury.io/rb/bookmeter_scraper) [読書メーター](http://bookmeter.com)の情報をスクレイピングして Ruby で扱えるようにするための gem です。 - 書籍情報 - 読んだ本 - 読んでる本 - 積読本 - 読みたい本 - お気に入り / お気に入られユーザ - ユーザプロフィール を取得可能です。 ## 注意 スクレイピングの頻度は常識の範囲内にとどめてください。読書メーターのサーバーへ故意に著しい負荷をかける行為は、利用規約の第 9 条で禁止されています。 - [利用規約 - 読書メーター](http://bookmeter.com/terms.php) ## 使いかた この gem を使うときは以下のコードが必要です。 ```ruby require 'bookmeter_scraper' ``` ### ログイン 書籍情報、お気に入り / お気に入られユーザ情報を取得するには、`Bookmeter.log_in` または `Bookmeter#log_in` でログインしておく必要があります。 ログイン情報の入力には以下の 3 通りの方法があります。 1. 引数として渡す 2. `config.yml` へ記述しておく 3. ブロック内で設定する #### 1. 引数として渡す 以下のように `Bookmeter.log_in` へメールアドレスとパスワードを引数として渡すことで、ログインできます。 ```ruby bookmeter = BookmeterScraper::Bookmeter.log_in('example@example.com', 'password') bookmeter.logged_in? # true ``` `Bookmeter#log_in` でもログイン可能です。 ```ruby bookmeter = BookmeterScraper::Bookmeter.new bookmeter.log_in('example@example.com', 'password') ``` #### 2. `config.yml` へ記述しておく まず、以下のように YAML ファイル `config.yml` を記述し、Ruby スクリプトを実行する場所と同じディレクトリに置きます。 ```yml mail: example@example.com password: your_password ``` 次に、引数なしで `Bookmeter.log_in` または `Bookmeter#log_in` を呼ぶと、`config.yml` からログイン情報を読みとり、ログインできます。 ```ruby bookmeter = BookmeterScraper::Bookmeter.log_in bookmeter.logged_in? # true ``` #### 3. ブロック内で設定する 以下のように `Bookmeter.log_in` へブロックを渡すことで、ログインできます。 ```ruby bookmeter = BookmeterScraper::Bookmeter.log_in do |configuration| configuration.mail = 'example@example.com' configuration.password = 'password' end bookmeter.logged_in? # true ``` `Bookmeter#log_in` でもログイン可能です。 ```ruby bookmeter = BookmeterScraper::Bookmeter.new bookmeter.log_in do |configuration| configuration.mail = 'example@example.com' configuration.password = 'password' end ``` ### 書籍情報の取得 以下の書籍情報 - 読んだ本 - 読んでる本 - 積読本 - 読みたい本 を取得できます。取得には `Bookmeter.log_in` などによる事前のログインが必要です。 #### 読んだ本 `Bookmeter#read_books` で「読んだ本」情報が取得できます。 ```ruby books = bookmeter.read_books # ログインユーザの「読んだ本」を取得 bookmeter.read_books('01010101') # 他のユーザの ID を指定して、そのユーザの「読んだ本」を取得 ``` 書籍情報は - 書名 `name` - 著者 `author` - 読了日(初読了日と再読日の両方)の配列 `read_dates` - 読書メーター内の書籍ページの URI `uri` - 書籍の表紙画像 URI `image_uri` を属性として持つ `Book` の配列として取得できます。 ```ruby books[0].name books[0].author books[0].read_dates books[0].uri books[0].image_uri ``` さらに、`Bookmeter#read_books_in` で特定年月の「読んだ本」情報が取得できます。 ```ruby books = bookmeter.read_books_in(2016, 1) # ログインユーザが 2016 年 1 月に「読んだ本」を取得 books = bookmeter.read_books_in(2016, 1, '01010101') # ID で指定した他のユーザが 2016 年 1 月に「読んだ本」を取得 ``` #### 読んでる本 / 積読本 / 読みたい本 「読んだ本」以外の書籍情報 - 読んでる本 - 積読本 - 読みたい本 も、それぞれ - `Bookmeter#reading_books` - `Bookmeter#tsundoku` - `Bookmeter#wish_list` で取得できます。 ```ruby books = bookmeter.reading_books # ログインユーザの「読んでる本」を取得 books[0].name books[0].author books[0].read_dates # 読了日の Array は空 books[0].uri books[0].image_uri bookmeter.tsundoku # ログインユーザの「積読本」を取得 bookmeter.wish_list # ログインユーザの「読みたい本」を取得 ``` ### お気に入り / お気に入られユーザ情報の取得 `Bookmeter#followings` と `Bookmeter#followers` でログインユーザが参照できるお気に入り / お気に入られユーザの情報を取得できます。取得には事前のログインが必要です。 ```ruby following_users = bookmeter.followings # 「お気に入り」ユーザの情報を取得 followers = bookmeter.followers # 「お気に入られ」ユーザの情報を取得 ``` ユーザ情報は - ユーザ名 `name` - ユーザ ID `id` - 読書メーター内のユーザページの URI `uri` を持つ `User` の配列として取得できます。 ```ruby following_users[0].name following_users[0].id followers[0].name followers[0].id followers[0].uri ``` #### 注意 **お気に入り / お気に入られのページにページネーションが存在する場合には未対応です。** ### ユーザのプロフィールの取得 `Bookmeter#profile` でユーザのプロフィールを取得できます。プロフィールはログインなしで閲覧できるため、ログインは不要です。 ```ruby bookmeter = BookmeterScraper::Bookmeter.new user_id = '000000' profile = bookmeter.profile(user_id) # 任意ユーザの ID を指定してプロフィールを取得可能 ``` プロフィール情報は以下の属性を持つ `Struct` として取得できます。プロフィールで設定されていない属性は `nil` となります。 ```ruby profile.name # ユーザ名 profile.gender # 性別 profile.age # 年齢 profile.blood_type # 血液型 profile.job # 職業 profile.address # 現住所 profile.url # URL / ブログ profile.description # 自己紹介 profile.first_day # 記録初日 profile.elapsed_days # 経過日数 profile.read_books_count # 読んだ本の数 profile.read_pages_count # 読んだページの数 profile.reviews_count # 感想/レビューの数 profile.bookshelfs_count # 本棚の数 ``` ## ライセンス [MIT License](http://opensource.org/licenses/MIT)