-
-
Save ne-sachirou/835563 to your computer and use it in GitHub Desktop.
// @author = http://c4se.sakura.ne.jp/profile/ne.html | |
// @date = 2011-02-25 | |
// @site = https://gist.github.com/835563 | |
// @license = public domain | |
var services = [], | |
cashe = { | |
'http://c4se.tk/': 'http://c4se.sakura.ne.jp/' | |
}; | |
try { | |
Http.sendRequestAsync('http://untiny.me/api/1.0/services/?format=text', false, | |
function(response) { // @param HttpResponce Object: | |
services = response.body.split(', '); | |
}); | |
} catch (e) {} | |
function isPossibleUnshorten(url) { // @param String: shortend URL | |
// @return Boolean: | |
var _services = services, i = -1, is_possible = false; | |
while (_services[++i]) { | |
if (url.indexOf(_services[i]) !== -1) { | |
is_possible = true; | |
break; | |
} | |
} | |
return is_possible; | |
} | |
function unshorten(url, // @param String: shortened URL | |
async) { // @param Boolean=false: | |
// @return String: unshortened URL | |
var _cashe = cashe, response, result = url; | |
if (_cashe[url]) { | |
result = _cashe[url]; | |
} else if (isPossibleUnshorten(url)) { | |
if (!async) { | |
try { | |
response = Http.sendRequest('http://untiny.me/api/1.0/extract/?url=' + url + '&format=text', false); | |
result = /^error/.test(response.body) ? url : response.body; | |
_cashe[url] = result; | |
} catch (e) {} | |
} else { | |
try { | |
Http.sendRequestAsync('http://untiny.me/api/1.0/extract/?url=' + url + '&format=text', false, | |
function(response) { | |
cashe[url] = /^error/.test(response.body) ? url : response.body; | |
}); | |
} catch (e) {} | |
} | |
} | |
return result; | |
} | |
function PreProcessTimelineStatus(status) { // @param Status Object: | |
status.text = status.text.replace(/https?:\/\/[0-9A-Za-z._\-^~\/&%?]+/g, | |
function(url) { | |
return unshorten(url, true); | |
}); | |
} | |
System.addContextMenuHandler('unshorten', 0, | |
function(status_id) { // @param String: | |
var urls = [], i = -1; | |
TwitterService.status.getUrls(status_id, urls); | |
while (urls[++i]) { | |
if (isPossibleUnshorten(urls[i])) { | |
System.inputBox(urls[i], unshorten(urls[i]), false); | |
break; | |
} | |
} | |
}); |
https://gist.github.com/835563/b448fa0d2293fca1fca305afc2884a79f4163b6c
エラー処理を追加。
キャッシュを追加。(RTで何度も同じURLが回ってくる場合等の為。)
https://gist.github.com/835563/d65426e422c8aea86f2d5ed5f158966e9f877b45
ContextMenuから呼び出しの結果表示を、inputBoxへ変更。
PreProcessTimelineStatusに、伸展urlがキャッシュに有る場合のみ、statusを書き換える処理を追記(デフォルトでコメントアウト済み)。ContextMenuからの呼び出しでunshortenしたい時には、PreProcessTimelineStatus自体はコメントアウトせず、此れを利用すると良い。 (line 65)
https://gist.github.com/835563/fa5dbf84d768663517f77b0d402ef9bff662b498
isPossibleUnshorten()関数を追加。
unshorten()に於いて、第二引数で非同期処理を可能にした。
ContextMenuからの呼び出しでは、無条件に0番目のurlを与えるのではなく、伸展可能なurlの内、初めのものを与える様にした。伸展可能なurlを含まない場合は、何も動作しない。
https://gist.github.com/835563/5ee92fc1d9534d3542365fa2902843d7e240c6e0
デフォルト動作を変更した。PreProcessTimelineStatusでは、新規短縮URLを得た場合、非同期で伸展し、キャッシュに保存する。同じURLを二度目に得た時は、伸展されて表示する。此の変更で、UIは凍結しなく成る。(TODO: AzureaVimの:shindanプラグインは、別途対処する事)
AzureaVim pluginへ統合しました。此ちらのGistは更新しません。
https://gist.github.com/835563/93459539463b98c4127dff6015ba424c593adf67
短縮urlを伸展するAzureaScriptです。伸展にはUnity[ http://untiny.me/ ]のAPIを使用します。
受信した全てのstatusのurlを伸展します。自動に伸展したくない場合は、PreProcessTimelineStatusの関数をコメントアウトして下さい。
其の場合、Context Menuの、unshotenから、statusが含む最初のurlのみ、進展してダイアログ表示します。