如果您曾經留意過,就會知道 Twitter 是 Web 2.0 世界最大的轟動事件之一。簡單來說,Twitter(Twitter.com 上提供的一個服務)是一個簡單的微博客服務,用戶可以發最多 140 個字符的貼子(稱作 tweet),回答 “你現在在做什麼?” 之類的問題。用戶可以追隨他們感興趣的人,也有自己的追隨者。通過這種方式,可以將信息發布給追隨者或是廣泛地轉發。
隨意浏覽一下某個 Twitter 賬戶可以發現,用戶常常發布關於很多不同話題的 tweet,從日常生活(例如 “我在吃三明治”)到更不平凡的話題。其中常常嵌入了圖像、媒體文件和日志的鏈接。這些 URL 常常被 TinyURL 之類的服務縮短,主要是為了使貼子的總字符數不超過 140 個字符。
很多人喜歡上了 Twitter,使超短格式成了一種藝術形式,甚至將之用於與其他用戶交談(例如將他們的評論定向到 @user)。從這個簡單的起點開始,湧現了大量支持 Twitter 的移動應用程序和其他工具。現在甚至還有專門為最有趣、最卓越和最詳實的 tweet 而設置的獎項,另外還有跟蹤不同 Twitter 應用程序的狀態的在線應用程序。
很多其他站點和服務,例如 LinkedIn 和 Facebook 現在允許用戶用仿照 Twitter 的方式更新他們的當前狀態。換句話說,在 Facebook 更新狀態需要使用短消息,當然,狀態通常是回答 “你現在在干什麼” 之類的問題。
為您自己的站點添加微博客或狀態更新工具不需要做很多工作,但是卻可以為用戶帶來樂趣和簡單的交流方式。本文的目標是展示如何實現這個目的。但是,首先需要對您作一些假設。
首先,假設您對 PHP 和 MySQL 有所了解。同時假設您可以訪問某個運行 PHP 和 MySQL 的本地 apache Web 服務器。對於本文,我在使用 Macintosh、apache、MySQL 和 PHP(MAMP)的 MacBook Products 上進行開發,這個免費程序將整個開發環境打包到一個包中。但是,您應該能夠毫無困難地在 Microsoft® Windows® 或 Linux® 上進行開發。最後,假設您已經有一個可以立即運行的應用程序,該應用程序現在有一些用戶,您打算以某種方式將微博客或 tweeting 添加到該應用程序中。為此,我簡化應用程序中側重用戶的一些方面(例如登錄、管理個人文件等),而側重於貼子。
設計應用程序的後端
簡言之,Twitter 服務以兩個名詞為中心:用戶和消息。如果您已經構建了一個應用程序,並且希望將類似 Twitter 的服務添加到應用程序中,那麼很可能已經有了用戶管理功能。如果還沒有,那麼需要采用某種方式使用一個數據庫表(一個主鍵,通常是一個整數)、一個用戶名(也是惟一的)、一個電子郵件地址和密碼等標識每個用戶。
tweet(即貼子)存儲在一個 posts 表中,每個貼子有一個主鍵(某種連續整數)、一個指向發出該貼的用戶的外鍵關系、貼子本身(限制為一定數量的字符)和日期/時間戳。
最容易令人感到迷惑的是顯示用戶追隨關系的數據庫表。這裡需要某種方式記錄用戶 ID 和追隨者 ID,使應用程序能夠快速建立追隨者列表,並輕松地將信息轉發給那些已注冊為要追隨某用戶的其他用戶。
理解這些內容後,現在就可以著手建立這 3 個數據庫表。使用清單 1 中的 SQL 代碼創建第一個表,即 users 表(如果已經有一個 users 表,則可以跳過這一步)。
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`passWord` VARCHAR( 8 ) NOT NULL ,
`status` ENUM( 'active', 'inactive' ) NOT NULL
) ENGINE = MYISAM ;
下面是第二個表,即 posts 表。
CREATE TABLE `posts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`body` VARCHAR( 140 ) NOT NULL ,
`stamp` DATETIME NOT NULL
) ENGINE = MYISAM ;
清單 3 顯示了最後一個表,即 following 表。注意這個表有兩個主鍵。
CREATE TABLE `following` (
`user_id` INT NOT NULL ,
`follower_id` INT NOT NULL ,
PRIMARY KEY ( `user_id` , `follower_id` )
) ENGINE = MYISAM ;
然後,先創建一個名為 header.PHP 的文件,將所有用於 MySQL 的連接字符串放到該文件中。如果已經有一個這樣的文件,可以跳過這一步。請務必在各處都包括這個文件,因為將來需要用到它。清單 4 展示了這個文件的內容。
$SERVER = 'localhost';
$USER = 'username';
$PASS = 'passWord';
$DATABASE = 'microblogger';
if (!($mylink = MySQL_connect( $SERVER, $USER, $PASS))){
echo "<h3>Sorry, could not connect to database.</h3><br/>
Please contact your system's admin for more help\n";
exit;
}
MySQL_select_db( $DATABASE );
請記住,還可以隨意將任何其他類型的安全檢查添加到這個 header.PHP 文件中。例如,可以檢查一個會話變量中是否設置了一個用戶 ID(表明該用戶已經登錄)。如果用戶沒有登錄,那麼可以將用戶重定向到登錄頁面。本文不會深入討論這一點,不過需要時可以很容易地添加安全檢查。