はじめに
2015年5月12日くらいにpixivのAPIが変わったようです。旧来のやり方だとログインすることができなくなっているため、ちゃんとした方法でログインする必要があるようです。
ところが、pixivは公式APIを公開していません。新しい方法をWEBで検索しても、まだ整理して掲載されているページも見当たらず。とりあえず、自分用のメモとして記録していこうと思います。
PHPのコード
ログインしてトークンを取得する。
login.php
require_once 'HTTP/Request2.php';
$request = new HTTP_request2();
//SSLの検証を無視
$request->setConfig( array(
'ssl_verify_host' => false,
'ssl_verify_peer' => false,
) );
//リクエストのヘッダ設定
$request->setHeader( array(
'Referer' => 'http://www.pixiv.net/',
//'User-Agent' => ’’ //必要かも?,
'Connection' => 'close'
) );
//メソッドはPOSTで
$request->setMethod( HTTP_Request2::METHOD_POST );
//各種パラメータ
$request->addPostParameter( 'username', PIXIV_ID );
$request->addPostParameter( 'password', PIXIV_PW );
$request->addPostParameter( 'grant_type', 'password' );
$request->addPostParameter( 'client_id', "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ); //iOS Client ID
$request->addPostParameter( 'client_secret', "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ); //iOS Client Secret
try {
$response = $request->setUrl( 'https://oauth.secure.pixiv.net/auth/token' )->send();
$cookies = json_encode( $response->getCookies() );
file_put_contents( './cookies.txt', $cookies );
file_put_contents( './body.txt', $response->getBody() );
} catch ( HTTP_Request2_Exception $e ) {
var_dump( $e );
}
exit;
?>
取得したクッキーをprint_r
valueに表示されたセッション情報を使う。有効期間は3600秒。
cookies.txt
Array
(
[0] => Array
(
[expires] => Fri, 01-May-2015 00:00:00 GMT
[domain] => .pixiv.net
[path] => /
[secure] => 1
[name] => PHPSESSID
[value] => 99999999_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[max-age] => 3600
)
)
取得した本文(Body)
- jsonで帰ってくる。
- 帰ってきた access_token を使う。
イラスト情報の取得方法
- https://public-api.secure.pixiv.net/v1/works/xxxxxx.json 。xxxxxxはイラスト番号。
- ログイン時のセッションデータとaccess_tokenが必要
- 閲覧数やポイント数は取得できなくなっている様子。(パラメータが必要なのかもしれない)
その他
- https://public-api.secure.pixiv.net/v1/users/xxxxxx.json 。ユーザー情報。
- https://public-api.secure.pixiv.net/v1/me/feeds.json 。自分自身の新着情報