Home - Java - Ustreamのチャットからパパパコメントに投稿する

Ustreamのチャットからパパパコメントに投稿する

  • posted on 2009年8月18日 13:57 / update 2012年6月 5日 04:57 / by hoehoe3

090618_napster1.gif

MTLのみんなのコメントがPC画面に流せる、すてきサービス「パパパコメント」に、Ustreamのチャットからでも投稿できて、勉強会で一緒に楽しめる方法を考えてみたよ。

Ustreamの各チャンネルで流れているチャットは、IRCを使って提供されています。チャットウィンドウは実際にはFlashなIRCクライアントになっていて、IRCサーバーに接続して、そのチャンネル上でチャットしてるわけです。なもんで仕組みは簡単。Ustreamのチャンネルにボットを常駐→発言を取ってくる→パパパコメントの投稿PHPにPOST。これだけ。

IRCボット(bot)を用意。

IRCのボットをこしらえます。例のごとくJavaでやるよ。JavaでIRCボットが簡単に実装できるライブラリ「Pircbot」を使います。

チュートリアルビデオもあるのでさらっと見ときましょう。ビデオではJavaFXを落としてますが、普通の開発環境でいいです。

IRCに繋いでメッセージを取ってくるまでは、サンプルにあるのでそれをいじっていきましょう。
ボットを常駐させるIRCサーバやチャンネルは次のようになります。

サーバー : chat1.ustream.tv
ポート : 6667
チャンネル : (例) #hoelive

IRCのチャンネル名はUstreamのチャンネルと同じになります。

public void onMessage 
(String channel, String sender, String login, String hostname, String message) {
 String comm = message // 発言メッセージ
 testSendComment(comm) // 何か投げる
}

サンプル中にあるonMessageメソッドで、勝手に誰かの発言を取ってきてくれるので、後は投稿する内容を整えて、PHPに投げるだけ。かんたんですねー。

実装するよ。

文字コードはUTF-8。PHPに投げる前にはURLエンコードするのを忘れずに!

・MyBotMain.java

import org.jibble.pircbot.*;

public class MyBotMain {
 
 public static void main(String[] args) throws Exception {
  
  // Now start our bot up.
  MyBot bot = new MyBot();
  bot.setEncoding("UTF-8");

  // Enable debugging output.
  bot.setVerbose(true);
  
  // Connect to the IRC server.
  bot.connect("chat1.ustream.tv", 6667);

  // Join the #pircbot channel.
  bot.joinChannel("#hoelive");

 }

}

・MyBot.java

import org.jibble.pircbot.*;
import java.io.*;
import java.net.*;

public class MyBot extends PircBot 
{

 private String papapaRoom = "hoelive"; // 部屋名

 public void Mybot() {
  this.setName("hoebot");
 }

 public void onMessage(String channel, String sender,
   String login, String hostname, String message)
 {

  //sendMessage(channel, sender + ":" + message);

  if (message.equalsIgnoreCase("shinachiku")) {
   sendMessage(channel, sender + "仕事してる?");
  }

  sendComment(papapaRoom, message);

 }

 public void sendComment(String channel, String message) 
 {
 
  try {
   String cmm = message;
   String encCmm = null;
   encCmm = URLEncoder.encode(cmm, "UTF-8");

   URL url = new URL("http://c.papapam.com/post.php");
   URLConnection uc = url.openConnection();
   uc.setDoOutput(true);

   uc.setRequestProperty("User-Agent", "Sample-Agent");
   uc.setRequestProperty("Accept-Language", "ja");

   OutputStream os = uc.getOutputStream();
   String data = "room=" + channel + "&comment=" + encCmm;
   PrintStream ps = new PrintStream(os);
   ps.print(data);
   ps.close();

   //POSTした結果を取得
   InputStream is = uc.getInputStream();
   BufferedReader br = new BufferedReader(new InputStreamReader(is));
   String s;
   while ((s = br.readLine()) != null) {
    // System.out.printf(s);
   }
   br.close();  
  } catch (IOException e) {
   e.printStackTrace();
  }

 }
}

動かしてみる。

(動画は帰ったら撮る)

BOTうざい。

今のとこ全部の発言が流れちゃうんで、だいぶ邪魔w。特定のコマンド時のみ配信とか加えないとなぁ。どーやってログインさせるかよくわからなかったんで、ゲストで水面下にいるのが気持ち悪い。あとはbot機能をいじっていきたいなー。誰かやってw

そのうち大阪てら子あたりでテストしてみます。

参考資料:

COMMENT(2)

おぉっ!BOTで投稿とか思いつきませんでした。
ステキすぎます!

むしろPHPからのデータを拾いたいんですけどねぇ。むりかなぁ。

COMMENT

Auther
hoehoe: おおさか方面でWebとかやってますよ。
Search
Feeds