fork download
  1. // function(string text, bool redirect) -> string
  2. var replaceShortUrlAll = (function()
  3. {
  4. var printlnLog = function(message)
  5. {
  6. v2c.println("[post.js/replaceShortUrlAll()] " + message);
  7. };
  8.  
  9. var expandUrl = function(sourceUrl, redirect)
  10. {
  11. var expanded = v2c.expandShortURL(sourceUrl, true);
  12. if(expanded != sourceUrl)
  13. return expanded;
  14.  
  15. return redirect
  16. ? getRedirectUrl(sourceUrl)
  17. : sourceUrl;
  18. };
  19.  
  20. var getRedirectUrl = function(sourceUrl)
  21. {
  22. var req = v2c.createHttpRequest(sourceUrl, "");
  23. req.getContentsAsBytes(); // ignore contents
  24.  
  25. printlnLog(req.responseCode + "\n" + req.getResponseHeader("Location"))
  26.  
  27. if(301 <= req.responseCode && hr.responseCode <= 303)
  28. {
  29. return getRedirectUrl(req.getResponseHeader("Location"));
  30. }
  31.  
  32. return sourceUrl;
  33. };
  34.  
  35. return function(text, redirect)
  36. {
  37. var message = text + "";
  38.  
  39. return message.replace(/(h?ttps?:\/\/)?([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/g,
  40. function(s, scheme)
  41. {
  42. printlnLog("match: " + s + ", scheme: " + scheme);
  43.  
  44. // スキームなしの場合は https を補完
  45. // h抜きの場合は h を補完
  46. scheme = scheme || "";
  47. var ttp = scheme.indexOf("ttp://");
  48. var ttps = scheme.indexOf("ttps://");
  49. var prefix = ttp == -1 && ttps == -1
  50. ? "https://"
  51. : ttp == 0 || ttps == 0
  52. ? "h"
  53. : "";
  54.  
  55. return expandUrl(prefix + s, redirect);
  56. });
  57. };
  58. })();
  59.  
  60. var text = v2c.getSelectedText();
  61. v2c.println("[ReplaceShortUrl.js]" + replaceShortUrlAll(text, false));
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty