=========================================================================

nicoStat - ニコニコ動画に投稿した動画の再生数、コメント数、
           マイリスト数、タイトル一覧をcsv形式で出力する。

                                                           2010/03/02作成
                                                           2012/11/04更新
=========================================================================


＜概要＞

   nicoStat は、ニコニコ動画に投稿した自分の動画の
   再生数、コメント数、マイリスト数、タイトルを一覧にしてcsvファイルに
   するPerlスクリプトです。csv形式ですので Excel などでグラフ化したり、
   スクリプト言語で処理したりできます。

   また Perl の知識をお持ちの方であれば、ソースを書き換えて
   特定のキーワードやタグを持つ動画の統計をとる際のたたき台ソースに
   なるかもしれません。

   diff は、nicoStat.pl で保存した２つのcsvの差分を
   一覧表示するPerlスクリプトです。例えば前日と今日のcsvデータの差分をとり、
   一日で再生数やマイリスト数などにどれだけ変化があったかを見ることができます。

   想定している使い方は、「NICOSTAT+DIFF.BAT をダブルクリック」です。
   詳細は以下をお読み下さい。


＜実行方法(nicoStat)＞

   nicoStatはニコニコ動画の投稿動画ページを取得しcsvファイルに保存します。
   また前回保存したcsvとの差分を一覧表示できます。

   nicoStatを実行する方法は以下の２通りあります。

     a. BATファイルを実行する
     b. Perlスクリプトを直接実行する

   作者は後者の方を使っていますが、Perlをインストールして環境整備している人は
   少ないだろうと思いますので、perlをexe化してBATファイルを作成しました。
   大抵の方にとっては a. の実行方法が良いのではないかと思いますが
   環境によっては動かないことがあるようです。その場合はb. の方法でご使用下さい。

   以下は各項目の詳細説明です。

   ------ a. Windowsユーザ向けの実行方法

     NICOSTAT+DIFF.BAT または NICOSTAT.BAT をダブルクリックして下さい。

     【 NICOSTAT.BAT をダブルクリックした場合 】
     コマンドプロンプトが開き、ニコニコ動画へのログインがまだなら
     メールアドレスやパスワード入力を行います。
     (なおパスワード入力の際、文字列は画面に表示されますので
     ショルダーハッキングにご注意下さい)
     すると各動画の再生数などのデータをStatフォルダの下にcsv形式で保存します。

     【 NICOSTAT+DIFF.BAT をダブルクリックした場合 】
     NICOSTAT.BAT と同じ処理を行った後で直近の２つのデータの差を一覧表示します。
     なお、もっと画面の横幅を広げて閲覧したい場合は後述するtipsの項をご覧下さい。

     csvファイル名は「stat_2010-03-02_22-17.csv」といった具合です。
     この場合、2010年3月2日22時17分のデータです。

   ------ b. UNIX(cygwin)ユーザまたはActivePerlユーザ向けの実行方法

     まず以下のモジュールをインストールして下さい。
  
         LWP::UserAgent, HTTP::Cookies, HTTP::Request, HTTP::Headers, 
         CGI, YAML::Syck, Unicode::Japanese, Time::Piece
 
         インストール方法は以下のような具合で行えます。
             > perl -MCPAN -e 'install YAML::Syck'  (cygwin-perl)
             > ppm install YAML::Syck  (Active Perl)

     次に以下のようにしてcshスクリプトを実行して下さい。

       > ./nicoStat.pl

     ログインがまだならメールアドレスやパスワード入力を行います。
     パスワード入力時にはsttyコマンドで入力文字列を隠します。
     その後投稿動画を解析し、Statディレクトリの下にcsv形式で
     再生数やコメント数などのデータを保存します。

     以下のように -d オプションを付けると、
     上記と同じ処理を行った後で直近の２つのデータの差を一覧表示します。

       > ./nicoStat.pl -d


