Facebookサーバーと同期した変更可能な時計を自分のサイトに表示しようとしています。fb サーバー時間は、 https ://api.facebook.com/method/fql.query?query=SELECT+now%28%29+FROM+link_stat+WHERE+url+%3D+%271.2%27&format=json で入手できます。
ページを更新せずに毎秒変更可能にする方法は?
Facebookサーバーと同期した変更可能な時計を自分のサイトに表示しようとしています。fb サーバー時間は、 https ://api.facebook.com/method/fql.query?query=SELECT+now%28%29+FROM+link_stat+WHERE+url+%3D+%271.2%27&format=json で入手できます。
ページを更新せずに毎秒変更可能にする方法は?
いくつかの書かれていない関数を想定すると、次のようになります。
var requestBegin = Date.now();
getServertimeFromFacebook(function callback(fbTime) {
var requestEnd = Date.now();
var latency = (requestEnd - requestBegin) / 2;
var curDevicetime = Date.now(); // = requestEnd, of course
var difference = fbTime - latency - curDeviceTime;
function clock() {
var cur = Date.now();
var curFbTime = cur + difference;
show(curFbTime); // print, log, whatever
};
setInterval(clock, …); // you could use a self-adjusting clock
// by using a setTimeout for each tick
});
あなたができる
show = function(t) { console.log(new Date(t).toString()); };
getServertimeFromFacebook = function(cb) {
ajax("https://api.facebook.com/method/fql.query?query=SELECT+now%28%29+FROM+link_stat+WHERE+url+%3D+%271.2%27&format=json", function(responsetext) {
var obj = JSON.parse(responsetext);
var ts = obj[0].anon,
tms = ts * 1000;
cb(tms);
});
};
毎秒 API を呼び出すことはありません。
代わりに、Facebook サーバーの時刻を最初に 1 回だけ取得します。次に、javascript を使用してループすることで、毎秒時間の値を増やします。
setTimeout(function() { /* increment time */ }, 1000);
Bergi:[{"anon":1354654854}]
はunix timeです。実際、Facebook はしばしば (常に?) この表現を使用して時間を処理します。