WordPressプラグイン「Simple Tweet」でj.mpのURL短縮がbit.lyになる事象の修正方法


当ブログの更新通知を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を使いたいんだ!」という方はパッチを試してみてください。

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.