2008/01/31


私が自宅で使っているPC(ノート)はそれほど良いスペックではありません。それでもやっぱりC言語のソースをコンパイルしたり、重たいスクリプトを走らせたりする事があります。そんな時、横で淡々と流れていて欲しいustream.tvがブラウザ内をデカデカを乗っ取って、しかもリソースをどんどん食っていくのはとても耐え切れなかったりします。
ただもう最近は、ブラウザを使わずustream.tvを楽しんでいます。
今日はその方法をご紹介。

映像/音声ですが、Linux版に用意されているスタンドアローン版flashplayerを使っています。ネット上にあるFLVもコマンドラインから起動して閲覧出来ます。
# gflashplayer http://www.example.com/path/to/flv/example.flv
ustream.tvでは、flashを全画面で開く「Open in larger window」というリンクがありますが、このリンクはustream.tvのFLVプレーヤへの直接リンクとなっています。ですからこれをgflashplayerで起動すれば動画が見れます。
もちろんこのflashは、コントロールパネル付属のプレーヤでしか無く、このflash自身から実際のストリームを再生していますから再生していて中断しちゃった...なんて場合は再接続ボタンを押せばうまく再生し直してくれる場合があります。
この「Open in larger window」というリンクを取得し、gflashplayerに渡して再生する以下のシェルスクリプトを私は用意しています。
#!/bin/sh

GFLASHPLAYER=/usr/bin/gflashplayer

if [ "x$1" == "x" ]; then
  echo "usage: `basename $0` [channel]"
  exit
fi

USC=`curl -s "http://ustream.tv/channel/$1" | grep 'Open in larger window' | sed -e 's!^.*<a href="/\([^"]*\)".*$!\1!'`
if [ "x$USC" == "x" ]; then
  echo "currently offline?"
  exit
fi
URL="http://ustream.tv/$USC"
echo playing $URL
$GFLASHPLAYER "$URL"
このシェルスクリプト「ustplayer」をコマンドラインから # ustplayer erogeek-con と実行しています。
twitterで、followerさんが「http://ustream.tv/channel/xxxxx 見てる」と言えば、この"channel"の後の部分、"xxxxx"を実行引数に渡します。
またchatですが、私が自宅で使っているOSはLinuxですからxchatというX Window/GTK2で動くIRCソフトウェアがインストール出来ます。ustream.tvでは「chat1.ustream.tv/6667」というIRCサーバが公開されていますから、わざわざブラウザを上げるまでもないのです。charsetを"utf-8"にさえしておけばchat出来ます。ただしustream.tvのIRCサーバはustream.tvアカウントの認証が必要になりますから、設定画面等でログインパスワードを設定しておく必要があります。

で、昨日開催された「エロギークカンファレンス」を見ていた時のキャプチャがこれ...

erogeek-con

余談ですが、xchat等PC-UNIX上でIRCソフトウェアを使われる方でお薦めしたいのがbitlbee。xinetdデーモンとしても動作するIRCサーバで、MSN,Jabber,ICQ等各種IMプロトコルを中継してくれます。Jabberを使えばGTalkとおしゃべり出来ますから、xchat一つ起動しておけばtwitterも出来るし、jaikuも出来るし、MSNチャットも出来るし余分なリソースを取られなくて嬉しい限りです。

2007/10/21 追記
ustream.tvのHTMLフォーマットが変更された模様。それにあわせシェルスクリプトを修正
#!/bin/sh

GFLASHPLAYER=/usr/bin/gflashplayer

if [ "x$1" == "x" ]; then
  echo "usage: `basename $0` [channel]"
  exit
fi

USC=`curl -s "http://ustream.tv/channel/$1" | grep 'ustream\.tv/.*\.usc' | sed -e 's!.* src=\&quot;http://ustream\.tv/\([^&]*\)&.*$!\1!'`
if [ "x$USC" == "x" ]; then
  echo "currently offline?"
  exit
fi
URL="http://ustream.tv/$USC"
echo playing $URL
$GFLASHPLAYER "$URL"
Posted at by




