
エスカフラーチェ代表。
インターネットをもっと楽しく便利なものにしたい、そのために自分が本当につくりたいものに対して100%の力を発揮したい、という思いからエスカフラーチェLLCを設立。
企画から実装まで色々やってます。
投稿した記事の最新5件を表示しています。
オオヒダです。最近Twitterのおもしろさがわかってきました。おそい。
というわけで、今回はTwitter APIを使っていてちょっと気づいたことについて書いてみたいと思います。
TwitterAPIを利用してつぶやきを投稿するとき、"417 Expectation Failed"というレスポンスが返ってきてしまい、投稿を行えないということがたまにありました。
うーんこれは困る・・・ということで、調査してみました。
そもそも417 Expectation Failedとは何か?ということですが、これを理解するには100 Continueというレスポンスについてあわせて知っておく必要があります。
クライアントからサーバに対して大きなリクエストを送る場合、HTTP1.1ではまずそのリクエストが受け入れ可能かどうかをサーバに問い合わせることができます。この際、受け入れ可能であることを示す一時的なレスポンスというのが100 Continueとなります。
ただしサーバによっては100に対応していない場合があり、そのためにクライアントはExcept: 100-continueというヘッダをリクエストに含める必要があります。
そしてサーバが100に対応していないことを示すレスポンスというのが、417 Exceptation Failedとなります。
つまり、Twitterのサーバに対して100を要求しているけど、Twitterのサーバがそれに対応していないため、417が返ってきているのだ!ということが、なんとなくわかりました。
そこで解決策としては、リクエストから該当のヘッダ(Except: 100-continue)を消してみればいいのでは、ということになります。
通信の実装方法によって制御の方法も様々かと思いますが、ここではtubuclipで利用しているtwitteroauthというPHP用のライブラリの場合で考えてみます。
twitteroauthでは、実際の通信部分にはcurl(cURLモジュール)が用いられていす。
curlでは、リクエストボディの長さが1024バイトを超える場合、自動的に100-continueが送信されるようです。100-continueを送信しないようにするには、curl_setopt()関数でExpectヘッダを抑制します。
→ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
今回は以下のようにソースコードに1行追加しました。
twitteroauth/twitterOAuth.php
function http($url, $post_data = null) {/*{{{*/
$ch = curl_init();
if (defined("CURL_CA_BUNDLE_PATH")) curl_setopt($ch, CURLOPT_CAINFO, CURL_CA_BUNDLE_PATH);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
とりあえずこのようにしてから、問題の現象が生じることがなくなりました。めでたしめでたし。
※今回はTwitter用ライブラリに対しての修正なので問題ありませんが、curl設定の影響範囲については注意が必要です。
ちなみに、なぜ現象が毎回でなくたまに生じていたのかということですが、これは文字列の長さが原因だと思われます。
上述の通り、curlでPOSTを行う際、ポスト内容が1,024文字を超えると100-continueを利用しようとします。ですので、つぶやきの文字数が長い場合に、curlが100をつけて送信、結果として417が返ってくる という流れになっていたものと考えられます。
(つぶやき自体は140文字までと短いですが、APIを扱うための情報やエンコードされたつぶやきの文字数を合わせると実際のポスト内容はけっこう長くなります)
というわけでTwitter APIで417レスポンスが返ってきてしまう場合の対応方法についてのメモでした。なお、この問題は2008年12月のTwitterサーバ仕様変更時から発生している可能性がありますので、いまさらなネタかも知れません。
以前書くと言っていたtubuclipにまつわる話についてはまた次回書きたいと思います。
参考:
[Studying HTTP] HTTP Status Code - 100 Continue
http://www.studyinghttp.net/status_code#Code100
オオヒダです。
本日「つぶくりっぷ」というTwitter関連のアプリケーションをリリースしました。
http://tubuclip.com/
個人でリリースしたものなのですが、僕のブログが今ちょっとみれないのと、会社で開発しているサービスの実験をかねてつくったものということもあり、こちらで書かせてもらっています。
サービスの概要としてはとてもシンプルで、TwitterのつぶやきからURLが含まれているものを抽出して表示するというものになっています。
企画的にはシンプルというかワンアイデアものなのですが、今回は開発に際して次のようなことを試しています。
今回はいろいろ自分としてははじめてなことをやってみたので、大変な部分もありましたが勉強になりました。
やっぱり新しいことをやってる時がプログラムをかいてて一番楽しい気がします。長時間やってうまくいかないとムカーッとなりますけど・・・
とまぁ、これだけ書いても仕方ないので、それぞれの項目について、またくわしく書いてみたいと思います。
あ、あとよかったら使ってみてください。
こんにちは、オオヒダです。
先日名古屋で行われた CSS Nite in Nagoya 2007 で弊社の purprin(山田あかね)が講演させていただきましたが、その内容を公開いたしました。
実際の動画とプレゼン資料を組み合わせて、当日のプレゼンをできるだけ再現したかたちになっております。ぜひご覧ください。

こんにちは、オオヒダです。
株式会社paperboy&co.社長で、エスカフラーチェのアドバイザーでもある家入の自伝が出版されました。
僕も早速読んでみたんですが、ほんとにそのまま映画にできそうなくらい、ありのままでドラマチックな内容です。 独特の感性で多くの人に愛されるサービスをつくってきた家入ですが、そのバックグラウンドもまた大変ユニークで魅力的だということが分かります。
彼を知っていても知らなくても、色々な意味で刺激があって面白いと思いますので、ぜひ多くの人に読んでいただきたい本です。
今なら、家入直筆のイラスト(らくがき)が描かれた本を下記のペパボショップでご購入いただけます。ご興味のある方はぜひどうぞ。
ペパボショップ - こんな僕でも社長になれた(イエイリカズマのらくがき入り)
買われた方は、ひととおり読み終えた後、カバーをとってみてください。僕はちょっぴり涙が出ました。
こんにちは。オオヒダです。
弊社ラボのサービスの一つ「コトノハ」の現在の総ユーザ数が、2万人を超えました。本当にどうもありがとうございます。
コトノハは、様々なお題(コト)について○と×で答えていくというシンプルなサービスですが、サービス開始以来、多くの方からご好評をいただき、ユーザの皆様とともに成長を続けてきました。
皆様により楽しんでいただけるよう、ひき続きサービスの改善、拡張を行っていきたいと考えております。
また、コトノハとご一緒になにか面白いことをさせていただける機会がありましたら、ぜひご連絡ください(法人、個人を問わず、ご意見やご提案などをいただければ嬉しいです)。
では、今後ともどうぞよろしくお願いいたします。



