歡迎您光臨本站 註冊首頁

在 PHP 內創建一個 Atom 提要

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
Atom 是一種可擴展標記語言(Extensible Markup Language,XML)規範,用於識別 Web 站點內所包含的信息。使用 Atom,Web 開發人員就可以生成提要 以使其他的 Web 開發人員(或使用提要閱讀器的客戶)能夠快速定位和查看遠端站點上他們感興趣的信息。我們也可以將 Atom 看作是一種 Web 站點的索引,可供任何想要的人使用。PHP 是大多數主機提供商都願意選用的一種流行語言,使用 PHP,Web 開發人員可以輕鬆生成一個 Atom 提要,並隨後將其提供給各種提要閱讀器和其他的 Web 開發人員。最終得到一種妙不可言的信息解決方案,以使 Web 內容可為更多的大眾所享。

何為 Atom?

常用縮略詞
  • HTML:超文本標記語言(Hypertext Markup Language)
  • RSS:真正簡單的聚合(Really Simple Syndication)
  • SQL:結構化查詢語言(Structured Query Language)
  • URL:統一資源定位符(Uniform Resource Locator)
  • XHTML:可擴展超文本標記語言(Extensible Hypertext Markup Language)
  • XML:可擴展標記語言(Extensible Markup Language)

Atom,正如這裡所使用的這樣,指的是一種 XML 語言,它能夠讓 Web 發布者聚合其 Web 站點的內容以提供給各種用戶。使用 Atom,發布者就能夠創建一種標準格式的 Web 提要。這種提要能夠讓用戶通過一種稱為提要閱讀器 的軟體閱讀 Web 站點的內容。它還使其他的 Web 開發人員能夠在其各自的 Web 站點上發布該提要的內容。

Atom 並非目前在用的惟一一種聚合標準。RSS 是早於 Atom 的另外一種標準格式(也使用 XML)。實際上,Atom 就是為了解決 RSS 中的某些限制而創建的。

結果,Atom 規範反倒包含了大量超出 RSS 的優勢。Atom 提供了一種定義所提供數據的格式的方式 — 比如,HTML、XHTML 等 — 而 RSS 則沒有。與 RSS 不同,Atom 通過 xml:lang attribute 能夠支持全球化。而且,依據 Request for Comments (RFC) 3339,Atom 還接受更為先進(且標準)的數據格式化,這與 RSS 的 RFC 822 完全不同。




為何 PHP 要與 Atom 聯合使用呢?

PHP 代表的是 PHP: Hypertext Processor(超文本處理器)。它可能是英語中惟一一個在展開后仍然包含原始縮寫詞的縮寫詞。PHP 最初的意義代表的是 Personal Home Page(個人主頁)。

PHP 是一種腳本語言,可生成動態的伺服器端內容。它能與 HTML 協調工作,並且 PHP 代碼也經常會嵌入在標準 HTML Web 頁面內以幫助實現動態內容。

PHP 還能與資料庫管理系統 MySQL 很好地協作。經過這些年的 Web 開發,這兩種技術也在不斷發展變化,並已經在無數場合併肩合作過。大部分歸功於一個無法否認的基本原理:二者都是免費的。

本節開始部分的問題可以這樣回答,PHP 為開發人員提供了以一種易讀和易開發的形式生成動態內容的靈活性。動態內容從 MySQL 資料庫檢索得來。輸出頁面(提要)用 PHP 編寫以便它能呈現符合 Atom 規範的 XML 輸出。

請注意,本文假設您已經熟悉 MySQL 和 PHP 的基礎知識。如果不是這樣,可參見本文 參考資料 部分的介紹性教程。

定義業務用例:垂釣報告

您的老闆現在在您的辦公室。他非常欣賞公司網站(fishinhole.com)的運行方式。站點目前向專業的釣魚者推廣和銷售各種釣具。該站點還提供了一個垂釣報告論壇,以供這些熱衷於此的專業釣魚者分享其垂釣經歷。

您的老闆在您的辦公室拿了把椅子徑自坐下,然後抱怨說公司網站的關注度還有待提高。他想利用頁面的垂釣報告部分來將更多 的專業釣魚者吸引到網站中來。他希望您將網站的這個部分做成世界範圍的專業垂釣報告的 “一站式商店”。這對於 fishinhole.com 站點的成功非常關鍵(如他所說)。您的老闆啜了一口咖啡,笑了笑,然後走出了您的辦公室,沒說什麼其他的。

您向後依靠在椅子上,開始思考:有什麼能讓垂釣報告論壇獲得更廣泛的關注呢?過了一會,一個念頭閃入您的腦海:聚合!與其簡單地將垂釣報告部分供 fishinhole.com 的用戶和顧客所用,還不如聚合此論壇以便人們可以用各自的提要閱讀器閱讀垂釣報告的梗概。其他的 Web 開發人員還可以在其 Web 頁面上包含這個聚合提要。在任何情況下,人們都可單擊感興趣的報告標題,被鏈接回 fishinhole.com,在這個網站上再讓他們接觸到一連串的漁具的直接營銷。這真是個好主意。

資料庫設計

遠在您的老闆步入您的辦公室之前,垂釣報告論壇的資料庫就已設計好了。此 Web 頁面的垂釣報告部分已經存在。只不過還未被聚合。

那麼,需要對此資料庫做些什麼更改,才能聚合其內容呢?不需要!這就是聚合最好的一面。在很多情況下,我們都可以聚合文章,而又無需更改其底層的模式或數據模型。這是因為,在大多數情況下,我們都將聚合文章,而文章幾乎總是會具有 Atom 規範所要求的信息。

清單 1 給出了 fishinhole.com 的垂釣報告部分目前所採用的資料庫模型。它還包含了一些 INSERT 以便您能擁有測試數據。


