記事一覧はこちら

Twitterを引用する方法メモ

公式embedはダサいので嫌。非同期読み込みだから、ページ全体の高さが変わっちゃうのがハゲるほどストレスなので。

// http://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/
NodeList.prototype.forEach = Array.prototype.forEach;
function int2strDate(getTime){
    //ミリ秒
    var myTbl=["日","月","火","水","木","金","土"],myD=new Date(),map={},path;
    myD.setTime(getTime);
    map.Y=myD.getFullYear();
    map.m=("000"+(myD.getMonth() + 1)).slice(-2);
    map.d=("000"+(myD.getDate())).slice(-2);
    map.D=myTbl[myD.getDay()];
    map.H=("000"+(myD.getHours())).slice(-2);
    map.i=("000"+(myD.getMinutes())).slice(-2);
    map.s=("000"+(myD.getSeconds())).slice(-2);
    map.u=("000"+(myD.getMilliseconds())).slice(-3);
    path = "Y/m/d(D)H:i:s".replace(/([YmdDHisu])/g,function(a,b){return map[b];});
    return path;
}
var baseDom=(document.querySelectorAll(".permalink-tweet-container")||[])[0];
if(!baseDom){alert("基準のdomが見つかりません");}
var base=baseDom.querySelectorAll(".js-tweet-text"),tweetText="",tweetDate="",userName="",userScreenName="",userImage="",tweetId="";
base[0].childNodes.forEach(function(v,i,o){
    if(v.nodeName=="#text"){
        tweetText+=v.data;
    }else if(v.classList.contains("twitter-timeline-link") && !v.classList.contains("u-hidden")){
        //pic.twitter.comはexpandedUrlが無いので無視
        if((m=v.dataset.expandedUrl.match(/http:\/\/youtu\.be\/(\w{0,12})/))){
            tweetText+=('<iframe width="560" height="315" src="//www.youtube.com/embed/'+m[1]+'" frameborder="0" allowfullscreen></iframe>');
        }else{
            tweetText+=("<a href=\""+v.dataset.expandedUrl+"\">"+v.dataset.expandedUrl+"</a>");
        }
    }else if(v.classList.contains("twitter-hashtag")){
        tweetText+=v.innerText;
    }else if(v.classList.contains("twitter-atreply")){
        tweetText+=v.innerText;
    }
});
tweetDate=int2strDate(new Date(baseDom.querySelectorAll("*[data-time]")[0].dataset.time*1000));
userName=baseDom.querySelector("*[data-name]").dataset.name;
userScreenName=baseDom.querySelector("*[data-screen-name]").dataset.screenName;
tweetId=baseDom.querySelector("*[data-tweet-id]").dataset.tweetId;
userImage=baseDom.querySelector("img.avatar").src;
result="";
result+=('<span class="f_twitter" style="border:solid 1px #000;border-radius:12px;padding:6px;word-break:break-all;display:inline-block;">').replace(/\t/g,"");
result+=('  <div style="float:left;">').replace(/\t/g,"");
result+=('      <a href="https://twitter.com/'+userScreenName+'"><img src="'+userImage+'" style="width:48px;height:48px;border:0;padding:0;"></a>').replace(/\t/g,"");
result+=('  </div>').replace(/\t/g,"");
result+=('  <div class="f_body" style="position: static;margin-left: 52px;">').replace(/\t/g,"");
result+=('      <span class="f_meta" style="font-size:small;">'+userName+'(<a href="https://twitter.com/'+userScreenName+'">@'+userScreenName+'</a>) <a href="https://twitter.com/'+userScreenName+'/status/'+tweetId+'">'+tweetDate+'</a></span><br>').replace(/\t/g,"");
result+=(tweetText).replace(/\t/g,"");
result+=('  </div>').replace(/\t/g,"");
result+=('</span>').replace(/\t/g,"");
result+=('').replace(/\t/g,"");
result+="\n";
copy(result);

こんな感じ

フシハラ(@Fushihara) 2014/10/20(月)05:54:02
Shantae(シャンティ) と呼ばれるゲームの日本語でのリリース状況 - Fushihara Knowledge Base http://fushi.x0.com/blog/archives/1574 Shantae and the Pirate's Curse は日本でも配信すべきでしょー