Skip to content

Instantly share code, notes, and snippets.

@ne-sachirou
Created February 20, 2011 00:52
Show Gist options
  • Save ne-sachirou/835563 to your computer and use it in GitHub Desktop.
Save ne-sachirou/835563 to your computer and use it in GitHub Desktop.
短縮URLを伸展する #AzureaScript
// @author = http://c4se.sakura.ne.jp/profile/ne.html
// @date = 2011-02-19
// @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.showMessage(unshorten(urls[0]), urls[0], 0);
});
function PreProcessTimelineStatus(status) { // @param Status Object:
status.text = status.text.replace(/https?:\/\/[0-9A-Za-z._\-^~\/&%?]+/g,
function(url) {
return unshorten(url);
});
}
@ne-sachirou
Copy link
Author

https://gist.github.com/835563/93459539463b98c4127dff6015ba424c593adf67
短縮urlを伸展するAzureaScriptです。伸展にはUnity[ http://untiny.me/ ]のAPIを使用します。
受信した全てのstatusのurlを伸展します。自動に伸展したくない場合は、PreProcessTimelineStatusの関数をコメントアウトして下さい。
其の場合、Context Menuの、unshotenから、statusが含む最初のurlのみ、進展してダイアログ表示します。

@ne-sachirou
Copy link
Author

https://gist.github.com/835563/b448fa0d2293fca1fca305afc2884a79f4163b6c
エラー処理を追加。
キャッシュを追加。(RTで何度も同じURLが回ってくる場合等の為。)

@ne-sachirou
Copy link
Author

https://gist.github.com/835563/d65426e422c8aea86f2d5ed5f158966e9f877b45
ContextMenuから呼び出しの結果表示を、inputBoxへ変更。
PreProcessTimelineStatusに、伸展urlがキャッシュに有る場合のみ、statusを書き換える処理を追記(デフォルトでコメントアウト済み)。ContextMenuからの呼び出しでunshortenしたい時には、PreProcessTimelineStatus自体はコメントアウトせず、此れを利用すると良い。 (line 65)

@ne-sachirou
Copy link
Author

https://gist.github.com/835563/fa5dbf84d768663517f77b0d402ef9bff662b498
isPossibleUnshorten()関数を追加。
unshorten()に於いて、第二引数で非同期処理を可能にした。
ContextMenuからの呼び出しでは、無条件に0番目のurlを与えるのではなく、伸展可能なurlの内、初めのものを与える様にした。伸展可能なurlを含まない場合は、何も動作しない。

@ne-sachirou
Copy link
Author

https://gist.github.com/835563/5ee92fc1d9534d3542365fa2902843d7e240c6e0
デフォルト動作を変更した。PreProcessTimelineStatusでは、新規短縮URLを得た場合、非同期で伸展し、キャッシュに保存する。同じURLを二度目に得た時は、伸展されて表示する。此の変更で、UIは凍結しなく成る。(TODO: AzureaVimの:shindanプラグインは、別途対処する事)

@ne-sachirou
Copy link
Author

AzureaVim pluginへ統合しました。此ちらのGistは更新しません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment