履歴もしくは日誌
2008 年 1 月の履歴(もしくは日誌)
2008 年 1 月
1 月 18 日
Twitter の Badge に @ による自分宛の書き込みも表示
Twitter の Badge を使うと,自分の Web サイトに自分の最後の書き込みを表示できます.その Badge に手を加えて誰かが @onohiroki って書いたときにも表示できるようにしてみました.Badge は「Weblog / 履歴もしくは日誌」のページ右上に貼ってます.
Twitter では自分の Web サイトに Twitter の内容を表示する為の Badge を配布しています.
ここの HTML / JavaScript の Badge に手を加えました.
HTML はこんな感じ:
<div id="twitter-badge"> <ul id="twitter_update_list"> <li>What I am doing:</li> <li>http://twitter.com/onohiroki/</li> </ul> </div> <script type="text/javascript" src="twitter-badge.js"></script> <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/onohiroki.json?callback=twitterCallbackMe&count=1"></script> <script type="text/javascript" src="http://twitter.com/statuses/friends_timeline/onohiroki.json?callback=twitterCallbackWithFriends&count=10"></script>
上の HTML 内で,script 要素が 3 つあるけど,最後の一行はページの最後の方に書いた方が良さそうです.
JavaScript は http://twitter.com/javascripts/blogger.js を改変して,こんな感じ:
// original http://twitter.com/javascripts/blogger.js
// 2008-01-17 onohiroki.cycling.jp
var numOfItem = 0;
var twitterCallbackMeHTML = "";
function twitterCallbackWithFriends(obj) {
var twitters = obj;
var username = "";
var statusHTML = "";
for (var i=0; i<twitters.length; i++){
username = twitters[i].user.screen_name;
var smalltext = "";
if (twitters[i].text.indexOf("http") > -1) {
smalltext = ' class="withUrlTwitter" ';
}
if (username == 'onohiroki') {
numOfItem++;
statusHTML += ('<li class="me"><span'+smalltext+'>'+twitters[i].text+'</span> <a style="font-size:85%" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'">'+relative_time(twitters[i].created_at)+'<br /><span class="friend">by '+twitters[i].user.screen_name+'</span></a></li>')
}
else if (twitters[i].text.indexOf("@onohioki ") > -1){
statusHTML += ('<li class="friend"><span'+smalltext+'>'+twitters[i].text+'</span> <a style="font-size:85%" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'">'+relative_time(twitters[i].created_at)+'<br /><span class="friend">by '+twitters[i].user.screen_name+'</span></a></li>')
}
}
if (numOfItem < 1) {
statusHTML += twitterCallbackMeHTML;
}
document.getElementById('twitter_update_list').innerHTML = statusHTML;
}
function twitterCallbackMe(obj){
var twitters = obj;
var statusHTML = "";
var username = "";
for (var i=0; i<twitters.length; i++){
username = twitters[i].user.screen_name;
var smalltext = "";
if (twitters[i].text.indexOf("http") > -1) {
smalltext = ' class="withUrlTwitter" ';
}
statusHTML += ('<li class="me"><span'+smalltext+'>'+twitters[i].text+'</span> <a style="font-size:85%" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'">'+relative_time(twitters[i].created_at)+'<br /><span class="friend">by '+twitters[i].user.screen_name+'</span></a></li>')
}
document.getElementById('twitter_update_list').innerHTML = statusHTML;
twitterCallbackMeHTML = statusHTML;
}
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 'less than a minute ago';
} else if(delta < 120) {
return 'about a minute ago';
} else if(delta < (60*60)) {
return (parseInt(delta / 60)).toString() + ' minutes ago';
} else if(delta < (120*60)) {
return 'about an hour ago';
} else if(delta < (24*60*60)) {
return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
} else if(delta < (48*60*60)) {
return '1 day ago';
} else {
return (parseInt(delta / 86400)).toString() + ' days ago';
}
}
friends_timeline からデータを引っ張って来て,自分の screen_name が使われてる投稿だけ表示.もし friends_timeline に自分の発言が無かった場合は user_timeline から持って来た最新の投稿を表示します.
ぼくは JavaScript って良く知りません.これを書くのにも Web で調べながらでした.
Permalink Trackback URI http://onohiroki.cycling.jp/tb/tb.cgi/weblog_d20080118n1 TrackBack