2013-02-05 51 views
0

我有一個應用程序使用來自多個應用程序APIS(Facebook,Twitter,Instagram等)的數據,從PHP的REST端點訪問它們。虛榮URL + REST +網頁爬蟲

我正在爲我的應用程序用戶構建一個虛榮URL,例如http://www.myapp.com/username

如果我有一個數據庫,我可以從數據庫中獲取用戶數據以顯示在用戶頁面中。

使用REST服務,每當我進入URL時,都會調用API從主網站獲取信息。

的問題越來越大,因爲該應用程序會從搜索引擎爬蟲獲得大量流量的(我不會降低爬行速度)

1問題:由於API提供每機會有限(2000查詢小時),有一種方法可以跳過api調用(例如,使用memcache)?

第二個問題:我想做一個虛榮URL,所以每次我打電話http://www.myapp.com/username我必須調用API獲取用戶名和用戶名,我想知道這是否是正確的方法來做到這一點,大多數網站通過url重寫來實現,但如何在有外部數據而不是內部數據庫時處理它?

感謝您的閱讀,需要任何幫助!

回答

0

關於使用memcache,您將遇到的大問題是驗證和過期緩存數據。

比方說,你實現它是這樣的:

function getSomeData() { 
    if (Memcache::has('key-for-data')) { 
     return Memcache::get('key-for-data'); 
    } else { 
     $data = RestApi::getData(); 
     Memcache::put('key-for-data', $data); 
     return $data; 
    } 
} 

這似乎不夠好,但那麼懂事,如果REST API通過任何其他方式訪問會發生什麼? (就像另一個第三方應用程序將數據發佈到相同的API)。然後,緩存的數據可能無效,您不會知道它。

從您的應用程序的角度來看,底層數據存儲的更改是完全隨機的,而且完全不透明且不可知,因此它不是一個好的緩存目標。

另一方面,如果數據更新(即訂閱服務)時可以從服務中獲得某種「推送」通知,則可以將其用作觸發器以使相關緩存條目無效。然而,這是額外的複雜性,需要在兩端支持。

抱歉,這不是一個真正的答案,但它是一個局部的答案,這是太長:-)

0

評論嘗試使用某種框架。它應該使路由更簡單。

url重寫會發生vi .htaccess,因此用戶永遠不會看到URL的重寫。我能想到的

的兩種方法:

  1. 重寫在.htaccess這樣,你的所有定義的路線保持不變,並在所有其他情況下(即http://www.example.com/username)用戶控制器方法注入在用戶名和網址之間。

  2. 定義路線,以便處理所有已知的路線,並且有defualt路線照顧搞清楚用戶ID並做所有必要的事情。

對於緩存使用memcache/redis來緩存查詢/用戶對象/任何其他頻繁訪問的內容。

+0

我使用codeigniter,實際上問題是關於我不希望爬行程序洪水我的令牌與調用。太多的頁面被抓取,然後我達到我的最大API調用 – dpi

+0

幫我理解。您是否正在使用某些服務將網址通話次數限制爲每小時2000次?否則每小時2000個查詢是不現實的。 – kapad

+0

是的,我需要在每個頁面上查詢,問題在於谷歌爬蟲,加載頁面超過了最大限制。問題是如果有一種方法在不減緩抓取速度的情況下不發生這種情況 – dpi