自作 iOS 用 Twitter アプリ サンプル TSTwitter 公開、シンプルな Ruby 製 HTTP サーバーを使った GET、POST 解析。

iOS 用 Twitter アプリの作成方法について書こうと思っていたのですが、あまり時間がとれなかったので次回にしたいと思います。サンプルは、先に公開しておきます。

自作 iOS 用 Twitter アプリ サンプル TSTwitter
http://kyoshiaki.sakura.ne.jp/osx/Sample/Twitter.zip

Twitter REST v1.1 API をコールし、結果を Xcode のコンソールに表示する簡単なプログラムです。( Social.framework を使用しているので iOS 6.0 以上で動作します。 )

xAuth、Apple 純正ソーシャルネットワークフレームワークの SLRequest、NSURLRequest で直接呼び出す TSSignedRequest など Twitter REST API をいろいろな方法で呼び出せるので便利です。初心者にも実用的なプログラムが組めるので、楽しめると思います。UITableView を使って本格的な Twitter アプリに仕立てるのも面白いと思います。

詳細は、次回に。

今回は、手始めとして REST の動作を学ぶため、 GET、POST の違いを解説します。

Ruby で簡単な HTTP サーバーを作り、Safari でアクセスし、表示されたフォームから GET と POST を使ってサーバーにデータを送信します。送られてきた生のデーターを表示してみます。

自作 iOS 用 Twitter アプリ サンプル TSTwitter
http://kyoshiaki.sakura.ne.jp/osx/Sample/Twitter.zip

GET、POST を使用する HTTP サーバーは、上記サンプルに含まれている server_get.rb、server_post.rb です。
server_get.rb は、Safari がアクセスすると HTML書式

<form method="get" action=".">
<p>Name:<br><input type="text" name="name" size="50"></p>
<p>Message:<br>
<textarea name="message" cols="50" rows="5"></textarea></p>
<p><input type="submit" value="Send"></p>
</form>

を送信します。

<form method="get" action=".">

の method を下記のように post に変更したものが

<form method="post" action=".">

server_post.rb です。

server_get.rb と server_post.rb の使用方法は、同じなので server_get.rb で説明します。

まず最初に、メニュー/アップルマーク/システム環境設定… を選び、’システム環境設定’ を開きます。
インターネットとワイヤレス/ネットワークをクリックします。

IP アドレスを確認します。ここでは、192.168.1.6 に設定されています。

テキストエディタXcode で server_get.rb ファイルを開きます。(Finder 上、またはドッグの中の Xcode アイコンにファイルをドラッグ・ドロップすれば開くことができます。)

# 5行目の
server = TCPServer.new('192.168.1.6', 9090);

上の ‘192.168.1.6’ の部分を確認した IP アドレスに置き換えてください。IP アドレスが 192.168.1.2 なら

server = TCPServer.new('192.168.1.2', 9090);

です。

/アプリケーション/ユーティリティ/ターミナル.app を起動し、server_get.rb があるパスまで移動し、./server_get.rb を実行して、HTTP サーバーを起動します。

~ $ cd Desktop/Twitter/
~/Desktop/Twitter $ ls
TSTwitter	server.rb	server_get.rb	server_post.rb
~/Desktop/Twitter $ ./server_get.rb
GET
Listening on port 9090

Safari で先程指定した IP アドレス、http://192.168.1.6:9090 にアクセスします。下図のように表示されます。フォームに Name: Yoshiaki、Message: Hello! と入力して ‘Send’ ボタンをクリックします。

Safari 実行画面

サーバーからの返答がないので、送信が止まりません。それで Safari の URL フィールド右端の ‘x’ ボタンをクリックして中止します。すると、ターミナル側に Safari から送信された生データーが次のように表示されます。(実際のデータには、文字列両端のダブルクォーテーション ( ” ) は含まれていません。)

~/Desktop/Twitter $ ./server_get.rb
GET
Listening on port 9090
"GET /?name=Yoshiaki&message=Hello%21 HTTP/1.1\r\n"
"Host: 192.168.1.6:9090\r\n"
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
"Referer: http://192.168.1.6:9090/\r\n"
"Accept-Language: ja-jp\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Connection: keep-alive\r\n"
"\r\n"

Listening on port 9090 の次の行、 GET に表示されるのが URL とパラメーターです。? はパラメーターの開始を表し、& は区切り文字です。

"GET /?name=Yoshiaki&message=Hello%21 HTTP/1.1\r\n"

上部分より、 Safari のフォームで入力された値、name が Yoshiaki、message が Hello%21 というパラメーターで送信されたことがわかります。%21は ! 文字の URL エンコードです。 HTML の

<input type="text" name="name" size="50"></p>
<textarea name="message" cols="50" rows="5"></textarea></p>

より、input の name=”name” と textarea の name=”message” が入力された値の名前です。

フォームを Safari が解釈して、サーバーにデータを送っています。フォームは複雑な表記ですが、送信するデータは name=Yoshiaki&message=Hello%21と単純です。
server_get.rb を終了するには、ターミナル上で CTRL + C キーを押してください。

POST を利用した server_post.rb で同じように試してみると

~/Desktop/Twitter $ ./server_post.rb
POST
Listening on port 9090
"POST / HTTP/1.1\r\n"
"Host: 192.168.1.6:9090\r\n"
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13\r\n"
"Content-Length: 30\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
"Origin: http://192.168.1.6:9090\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Referer: http://192.168.1.6:9090/\r\n"
"Accept-Language: ja-jp\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Connection: keep-alive\r\n"
"\r\n"
"name=Yoshiaki&message=Hello%21"

上のように表示されます。GET と違ってパラメーターは、ヘッダの後、ボディーに付加されます。

"name=Yoshiaki&message=Hello%21"

の部分です。GET、POST の違いがはっきりわかると思います。サーバーに送られるパラメーターは同じです。

次回、紹介しますが、同封の server.rb を使って、Apple 純正ソーシャルネットワークフレームワークの SLRequest がどんなデーターをサーバーに送信するか、覗き見ると面白いかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です