清單 1. 具有 INSERT 的 REPORTS 表結構
				  CREATE TABLE IF NOT EXISTS `reports` (    `ID` bigint(20) NOT NULL auto_increment,    `AUTHOR` varchar(32) NOT NULL,    `TITLE` varchar(64) NOT NULL,    `SUBTITLE` varchar(128) NOT NULL,    `CONTENT` varchar(2000) NOT NULL,    `POSTED` datetime NOT NULL,    PRIMARY KEY  (`id`)  ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;      INSERT INTO `reports` (`id`, `author`, `title`, `subtitle`, `content`, `posted`) VALUES  (1, 'BigRed', 'Spanish Bite Looking Good!', 'Near the Cape!',   'Trolled for 3 hours and limited out on Spanish Macks!  Watch out for the shallows   near green can #4.', '2009-05-03 04:54:33'),  (2, 'JonBoy', 'Big Rock Report', 'Spring has sprung',   'Caught several blackfins and mahi just outside of the Big Rock on Saturday.    We were using flourescent squid teasers with ballyhoo for hookups.    One Mahi weighed over 50#!', '2009-05-03 04:56:06'),  (3, 'Erasmus', 'Drum in the backwaters', 'The bite was hot!',   'Loaded up against the marsh grass, boys.  Go get em.  I was using gulp   with 1/4 ounce jigheads.', '2009-05-03 04:57:19'),  (4, 'ReelHooked', 'Speckled Trout In Old River', 'Limited out by noon',   'They were schooling heavy in Old River.  They would eat anything we would   throw at them.  Most were undersized, but we managed to keep some   and had our fill by midday.', '2009-05-03 04:59:00');  

若您希望對本文中給出的這些代碼進行實際的測試,可以先創建一個名為 fishinhole 的 MySQL 資料庫並在該資料庫內執行 清單 1 中的代碼。

第一列(ID)是此表的主鍵。請注意,它使用了 auto_increment 規範以便每當一個新行被插入到此表中,ID 欄都會被前一行的 ID 列的增量填充。這一點非常類似於 Oracle 表中的序列。

AUTHOR 列指定發布此垂釣報告的人的用戶名。這是用戶的顯示名,而非用戶真實的名和姓(除非該用戶的真實姓名就是其實際的顯示名)。

TITLE 列是文章的標題。類似地,SUBTITLE 是文章的副題,並在該 Atom 提要內被用於文章的梗概。

CONTENT 列才是實際的垂釣報告本身。由於這裡所生成的這個 Atom 提要只包括整篇文章的一個梗概(因而會吸引用戶單擊鏈接來訪問網站),而內容本身並不顯示在這個 Atom 提要內。

最後,POSTED 列是一個 DATETIME 列,存儲了文章發布到網站的日期。

為了保持簡單,我只提供了幾篇文章(4)。在真實的情形下,有可能會有來自不同作者的數千篇這樣的文章。

開始工作

資料庫設計完畢后,就可以開始編寫 PHP 頁面,讓它生成 Atom 提要。本文將會帶您體驗創建一個簡單 Atom 提要的全過程,並使用 PHP 進行測試。

請注意,如果想要測試代碼,您需要訪問一個 PHP 處理器。很多託管解決方案都提供這樣的訪問。不過,您有可能已經能夠從本地訪問一個 PHP 處理器。若想知道如何在 Web 環境下執行 PHP 文檔,可以諮詢相關的系統管理員或技術人員。

在 PHP 內訪問資料庫

創建一個新的 PHP 文件,稱為 syndication.php。代碼將會放置於此。

正如之前所提到的,PHP 和 MySQL 具有豐富的友好合作經歷。有人甚至戲稱二者像是聯姻了似的。本文無意對這類判斷做任何評論。

清單 2 提供了一個基本的代碼片段,藉此,就能訪問用 清單 1 中的代碼所創建的這個 MySQL 資料庫。


清單 2. 用 PHP 訪問這個 MySQL 資料庫
				  $link = mysql_connect('localhost', 'admin', 'password')      or die('Could not connect: ' . mysql_error());    mysql_select_db('fishinhole') or die('Could not select database');    $query = 'SELECT id,title,subtitle,author,posted        FROM reports order by posted desc limit 25';  ;  $result = mysql_query($query)        or die('Query failed: ' . mysql_error());  

該代碼實際上涵蓋的內容頗豐,所以很有必要對其進行逐步剖析。

首先是 mysql_connect() 函數。您需要針對自己環境的指標相應更改這些參數。第一個參數是資料庫主機。在某些情況下,它將非常類似於 清單 2(即 localhost)。在另外一些情況下,它將是一個遠端主機(例如,IP 地址 10.92.2.1)。若具備 Domain Name System (DNS) 解析,它還可能是另外一個實際的主機名(比如 mysql.myhost.com)。

第二個參數是將要訪問該資料庫的 MySQL 用戶名。您可以使用如示的 admin,但是必須要確保它是 MySQL 環境內的一個有效帳戶。參照 MySQL 文檔以了解如何為一個 MySQL 資料庫創建帳戶。請記住,這裡所使用的帳戶必須 具有對 REPORTS 資料庫的讀許可權。

第三個參數是用戶的密碼。它需要與第二個參數內所指定用戶的密碼相匹配。

or die 子句被包括進來以便在系統故障時為開發人員提供診斷信息。如果無法連接到資料庫管理系統,那麼在執行 PHP 腳本時,您將會收到一個消息,指出連接失敗及失敗的原因。


[火星人 ] 在 PHP 內創建一個 Atom 提要已經有710次圍觀

http://coctec.com/docs/linux/show-post-68735.html