--- title: http postがなぜか出来ない author: kazu634 date: 2011-05-15 url: /2011/05/15/_1697/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5429;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---
Mixi Voiceに投稿するプログラミを作成中なのですが、以下の curl のコマンドだとうまく投稿できます:
$ curl -H "Content-Type: application/x-www-form-urlencoded" -d status="Hello world" -d oauth_token=<oauthトークン> http://api.mixi-platform.com/2/voice/statuses/update {"created_at":"Sun May 15 13:45:14 +0000 2011","favorited":false,"text":"Hello world","user":{"url":"http://mixi.jp/show_friend.pl?uid=4ncdm68fwm56j","profile_image_url":"http://profile.img.mixi.jp/photo/user/4ncdm68fwm56j_94665934418.jpg","id":"4ncdm68fwm56j","screen_name":"simoom634"},"id":"4ncdm68fwm56j-20110515224514","favorite_count":,"reply_count":}
これと同じように HTTP post するコマンドを gauche で書きました:
(receive (status header body) (http-post "api.mixi-platform.com" "/2/voice/statuses/update" '(("status" :value "Hello world." :content-type "application/x-www-form-urlencoded") ("oauth_token"<oauthトークン>) ) (display status) (display body))
でも、これだとステータスコードに 400 が帰ってきます。なんでだろう?
ちなみに、Mixi のドキュメントにはこんな感じで書かれています:
つぶやきを新規に投稿するためのURIは以下となります。2種類ありますが、どちらも結果は同じです。
- POST http://api.mixi-platform.com/2/voice/statuses/update
- POST http://api.mixi-platform.com/2/voice/statuses
リクエストボディとして、つぶやきの本文をapplication/x-www-form-urlencoded形式で指定します。
status=%E3%81%A4%E3%81%B6%E3%82%84%E3%81%8D%E3%81%AE%E6%9C%AC%E6%96%87
パラメータ名 指定する値 status つぶやきの本文 statusパラメータに指定する文字列の文字コードはUTF-8とし、それをURIエンコードした結果を指定します。
何か見落としているのかな?