なげやりろぐ

フテイキコウシン

短縮URLサービスを活用

Twitter使っているとどうしてもその文字数制限からリンクを張るときには短縮URLサービスのお世話になりますよね。
TwitterのHomeからであれば自動でbit.lyサービスで短くしてくれますけどAPI経由の各種クライアントなどではそれが有効にならない場合が多いので、手動というか何らかの手段を使って短縮してやらないといけない場合があります。
SleipnirでしたらCopyTinyUrlTab.jsというスクリプトをアクション登録して短縮したいページ上で発動すればクリップボードTinyURL短縮サービスによって短くされたURLが格納されますので簡単でよかったのですが、ここ最近なぜか短縮されたURLでは元のページにアクセスできないという珍事がたびたび発生しています。
これは多分スクリプトのせいではなくサービス提供側の問題ではないかなと感じていますが、これはちょっと困りもの。
そこで別のサービスを利用してみようと言うことになるわけですが、実は既に前出のbit.lyもアクション化して利用していたりします。
アクション化といってもサイトで提供されているブックマークレットをUserActionスクリプトで利用出来るようにしているだけなんですけどね。
このブックマークレットのUserActionスクリプト化に関しては、id:barrackdoさんのブログ【SleipnirでBookmarkletを使う(再掲) - (TooLab.)Lab. 研究日誌】で詳しく紹介されていますので参考に。


さて、今回は最近サービスを始めたGoogle先生のところのURL短縮サービスであるgoo.glを使ってみたいなと思ったのですが、まだ公式にAPIを提供している状態ではないみたいで基本的にはGoogleツールバーなどでの利用しかできないことになっているようですね。
まぁそれでも既にgoo.glを利用出来る短縮サービスページブックマークレットを提供するページなどもあるようなのでそれを利用すれば何とかなるかなと思ったのですが、前者はソースを見たところ外部jsで処理しているので無理と判断。そして後者もそのままではjavascriptのalertダイアログを出すタイプで、利用するにはコピペとダイアログを消す操作が発生してどうもよろしくない。

javascript:window.googl_callback = function(response){if(response.error_message){alert("An error occured: " + response.error_message);}else{alert(response.short_url);}}; var s = document.createElement("script"); s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(window.location.href) + "&jsonp=googl_callback"; void(document.body.appendChild(s));

もっと良いのはないかしらと探してみたら、上記ブックマークレットを改良したような感じのものを配布しているサイトを見つけました。

ソースを見る限り、まさにさっきのブックマークレットをうまく取り込んで利用している感じです♪
このままでもTwitterでの利用には便利ですが・・・

javascript:var%20thisPageTitle%20=%20document.title;window.googl_callback%20=%20function(response){if(response.error_message){alert("An%20error%20occured:%20"%20+%20response.error_message);}else{location.href%20=%20"http://twitter.com/home?status="+encodeURI("“"+thisPageTitle+"”%20")+response.short_url;}};var%20s%20=%20document.createElement("script");s.src%20=%20"http://ggl-shortener.appspot.com/?url="%20+%20encodeURIComponent(window.location.href)%20+%20"&jsonp=googl_callback";void(document.body.appendChild(s));


先日もエントリーしましたが、リンクバーにあまりため込むのはどうかと思っているクチなのでここはやはりアクション化しちゃおうと。メニューエディタで短縮URLサービス部分を階層化しちゃえばスッキリしますしね。
それと、Twitterに投稿する際このまま実行するとTwitterのWebページの入力エリアへページタイトルとともに短縮URLが送られますが、ページタイトルが不要な場合もありますしTwitterのWebページではなくクライアントへ貼り付けて投稿したい場合も多々あります。
と、いうことで3種類のUserActionスクリプト化したgoo.gl短縮サービススクリプトをでっち上げてみました。

  • TwitterのHomeを開いて”ページタイトル”+短縮URLを貼り付けるタイプ
URL = "javascript:(" + function(){
var thisPageTitle = document.title;window.googl_callback = function(response){if(response.error_message){alert("An error occured: " + response.error_message);}else{location.href = "http://twitter.com/home?status="+encodeURI("“"+thisPageTitle+"” ")+response.short_url;}};var s = document.createElement("script");s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(window.location.href) + "&jsonp=googl_callback";void(document.body.appendChild(s));
} + ")()";
URL = "javascript:(" + function(){
var thisPageTitle = document.title;window.googl_callback = function(response){if(response.error_message){alert("An error occured: " + response.error_message);}else{clipboardData.setData("Text","“"+thisPageTitle+"” "+response.short_url);}};var s = document.createElement("script");s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(window.location.href) + "&jsonp=googl_callback";void(document.body.appendChild(s));
} + ")()";
URL = "javascript:(" + function(){
var thisPageTitle = document.title;window.googl_callback = function(response){if(response.error_message){alert("An error occured: " + response.error_message);}else{clipboardData.setData("Text",response.short_url);}};var s = document.createElement("script");s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(window.location.href) + "&jsonp=googl_callback";void(document.body.appendChild(s));
} + ")()";

いまさらですがあえて書きます。
UserActionスクリプトとして利用するにはUserAction Extensionを導入済みの環境であることが前提で、コードを適当なエディタへコピペして適当な名前+拡張子jsでplugins\scriptsへ格納したのちクライアントを再起動すると利用可能になります。

  • メニューエディタで階層化して利用。タブメニューへ入れても良いかも♪


クリップボード格納まわりのコードはid:hitagismさんのCopyTinyUrlTab.jsのものを参考にさせてもらいましたが、ステータスバーへのメッセージ部分は出さないようにしています。
滅多なことでは取得ミスなどおきませんし、なにかあればalertがでるようオリジナルブックマークレットの方に記述済みでしたので。
と、いうことで今までお世話になったCopyTinyUrlTab.jsにはとりあえずお暇をあげて、これからはbit.lyかgoo.glを気分で使い分けていこうかなと♪

追記

Twitterのページを開いてステータスを書き込むスクリプトですが、location.hrefを使っているのでポストしたページがTwitterのページへと書き換わってしまいます。
ポストしたあとに戻れば良いだけのハナシですが、その挙動が気にくわないという方がいるかもしれないなと勝手に考えて別タブで開くタイプを。
ただしwindow.openを使っている関係でポップアップブロックに反応するかもしれません。ワタシのところでは大丈夫でしたけど…

  • TwitterのHomeを別タブで開いて”ページタイトル”+短縮URLを貼り付けるタイプ
URL = "javascript:(" + function(){
var thisPageTitle = document.title;window.googl_callback = function(response){if(response.error_message){alert("An error occured: " + response.error_message);}else{window.open("http://twitter.com/home?status="+encodeURI("“"+thisPageTitle+"” ")+response.short_url,'_blank');}};var s = document.createElement("script");s.src = "http://ggl-shortener.appspot.com/?url=" + encodeURIComponent(window.location.href) + "&jsonp=googl_callback";void(document.body.appendChild(s));
} + ")()";