YoutubeLiveのコメントを取得するツールをまた作ってしまった

Pocket

どうも。

C#の練習第二弾です。

YoutubeLiveのコメントを取得するツールを作りました。

こちらもGitHubで公開しています。

使い方等もそちらに書いているのでこちらには制作秘話的なのを書きます。

 

まずなんで作ろうと思ったか

簡単に言うと既存のツールに不満を持ったから。

具体的には

  • VideoID(URLのv=のやつ)を指定して取得できない
  • 棒読みちゃんのアドレスとポートが指定できない
  • 棒読みちゃんのプレフィックスが指定できない
  • チャンネルオーナーのコメントまで表示されてしまう

こんな感じ。

最後の項目に関しては次に作ろうと考えているものに繋がっている。

詳しいことはまだ言いませんが。

 

躓いた所とか

一番躓いた部分は参照渡しの罠。

これまでシェルスクリプトくらいしかまともに書けなかったので値渡しと参照渡しをちゃんと理解していなかった。

このツールでは指定された間隔(デフォルトは1秒)でコメントの取得している。

(TwitterのStreaming APIみたいにリアルタイムに流れてくるわけではない)

なので前回の取得との差分を取る必要がある。

以前にそれに似たことをChromeの拡張機能で作ったのでその時と同じ手法を取った。

まずListとDictionary<string, object[]>を用意。

そして前者には「コメントID」を、後者には「コメントID」をkeyとして「コメント者」「コメント本文」「チャンネルオーナーかどうか」を配列にして代入。

前者のデータを次に取得するまで保持しておき、取得したらこのページの方法で差分を取る。

そしてその差分をキーとして後者のDictionaryから取り出す。

こんな実装です。

この方法だとListを別の変数に退避して取っておく必要があるので、私は普通に

messages_ids_old = messages_ids

こう書いたんです。

しかし2回目移行全く表示されない。

これが分からぬまま1日経過。

その後、色々な部分をコメントアウトして確かめてみるとこの代入の文を消すと差分ではなく毎回全部表示された。

ここでこの文を疑う。

代入について調べていたら参照渡しのを見つけてどうやらこれは参照渡しがされていると知る。

値渡しをする方法を調べると・・・あった。

このページに書いてある通りに修正した所、見事動いた。

これで今後同じ躓き方はしないだろう。

 

何故こんな些細なプログラミングでもソースを公開するのか

私みたいなプログラミング初学者にとって、ちょっとしたプログラムが公開されているとそれを参考に自分なりに他のものを作ってみたりするのに便利なんです。

なので私のソースを見てそれが誰かのためになるかもしれないし、逆にこんなクソな書き方はしないと反面教師になったりするかもしれないので公開して大丈夫なコードは公開するようにしています。

あと、GitやGitHubの使い方が身についたり、もしかしたら誰かからIssueやPull Requestがもらえたりして、私にとっても有益なので。

これを見た方はソースを公開するよう心がけてもらえると嬉しいです。

 

以上。

ではでは。

The following two tabs change content below.
みどりごけ

みどりごけ

スペシャルエグゼクティブアドバイザーほしい物リスト
どこぞのシェル芸大好き鯖管(自称ではない) / 基本情報技術者 / Linux (LPIC2保有) / C# / PHP / JavaScript / 食べ鉄 / Minecraft / ETS2 / GTAV / Ingress
みどりごけ

最新記事 by みどりごけ (全て見る)

コメントを残す