Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
53
Help us understand the problem. What is going on with this article?
@yyano

pixivのAPIにアクセスする

More than 5 years have passed since last update.

はじめに

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

その他

参考サイト

53
Help us understand the problem. What is going on with this article?
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
yyano
IT系おじさん。やんわりと転職活動中。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
53
Help us understand the problem. What is going on with this article?