Pixiv APIについて

追記(2011/10/23)
ここで紹介したAPIを元に、.Netプログラム用のDLLを開発、公開してもらいました!
screenshot
CodePlex Archive


プログラミングカテゴリの記事書くのって随分久しぶりな気がします。


最近、Pixivに入り浸ることが多くなって参りました。
ブラウザ開くと、常にPixivは最後まで開きっぱなしという感じです。
で、ブラウザでPixiv見てて思ったんですが、



「・・・操作しづらい」


基本的に私の場合、Pixivにアクセスした後の巡回ルートは以下のようになります。

  1. お気に入りユーザーの新着をチェック(イラスト)
  2. マイピクの新着をチェック(イラスト)
  3. お気に入りユーザーの新着をチェック(小説)
  4. ウィークリーランキングをチェック(イラスト)

完全に見る専のブラウジングです。
ちなみにマイピクで小説書いてらっしゃる方は、みんなお気に入りユーザーに登録してあるので、マイピク新着小説はチェックしてません。


で、です。
お気に入りユーザーの新着をチェックする場合、

  • お気に入りユーザー新着一覧を開く
  • 絵をクリック
  • 評価するなりして
  • 新着一覧に戻る
  • 絵をクリック
  • 以下ループ

という行動をとるのですが、絵をクリックした後の画面からは、「お気に入りユーザー新着一覧の次の絵」に1クリックでは移動できない訳です。非常に不便。
でもiPhone版のPixivアプリからだと、「お気に入りユーザー新着一覧の次の絵」「同前の絵」へ、フリップ一発で移動できます。便利。


あと、PCに画像を保存する際に、ファイル名に作品タイトルや作者名を含めたかったりします。

なので何とかしてPixiv専用ブラウザが作れないものかと思案中。
作ろうと思ったらば、やっぱりPixivのAPIが必須。*1
ところがPixivのAPIは公開されておりませんでした。
なので、ちょっとiPhoneの通信経路をゴニョゴニョして*2APIを調べてみました。



Pixiv APIの使い方についてはこちら参照。
screenshot
http://pastie.org/735195
以下は、上記のページでは掲載されていないAPIを列挙します。
また、getリクエストに

c_mode=count

を含めた場合による、件数取得は省略しました。


「XXXXXXXX」(大文字Xが8個)は、取得済みPHPSESSIDを入力する所です。

■小説ランキング
http://iphone.pxv.jp/iphone/novel_ranking.php?mode=week&type=normal&PHPSESSID=XXXXXXXX&p=1

modeはweekとr18の2種類しか無いようです。

■新着小説
http://iphone.pxv.jp/iphone/new_novel.php?dummy=0&PHPSESSID=XXXXXXXX&p=1

■新着小説(18禁)
http://iphone.pxv.jp/iphone/new_novel_r18.php?dummy=0&PHPSESSID=XXXXXXXX&p=1

■お気に入りユーザーの新着小説
http://iphone.pxv.jp/iphone/bookmark_user_new_novel.php?dummy=0&PHPSESSID=XXXXXXXX&p=1

■マイピクの新着小説
http://iphone.pxv.jp/iphone/mypixiv_new_novel.php?dummy=0&PHPSESSID=XXXXXXXX&p=1

■ブックマークした小説(公開)
http://iphone.pxv.jp/iphone/bookmark_novel.php?id=&PHPSESSID=XXXXXXXX&p=1

■ブックマークした小説(非公開)
http://iphone.pxv.jp/iphone/bookmark_novel.php?id=&rest=hide&PHPSESSID=XXXXXXXX&p=1


■小説本文
http://iphone.pxv.jp/iphone/novel_text.php?id=○○○

○○○は小説作品のID。これはログイン必要無い。
投稿時にtextareaに入れる文字列がそのまま取得できる。挿絵なんかは適切に処理する必要あり。


■イラストのIDを指定して、イラストの詳細情報を取得
http://iphone.pxv.jp/iphone/illust.php?illust_id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はイラスト・漫画のID。投稿者名やタイトル・キャプションなどなどが取得できる様子。

■ユーザーIDを指定して、イラスト作品の一覧を取得
http://iphone.pxv.jp/iphone/member_illust.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■ユーザーIDを指定して、小説作品の一覧を取得
http://iphone.pxv.jp/iphone/member_novel.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■指定したIDのユーザーのお気に入りユーザーを取得
http://iphone.pxv.jp/iphone/bookmark_user_all.php?rest=show&id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■指定したIDのユーザーのマイピクを取得
http://iphone.pxv.jp/iphone/mypixiv_all.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■指定したIDのユーザーのブックマークを取得(イラスト)
http://iphone.pxv.jp/iphone/bookmark.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■指定したIDのユーザーのブックマークを取得(イラスト)
http://iphone.pxv.jp/iphone/bookmark_novel.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はユーザーのID。

■指定したIDのユーザーのプロフィールを取得
http://iphone.pxv.jp/iphone/profile.php?id=○○○&PHPSESSID=XXXXXXXX?dummy=0&PHPSESSID=XXXXXXXX

○○○はユーザーのID。
結果はHTMLで返ってくるので、独自のデザインで表示させるなら、パースして情報を抜き取るか、ブラウザ内に表示させてCSSをゴリゴリいじるかしないといけなさそう。

■このイラストをブックマークしているユーザー
http://iphone.pxv.jp/iphone/illust_bookmarks.php?illust_id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はイラスト・漫画のID。

■イラストのコメントを取得
http://iphone.pxv.jp/iphone/illust_comments.php?illust_id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○はイラスト・漫画のID。

■イラストを評価する
http://iphone.pxv.jp/iphone/rating.php?illust_id=○○○&score=●&PHPSESSID=XXXXXXXX

○○○はイラスト・漫画のID。
●は点数(1〜10)。
評価に成功すると「Evaluated」が、既に評価済みだと「Already evaluated」という文字列が返ってくる様子。
それ以外の反応は確かめてないです。


■この小説をブックマークしているユーザー
http://iphone.pxv.jp/iphone/novel_bookmarks.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○は小説のID。

■小説のコメントを取得
http://iphone.pxv.jp/iphone/novel_comments.php?id=○○○&PHPSESSID=XXXXXXXX&p=1

○○○は小説のID。

■小説を評価する
小説のレーティング
http://iphone.pxv.jp/iphone/rating_novel.php?illust_id=○○○&score=●&PHPSESSID=XXXXXXXX

○○○はイラスト・漫画のID。
●は点数(1〜10)。
レンスポンスはイラストの評価と同様。


■指定したIDのユーザーを、自分のお気に入りに追加(POST)
http://iphone.pxv.jp/iphone/bookmark_add_user.php?dummy=0&PHPSESSID=XXXXXXXX

これだけPOSTメソッド。
パラメーターは以下

mode=add&id=○○○&restrict=0

○○○はユーザーID。

とりあえずこんな感じです。
まだまだ検索系のAPIは調べていないので、不明な点は多いですが。
どなたかがキチンとまとめて、Objective-Cのライブラリとか作ってくれると、それはとっても嬉しいな、って。

*1:Pixivのページを開いてHTMLをパースして、とかやっても良いのかも知れないけれど、ページのHTMLとか変更されると死ねる

*2:詳しく知りたい人は、「TCP/IP パケット ダンプ」とかで調べてみると良いんじゃないかな!