2011-12-21 68 views
3

我目前要求對每個頁面加載一個Twitter的飼料(我知道這是不對的)這樣的正確方法:Twitter的請求 -

json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}")); 

即使最小流量,微博停止前長送我的要求。所以在爲我的客戶啓動網站之後 - 我看到永久不可用的Twitter提要。

我想象這個工作的方式是檢查feed - 將它存儲在一個帶有時間戳的表中,並選擇一個間隔 - (比如10分鐘)。在每個頁面加載中,檢查時間戳,如果時間間隔沒有超過,請從表中提取訂閱源,而不是Twitter。

我知道這可行,但鑑於我最後的錯誤是如此愚蠢,我想確保沒有另一種更好的做法。

這次我是否有權利?

回答

4

這聽起來完全正確。三個注意事項:

  1. 把日期/時間在一列,並要在其他列中顯示Twitter的飼料,那麼你可以做一個選擇該行,並用它做。

  2. 將呈現的HTML存儲在數據庫中,而不是從Twitter返回的JSON。然後,您只需每十分鐘完成一次轉換,而不是每次請求頁面。

  3. 在數據庫或所有服務器上做所有時間比較,不要混淆兩者 - 我遇到了服務器超時問題,導致我很頭疼。也就是說,不要使用「INSERT ... CURTIME()...」調用,然後將它與PHP生成的日期進行比較。我的建議是生成一個PHP日期和存儲,因爲SQL中的時間比較可能會非常棘手。

+0

你說得很好。非常感謝,尤其是比較時間 - 我從來沒有想到這一點。有沒有簡單的方法比較數據庫中的時間?我打算讓列默認爲當前時間戳。 – drewwyatt 2011-12-21 03:18:02

+1

簡短的回答,沒有。我將存儲PHP時間()的返回值,而不用擔心數據庫時間函數。這個值是以秒爲單位的,所以在你檢索時間戳後,你可以比較一下'if(time()>($ timestamp +(10 * 60)))...' – 2011-12-21 03:24:28

+1

如果你在做很多事情使用日期列類型,然後使用'strtotime()'轉換爲unix時間戳可能也是處理日期的好方法。不要過多交換是個好主意。還要注意,如果你需要它,你在MySQL中有'FROM_UNIXTIME()'。 PHP也有'mktime()',它給了你'time()'的同樣的東西,而新版本的PHP有''DateTime'](http://us3.php.net/manual/en/book .datetime.php)對象。 – 2011-12-21 03:29:46

1

緩存不可能改變的I/O數據總是很聰明的。最佳方式取決於您獲得的流量,以及您需要的數據流量。