気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

最近、ブログを訪問してくださる方やソフトを利用してくださる方が
すこしずつ増え、大変うれしく思っています。

今後とも是非よろしくお願いします。

さて、本日1件の障害FIXを行ったバージョン[1.2]をリリースしました。
たびたび申し訳ございませんが最新バージョンをダウンロードしてください。

○障害内容
関連動画と著者動画の2ページ目以降が表示しようとするとエラーが発生する。

Youtubeビューワーのダウンロード

ソースのダウンロード

実は、現在新たに企画・開発を進めているソフトが有るのですが、そのソフトでは Yahoo APIの「日本語形態素解析」を
利用します。このAPIは日本語の文章を言語要素(意味のある最小単位)に分割してくれます。

このAPIは数あるWeb APIの中でもかなり魅力的で、パワフルなものだと私は思っています。
先日リリースさせて頂いた[Youtubeビューワー]の検索機能でもこれを利用することを検討しています。

そこでこのAPIをC#から利用する方法をTipsとして紹介します。
ソースコードは以下です。


    //解析する文字列はURLエンコードする
    String postString = String.Format("appid={0}&results=uniq&uniq_filter=1|2|4|9|10|11|12&sentence={1}", 
              [アプリケーションID], HttpUtility.UrlEncode([解析する文章]));

    //UTF8でバイト配列にエンコードする
    byte[] postData = Encoding.UTF8.GetBytes(postString);

    //Webリクエストを生成する
    WebRequest webReq = WebRequest.Create("http://jlp.yahooapis.jp/MAService/V1/parse");
    webReq.Method = "POST";
    webReq.ContentType = "application/x-www-form-urlencoded";
    webReq.ContentLength = postData.Length;

    //Postするデータを出力する
    using (Stream writer = webReq.GetRequestStream())
    {
        writer.Write(postData, 0, postData.Length);
    }

    //結果をうけとってDOMオブジェクトにする
    WebResponse webRes = webReq.GetResponse();

    XmlDocument resultXml = new XmlDocument();

    using (StreamReader reader = new StreamReader(webRes.GetResponseStream()))
    {
        resultXml.Load(reader);
    }

    //結果XML中の[word]タグのリストを取得する
    XmlNodeList wordList = resultXml.GetElementsByTagName("word");

    //[word]以下のノードに含まれる内容をコンソールに出力する
    foreach (XmlNode wordNode in wordList)
    {
        foreach (XmlNode resultNode in wordNode.ChildNodes)
        {
            Console.WriteLine("node_name:{0} value:{1}", resultNode.Name, resultNode.InnerText);
        }
    }


このAPIは[形態素解析]と[形態素の出現頻度]を結果として返してくれるのですが、サンプルでは結果を出現頻度に限定するようにパラメータ指定をしています。
HttpリクエストはPOSTで送信しています。GETだと、送信できる文章の文字数がかなり限られてしまうのでPOSTがいいと思います。POSTだと100KBまでOKだそうです。
結果解析にはDOMを使用しています。今回は結果を[形態素の出現頻度]に絞っているのでシンプルですが、両方取得する場合は後もう一ひねりいりますね。

同じくこのAPIを利用を検討している方で、もし参考になりそうだったらうれしいです。

近々このAPIを利用したソフトの内容をブログにアップします。

1件の障害対応と機能追加を行ったバージョン[1.1]をリリースしました。

○障害内容
コメントのページ送りが出来ない。→ Youtube APIの仕様変更に起因していました。

○マルチ動画再生機能の追加
動画のサムネイルを右クリックしてコンテキストメニューを開き「マルチ動画作成」をクリックすると、別ウィンドウで同時に4つの動画まで再生することが出来ます。

再生を一時停止しても、動画のダウンロードは継続されるので、見たい動画をマルチ再生で選択しておいて一時停止しておけば、現在見ている動画を見終えたら、待ち時間なく次の見たい動画をみることができます。

画面イメージ

(画像をクリックすると拡大)

Youtubeビューワーのダウンロード

ソースのダウンロード


お知らせ
12/18に「Youtubeビューワー」がベクターに登録されました。
ありがとうございました。今後ともよろしくお願いいたします。

Youtubeビューワーの正式版をリリースしました。ベータ版からいくつかのバグFIXと
動画のソート機能の追加を行っています。

Youtubeビューワーのダウンロード

ソースのダウンロード

よろしくお願いします。

ようやくYoutubeビューワのベータ版リリースし、現在は障害修正と機能追加を行っているのですが、
ちょっと気になることがあり、調べてみました。

Youtubeビューワーには動画をキーワード検索するためのテキストボックスが有り、そこでリターンが押されると、
検索が走るようにしています。ところがワードを入力し、検索をするためにリターンを押すと「カキーン」みたいな
何かやっちゃった感のあるビープ音がなってしまいます。

仕事で業務システムを開発しているときは、大抵パソコンが消音になっているのであまり
気にならなかったのかもしれないですが、今回はちょっと気になってしまいました。

ユーザの方が検索するたびにやっちまった感を味わせてしまうのはイヤです。

そこで調べてみたところ、以下で解決しました!


    private void searchWord_KeyPress(object sender, KeyPressEventArgs e)
    {
        //イベントを処理済にする
        if (e.KeyChar == (char)Keys.Enter)
        {
            e.Handled = true;
        }
    }


KeyDownイベントではなく、KeyPressイベントを処理します。