xpandurl

TinyurlなどのURLを復元するJSON(P) API - os0x.blog
JavaScriptPython で。

仕様
/{url}[?callback={callback}]
/?url={url}[&callback={callback}]
  • 返値は素のテキスト。callback があれば JSONP
  • 短縮サービス判定無し。Location: が無ければそのまま返す。
GAE
class XpandURL(webapp.RequestHandler):
  def get(self, path):
    import urllib2, pprint
    url = self.request.get('url') or urllib2.unquote(path)
    clb = self.request.get('callback', None)
    req = urllib2.Request(url)
    req.get_method = lambda: 'HEAD'
    loc = urllib2.urlopen(req).geturl().decode('utf-8')
    if clb != None:
      loc = clb +'("'+(pprint.pformat("'"+ loc.replace('"', '\0'))
                       .replace(r'\x00', r'\"')[3:])+')'
    self.response.headers.add_header('Content-Type',
                                     'text/plain;charset=utf-8')
    self.response.out.write(loc)
  1. http://miscapis.appspot.com/xpandurl/http://xurl.jp/2pl
  2. http://miscapis.appspot.com/xpandurl/http://xurl.jp/2pl?callback=_
  • 以前取ったアカウントを流用。
  • JSONP 化処理が怪しすぎる。たぶん間違ってる。
  • HEAD が使える以上「リダイレクトに従って最終的な URL を返す」方がいい気がしてきたのでそのように直す予定。
  • ↑直した。これなら多段に短縮されてても大丈夫。