Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2009-02-18

tinyurl置換

10:27

UserJS はあまり入れたくないのでブックマークレット。もし不便と思ったら UserJS に直すかも。

javascript:(function(doc){
  var api='http://atsushaa.appspot.com/untiny/get?url=URLS&callback=untinyUrl';
  function xGet(xpath){
    xpath+=xpath.replace(/^\/\//,'|//x:');
    var res=doc.evaluate(xpath,doc,function(){return 'http://www.w3.org/1999/xhtml'},6,null);
    var ret=[];
    for(var i=0,l=res.snapshotLength;i<l;i++){
      ret[i]=res.snapshotItem(i);
    }
    return ret;
  }
  var links=xGet('//a[starts-with(@href,\'http://tinyurl.com/\') or starts-with(@href,\'http://bit.ly/\') or starts-with(@href,\'http://is.gd/\')]').slice(0,10);
  if(!links.length)return;
  var script=doc.createElement('script');
  script.src=api.replace('URLS',links.map(function(a){return encodeURIComponent(a.href)}).join('+'));
  window.untinyUrl=function(untiny){
    for(var url in untiny){
      redirect=untiny[url];
      if(/^http/.test(redirect)){
        links.forEach(function(a){
          if(a.href==url){
            if(a.textContent==a.href){a.textContent=a.href=redirect;}
            else{a.href=redirect;a.appendChild(doc.createTextNode(' ('+redirect+')'))}
          }
        })
      }
    } 
    doc.documentElement.removeChild(script);
    delete window.untinyUrl;
  };
  doc.documentElement.appendChild(script);
 })(document)
  • m.twitter.com でも使える。
  • Firefox と Safari と Opera で動いた。
  • JSONP はこれを使った。
トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20090218
 |