56
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

pixivのAPIにアクセスする

はじめに

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が必要
  • 閲覧数やポイント数は取得できなくなっている様子。(パラメータが必要なのかもしれない)

その他

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
56
Help us understand the problem. What are the problem?