＜実行方法(diff)＞

   diff は nicoStat で保存した任意の csv ファイル２つの差分を一覧表示します。
   diff を実行する方法は以下の２通りです。

   ------ a. Windowsユーザ向けの実行方法

     DIFF.BAT をダブルクリックして下さい。
     ファイル名を二つ入力するよう求められますので、
     フォルダ名(Stat/)を省略したファイル名を入力して下さい。
     なお、ファイル名を入力せず ENTER を押せば、最近保存した csvファイルが
     入力されたものとして扱います。よって２回とも ENTER を押せば
     直近の２ファイルを指定したことになります。

     以下は実行結果の例です。
       -----------------
       from: ./Stat/stat_2010-03-02_22-17.csv
       to  : ./Stat/stat_2010-03-02_22-34.csv
       play    (diff)  comment (diff)  mylist  (diff)  downld  (diff)  title
         21222 +1          526             773 +1            0         【UTAU】 汽笛(オリジナル) 【重音テト】
          1151 +1           33              28               0         波形切り出し支援ツールを作ってみた【UTAU】
          6723 +2          329             256               0         【UTAU】UTAUloidの秘密はいかが？(オリジナル)
               +4              +0              +1
       -----------------

     投稿動画のうち、再生回数やコメント等に変化のあった動画のみを表示します。
     各列の内容は左から順に以下のようになっています。

       play    = 再生回数
       (diff)  = 再生回数の変化分
       comment = コメント数
       (diff)  = コメント数の変化分
       mylist  = マイリスト数
       (diff)  = マイリスト数の変化分
       downld  = 音ダウンロード数
       (diff)  = 音ダウンロード数の変化分
       title   = 動画タイトル

     最終行には各々の変化分の合計が表示されます。

     なお、もしもっと画面の横幅を広げて閲覧したい場合は後述するtipsの項をご覧下さい。

   ------ b. UNIX(cygwin)ユーザ向けの実行方法

     以下のいずれかのコマンドを実行して下さい。

       > ./diff.pl Stat/ファイル1 Stat/ファイル2
       > ./diff.pl Stat/ファイル1
       > ./diff.pl

     ファイル名を省略した場合、直近のcsvファイルが指定されたものとして扱います。
     出力内容等は前述の DIFF.BATと同じです。


＜ログインの省略＞

   手動でログインすると、クッキーが .cookies.txtに保存され、
   次回以降はログインを省略できます。
   ただし、他のブラウザ等で新規にログインした場合、クッキーが無効になるので
   もう一度ログインをやり直す必要があります。

   ログインを自動化するには .nicorc というファイルを
   テキストエディタで開いてメールアドレスやパスワードを指定して下さい。
   （詳細は .nicorc の中身をご覧下さい。


＜tipsなど＞

  NICOSTAT+DIFF.BAT や DIFF.BAT をダブルクリックして実行した場合の
  窓の横幅を広げるには以下のようにして下さい。

    1. コマンドプロンプトを開く。（DIFF.BATをダブルクリックでも良いです）

    2. 窓最上部左端のアイコンをクリックしてポップアップメニューを出す。

    3. プロパティを選択。

    4. 「レイアウト」タブを選択。

    5. 「ウィンドウのサイズ」の「幅」の値を増やす。

    6. (もし必要なら)「フォント」タブでフォントサイズを小さくしたりする。

    7. 「OK」を選択する。

    8. 「プロパティの適用」という窓が出るので、
       「同じタイトルのウィンドウに適用する」を選択して「OK」を選択。

  なお作者自身は上記の方法を使わず、cygwin+TeraTerm で Perl スクリプトを直接実行しています。


＜ニコニコ動画のHTML構成が変わった場合＞

  ニコニコ動画はときどきHTML内容を変更しています。
  変更があるとデータを正しく抽出できなくなるためnicoStatはエラー終了するようになります。

  nicoStatでは一行毎にPerl正規表現にマッチさせてデータ値を抽出しています。
  各パラメータの正規表現は .nicorc の playNum, commNum, mylistNum, dlNum, title, id, next に
  記述してありますので、ニコニコ動画のHTML構成が変わった場合にはこれらを書き換えて
  対応することになります。

  手順は以下の要領です。
  1. ブラウザでマイページのHTMLソースを見て再生数の書いてある行を探す。
  2. その行にマッチするようなPerl正規表現をplayNum等に書く。
  3. RULECHECK.BAT または nicoStat で、所望の再生数を取り出せたかチェックする。

  RULECHECK.BATを使った場合抽出経過を表示するようになります。
  正しく抽出できた場合、以下のようなデータが列挙されます。
  （例：再生数51、コメント数6、マイリスト数10の動画の例）
  ----
  title: <h4><a href="watch/sm12588413">【Sinsy】 ラジオbot 【オリジナル】</a></h4> -> 【Sinsy】 ラジオbot 【オリジナル】
  id: <h4><a href="watch/sm12588413">【Sinsy】 ラジオbot 【オリジナル】</a></h4> -> sm12588413
  playNum: <dt>再生:</dt><dd>51</dd> -> 51
  commNum: <dt>コメ:</dt><dd>6</dd> -> 6
  mylistNum: <dt>マイ:</dt><dd><a href="mylistcomment/video/sm12588413">10</a></dd> -> 10
  ----
  以上のように、「抽出したい項目名: 抽出した行 -> 抽出したデータ値」
  の形式で抽出経過が表示されます。

＜使用上の注意＞

   本スクリプトは2012/10月31日現在のニコニコ動画での投稿動画ページ、
   ログインページに対応しています。これらのページ構成が変更された場合
   うまく実行できなくなる可能性があります。
   その際は新しいページ構成に合わせてスクリプトを修正すれば良いのですが、
   よく分からないようでしたらブログ等でご連絡下さい。
   多分対応すると思います。

   .nicorc は sjis で保存して下さい。
   また文字は sjisで出力されます。sjis以外にする場合は
   本ソースをsjisで検索して適宜書き換えて下さい。

＜ライセンス＞

   GNU GPLライセンスとしてお使い下さい。

＜参考＞

   以下のページのPerlスクリプトを参考にしました。ありがとうございます。
   404 Blog Not Found - 小飼 弾さん
   http://blog.livedoor.jp/dankogai/archives/50885358.html


＜作者ブログ等＞

   ・配布元 = http://freett.com/nwp8861/soft/
   ・ブログ = http://nwp8861.blog92.fc2.com/


＜変更記録＞

  2012/11/04 ver.0.19
    - (nicoStat.pl: 追加) csvのF列に音DL数を保存するようにした。
    - (nicoStat.pl: 修正) -iオプションを指定したときのバグを修正した。
    - (diff.pl:     追加) 音DL数に対応した。
    - (diff.pl:     変更) データ取得日をファイルスタンプからではなくファイル名から求めるようにした
                          $getDateFromFName = 0;にすれば以前の状態に戻る

  2010/10/31 ver.0.18
    - (変更) ニコニコ動画のHTMLページ構成変更に対応した。
    - (変更) 再生数などのデータ抽出規則（Perl正規表現）を.nicorcで指定するようにした。
    - (追加) RULECHECK.BATを追加した（正規表現チェック用）。
    - (追加）実行オプションを追加した。(-i -o -verbose)

  2010/08/25 ver.0.17
    - (変更) ニコニコ動画のHTMLページ構成変更に対応した。
    - (変更) nicoStat実行終了時に動画数を表示するようにした。

  2010/06/17 ver.0.16
    - (変更) ニコニコ動画のHTMLページ構成変更に対応した。

  2010/06/02 ver.0.15
    - (変更) ニコニコ動画のHTMLページ構成変更に対応した。

  2010/05/10 ver.0.14
    - (変更) activeperlでexe化した。

  2010/03/18 ver.0.13
    - (追加) cygcrypt-0.dll を同梱。

  2010/03/18 ver.0.12
    - (追加) cygperl5_10.dll を同梱。

  2010/03/18 ver.0.11
    - (変更) モジュール等のディレクトリ構成を /usr/lib/perl5/ 下と同じ形にした。
    - (変更) 保存csvファイルの改行コードを\r\nにした。
    - (追加) csvのE列に動画IDを保存するようにした。
    - (変更) 動画タイトルに「,」が含まれている場合は全角"，"に変換するようにした(動作未確認)。
    - (変更) README記述変更。
    - (追加) nicoStat.csh, diff.csh (いずれもcygwinで各モジュールをインストールしていない場合用)を追加。

  2010/03/02 ver.0.1
    - 完成。

