[英]Parsing RSS Feeds with PHP
我需要匯總來自大約500個URL的RSS內容,而我正在嘗試從這些URL的內容中獲取內容/內存耗盡錯誤(我正在嘗試使用SimplePie庫)。
有沒有方法/想法從批量來源快速提取內容?
我每次如何獲得新鮮內容?
<?php
require_once('include/simplepie.inc');
$urlList = array('http://site1.com/index.rss',
'http://site1.com/index.rss',
'http://site2.com/index.rss',
'http://site3.com/index.rss',
'http://site500.com/index.rss',
);
$feed = new SimplePie();
$feed->set_feed_url($urlList);
$feed->init();
$feed->handle_content_type();
?>
HTML部分
<?php
foreach($feed->get_items() as $item):
?>
<div class="item">
<h2><a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a></h2>
<p><?php echo $item->get_description(); ?></p>
<p><small>Posted on <?php echo $item->get_date('j F Y | g:i a'); ?></small></p>
</div>
<?php endforeach; ?>
我覺得你做錯了。 如果要解析許多源,則無法通過將通過Web服務器調用的腳本執行此操作。
如果你真的想要進行輪詢,你必須通過說cron運行該腳本,然后“保存”由另一個PHP腳本(可以由HTTP服務器調用)提供服務的結果。
但是,您仍然需要處理輪詢的許多固有限制:99%的情況下,您將沒有新內容,從而浪費您的CPU,帶寬和您輪詢的服務器。 您還必須處理死信號,無效信號,速率限制等...
實現PubSubHubbub協議。 它將有助於已實現它的提要,因此您只需等待將推送給您的數據。
對於其他提要,您可以自己進行輪詢,就像您一樣,並嘗試找到一種方法來避免個別錯誤(不是有效的XML,死主機等等)或者真的在像Superfeedr這樣的服務上(我創建了它) )。
我對SimplePie的體驗是它不是很好或很強大。 請嘗試使用simplexml_import_dom()
。
有沒有方法/想法從批量來源快速提取內容?
試圖同步輪詢所有500個網址會給系統帶來很大的壓力。 這可以通過並行運行傳輸來緩解(使用curl_multi_ *函數 - 但我在這里使用的SimplePie版本不會將這些用於多次傳輸)。 假設對復合訂閱源的請求量很大,那么最好的解決方案是運行調度程序,在當前內容設置為過期(應用合理的最小值)然后合並來自服務器的訂閱源時將訂閱源下載到服務器存儲的數據。 請注意,如果采用這種方法,您需要實現一些聰明的信號量或使用DBMS來存儲數據 - PHP的文件鎖定語義不是很復雜。
增加php.ini中的memory_limit = xxM
或使用ini_set("memory_limit","xxM")
,其中xx
是新的內存限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.