Tumblrの写真をプレビューできるようにする †概要 †アドベントカレンダーも11日目になりました。1回忘れたけどなんとかここまで… Azureaにはわりとたくさんのサイトをプレビューできるような機能があります。でもこのなかにTumblrは含まれていなくて、それは写真だけを共有するサイトでは無いため。 でもわざわざブラウザ開くのも面倒なのでプレビューしたい。このプレビュー機能、スクリプトから拡張できます。スクリプトなら柔軟なURL判定やリダイレクト先を取得してからのAPI呼び出しなど自由に出来るのでTumblrをプレビューできるようにする拡張を作ってみます。 スクリプト †var apiKey = ""; // APIキー入れる if(!String.prototype.trim){ String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); } } function processTumblr(url){ if(url.search(/http:\/\/([a-zA-Z0-9.]+)\/post\/([0-9]+)$/) >= 0){ var req = 'http://api.tumblr.com/v2/blog/'+RegExp.$1+'/posts?api_key='+apiKey+'&id='+RegExp.$2; var resp = Http.downloadString(req); var json = eval('('+resp+');'); if(json.response.posts[0].type == "photo" && json.response.posts[0].photos.length == 1){ return json.response.posts[0].photos[0].alt_sizes[0].url; } } return ''; } System.addOpenUrlHandler(function(url){ if(url.match(/http:\/\/(www\.)?tu?mblr\.com?\/[a-zA-Z0-9]+$/)){ while(true){ if(url.match(/http:\/\/(www\.)?tu?mblr\.com?\/[a-zA-Z0-9]+$/)){ var resp = Http.sendRequest(url, false); if(resp.header.search(/Location\s*:\s*(.*)/)){ var u = RegExp.$1.trim(); if(u.search(/www\.tumblr\.com/) >= 0){ url = u; continue; } u = processTumblr(u); if(u != '') return u; } } break; } }else if(url.search(/http:\/\/([a-zA-Z0-9]+\.)?tumblr\.com?/) >= 0){ if(RegExp.$1 != ''){ var u = processTumblr(url); if(u != '') return u; } } }); 解説 †まずTumblrのAPIキーが必要なので各自取得してください。取得したら先頭のapiKeyにセットしておいてください。これで準備完了です。 URLが選択された場合に起動するハンドラを設定しておきます。このなかでTumblrのURLかを判定して、処理すべきならURLを解析したり、APIを呼び出したり、実際にURLをリクエストしてリダイレクトさせたり…を行います。 このハンドラが文字列を返した場合、本体はそれをプレビューするURLと解釈し、プレビューウィンドウを起動します。なにも返さなかった場合はそのままブラウザで開かれます。 こまかい中身の処理は、URLを正規表現で判定したり、リダイレクトしたり、APIを呼び出したりetc,etc,etc...なので読んでみてください コメントとか † |