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 がどんなデーターをサーバーに送信するか、覗き見ると面白いかもしれません。