当ブログの更新通知をTwitterに流す方法として、WordPressプラグイン「Simple Tweet」を便利に使わせていただいています。
ただ最近になって、URL短縮をj.mpにしているはずなのにbit.lyで短縮される事象が出てきて、bit.lyのドキュメントを当たってみると、
http://code.google.com/p/bitly-api/issues/detail?id=35
どうもSimple Tweetで使われているv2.0.1のAPIを使うと、j.mpで短縮したつもりでもbit.lyになる不具合が出ているよう。ただこのAPIはすでにDeprecated(非推奨)の扱いなので、この事象を直してくれるつもりはないようで「v3に移行しちゃいなよ」的なスタンス。
もう仕方がないので、Simple Tweet 1.3.7.2をベースにbit.ly/j.mpのAPIだけ最新に改変して使うことにしました。せっかくなのでパッチなどのせてみようかと。
90c90
< const TWEET_BITLY_URL = ‘http://api.bit.ly/shorten?version=2.0.1&login=%s&apiKey=%s&longUrl=’;
—
> const TWEET_BITLY_URL = ‘http://api.bitly.com/v3/shorten?domain=bit.ly&format=xml&login=%s&apiKey=%s&longUrl=’;
93c93
< const TWEET_JMP_URL = ‘http://api.j.mp/shorten?version=2.0.1&&login=%s&apiKey=%s&longUrl=’;
—
> const TWEET_JMP_URL = ‘http://api.bitly.com/v3/shorten?domain=j.mp&format=xml&login=%s&apiKey=%s&longUrl=’;
808c808
< if ( preg_match( ‘/[\’"]shortUrl[\’"]:[ \t]*[\’"]([^\’"]*)[\’"]/iUs’, $result, $matches ) ) {
—
> if ( preg_match( ‘/<url>[ \t]*(.*)[ \t]*<\/url>/iUs’, $result, $matches ) ) {
改変前は結果をJSONで受け取るようになっていましたが、v3のAPIを使ってJSONで短縮URLを受け取ると「/」がエスケープされた状態(「\/」)で返ってきて処理が面倒だったので、XMLで結果を受け取るようにして、短縮URL抽出の正規表現も変更しました。うちの環境では問題なくj.mpで短縮できているので多分大丈夫でしょう。
上記のパッチはすでに作者様にも送付させていただいているので、この事象はバージョンアップで解消されると思いますが、それまでの間「なんとしてもj.mpを使いたいんだ!」という方はパッチを試してみてください。