pixivは(基本的に)APIを公開しておらず、ログインした状態で全てのページを情報を参照する方法が無いか長らく悩んでいました。以前、よくわからないpixivAPIを使って、ログインしていない状態で取得できる限られたデータからアニメの人間関係ネットワークを作ったことがありましたが、これ以上のことはできそうにないなと思ってました。
【集計】pixiv小説タグでアイカツの人間関係ネットワークを描いてみた│今私は小さな魚だけれど
よく調べてみると、APIに「&PHPSESSID=」という引数があり、これを使えば全てのデータが取得できると下の記事に書いていました。
PixivAPIを使った検索とソートソフトの配布:ブロマガのタイトル * - ブロマガ
・ログインGETリクエスト
spapi.pixiv.net/iphone/login.php?mode=login&pixiv_id=(PixivのID)&pass=(Pixivのパスワード)&skip=0
Host: spapi.pixiv.net
spapi.pixiv.net/iphone/index.php?PHPSESSID=○○○○○
リダイレクト後のセッションID(PHPSESSID=○○○○○の部分)を適当な変数に入れてログイン処理(セッションIDの取得)は終わり
というわけでこれを使ってとりあえずデータを取得するところまでやってみました。pixivAPIはなぜかcsvっぽい形式で出力されるのでpandasというパッケージを使ってちゃちゃっと。
これを使って、今度はイラストの投稿日時を使って、例えばまどか☆マギカの映画の公開前後でクレイジーサイコレズホムラチャン周りの人間関係がどう変わってるのかとか見たら面白そうです。時間があればやってみます。
本当はまどか☆マギカよりアイカツかファンタジスタドールの分析をしたいのですが、イラストの数がぜんぜん違うので選択肢が狭まりそう。データ解析って、元々盛り上がってるものを対象にすると色々できそうですが、そうでないものに対してはそれなりって感じがします。
import pandas as pd
word = "アイカツ"
SSID = "(自分の取得したPHPSESSID)"
preurl = "http://spapi.pixiv.net/iphone/search.php?s_mode=s_tag&word="\
+ word + "&PHPSESSID=" + SSID
#空のデータフレームを用意
frame = pd.DataFrame()
for pagenum in range(1,200):
url = preurl + "&p=" + str(pagenum)
df = pd.read_csv(url, header=None)
if len(df[0])==50:
frame = frame.append(df)
print pagenum ,
else:
frame = frame.append(df)
print pagenum
break
#データの書き出し
frame.to_csv("aikatsu.csv")