Java : Ustreamのチャットからパパパコメントに投稿する
- Posted at: 2009年8月18日 13:57
- Update: 2009年8月18日 14:02
Ustreamの各チャンネルで流れているチャットは、IRCを使って提供されています。チャットウィンドウは実際にはFlashなIRCクライアントになっていて、IRCサーバーに接続して、そのチャンネル上でチャットしてるわけです。なもんで仕組みは簡単。Ustreamのチャンネルにボットを常駐→発言を取ってくる→パパパコメントの投稿PHPにPOST。これだけ。
IRCボット(bot)を用意。
IRCのボットをこしらえます。例のごとくJavaでやるよ。JavaでIRCボットが簡単に実装できるライブラリ「Pircbot」を使います。
チュートリアルビデオもあるのでさらっと見ときましょう。ビデオではJavaFXを落としてますが、普通の開発環境でいいです。
IRCに繋いでメッセージを取ってくるまでは、サンプルにあるのでそれをいじっていきましょう。
ボットを常駐させるIRCサーバやチャンネルは次のようになります。
サーバー : chat1.ustream.tv ポート : 6667 チャンネル : (例) #hoeliveIRCのチャンネル名は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
そのうち大阪てら子あたりでテストしてみます。
参考資料:
