Solaris 用 Twitter ファイルシステム
Twitter をファイルシステムとしてマウントする擬似ファイルシステムです。
任意の場所にマウントすると 「home」, 「mention」 といったタイムライン名を持つファイルが現れて cat(1M) や tail(1M) などのコマンドでタイムラインを表示することができます。また vi(1M)、emacs(1M)、もしくはリダイレクトを使って「post」ファイルに書き込めば通常のファイル操作だけでツイートすることもできます。
English Here.
カーネルモードの擬似ファイルシステムがありユーザモードデーモンと協調して動作することで実現しています。簡単に言うと FUSE みたいなものです。
前提条件
1. IUMFS ファイルシステムモジュール
カーネルモードのファイルシステムモジュールが必要になります。
以下のリンクからダウンロードしてビルド、インストールしてください。
kaizawa-iumfs.tar.gz
IUMFS について詳しくはこちらをご覧ください。
2. JRE7/JDK7 以降。
3. Twitter アカウント
ソースコード
ソースコードは Github で管理していますのでこちらから参照できます。
https://github.com/kaizawa/iumfs-twitterfs
コンパイルとインストール
ユーザモードデーモンプログラム
ユーザモードデーモンプログラムはJavaで書かれています。
上にリンクの圧縮ファイルの中にはコンパイル済みの jar ファイルが含まれていますので基本的には Java のコードを再コンパイルする必要はありません。ただ、もし必要であれば以下のように ant コマンドでコンパイルすることもできます。
sol11:/var/tmp/iumfs-twitterfs $ ant Buildfile: build.xml jar: init: compile: [javac] Compiling 107 source files to /var/tmp/iumfs-twitterfs/cmd/build/classes jar: [jar] Building jar: /var/tmp/iumfs-twitterfs/cmd/twitterfsd.jar BUILD SUCCESSFUL Total time: 2 seconds sol11:/var/tmp/iumfs-twitterfs $
使い方
マウント方法
方法1) Twitterファイルシステムをオートマウントを利用してマウントする(推奨)
オートマウントを利用して自動的にマウントさせることができます。この方法なら管理者権限で mount(1M)コマンドをマニュアルで実行する必要はありません。
mount(1M) コマンドでのマウントと違い、一般ユーザは管理者の介入なしで自分の Twitter アカウントをセットアップすることができます。
圧縮ファイルの中に含まれる setup_automount というシェルスクリプトを管理者権限で実行してください。オートマウントの設定が自動的に行われます。
# ./setup_automount
何をしているか気になる方はこのスクリプトを見て自分で各コマンドを実行してください。
簡単に言うと automounter マップファイルを作成してマウントポイントが置かれる /twitter ディレクトリを作成し autofs サービスをリスタートしています。
方法2) mount(1M)コマンドを使ってマウントする
オートマウントを利用せずに直接 mount(1M) コマンドを使ってマウントすることもできます。
マウントする際はファイルシステムタイプとして「iumfs」を指定してください。
IUMFS ファイルシステムモジュールをインストールしていれば iumfs 専用の mount コマンドもインストールされており、ファイルシステムタイプをしていすることでこちらが自動的に使われます。
(注) オートマンとを利用するう場合と違い、複数の twitter アカウントを使ってタイムラインを見たい場合には毎回 mount(1M) を実行する必要があります。
使い方
mount -F iumfs -o user=user_name twitters_url mount_point
- user_name は twitter アカウントです。
- twitter_url は twitter filesystem を表す文字列です
- mount_point は /mnt 等のファイルシステムがマウントするパスです。
例)
# /usr/sbin/mount -F iumfs -o user=kaizawa2test twitterfs://twitter.com /mnt
実は上記の「twitterfs」と「twitter.com」に意味は無く実際には何か文字が入っていれば大丈夫です。(でも省略はできません)
-o オプションで twitter アカウントをしていするのを忘れないようにしてください。これは必須オプションです。
Twitterファイルシステムユーザモードデーモンの起動
圧縮ファイルを展開するとその中に twitterfsd.jar デーモンプログラム が含まれています。このデーモンプログラムは twitter4j ライブラリを利用して twitter.com にアクセスします。
デーモン起動用に start-twitterfsd というシェルスクリプトを用意してありますのでこちらを使って起動してください。
$ ./start-twitterfsd
もしインターネットに接続するためにプロキシサーバを経由必要がある場合には以下のようにしてプロキシサーバを指定してください。
$ ./start-twitterfsd -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=8080
タイムラインの表示
オートマウントを使用している場合には /twitter/<あなたのアカウント> に移動してください。<あなたのアカウント>はあなたの Twitter アカウントになります。このディレクトリが予め存在する必要はありません。あなたがこのディレクトリに cd コマンドでアクセスした際に automount デーモンが自動的にディレクトリを作成します。
$ cd /twitter/kaizawa2test
もしこれが始めてのアクセスであれば「setup」というファイルが見つかるはずです。
$ cd /twitter/kaizawa2test $ ls ./ ../ setup*
これは Twitter のアクセストークンを取得するための初期設定プログラムです。
このプログラムを実行すると以下の様なメッセージが現れます。
$./setup Open the following URL and grant access to your account: http://api.twitter.com/oauth/authorize?oauth_token=9zhKalThfMKB5R20C2pGjdBnc0ydWIODzeDmFS3fsNI Enter the PIN(if aviailable) or just hit enter.[PIN]:
これは twitterfsd デーモンがあなたのタイムラインを取得したりツイートしたりするのに必要な手順になります。
setup プログラムの出力記載されたURLにアクセスしてください。以下のようなページが現れます。
もしこのアプリを承認する場合には「連携アプリを承認」を押してください。
表示された PID をコピーし、先ほどの setup プログラムのプロンプトに入力します。
$ ./setup Open the following URL and grant access to your account: http://api.twitter.com/oauth/authorize?oauth_token=9zhKalThfMKB5R20C2pGjdBnc0ydWIODzeDmFS3fsNI Enter the PIN(if aviailable) or just hit enter.[PIN]:9194085 <= ここにPIN番号を入力します Twitter access token setup successfully
これで twitterfsd デーモンは twitter サーバと通信可能な状態になりました。
もしここでエラーになった場合にはあなたの環境ではプロキシサーバが必要である可能性があります。
以下のようにプロキシサーバをしていして setup プログラムをやり直してみてください。
$ ./setup -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=8080
setup プログラムが終了した後改めてアカウントのフォルダを見ると以下のようにみえるはずです。
「post」以外のそれぞれのファイルはタイムラインを表しています。
また、followers ディレクトリはフォロワーのタイムラインのファイルを持っており、friends ディレクトリはフォローしている各アカウントのタイムラインのファイルを持っています。*1
home | ホームタイムライン |
user | 自分の投稿のタイムライン |
followers/<アカウント> | フォロワーのタイムライン |
friends/<アカウント> | フォローしているアカウントのタイムライン |
retweet_of_me | リツイートされた自分の投稿のタイムライン |
これらのタイムラインファイルを UNIX コマンドで開くことができます。
各ファイルはバックグラウンドで自動的に更新されていきます。
例) ホームタイムラインを tail(1M) コマンドでチェックする
home タイムラインはストリームAPIを使っているためリアルタイムに近い更新が行われます。
ただし他のタイムラインについてはTwitter API の取得回数制限回避のため遅めです。*2
タイムライファイルはテキストファイルのように見せていますので cat(1M) や vi(1M) といったテキストコマンドで操作できます。
もちろん、ファイルをコピーしてもコピー先のファイルは更新されませんのであしからず。
ツイートを投稿する
通常の投稿
「post」ファイルがツイート投稿用のファイルです。ファイルの中身は常に空でサイズも0です。
このファイルに UTF-8 で文字列を書き込むことによって Twitter のツイートとして投稿できます。
Twitter 側でこのファイル書き込みが実際に投稿されていることを確認できます。
もしファイルに対して140時以上を書き込んだ場合には、メッセージは自動的に140文字づつに分割され投稿されます。
2番目以降の投稿には「(contd)」という接頭辞が着きます。
リプライとしての投稿
replies フォルダにリプライを投稿したいアカウントのファイルを作成しそのファイルにメッセージを書き込んで下さい。
例) ichgia2test というアカウントに「着いたよ」というリプライを送る。
上記のように予めファイルがある必要はありません。echo のリダイレクト先としてアカウント名をするだけでOKです。
すると、以下のように @ichgia2test という接頭辞が付いて投稿されます。
通常のメッセージに @ichgia2test と自分で付けて投稿しても同じことですが、この方法の場合投稿の前にアカウントの存在確認を行います。もし投稿先のアカウントが存在しない場合には ENOENT が返ります。
Tips
フォローしているアカウントへのリプライを非表示
デフォルトではホームタイムラインにはあなたがフォローしていないアカウントからフォローしているアカウントへのリプライが全て表示されます。これを止めるためには -Dtwitter4j.stream.user.repliesAll=false オプションを使って twitterfsd を起動します。
$ ./start-twitterfsd -Dtwitter4j.stream.user.repliesAll=false
FAQ
friends、followers フォルダが空なんだけど?
デフォルトでは空です。ls コマンド等で初めてのアクセス後、バックグラウンドで friends, follower のチェックが行われて徐々に追加されていきます。Twitter APIの制限のため1分間に20アカウントづつ増えます。
friends、followers 以下のアカウントのタイムラインが全然更新されないんだけど?
Twitter API の更新回数制限のため5秒に1アカウント分のタイムラインしか更新することができません。このため、friends、follower 数の合計が多い場合には各アカウントの更新頻度は長くなります。
例) 計1,000 の follower/friends が居る場合
更新間隔 = 5 x 1,000 = 5,000 秒 = 83分 = 1時間23分
replies フォルダ空なんだけど?
デフォルトは空です。エディタやリダイレクトなどを使ってリプライを送りたいTwitterアカウント名のファイル名として指定してを作成します。
ただし、実際に存在しないアカウント名を使っても ENOENT エラーとなりファイルは作成されません。
オートマウントディレクトリに知らない名前のがあるんだけど?
オートマウントディレクトリ(例では /twitter) 以下のフォルダは automountd によって自動的に作成されます。
ご自身で明示的にアクセスしなくてもシェルなどのアプリがファイルの存在を確認するためにアクセスしようとするとその名前のフォルダが作成されてしまいます。不要だと思われる場合には管理者権限で umount(1M) してください。
sol11:/twitter $ ls ./ ../ .paths/ kaizawa2test/ sol11:/twitter $ sudo umount /twitter/.paths sol11:/twitter $ ls ./ ../ kaizawa2test/
既知の問題
- タイムラインファイルのアクセス制限が行われていません。なのでシステムにログイン可能なユーザはすべてのタイムラインが読めてしまいます。
License
Twitter Filesystem is provided under Apache License 2.0.
This program is an open source software and free of charge.
You can use this program freely for any commercial and non-commercial use.
This program uses twitter4j.
Twitter4J
Copyright (c) 2007, Yusuke Yamamoto All rights reserved.
http://twitter4j.org