簡體   English   中英

使用PHP解析RSS源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM