1

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 で入手できます。

ページを更新せずに毎秒変更可能にする方法は?

4

2 に答える 2

1

いくつかの書かれていない関数を想定すると、次のようになります。

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);
    });
};
于 2012-12-04T21:09:58.727 に答える
0

毎秒 API を呼び出すことはありません。

代わりに、Facebook サーバーの時刻を最初に 1 回だけ取得します。次に、javascript を使用してループすることで、毎秒時間の値を増やします。

setTimeout(function() { /* increment time */ }, 1000);

Bergi:[{"anon":1354654854}]unix timeです。実際、Facebook はしばしば (常に?) この表現を使用して時間を処理します。

于 2012-12-04T20:49:05.453 に答える