お手軽Pixiv画像収集クローラの作り方

僕はイラストも描くんですが資料の画像集めを自動化出来ないかと考えたわけですよ。毎日、Pixivを巡回してちまちまと画像を集めてたんですがとてもじゃないが時間が勿体無い。
ちなみに動作環境としてはwindows7でPHPが動作する環境を前提としてます。別にバッチファイルで作っても良かったんですが日付取得が面倒過ぎる。正確さを期すならばserverを用意してrsyncで取得する形でも良かったんですが、あくまでもお手軽ということでクライエントマシン一つで完結するようにしました。
PHPが動かないってひとはダウンロードしてきて用意して下さい。一つぐらいスクリプト言語入れてると何かと捗りますよ。

Pixiv画像取得クローラを用意
今回作ろうと思ったのはこれを見つけたからですね。GUIでも動くけどコマンドラインからも動作可能ってことでwindowsタスクに組み込めば自動化出来るんじゃないかと思ったわけです。
大上段に構えたタイトルつけてるけど、要はこれを動かすバッチ処理を作っただけですw mac版linux版があるんでcronとかに組み込めばサーバでも使えるんじゃないですかね。
windows版パッケージを取得してきて展開して下さい。
インストーラはないのでCドライブ直下にでもディレクトリを移動して下さい。次は基本情報を入力します。
PixPixDownloader.exeを起動するとGUI版が立ち上がるので、基本設定のタブをクリックしてPixivのID・password、保存先ディレクトリを入力。適用を押すと設定ファイルが上書きされます。
これでパラメータタブで、適当にタグを入力して巡回させて画像が収集されるようならOKです。
注意点は保存ディレクトリが存在しない場合動作しないです。
CUI版を動かしてみる
単純にヘルプを見ればいいだけですがね。一応記載しておきます。
ヘルプの表示方法は”java -jar PixPixDownloader.jar h”です。
################################################
## ようこそコマンドモードへ ##
## 注 パラメータは正しく指定してください ##
################################################
パラメータには下記のようなものが用意されております
検索画像収集実行 [検索ワード / 開始日時 / 終了日時 / 最低ブックマーク数 / モード(画像:0・漫画:1・総合:2) / 開始ページ番号 / 終了ページ番号]
# パラメータの例) is カオス 2010-01-01 2010-01-01 0 2 0 50
ID画像収集実行 [ID / 開始ページ番号 / 終了ページ番号]
# パラメータの例) ii 000000 0 5
検索小説収集実行 [検索ワード / 開始日時 / 終了日時 / 最低ブックマーク数 / 開始ページ番号 / 終了ページ番号]
# パラメータの例) ns カオス 2010-01-01 2010-01-01 0 0 50
ID小説収集実行 [ID / 開始ページ番号 / 終了ページ番号]
# パラメータの例) ni 000000 0 5
[Unix/Linux] Is it garbled? Please execute the following command.
$ alias java='java -Dfile.encoding=UTF-8'
僕は東方やらの画像を収集してるので、検索:東方,最低ブックマーク数:30と設定するなら下記の通り。
C:\PixPix_Win> java -jar PixPixDownloader.jar is 東方 2013-08-24 2013-08-25 30 2 0 50
最低ブックマーク数はおこのみで。ただし0とかにすると膨大な量がダウンロードされてハードディスク圧迫するのでよく考えてください。
バッチ処理の作成
ざつーに作ってます。お手軽ということをお忘れなく。
<?php
//保存ディレクトリ
$save_path = 'C:\\download\\';
// 日付取得
$today = date('Y-m-d', strtotime('-1 day'));
$yesterday = date('Y-m-d', strtotime('-2 day'));
// 検索キーワード
$search_word = array(
array('keyword'=>'東方', 'bookmark_num'=>'30'),
array('keyword'=>'艦これ','bookmark_num'=>'100'),
array('keyword'=>'進撃の巨人', 'bookmark_num'=>'50')
);
// 収集実行
chdir("C:\\PixPix_Win");
foreach($search_word as $value) {
system("java -jar C:\\PixPix_Win\PixPixDownloader.jar is ". $value['keyword'] ." $yesterday $today ". $value['bookmark_num'] ." 2 0 50");
system("move $save_path". $value['keyword'] ." $save_path". $value['keyword'] ."$today");
}
?>
まぁ注意点としては前日分の画像を収集するように作ってることでしょうか。当日でもいいんですが取りこぼしが嫌なので。
windowsタスクへの登録
コントロールパネル→システムとセキュリティ→タスクのスケジュール。
検索で”taskschd.msc”が早いです。
スクリーンショットでも置いておきますので参考にしてタスクを登録して下さい。
今後の課題
これだと重複画像がある場合は削除できないんですね。SimiPixでも使って定期的に削除するしか無いっすね。
Picasaでタグを使って画像は管理してるんだけどさ、タグ付けまで自動化できたら最善ですね。
ちなみにこの収集方法ではかすりもしない僕のpixivアカウントはこちらです。