|
ツイッターファイルシステム
|
ツイッターファイルシステム
ツイッターファイルシステムは
ツイッターの操作を行うLinuxのアプリケーションです。
ユーザー空間でファイルシステムを実装することができるFUSE(Filesystem in USErspace)をもとに作成しています。
ツイッターファイルシステムはファイルシステムと銘打ってますが、実際にはちゃんとしたファイルシステムではなく、
なんちゃってファイルシステムとなります。
例えば、vimなどでファイルに書き込むことでツイートできたり、シンボリックリンクを作成することでフォローできたり、
catでタイムラインを表示したり、ファイル操作でいろいろなツイッターの操作ができます!
それでは、ダウンロードして実際に使ってみましょう!
ダウンロード
下記リンクからダウンロードしてみてください。
ダウンロードリンク
バージョン0.0.4:
twfs64_0.0.4-1_amd64.deb
バージョン0.0.3:
twfs64_0.0.3-1_amd64.deb
更新履歴
-
バージョン0.0.4:
リスト機能(listsディレクトリの操作)とプロフィール(account/profileファイル)読み込みに対応しました。
-
バージョン0.0.3:
ブロック機能(blocks/listファイルの読み込みとブロック)対応しました。
-
バージョン0.0.2:
お気に入り登録のリスト機能(favorites/listファイルの読み込み)対応しました。
-
バージョン0.0.1:
ファーストリリース
インストール
今回は
Ubuntuで作成しましたので、Windowsをお使いの方やMacをお使いの方は
VirtualBoxなどの仮想PC
にUbuntuのインストールを事前に行ってください。(パッケージはDebianパケージで作りましたので、多分Debian系の
Linuxならインストールできると思います。必要なライブラリーはOpensslとFuseのみですので比較的どの環境でも
インストールできる可能性はあります。時間的に試せてはいませんが。。。。)
また、今回作成したアプリケーションは64ビット用のバイナリーとなります。
(32ビット用のバイナリーが欲しい方はご連絡ください。)
それでは、ダウンロードしてUbuntu上の適当なディレクトリに格納してください。
ここでは、ホームディレクトリに格納したと仮定します。
インストール
※Linuxユーザーさんはインストール作業お手の物だと思いますのでここは飛ばしてください。
それでは、インストールしていきます。インストール作業はroot権限で行います。
ターミナルを起動して次のようにコマンドを入力します。
$ sudo dpkg -i twfs64_0.0.1-1_amd64.deb
$ sudo apt-get -fy install
これでおそらく、/usr/bin/にインストールされました。
twfsコマンドにパスが通っているか確認してください。
$ which twfs
ツイッターファイルシステムはユーザー名(省略可能)とツイッターファイルシステムの
ルートディレクトリパス名とツイッターファイルシステムのマウントポイントを引数に
とります。ここで、ルートディレクトリとマウントポイントを作成しておきましょう。
$ mkdir root
$ mkdir mount
作成した、rootディレクトリにはツイッターファイルシステムで使用するファイルが
格納されます。そして、rootディレクトリに実際に格納されているファイルが
mountポイント以下にマウントされてツイッターファイルシステムとして操作する
ことができます。ツイッターファイルシステムとして操作するときにはmountポイント
のファイルに対して操作を行ってください。
ツイッターファイルシステムの起動
それでは、実際に操作していきましょう。
ツイッターファイルシステムのマウント
起動するには次のフォーマットでコマンド入力してください。
[SYNOPSIS]
twfs screen_name root_directory mount_point
[DESCRIPTION]
root_directoryをmount_pointにツイッターファイルシステムでマウントします。
screen_name
ツイッターのスクリーンネームを指定します。
それでは、起動してツイッターファイルシステムをマウントしてみます。
操作は一般ユーザーで実行してください。
$ twfs yabusame2001 root mount
ここでは、スクリーンネームとしてyabusame2001を指定しています。
起動すると次のように表示されます。
$ twfs -u yabusame2001 root mount
Please input the following url to your browser, login twitter, and
take down a "PIN CODE" displayed on the browser.
https://api.twitter.com/oauth/authorize?oauth_token=8ZDGBkdsDDakjlkja
Then, enter the PIN CODE and the return key.
->
このようにURLが表示されますので、このURLを端末上で右クリックして
”リンクアドレスのコピー”でコピーしてFirefoxなどのブラウザーに入力
してください。そうするとこのような画面が出ると思います。
ここで”連携アプリを認証”をクリックしてください。
そうするとPIN CODE(数字の並び)が次の画面のように表示されます。
ここで表示される数字を控えておいて、ターミナルに入力します。
数字を入力してEnterキーを押してください。
そうすると、ツイッターファイルシステムがマウントされて、端末が通常の
シェルの操作に戻ってきます。この一連の操作は最初の認証のみ
行います。次のツイッターファイルシステムの起動時には必要ありません。
違うユーザーを指定した場合はもう一度そのユーザーでの認証を行う
必要があります。オプションでスクリーンネームを指定しなければ、最後に
指定した認証済みのスクリーンネームで動かすことができます。
もちろん毎回スクリーンネームを指定しても構いません。
ツイッターファイルシステムのホームディレクトリ
無事認証が通ったらmountポイントにスクリーンネームのディレクトリが
出来上がっています。mountポイントをlsしてみましょう。
$ ls mount
yabusame2001
認証が通ったスクリーンネームのディレクトリが出来上がっていると思います。
これがツイッターファイルシステムのホームディレクトリとなります。この例では、
スクリーンネームがyabusame2001だったときの例となります。ツイッターファイル
システムでは、mountポイント直下にユーザーのディレクトリが作成されます。
他のユーザーさんのディレクトリもここに次々とできていきます。
ではツイッターファイルシステムのホームディレクトリをlsしてディレクトリ構成を
見ていきましょう。
$ ls mount/yabusame2001
account/ favorites/ home_timeline retweet/ user_timeline
blocks/ follower/ lists/ status/
direct_message/ following/ notifications/ tweet
このような構成になっています。それぞれのファイルやディレクトリの概略は
次のようになっています。
ツイッターファイルシステムのディレクトリ構成
|
ファイル名/ディレクトリ名
|
説明
|
accountディレクトリ
|
profileファイルとsettingファイルが存在します。ユーザーのプロフィール編集や設定を行います。
|
blocksディレクトリ
|
listファイルが存在します。指定したユーザーをブロックしたり、ブロックしているユーザーの一覧を閲覧したりできます。
|
direct_messageディレクトリ
|
messageファイルとsend_toファイルが存在します。指定したユーザーにダイレクトメッセージを送信したり、受信したダイレクトメッセージを閲覧することができます。
|
favoritesディレクトリ
|
listファイルが存在します。お気に入り登録した一覧を閲覧したり、お気に入り登録したりできます。
|
followerディレクトリ
|
listファイルが存在します。フォロワーさんの一覧を閲覧することができます。
|
followingディレクトリ
|
listファイルがあります。フォローしているアカウントの一覧を閲覧したり、フォローしたりできます。
|
home_timelineファイル
|
ホームタイムラインファイルです。読み込みすることで自分+フォローしているユーザーのタイムラインを閲覧することができます。
|
listsディレクトリ
|
リストの管理を行います。
|
notificationsディレクトリ
|
@tweetファイルとretweet_of_meファイルがあります。自分宛てのツイートやリツイートされてたツイートを閲覧することができます。
|
retweetディレクトリ
|
リツイートしたツイートが保存されます。リツイートするときにはツイートをこのディレクトリにシンボリックリンクを作成します。
|
statusディレクトリ
|
自身のツイートが格納されます。
|
tweetファイル
|
このファイルに書き込むことで、ツイッターにツイートすることができます。
|
user_timelineファイル
|
自分自身がツイートした内容を閲覧することができます。
|
ツイッターファイルシステムのアンマウント
アンマウントするにはFUSEのマウントコマンドを使用します。
$ fusermount -u mount
操作方法
それではツイッターファイルシステムのホームディレクトリに作られたディレクトリや
ファイルの操作方法について見てきましょう。
ツイートする
ツイッターにツイートするにはtweetファイルに書き込みを行います。
$ echo -n "tweet test" > tweet
のように書き込みを行ってみてください。
また認証ユーザー以外のディレクトリ(mount/[screen_name])に移動して
vimを起動してみます。
$ cd mount/[someone's directory]
$ vi tweet
すると、そのユーザー宛のツイートができます。次はvimでtweetファイルを
開いたときの様子となります。@スクリーンネームが自動的に読み込むことが
できます。ちょっと便利。
@someone test tweet
ここでvimのコマンド:wで書き込むと@ツイートすることができます。
@以下を消して書き込むと通常のツイートになります。
タイムライン閲覧
タイムラインの閲覧するにはhome_timelineファイルまたはuser_timeline
ファイルを読み込みます。
$ cat home_timeline
$ cat user_timeline
ここでmountポイントをlsしてみてください。
$ ls mount
タイムラインを読み込むことでツイートした各ユーザーのホームディレクトリ
ができていると思います。
ツイートファイルの閲覧とツイートの削除
次にstatusディレクトリをlsしてみます。
$ ls status
数字のファイル名が並んでいるかと思います。1つ1つがツイートファイルと
なります。数字はツイートIDとなります。ファイルを削除すると該当ツイート
が削除されます。ただし認証ユーザーのstatusディレクトリのみ有効です。
他のユーザーさんのstatusを削除してもツイッター上のツイートは削除され
ません。
$ cd status
$ rm 432298907987
リツイートの閲覧とリツイート操作
次にretweetディレクトリをlsしてみます。
リツイートがあれば各ツイートのシンボリックリンクがここに作成されています。
$ ls retweet
ツイートをリツイートするときにはツイートファイルのシンボリックリンクをretweet
ディレクトリに作成します。retweetディレクトリに移動してからシンボリックリンクを
作成します。もちろん認証ユーザーのretweetディレクトリじゃないとツイッター上
でリツイートできません。
$ cd retweet
$ ln -s ../../yabusame2001/status/432298907987 .
これでyabusame2001のツイートID 432298907987のツイートをリツイートする
ことができます。(この例のツイートIDは適当な数字となっています)。。。
また、同様にシンボリックリンクファイルを削除するとリツイート取り消しと
なります。
$ cd retweet
$ rm 432298907987
お気に入り登録の閲覧とお気に入り登録
お気に入り登録の閲覧実装しました(バージョン0.0.2)。
お気に入り登録はリツイートと同様にお気に入り登録したいツイートファイルの
シンボリックリンクをfavoritesディレクトリに作成します。
$ cd favorites
$ ln -s ../../yabusame2001/status/432298907987 .
これでyabusame2001のツイートID 432298907987のツイートをお気に入り
登録することができます。(この例のツイートIDは適当な数字となっています)。。。
お気に入り登録したツイートの一覧を見てみましょう。listファイルを読み込みます。
$ cd favorites
$ cat list
また、同様にシンボリックリンクファイルを削除するとお気に入り登録解除と
なります。
$ cd favorites
$ rm 432298907987
ユーザーのプロフィール・設定閲覧と変更
accountディレクトリでそのユーザーのプロフィールを参照・変更したり、
設定の参照・変更を行うことができます。認証ユーザー以外のユーザーさん
の変更や設定の参照を行うことはできません。
プロフィールの閲覧を行うにはaccountディレクトリのprofileファイルを
読み出します。
$ cd mount/yabusame2001/account
$ cat profile
プロフィールの変更、設定の参照・変更は未実装となります。
ブロック操作
blocksディレクトリでブロックしているユーザーの一覧やブロックを行うことができます。
ブロックしているユーザーの一覧を閲覧するにはblocksディレクトリのlistファイルを
読み出します。
$ cd blocks
$ cat list
listファイルの読み込みが完了するとブロックしているユーザーさんのホームディレクトリへの
シンボリックリンクが作成されます。
ユーザーをブロックするにはブロックしたいユーザーのホームディレクトリへのシンボリックリンク
を作成します。
$ cd blocks
$ ln -s ../../yabusame2001 .
ブロックの解除を行うにはblocksディレクトリのシンボリックリンクを削除します。
$ cd blocks
$ rm yabusame2001
ダイレクトメッセージの送受信
ダイレクトメッセージの受信(閲覧)を行うにはdirect_messageディレクトリの
messageファイルを読みだします。
$ cd direct_message
$ cat message
ダイレクトメッセージの送受信があればdirect_messageディレクトリに
メッセージのやり取りを行ったユーザーさんのスクリーンネーム名ディレクトリが
できています。
ダイレクトメッセージを送信するにはsend_toファイルに書き込みを行い
ます。direct_messageディレクトリ直下のsend_toファイルに書き込み
を行う場合にはメッセージの先頭に@[screen_name]+スペースを必ず
入れてください。@[screen_name]+スペースが無い場合、メッセージは
送信されません。ここでは@yabusame2001にメッセージを送信する例
となります。
$ cd direct_message
$ ehoc -n "@yabusame2001 hello" > send_to
それでは、direct_message直下の各ユーザーディレクトリをlsしてみます。
$ ls direct_message/yabusame2001
message send_to 123456789
ここで、更にmessageファイルが登場します。各ユーザーさんのディレクトリ
ではそのユーザーさんとやり取りしたダイレクトメッセージのみ閲覧することが
できます。また、このディレクトリのsend_toにメッセージを書き込むことで、
このユーザーディレクトリのユーザーさんにメッセージを送ることができます。
この場合はユーザーさんが特定できていますのでメッセージに@[screen_name]
+スペースを入れないでください。ここでは、yabusame2001ディレクトリの
send_toファイルに書き込みを行い@yabusame2001にメッセージを送信
する例となります。
$ cd direct_message/yabusame2001
$ echo -n "hello!" > send_to
フォロワーさんの一覧を閲覧
followerディレクトリのlistファイルを読み込むことでフォロワーさんの
プロフィールを一覧することができます。
$ cd follower
$ cat list
ここでlsするとフォロワーさんのホームディレクトリへのシンボリックリンクが
できていると思います。
フォローしているユーザさんの一覧の閲覧とフォローとフォロー解除
followingディレクトリのlistファイルを読み込むことで現在フォロー
しているユーザーさんのプロフィールを一覧することができます。
$ cd following
$ cat list
ここでlsするとフォロワーさんのホームディレクトリへのシンボリックリンクが
できていると思います。
フォローするには、フォローしたいユーザーさんのホームディレクトリ(ホーム
ディレクトリが無い場合にはmountポイント直下にあらかじめ作成して
おいてください)へのシンボリックリンクをfollowingディレクトリに作成
します。
フォローは認証ユーザーのfollowingディレクトリのみ有効となります。
また、シンボリックリンクを作成する場合はfollowingディレクトリに
移動してから行ってください。
$ cd following
$ ln -s ../../yabusame2001 .
この例ではyabusame2001のホームディレクトリへのシンボリックリンクを
作成して@yabusame2001をフォローしています。
フォロー解除を行うには、followingディレクトリのシンボリックリンクファイル
を削除してください。(無い場合はあらかじめ作成しておいてください)。
$ cd following
$ rm yabusame2001
リスト一覧の閲覧
listsディレクトリでリスト操作を行うことができます。
listsディレクトリには次のようなリストディレクトリがあります。
-
my_listディレクトリ
ユーザーが作成したリストが保存されます。
-
subscriptionsディレクトリ
ユーザーが購読しているリストが保存されます。
-
addedディレクトリ
ユーザーがメンバーになっているリストが保存されます。
各ディレクトリにはlistファイルがあります。listファイルを読み込むことで
リストの一覧を取得することができます。取得したリストはリスト所有者の
lists/my_listディレクトリに格納されてます。また、subscriptions、
addedディレクトリのlistファイルを読み込みすると、リスト所有のリストへの
シンボリックリンクが作成されます。
ユーザーが所有している(作成した)リストの一覧を読み込み
lists/my_list/listファイルを読み込みます。
$ cd lists
$ cd my_list
$ cat list
リストがあれば、my_listディレクトリにリスト名ディレクトリができます。
lsコマンドで確認してください。
$ cd lists
$ cd my_list
$ ls
ユーザーが購読しているリストの一覧を読み込み
lists/subscriptions/listファイルを読み込みます。
$ cd lists
$ cd subscriptions
$ cat list
リストがあれば、リストを所有しているユーザーのlists/my_listディレクトリに
リスト名ディレクトリができます。そして、subscriptionsディレクトリにはその
リスト名ディレクトリへのシンボリックリンクが作成されています。
lsコマンドで確認してください。
$ cd lists
$ cd subscriptions
$ ls
ユーザーがメンバーとなっているリストの一覧を読み込み
lists/added/listファイルを読み込みます。
$ cd lists
$ cd added
$ cat list
メンバーに追加されているリストがあれば、リストを所有しているユーザーの
lists/my_listディレクトリにリスト名ディレクトリができます。そして、added
ディレクトリにはそのリスト名ディレクトリへのシンボリックリンクが作成されています。
lsコマンドで確認してください。
$ cd lists
$ cd added
$ ls
リストの閲覧
リストの閲覧を行うにはmy_listディレクトリ、subscriptionsディレクトリ、
addedディレクトリにできた
リスト名ディレクトリでファイル操作を行います。
リスト名ディレクトリの構成は次のようになっています。
-
descriptionファイル
そのリストの説明を読み込むことができます。
-
timlineファイル
そのリストのタイムラインを閲覧することができます。
-
membersディレクトリ
そのリストに追加されているメンバーの一覧を取得することができます。
-
subscribersディレクトリ
そのリストを購読しているメンバーの一覧を取得することができます。
リストの説明読み込み
lists/{my_list, subscriptions, added}/[リスト名]/descriptionファイル
を読み込みます。([リスト名]ディレクトリは任意のディレクトリ名です。)
$ cd lists
$ cd my_list
$ cd list_name
$ cat description
ここではlist_nameリストの説明を読み込む例となります。
リストのタイムライン閲覧
lists/{my_list, subscriptions, added}/[リスト名]/timelineファイル
を読み込みます。([リスト名]ディレクトリは任意のディレクトリ名です。)
$ cd lists
$ cd my_list
$ cd list_name
$ cat timeline
ここではlist_nameリストのタイムラインを読み込む例となります。
リストに追加されているメンバーの一覧を閲覧
lists/{my_list, subscriptions, added}/[リスト名]/membersにある
listファイルを読み込みます。([リスト名]ディレクトリは任意のディレクトリ名です。)
$ cd lists
$ cd my_list
$ cd list_name
$ cd members
$ cat list
読み込んだメンバーのホームディレクトリへのシンボリックリンクが作成されます。
リストを購読しているユーザーの一覧を閲覧
lists/{my_list, subscriptions, added}/[リスト名]/subscribersにある
listファイルを読み込みます。([リスト名]ディレクトリは任意のディレクトリ名です。)
$ cd lists
$ cd my_list
$ cd list_name
$ cd subscribers
$ cat list
読み込んだユーザーのホームディレクトリへのシンボリックリンクが作成されます。
リストの作成
認証ユーザーのlists/my_listディレクトリにリスト名ディレクトリを作成すると
リストを作成することができます。
$ cd lists
$ cd my_list
$ mkdir new_list
ここでは、new_listというリストを作成する例となります。
リストの削除
認証ユーザーのlists/my_listディレクトリのリスト名ディレクトリを削除すると
リストを削除することができます。
$ cd lists
$ cd my_list
$ rm -fr new_list
ここでは、new_listというリストを削除する例となります。
リストの購読
認証ユーザーのlists/subscriptionsディレクトリに購読したいリスト名
ディレクトリへのシンボリックリンクを作成するとリストを購読することができます。
$ cd lists
$ cd subscriptions
$ ln -s ../../../user/lists/my_list/test_list .
ここでは、ユーザー[user]のリスト[test_list]を購読する例となります。
リストの購読を止める
認証ユーザーのlists/subscriptionsディレクトリの購読しているリスト名
ディレクトリへのシンボリックリンクを削除するとリストの購読を中止することができます。
$ cd lists
$ cd subscriptions
$ rm test_list
ここでは、ユーザー[user]のリスト[test_list]の購読を中止する例となります。
通知について
notificationsディレクトリの@tweetファイルを読み込むことで、
自分宛て(認証ユーザー)の@ツイートを閲覧することができます。
(この操作は認証ユーザーのnotificationsディレクトリのみ有効です。)
$ cd notifications
$ cat @tweet
また、自分のツイートがリツイートされた場合にそのツイートを参照する
することができます。notificationsディレクトリのretweet_of_me
ファイルを読み込みます。
$ cd notifications
$ cat retweet_of_me
その他
こんな機能が欲しい!といった場合やお気づきの点がありましたら、
メールかツイッターでご連絡いただけますと嬉しいです!
This site of English version is here.
PR
|
説明
|

ディベロッパー・エクスペリエンス Linux Ext2ファイルシステム
|
0から作るLinuxプログラム Linux Ext2ファイルシステムの完全説明版(Kindleのみ)となります。実装するステップ数は36ステップあります。少しずつステップを実装して、実際に動かして学習していきます。ファイルシステムの機能を呼び出すシステムコールの実装から、仮想ファイルシステムが呼び出すExt2ファイルシステムの実装を行っていきます。ファイルシステムの開発体験を通すことで、実際にカーネルが行っているファイルシステムの基礎的な動作を理解することができます。ぜひお試しください!
|