curl を用いて pixiv API を呼び出す

heroImage

1. はじめに

pixiv を運営しているピクシブ株式会社は公式の API を公開していませんが,非公式の API が有志のユーザーによって解析されており,Python や Node.js などのライブラリとして公開されています。しかし,パケットレベルで解説している情報が少なく,フルスクラッチで API を呼び出すプログラムを開発する際にネックとなっていました。そこで,本記事では curl を用いて API を呼び出す方法について記述します。

2. アクセストークンの取得

アクセストークンを取得するためには,POST メソッドと 5 つのパラメータを設定した HTTP パケットを https://oauth.secure.pixiv.net/auth/token に送信する必要があります。アクセストークンを取得するためのコマンドと,その実行画面を以下に示します。

Terminal window
1
$ curl -X POST \
2
-d 'client_id=[CLIENT_ID]' \
3
-d 'client_secret=[CLIENT_SECRET]' \
4
-d 'grant_type=password' \
5
-d 'username=[USER_ID]' \
6
-d 'password=[PASSWORD]' \
7
https://oauth.secure.pixiv.net/auth/token

client_idclient_secret は,pixiv とモバイルデバイス間の HTTPS パケットを解析する必要がありますが,有志の方が自身のブログで公開してくれているので,それらを活用します。usernamepassword は自身の ID1 とパスワードを入力する。

赤文字の部分がアクセストークンです。取得したアクセストークンは次章で使用するため記録しておきます。

3. ランキング情報の取得

ランキング情報を取得するためには,GET メソッドとヘッダーに前章で取得したアクセストークンを設定した HTTP パケットを https://public-api.secure.pixiv.net/v1/ranking/all?[パラメータ] に送信する必要があります。ランキング情報を取得するためのコマンドと,その実行画面を以下に示します。

Terminal window
1
$ curl -X GET \
2
-H 'Authorization:Bearer [ACCESS_TOKEN]' \
3
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 は次章で使用するため記録しておきます。

4. 画像データのダウンロード

画像データのダウンロードするためには,GET メソッドとヘッダーに Referer:https://app-api.pixiv.net/ を設定した HTTP パケットを,前章で取得した URI に送信する必要があります。画像データのダウンロードするためのコマンドを以下に示します。

Terminal window
1
$ curl -L -O -X GET \
2
-H 'Referer:https://app-api.pixiv.net/' \
3
[ILLUST_URI]

注意しなければいけないのが,前章で取得した URI は画像データを指すものではないことです。画像データの URI はレスポンスパケットに含まれているため,リダイレクトオプションを設定する必要があります。

5. おわりに

本記事で呼び出した API は,冒頭でも述べましたが非公式の API です。そのため,告知なしで仕様変更やアカウント停止などが行われる可能性があります。こういった不利益に対して筆者は責任を負うことができないため,API の取り扱いは自己責任で行ってください。

環境情報


  1. 設定しているメールアドレスでも可