// 代替コード
/* { java.net.URL expandShortURL(java.net.URL|string) } */
function expandShortURL(u)
{
if (u == null) {
return null;
}
var su, u0 = u;
if (u instanceof java.net.URL) {
su = u.toString();
} else if (u instanceof java.lang.String || typeof u === 'string') {
su = new java.lang.String(u);
try {
u = new java.net.URL(su);
} catch(e) {
return u0;
}
}
var needExpand = java.util.regex.Pattern.compile(
"https?://(?:(?:bit\\.ly|j\\.mp)/[-0-9A-Za-z]+|(?:t\\.co|tinyurl\\.com|u\\.nu|goo\\.gl(?:/\\p{Alnum}+)?|ow\\.ly|is\\.gd|tl\\.gd|twurl\\.nl|phpc\\.in|url4\\.eu|om\\.ly|tcrn\\.ch|(?:short|wong|abf|amzn|htn)\\.to|dlvr\\.it|su\\.pr|nxy\\.in|icio\\.us|wur\\.la|post\\.ly|ping\\.fm|awe\\.sm|i\\.s-a\\.cc|bkite\\.com|arst\\.ch|viigo\\.im|dld\\.bz|fb\\.me|tr\\.my|fwd4\\.me|mangk\\.us|digg\\.com|cot\\.ag|alturl\\.com|rdir\\.pl|(?:www\\.)?tumblr\\.com|tr\\.im|migre\\.me|zapt\\.in|shar\\.es|tynie\\.net|urlo\\.me|cli\\.gs|t\\.asahi\\.com|xap\\.vc|30m\\.in|gj\\.tc|lb\\.to|urx\\.nu|redir\\.ec)/\\p{Alnum}+|p\\.tl/[\\w-]+|ff\\.im/-?\\p{Alnum}+|wp\\.me/[-\\da-zA-Z]+|ustre\\.am/:?\\p{Alnum}+|goo\\.gl/\\p{Alnum}+\\.qr|ll\\.ly/[0-9A-Za-z!_*~]+)",
2).matcher(su).matches();
if (!needExpand) {
return u0;
}
if (su.startsWith("http://t...content-available-to-author-only...r.com/")) {
try {
u = new java.net.URL("http://www." + su.substring(7));
}
catch(e) {}
}
else if(su.startsWith("http://g...content-available-to-author-only...o.gl/") && su.endsWith(".qr")) {
try {
u = new java.net.URL(su.substring(0, su.length() - 3));
}
catch(e) {}
}
var hr = v2c.createHttpRequest(u);
if (hr.getHead()) {
var rc = hr.responseCode;
if (rc == 301 || rc == 302 || rc == 303 || rc == 307) {
var u2, loc = hr.getResponseHeader("location");
if (loc != null) {
try {
return new java.net.URL(u, loc);
} catch(e) {
v2c.println("u, loc: " + u + "," + loc);
return u0;
}
}
}
else if (rc == 200) {
var m;
var contents = hr.getContentsAsString() + "";
var host = u.getHost() + "";
if (host == "url4.eu" || host == "om.ly" || host == "viigo.im" || host == "nxy.in") {
m = (new RegExp("<iframe\\s[^>]*src=\"(https?://[!-~&&[^\">]]+)\"", "i")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
if (host == "nxy.in") {
m = (new RegExp("Redirect\\('(https?://[!-~&&[^\">]]+)'", "i")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
}
}
else if (host == "i.s-a.cc") {
m = (new RegExp("<iframe\\s[^>]*src=\"" + u.getPath() + "\\?([!-~&&[^\">]]+)\"")).exec(contents);
if (!m) {
return u0;
}
var re2 = new RegExp("[&<>\"']", "g");
var dic = {"&":"&","<":"<",">":">",'"':'"',"'":"'"};
var s2 = m[1].replace(re2,function(m0) {
return dic[m0];
});
var m2 = (new RegExp("&utm_content=(http[^&]+)(?:&|$)")).exec(s2);
if (!m2) {
return u0;
}
return new java.net.URL(java.net.URLDecoder.decode(m2[1], "UTF-8"));
}
else if (host == "shar.es") {
m = (new RegExp("window\\.location='(https?://[!-~&&[^\"'>]]+)'", "i")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
}
else if (host == "p.tl") {
m = (new RegExp("\\bwindow\\.short_url *= *\"(https?://[!-~&&[^\"'>]]+)\"", "i")).exec(contents);
if (m && m[1] == (u.toString()+"")) {
m = (new RegExp("\\bwindow\\.long_url *= *\"(https?://[!-~&&[^\"'>]]+)\"", "i")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
}
}
else if (host == "ll.ly") {
m = (new RegExp("<a\\s[^>]*href=\"([^\"]+\\.axfc\\.net/uploader/[^\"]+)\"", "i")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
m = (new RegExp("<h\\d>リンク先</h\\d>\\s*(?:<p>)?<a href=\"([^\"]+)\">")).exec(contents);
if (m) {
return new java.net.URL(m[1]);
}
}
}
}
return u0;
};
/* { string prompt(string, string) } */
function prompt(s, v)
{
var result = javax.swing.JOptionPane.showInputDialog(null,
s,
"Script alert " + v2c.getScriptSubFile("").getName(),
javax.swing.JOptionPane.PLAIN_MESSAGE,
null,
null,
v
);
return result + "";
};
var su = "http://content-available-to-author-only.tl/1PFk";
var s = prompt('展開したURLはこちら', expandShortURL(su));
v2c.println('戻り値:' + s);