用 Zend Framework 加速 twitter app (mashup) 開發

我不太喜歡 Zend Framework 提供的 MVC, 覺得有點太複雜, 不過 Zend Framework 真的是提供許多元件, 可以用來加速 PHP 的開發。 由於深感自己對 PHP 認識的不足, 所以開始研究 PHP 的功能, 而會寫這一篇主要是因為在研究 PHP 的 autoload, 所以拿了 Zend Framework 的元件來做實驗, 最熟悉的就是 Twitter 這個 Service 了, 所以來記錄一下。

Zend Framework 提供了以下的 Web Service library:

ZendServiceAkismet
ZendServiceAmazon
ZendServiceAudioscrobbler
ZendServiceDelicious
ZendServiceFlickr
ZendServiceNirvanix
ZendServiceReCaptcha
ZendServiceSimpy
ZendServiceSlideShare
ZendServiceStrikeIron
ZendServiceTechnorati
ZendServiceTwitter
ZendServiceYahoo

以下以 twitter 來當範例

  1. 首先要使用 Zend Framework, 就先取得 Zend Framework 解開後, 取得其 library 目錄即可。
  2. 接著設定 include path
  3. require Zend/Service/Twitter.php
  4. 接著就可以開始使用 Zend Framework 所提供的 Twitter Service library

程式碼如下

set_include_path(get_include_path() . PATH_SEPARATOR . 'library');<p>require 'Zend/Service/Twitter.php';</p><p>$twitter = new Zend_Service_Twitter('myusername', 'mysecretpassword');  
$response = $twitter->account->verifyCredentials();</p><p>echo $response->screen_name;
</p>```

基本上這樣就可以使用 Zend Framework 所提供的 Twitter library 了, 不過以上的範例並沒有用上 PHP5 所提供的 autoload, 所以當你另外要使用 Flickr library, 那麼就得另外 require Flickr 的 library, 然而使用 autoload 可以加快開發速度, 不用在去 care 哪個 class 沒 require 進來。

PHP5 提供的 autoload 是個很方便的東西, 而專為 PHP5 開發的 library 像是 Zend Framework 跟 Doctrine 都利用 PHP5 所提供的 autoload 來簡化開發的流程。 而通常這些 library 的目錄結構以及 class 名稱, 都符合某種的樣式, 適合透過 autoload 來載入需要的 class。

下面這裡修改上面的範例, 加上 autoload 的部份。

setincludepath(getincludepath().PATHSEPARATOR.'library');

function _autoload($name){
$name = strreplace('', '/', $name) . '.php'; require $name; }

$twitter = new ZendServiceTwitter('myusername', 'mysecretpassword'); $response = $twitter->account->verifyCredentials();

echo $response->screen_name;

```

加上 function __autoload 之後, 你就不需要另外 require 檔案進來, 要用哪個 library, 直接 new 就好了。

另外, 翻了一下 Zend Framework 的 code,  _autoload 的部份, 其實可以用 splautoloadregister 這個函示, 來新增 ZendLoader 提供的 autoload, 如下:

require 'library/Zend/Loader.php';  
spl_autoload_register(array('Zend_Loader', 'autoload'));```

ok, 接著你就可以參考 Zend Framework 的 [Reference Guide](http://framework.zend.com/manual/en/) 來看看他 [twitter 的文件](http://framework.zend.com/manual/en/zend.service.twitter.html), 有提供哪些函數可供使用。

像是取得 friendTimeline

$twitter = new ZendServiceTwitter('myusername', 'mysecretpassword'); $friendsTimeline = $twitter->status->friendsTimeline();

foreach ($friendsTimeline as $tweet) { echo $tweet->user->screen_name . ': '. $tweet->text; echo ''; }

```

或是更新你的訊息

$twitter = new Zend_Service_Twitter('myusername', 'mysecretpassword');
$response = $twitter->status->update('Zend Framework 提供的 Web Service library  還是不錯啦!');

又或者是取得 followers

$twitter = new Zend_Service_Twitter('myusername', 'mysecretpassword');
$response = $twitter->user->followers();

更多說明就到 ZF 的 Reference Guide 看吧!

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!