首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 建立 RSS 閱讀器:解析 XML、資料庫快取與多格式輸出實作

     編輯:PHP 綜合知識

RSS 結構基礎

<rss>
  <channel>
    <item>
      <title>...</title>
      <link>...</link>
      <description>...</description>
    </item>
    ...
  </channel>
</rss>

核心標籤:<title>、<link>、<description>

解析策略

  1. 使用 simplexml_load_file() 或 DOMDocument 載入 RSS
  2. XPath 定位 //channel/item 節點集合
  3. 迴圈提取三欄位,建立陣列/物件

核心解析函數

<?php
function parseRSS($url) {
    $xml = simplexml_load_file($url);
    if (!$xml) return false;
    
    $items = array();
    foreach ($xml->xpath('//channel/item') as $item) {
        $items[] = array(
            'title' => (string)$item->title,
            'link'  => (string)$item->link,
            'desc'  => (string)$item->description,
            'date'  => isset($item->pubDate) ? strtotime($item->pubDate) : time()
        );
    }
    return $items;
}
?>

資料庫快取機制(離線可用、減少請求)

CREATE TABLE rss_cache (
    id INT AUTO_INCREMENT PRIMARY KEY,
    feed_url VARCHAR(255) NOT NULL,
    title VARCHAR(255),
    link TEXT,
    description TEXT,
    pub_date DATETIME,
    fetched_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_feed_link (feed_url, link(100))
);
<?php
function fetchAndCache($feedUrl, $pdo) {
    $items = parseRSS($feedUrl);
    if (!$items) return false;
    
    $stmt = $pdo->prepare("INSERT IGNORE INTO rss_cache (feed_url,title,link,description,pub_date) VALUES (?,?,?,?,?)");
    foreach ($items as $it) {
        $stmt->execute([$feedUrl, $it['title'], $it['link'], $it['desc'], date('Y-m-d H:i:s', $it['date'])]);
    }
    return true;
}

// 讀取快取顯示
$stmt = $pdo->query("SELECT * FROM rss_cache WHERE feed_url='$feedUrl' ORDER BY pub_date DESC LIMIT 20");
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

容錯與降級策略

  • 遠端 RSS 無法存取 → 直接讀取本地快取顯示舊資料
  • 解析失敗 → 記錄錯誤日誌,不中斷頁面渲染
  • 定時任務(cron)每小時更新快取,前端無感知

輸出格式擴充

  • HTML 列表(預設)
  • JSON API:header('Content-Type: application/json'); echo json_encode($items);
  • JavaScript 回調:callback(json_encode($items)) 支援 JSONP
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved