From: Tadashi M. <ta...@my...> - 2011-10-22 10:48:34
|
松尾です。 ご報告ありがとうございます。 確認なのですが、投稿された文字列は "Oct. 23, 18:00-24:00 JST, we have NTT (Denden memorial day) Contest. UserDefinedContest setup for N1MM is available at http://www.ki.nu/~makoto/n1mm/ja-ntt-20111017.zip." で正しいでしょうか。添付されていたエラーメッセージから 復元したものです。 この文字列の投稿をこちらで試してみたところ、 HTTP/1.1 403 Forbidden (Status is over 140 characters.) とはならず、普通に投稿成功してしまいました。 twittering-modeとTwitterサーバとで文字列長の解釈に違いが あるとすれば、 a.短縮後のURL長の違い b.URL部分の判定の違い が考えられます。 前者についてtwittering-modeでは、短縮後URL長の最大値をTwitterの APIで取得していますのでAPIで取得した後はTwitterサーバと違いは ないはずです。 ただこのAPIでの取得が完了するまでは事前に設定したデフォルト値を 使いますので、その間に投稿が行われると解釈に差が出ることもあり 得ます。現在のデフォルト値はこの機能を追加した2011/08/27時点での 値で、HTTPでは19文字、HTTPSでは20文字です。 現在は短縮後URL長の最大値が拡張されてHTTPで20文字、HTTPSで21文字と なっています。 今回の投稿内容について試してみましたところ、 (let* ((encoded-text "Oct.%2023%2C%2018%3A00-24%3A00%20JST%2C%20we%20have%20NTT%20%28Denden%20memorial%20day%29%20%20Contest.%20UserDefinedContest%20setup%20for%20N1MM%20is%20available%20at%20http%3A%2F%2Fwww.ki.nu%2F~makoto%2Fn1mm%2Fja-ntt-20111017.zip.") (text (twittering-oauth-url-decode encoded-text)) (http-default (cdr (assq 'short_url_length twittering-service-configuration-default))) (https-default (cdr (assq 'short_url_length_https twittering-service-configuration-default))) ) `((text . ,text) (raw . ,(length text)) (effective . ,(twittering-effective-length text)) (effective-default . ,(twittering-effective-length text http-default https-default)) )) の結果は ((text . "Oct. 23, 18:00-24:00 JST, we have NTT (Denden memorial day) Contest. UserDefinedContest setup for N1MM is available at http://www.ki.nu/~makoto/n1mm/ja-ntt-20111017.zip.") (raw . 170) (effective . 140) (effective-default . 139)) となりました。 現在の短縮後URL長を使うと140文字、デフォルト値使用でも139文字と なっています。なので、投稿内容が上記の文字列だとするとa.の原因で エラーが起きたとは考えにくいです。 a.の原因なら、「3回試して最後のものだけ成功」というのが「APIでの 情報取得完了前は失敗して、完了後は成功」というのに符合するな、と 思っていたのですが…。 b.の方としても、 https://github.com/twitter/twitter-text-rb/tree/master/lib のライブラリ的にも末尾の.もURLに含まれそう…と思ったのですが こちらで試した投稿の結果を見ると "Oct. 23, 18:00-24:00 JST, we have NTT (Denden memorial day) Contest. UserDefinedContest setup for N1MM is available at http://t.co/S38GbTQ." となってました。Twitter的には(上記ライブラリの仕様とは違って) 末尾の.はURLに含まないようですね…。 さらに短縮URLが http://t.co/S38GbTQ でたまたま19文字になって います。上記の投稿結果は140文字なので、もし最大長である20文字の 短縮URLが生成されていたら、文字数制限を越えてしまいますね…。 成功、失敗の両方が起こったのはURL短縮時にサーバ側に複数候補が あり得るためかもしれません。 うーん…。正直なところ、 https://github.com/twitter/twitter-text-rb/blob/master/lib/regex.rb に書かれているような厳密な定義はしたくないですね…。 今回はこの定義に従ってもおかしいようですし。 投稿失敗時に何かサポートする、くらいでしょうか。 何かうまいアイデアがあれば良いのですが…。 --- 松尾 直志 <ta...@my...> |