携帯電話でブラウズしている時に突然、はてなブックマークに登録しておきたくなったりしませんか?
はてなブックマークから画面遷移している時は、はてな専用携帯変換ページが表示されブックマークへのリンクも付けられている為「このページはてブしたい」と思った時にも簡単にはてなブックマーク出来るでしょう。
でも直接そのページを見ている時には携帯では術がありません。
私はよく
  1. 携帯でブラウズ
  2. 携帯のブックマークに登録
  3. PCでブックマーク登録
という煩わしい作業をしてたりします。
例えば、専用ページを作ってリファラを見ても画面遷移では無いので登録しようとしているブックマークURLは取得出来ません。

これを何とかしようと言うのが今日のお話。
殆どの携帯電話には、「URLでメールを送信」という機能が備わっています。
これを使い、サーバ側に登録させるのです。
ニワンゴ開発サイトに「hatebu」というコマンドを作りました。
ニワンゴ開発サイトは、簡単な形式で記述されたメールからコマンドとしてWebAPIをキック、その応答をメールで返すという機能を提供してくれています。
この「hatebu」コマンドから呼ばれるサーバ側CGIとして以下の様なphpのコードを置きました。
※phpなんか久しぶりに書いたのでかなり適当
※何故phpなのかというと、無料で使えてソケット系APIが動くサーバで見つけたのがphpしか動作しなかったから...

<?php
header('content-Type: text/plain; charset="Shift_JIS"');

# URLかどうか...(適当)
function isUrl($str) {
  return (preg_match('/^(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $str) && $str!="");
}

# コマンドとパラメータ
$c="";
$p2="";
$subject="";

if(isset($_REQUEST['c'])){
    $c = $_REQUEST['c'];
}
if(isset($_REQUEST['p2'])){
    $p2 = $_REQUEST['p2'];
}
if(isset($_REQUEST['subject'])){
    $subject = $_REQUEST['subject'];
}
$c = mb_convert_encoding($c, "SJIS");
$pi = mb_convert_encoding($pi, "SJIS");
$subject = mb_convert_encoding($subject, "SJIS");

# コマンドのチェック
if ($c != 'hatebu|| $p2 == "" || !isUrl($p2)){
  echo "response=ERROR\n";
  echo "subject=".$c." ".$p2."\n";
  echo "body=Failed\nInvalid parameter \"$c\" \"$p2\" \"$subject\"";
  exit;
}

# AtomPubで送信
error_reporting(E_ALL);
require_once('class.atomapi.php');
require_once('class.wsse.php');

$username = 'xxxxxxxxxxxxxxxx';
$password = 'xxxxxxxxxxxxxxxx';
$endpoint = 'http://b.hatena.ne.jp/atom/post';
$auth     = 'WSSE';

$entry = new AtomEntry();

$entry->set_title('HATENA');
$entry->set_content('BOOKMARK');
$entry->set_summary($subject);
$entry->add_link($p2, 'related', '', 'text/html');
$auth_obj = new WSSE($username, $password);
$post = new AtomRequest('POST', $endpoint, $auth_obj, $entry->to_xml('POST'));
$post->exec();
if ($post->error()) {
  echo "response=ERROR\n";
  echo "subject=".$c." ".$p2."\n";
  echo "body=Failed\nInvalid parameter \"$c\" \"$p2\" \"$subject\"";
} else {
  echo "response=SUCCESS\n";
  echo "subject=".$c." ".$p2."\n";
  echo "body=Succeeded";
}
exit;
?>
この状態で、ニワンゴ開発サーバからコマンドを発行する為に
m at open dot niwango dot jp
※「at」は「@」に、「dot」は「.」に置き換えます
というアドレスへ hatebu [URL] ※[URL]はとりあえず、http/httpsのみにしました。
とうい本文のメールを送信すると、はてなの「i_am_not_mattn」というアカウントのはてなブックマークに[URL]で指定したサイトがブックマークされます。メールの題名がブックマークコメントになっています。
適当に使ってみて下さい。
※なお、ニワンゴ開発OpenAPIの仕様で私にメールアドレスがばれる事はありません。
※如何わしいサイトが登録された場合はアカウント停止します。

アプリとして言うならば「i_am_not_mattn」のアカウントだけでしか動作出来ないのが苦しい所...
まさかメール本文にパスワード書くってのも嫌だし...
専用サーバでqmailからキックさせるか、sidebar.jpでXMLRPCをキックさせるのが良いんでしょうね。
Posted at by






そう...我々がwebなのだ
Posted at by