2023年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

 

« 今日買ってきた本 | トップページ | Crazy Ken Band New Album「ZERO」を聴いたよ »

2008年8月12日 (火)

ニコニコ動画から検索結果を取得するプログラム

今日から夏休み。
夏休みの自由研究に、ニコニコ動画から検索結果を取得するプログラムを作ってみようかと思う。
初音さんがどれだけ歌っているのか知りたいんだもん。
ニコ動の検索ページじゃ物足りないんだもん。
まず手始めに、プログラムからニコ動に接続して、それから検索して、その結果を取得してみる。

注:本プログラムを使用して被害・損害を受けた、または与えたとしても当方は一切責任を持ちませんのでご了承ください。また、質問は一切受け付けませんのでご自分で勉強なさったら。まあ、オイラも勉強不足だし、直観とフィーリングでプログラムを作っているので、何が正しいかは己の心に聞け!ああ、そうそうニコ動はツールからのアクセスを認めていないので、ばれてアカバン食らっても知らないよ。
USE AT YOUR OWN RISK

以下のプログラムは、

  • C#で書いています。ビバ!Microsoft Visual Studio 2005 Microsoft Visual C# 2005 Express Edision
  • C#だから、実行環境は、XP以降になるのかな?(2000でも .NET Frameworkを入れれば動くかもね) このプログラムは、Microsoft Visual C# 2005とか入れてあるWindows Vista Home Premiumで、デバッグ実行してみただけだけど。
  • ニコ動に接続して、キーワード"vocaloid VOCALOID"を検索した結果の(一ページ目)のHTMLの内容を取得します。
  • 接続した結果のHTMLは、textBox1という名前のテキストボックスに入れます。プロパティでマルチラインにしておけば少しは見やすくなるかもしれないと思うような気がする。
  • 検索した結果のHTMLは、textBox2という名前のテキストボックスに入れます。プロパティでマルチラインにしておけば(略
  • button1という名前のボタンを押したら動くようになっています。 なので、フォームにbutton1のボタンとtextBox1、textBox2のテキストボックスを貼り付けてください。
  • getWebDataメソッドの中のuid変数にはニコ動に接続するときのメールアドレスを、pwd変数にはパスワードを入れてください。
  • 参考にしたサイトがいろいろありますが、メモっていなかったので忘れました。不実なアタシですが、参考にしたサイトを作成した方にお礼を申しあげます。ありがとうございました。
  • 無駄なものがあるかもしれませんが、知らんもん。だって動いたじゃん。・・・ごめん、見なおしてみます。
  • これで接続すると、Webブラウザの方の接続は切れます。またログインしなおす必要が出てきますよ。クッキーを流用すれば切れないらしいけれどよくわからん。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Collections;
using System.Windows.Forms;namespace GetNikoDouInfo
{
    public partial class frmMain : Form
    {
        private CookieContainer CookieContainer_;

        public frmMain()
        {
            InitializeComponent();
            CookieContainer_ = null;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string html = getWebData();      

            if (html != null)
            {
                textBox1.Text = html;
            }

            String html2 = getSearchData("vocaloid VOCALOID");

            if (html2 != null)
            {
                textBox2.Text = html2;
            }
        }

        private string getWebData()
        {
            Encoding enc = Encoding.UTF8;

            string url2 = "https://secure.nicovideo.jp/secure/login?site=niconico";
            string next_url = "/";
            string uid = "your mailaddress";    // あなたのニコ動用メールアドレスを設定
            string pwd = "your password";        // あなたのニコ動用パスワードを設定
            string param = ""

            // ポスト・データの作成
            Hashtable ht = new Hashtable();

            ht["next_url"] = HttpUtility.UrlEncode(next_url, enc);
            ht["mail"] = HttpUtility.UrlEncode(uid, enc);
            ht["password"] = HttpUtility.UrlEncode(pwd, enc);
            foreach (string k in ht.Keys)
            {
                param += String.Format("{0}={1}&", k, ht[k]);
            }
            byte[] data = Encoding.ASCII.GetBytes(param);

            // リクエストの作成
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url2);
            req.CookieContainer = new CookieContainer();
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = data.Length;

            // ポスト・データの書き込み
            Stream reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();

            // レスポンスの取得と読み込み
            WebResponse res = req.GetResponse();
            Stream resStream = res.GetResponseStream();
            StreamReader sr = new StreamReader(resStream, enc);
            string html = sr.ReadToEnd();
            CookieContainer_ = req.CookieContainer;
            sr.Close();
            resStream.Close();

            return html;
        }

        private string getSearchData(string keyword)
        {
            string url = "http://www.nicovideo.jp/search/";
            string html = "";
            Encoding enc = Encoding.UTF8;

            // リクエストの作成
            string url2 = url + HttpUtility.UrlEncode(keyword, enc);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url + HttpUtility.UrlEncode(keyword, enc));

            req.CookieContainer = CookieContainer_;
            req.Method = "GET";
            req.ContentType = "application/x-www-form-urlencoded";

            WebResponse rsp = req.GetResponse();
            Stream stm = rsp.GetResponseStream();
            if (stm != null)
            {
                StreamReader reader = new StreamReader(stm, System.Text.Encoding.GetEncoding("utf-8"));
                html = reader.ReadToEnd();
                stm.Close();
            }
            rsp.Close();

            return html;
        }
    }
}

次は、検索結果のすべてのページをなめて、検索結果一覧を作ってみようと思う。

« 今日買ってきた本 | トップページ | Crazy Ken Band New Album「ZERO」を聴いたよ »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ニコニコ動画から検索結果を取得するプログラム:

« 今日買ってきた本 | トップページ | Crazy Ken Band New Album「ZERO」を聴いたよ »