2009-06-04 163 views
6

客戶希望我使用PHP內置的自定義解決方案將他們的Twitter流添加到他們的網站主頁。通過PHP使用Twitter API的最佳方式是什麼?

Twitter API顯然每小時可以撥打的電話數量有限,所以每當有人刷新我客戶的主頁時,我都無法自動ping通Twitter。

客戶端的網站目前純粹是HTML,所以有沒有數據庫可用。因此,我的解決方案只需要PHP和本地文件系統(例如保存一個本地XML文件,其中包含一些數據)。

因此,考慮到這個有限的標準,在幾分鐘內沒有觸及我的API調用限制的情況下,通過PHP訪問Twitter API的最佳方式是什麼?

+0

只是爲了澄清:我不是要別人寫我! :) 自從我做了任何PHP以來,這已經很長時間了,所以我正在努力加快解決這個非常特殊問題的最佳實踐。 非常感謝任何見解或建議。 – markedup 2009-06-04 11:42:48

回答

3

這將是很容易的,一旦你可以拉下一個時間表,並顯示它,再加入一些基於文件的緩存它。

check age of cache 
Is it more than 5 mins old? 
    fetch the latest information 
    regenerate the HTML for output 
    save the finished HTML to disk 
display the cached pre-prepared HTML 

PEAR's Cache_Lite將在緩存層上完成所有需要的操作。

0
  1. cron作業(不likley - 如果連有沒有一個數據庫,那麼有沒有cron作業)
  2. microtime()到一個文件中。在頁面視圖上比較當前時間戳和保存的時間戳。它的差異大於N分鐘,拉動新的tweetfeed並將當前時間戳寫入文件
  3. 如果首頁是一個靜態的html文件沒有調用任何PHP,包括一個圖像<img src="scheduler.php"/>,返回一個1px透明gif(在至少你做了這樣我年輕的時候),並做你的Twitter拉默默

或你的意思是當地 - 本地文件系統,如「我/客戶計算機不是服務器」 -local?

在這種情況下

  1. 得到一些服務器使用cron作業或調度和PHP
  2. 編寫一個腳本,讀取並保存進到一個文件
  3. 將文件寫入到客戶服務器使用FTP
  4. 顯示使用JavaScript的飼料(是的,ajax也適用於靜態文件作爲數據源)。 jQuery的或一些LIB是爲這個偉大的
  5. 或:本地創建的鳴叫,顯示HTML文件並上傳它(但要小心......因爲你可能會覆蓋服務器上更新)

IMO:對於小無論如何,你通常不需要完全成長的sql數據庫。文件系統非常棒。 scandir,preg_match和仔細選擇的文件名的組合通常是足夠好的。
,你實際上可以做很多前端處理(如顯示XML)使用美麗的JavaScript。

0

由於我們不知道你的服務器配置,我建議你設置一個cron作業(假設你在一個Linux機器上)。如果你在共享主機環境中擁有類似cPanel的東西,那麼它應該不是什麼大問題。您需要編寫一個由cron調用的腳本,它將獲取最新的推文並將它們寫入文件(xml?)。您可以安排cron每30分鐘運行一次。或者你想要什麼。

0

您可能想使用Tim Davies的TweetPHP。 http://lab.lostpixel.net/classes/twitter/ - 這門課有很多功能,包括你想要的功能,向你的客戶展示時間線。 該頁面顯示瞭如何使用它的很好的例子。

然後,您可以將其輸出放在文件或數據庫中。如果您希望網站訪問者每5分鐘更新一次數據庫或文件,則可以設置一個持有時間戳的會話變量,並在時間戳至少5分鐘前允許另一次更新。

希望這有助於

0

我的建議:創建一個小的簡單對象來保存緩存日期和一組推文。每次有人訪問該頁面時,它都會執行以下邏輯:

A)文件是否存在?

是:讀入一個變量 否:進至步驟d)

B)反序列化變量(PHP的一對序列化()/反序列化()將做就好)

C)比較存儲的緩存時間和當前時間(Unix時間戳會做到這一點) 它相互之間超過5分鐘:

D)從Twitter獲取最新的推文,更新對象,序列化並寫入再次緩存。存儲最新的推文用於打印。它不是:只要讀取緩存中的推文即可。

E)打印鳴叫

簡單和序列化對象最簡單的方法是序列化()/反序列化()對。如果你不想放棄創建對象的努力,你可以使用2D數組,serialize()將工作得很好。看看http://php.net/serialize

考慮到你沒有cPanel訪問,它是最好的解決方案,因爲你將無法訪問PEAR包,cron或任何其他更簡單的解決方案。

0
array(
'lastrequest' => 123, 
'tweets' => array() 
) 

現在在你的代碼放在一個檢查,看看是否在數據存儲中的時間戳lastrequest比X秒老了。如果是時候更新你的數據。

序列化和存儲在一個文件中的數組,很簡單

相關問題