-
-
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-22 | |
// @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) { | |
services = []; | |
} | |
function unshorten(url) { // @param String: shortened URL | |
// @return String: unshortened URL | |
var servise, i = -1, flag = false, response, result; | |
if (cashe[url]) { | |
result = cashe[url]; | |
} else { | |
while (service = services[++i]) { | |
if (new RegExp(service).test(url)) { | |
flag = true; | |
break; | |
} | |
} | |
if (flag) { | |
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) { | |
result = url; | |
} | |
} else { | |
result = url; | |
} | |
} | |
return result; | |
} | |
System.addContextMenuHandler('unshorten', 0, | |
function(status_id) { // @param String: | |
var urls = []; | |
TwitterService.status.getUrls(status_id, urls); | |
System.inputBox(urls[0], unshorten(urls[0]), false); | |
}); | |
function PreProcessTimelineStatus(status) { // @param Status Object: | |
status.text = status.text.replace(/https?:\/\/[0-9A-Za-z._\-^~\/&%?]+/g, | |
function(url) { | |
return unshorten(url); | |
//return cashe[url] || url; | |
}); | |
} |
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のみ、進展してダイアログ表示します。