nDiki : D-Bus

2008年2月25日 (月)

Twitter への書き込みを自動的に Skype ムードメッセージに設定する

Linux for SkypeSkype APID-Bus を使ってアクセスすることができる。 Debian GNU/Linux sid 上の Skype for Linux 2.0.0.43 で、Perl スクリプトから自動的にムードメッセージを更新するようにしてみた。

Skype が起動している状態で以下のスクリプトを実行する。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use Net::DBus;
 use URI::Fetch;
 use XML::RSS;
 use Date::Parse;

 my $id = '自分の Twitter ID';

 my $time = time;
 my $fetch_response
   = URI::Fetch->fetch(
               "http://twitter.com/statuses/user_timeline/$id.rss?dummy=$time")
   or die URI::Fetch->errstr;
 my $rss = XML::RSS->new;
 $rss->parse($fetch_response->content);
 die 'no items' if @{$rss->{items}} == 0;
 my $item = $rss->{items}->[0];
 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(str2time($item->{pubDate}));
 my $title = $item->{title};

 my $mood
   = sprintf("[%02d/%02d %02d:%02d] $title", $mon + 1, $mday, $hour, $min);
 my $bus      = Net::DBus->session;
 my $service  = $bus->get_service('com.Skype.API') or die;
 my $invoker  = $service->get_object('/com/Skype') or die;
 my $response = $invoker->Invoke('NAME twitter2skypemood');
 die $response if $response ne 'OK';
 $response = $invoker->Invoke('PROTOCOL 5');
 die $response if $response ne 'PROTOCOL 5';
 $response = $invoker->Invoke("SET PROFILE MOOD_TEXT $mood");

image:nDiki/2008/02/Skype-API-auth.png

のようなダイアログが表示されるので、「この選択を記憶する」をチェックして、はいを選択。

そうすると RSS フィードとしてとってきた 自分の Twitter メッセージが、Skype のムードメッセージに表示される。自分の環境では日本語も問題なく表示される。

うまくいったので cron で定期的に更新するようにしてみた。

Skype API 面白いかも。

追記

スポンサード リンク
[ 2月25日全て ]

2008年2月26日 (火)

cron 呼び出しから D-Bus (Net::DBus) 使おうとしたら失敗していた

Twitter への書き込みを自動的に Skype ムードメッセージに設定するスクリプトを定期的に実行しようと cron に設定しておいたのだが、一向にうまくいく気配がない。

cron からのメッセージを見たら

process 22612: arguments to dbus_connection_ref() were incorrect, assertion "connection != NULL" failed in file dbus-connection.c line 2465.

This is normally a bug in some application using the D-Bus library.

org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.

と出ていた。 X 関連か?

cron から呼び出す際には DISPLAY=:0.0 してからこのスクリプトを呼ぶようにしたらうまく動くようになった。

[ 2月26日全て ]

2008年8月5日 (火)

Twitter への書き込みを自動的に Skype ムードメッセージに設定する for Windows

半年ぐらい前に Skype for LinuxTwitter への書き込みを自動的に Skype ムードメッセージに設定するスクリプト(記事)を作って cron で 10分毎に更新するようにした。

Windows BOX 上 Skype を使っている時も同様にできるように、Skype4COM を使うバージョンも書いてみた。 D-Bus ではなく Skype4COM を使うようにすることと、Skype4COM にはシフト JIS の文字列を渡すようにすること以外はほとんど同じ。

Skype4COM の DLL を登録し、Skype が起動している状態で以下の Perl スクリプトを実行。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use Win32::OLE;
 use URI::Fetch;
 use XML::RSS;
 use Date::Parse;
 use Encode;

 my $id = '自分の Twitter ID';

 my $time = time;
 my $fetch_response
   = URI::Fetch->fetch(
               "http://twitter.com/statuses/user_timeline/$id.rss?dummy=$time")
   or die URI::Fetch->errstr;
 my $rss = XML::RSS->new;
 $rss->parse($fetch_response->content);
 die 'no items' if @{$rss->{items}} == 0;
 my $item = $rss->{items}->[0];
 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(str2time($item->{pubDate}));
 my $title = $item->{title};

 my $mood
   = sprintf("$title [%02d/%02d %02d:%02d]", $mon + 1, $mday, $hour, $min);

 $mood = Encode::encode('shiftjis', $mood);

 my $skype = Win32::OLE->new('Skype4COM.Skype');
 $skype->Client->Start unless $skype->Client->IsRunning;
 my $profile = $skype->CurrentUserProfile;
 $profile->{MoodText} = $mood;

インストール済みだった ActivePerl 5.8.8.822 で動作を確認(ちなみに現時点での最新は ActivePerl 5.10.0.1003)。なお URI::FetchXML::RSS、Date::Parse(TimeDate) は標準では入っていないので PPM パッケージインストール

タスク スケジューラで10分毎に上記のスクリプトを wperl.exe で実行するように設定。 これで Windows 上でもさえずりをムードメッセージに設定できるようになった。

[ 8月5日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.046497s / load averages: 0.19, 0.50, 0.52
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker