0から作るソフトウェア開発

日々勉強中。。。

ツイッターファイルシステム

ツイッターファイルシステム

ツイッターファイルシステムはツイッターの操作を行う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

更新履歴

インストール

今回は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などのブラウザーに入力

してください。そうするとこのような画面が出ると思います。

Twitterクライアントがアカウントを利用することを許可します画面

ここで”連携アプリを認証”をクリックしてください。

そうするとPIN CODE(数字の並び)が次の画面のように表示されます。

Twitterのピンコード

ここで表示される数字を控えておいて、ターミナルに入力します。

数字を入力して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ディレクトリには次のようなリストディレクトリがあります。

各ディレクトリには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ディレクトリにできたリスト名ディレクトリでファイル操作を行います。

リスト名ディレクトリの構成は次のようになっています。

リストの説明読み込み

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ファイルシステムの実装を行っていきます。ファイルシステムの開発体験を通すことで、実際にカーネルが行っているファイルシステムの基礎的な動作を理解することができます。ぜひお試しください!

inserted by FC2 system