@は見せない

 このサイトのトップページの右ペインに、Twitterの公式ウィジェットを使って最新のつぶやき3件を表示するようにしていたのだが、リツイートやリプライもお構いなしに表示してくれるので、誰にでもは見せたくないツイートもだだ漏れになってしまっていた。
 これじゃ流石にまずいよねと思って、リツイートやリプライを表示しない方法はないのか探してみた。
 いろいろ検索してみて最初に見つけたのが、「Elecnotes」のこの記事
 早速これでやってみたんだけど、これだと設定した件数(私の場合3件)の中に「@」を含むリツイートやリプライが入っていると飛ばされてしまうので、表示されるのが最悪の場合0件ということもあり得る。それは流石に美しくないので、なんとか3件表示されるようにJavaScriptの改変に取り組むことにした。
 最初のソースだと、設定回数分のツイートをチェックして「@」があれば条件分岐して書き出さないようにしていることはわかったので、「@」があった分だけチェック回数を増やしてやればいいだろうということで、for文追加したりいろいろやってみたけど、なかなかうまく行かない。
 2日ほど悩んだ挙げ句、先人の知恵を借りることにして再度検索かけてみて、ようやく見つけたのが「桜恋唄」のこの記事。同じような悩みを抱えている人がいたんだねぇ。
 このソース拝借してやってみたら、ばっちり!かと思いきや、リプライは除外されるけどリツイートはスルーされるんだ。
 それでは、っていうことで上の2つの合わせ技で下記のとおりのソースに変更して、twitter.jsという名前で変更して試してみたら、今度こそ思い通りにできた。


function twitterCallback2(twitters) {
var count = 3;
var statusHTML = [];
var cnt = 1;
for (var i=0; i var username = twitters[i].user.screen_name;
var status0 = twitters[i][''text''];
var user_name="@"+username;
if (status0.match(/\B@([_a-z0-9]+)/ig) && !status0.match(user_name)) continue;
if (cnt > count) break;
cnt++;
var status = status0.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;''">\:\s\<\>\)\]\!])/g,
function(url) {return ''<a href="''+url+''">''+url+''</a>'';}
);
statusHTML.push(''
  • ''+status+'' <a href="http://twitter.com/''+username+''/statuses/''+twitters[i].id+''">''+relative_time(twitters[i].created_at)+''
  • '');
    }
    document.getElementById(''twitter_update_list'').innerHTML = statusHTML.join('''');
    }

    function relative_time(time_value) {
    var values = time_value.split(" ");
    time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
    var parsed_date = Date.parse(time_value);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    delta = delta + (relative_to.getTimezoneOffset() * 60);

    if (delta < 60) {
    return ''1分以内'';
    } else if(delta < 120) {
    return ''約1分前'';
    } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + '' 分前'';
    } else if(delta < (120*60)) {
    return ''約1時間前'';
    } else if(delta < (24*60*60)) {
    return ''約'' + (parseInt(delta / 3600)).toString() + ''時間前'';
    } else if(delta < (48*60*60)) {
    return ''1日前'';
    } else {
    return (parseInt(delta / 86400)).toString() + ''日前'';rn }
    }

     前の職場のWebサイトでも、リプライで表示が消えてしまう現象に悩んでいたので、明日さっそく教えてあげなきゃ。

    【お詫び】
    2011.6.26掲載時点の上記ソースでは、@を含むツイートを全てスキップすることができていませんでした。
     また、一部の文字を実体参照に置換していたため、そのままコピペしても使えないソースになっていました。
     2011.6.28にソースは修正しましたが、ここに載せるために「<」の文字を2つだけ実体参照にしていますので、このままコピペしても使えないと思います。
     生のソースを見たい方は、https://hidice.sakura.ne.jp/xoops/twitter.js を直接参照してください。
    Translate »