1. はじめに
Pixiv を運営しているピクシブ株式会社は公式の API を公開していないが,非公式の API が有志のユーザーによって解析されており,Python や Node.js などのライブラリとして公開されている。しかし,パケットレベルで解説している情報が少なく,フルスクラッチで API を呼び出すプログラムを開発する際にネックとなった。そこで,本記事では,curl を用いて API を呼び出す方法について記述する。
続く 2 章では,作業を行う環境について記述する。3 章では,アクセストークンの取得について記述する。4 章では,ランキング情報の取得について記述する。5 章では,画像データのダウンロードについて記述する。6 章では,本記事のまとめを記述する。
2. 環境情報
次章以降で行う作業は以下の環境下で行ったものである。
- mintty Ver.2.8.4
- curl Ver.7.58.0
- Bash Ver.4.4.19
- Windows 10 Ver.1803
3. アクセストークンの取得
アクセストークンを取得するためには,POST メソッドと 5 つのパラメータを設定した HTTP パケットを https://oauth.secure.pixiv.net/auth/token に送信する必要がある。アクセストークンを取得するためのコマンドと,その実行画面を以下に示す。
$ curl -X POST \
-d 'client_id=[CLIENT_ID]' \
-d 'client_secret=[CLIENT_SECRET]' \
-d 'grant_type=password' \
-d 'username=[USER_ID]' \
-d 'password=[PASSWORD]' \
https://oauth.secure.pixiv.net/auth/token
client_id と client_secret は,pixiv とモバイルデバイス間の HTTPS パケットを解析する必要があるが,有志の方が自身のブログで公開している。username と password は自身の ID※ とパスワードを入力する。
※ 設定しているメールアドレスでも可
赤文字の部分がアクセストークンである。取得したアクセストークンは次章で使用するため,記録しておく。
4. ランキング情報の取得
ランキング情報を取得するためには,GET メソッドとヘッダーに前章で取得したアクセストークンを設定した HTTP パケットを https://public-api.secure.pixiv.net/v1/ranking/all?[パラメータ] に送信する必要がある。ランキング情報を取得するためのコマンドと,その実行画面を以下に示す。
$ curl -X GET \
-H 'Authorization:Bearer [ACCESS_TOKEN]' \
https://public-api.secure.pixiv.net/v1/ranking/all?mode=daily\&image_sizes=large
mode=daily はデイリーランキングを取得するパラメータであり,必須 のパラメータである。daily を weekly や monthly に変更することでウィークリーランキングやマンスリーランキング,その他のランキング情報を取得することが可能である。
また,image_sizes=large はオリジナルサイズの画像を取得するパラメータであり,任意 のパラメータである。large の他に,small や medium が設定可能であり,このパラメータを設定しない場合は small が自動的に設定される。
赤文字の部分が画像データの URI である。この URI は次章で使用するため,記録しておく。
5. 画像データのダウンロード
画像データのダウンロードするためには,GET メソッドとヘッダーに Referer:https://app-api.pixiv.net/ を設定した HTTP パケットを前章で取得した URI に送信する必要がある。画像データのダウンロードするためのコマンドを以下に示す。
$ curl -L -O -X GET \
-H 'Referer:https://app-api.pixiv.net/' \
[ILLUST_URI]
注意しなければいけないのが,前章で取得した URI は画像データを指すものではないことである。画像データの URI はレスポンスパケットに含まれているため,リダイレクトオプションを設定する必要がある。
6. まとめ
本記事で呼び出した API は,冒頭でも述べたが非公式の API である。そのため,告知なしで仕様変更やアカウント停止などが行われる可能性がある。こういった不利益に対して筆者は責任を負うことができないため,API の取り扱いは自己責任で行ってほしい。