Кажется, что вы перебираете $html
для создания массива статей, а затем перебираете эти добавления в фид - вы можете пропустить весь цикл, добавляя элементы в фид по мере их обнаружения. Для этого вам нужно переместить ваш FeedWriter
contstructor немного вверх в потоке выполнения.
Я бы также добавил пару методов, чтобы помочь с удобочитаемостью, что может помочь в сопровождении в долгосрочной перспективе. Инкапсуляция создания канала, изменения элемента и т. Д. Облегчит задачу, если вам когда-либо понадобится подключить другой класс провайдера для канала, изменить правила синтаксического анализа и т. Д. В приведенном ниже коде можно внести дополнительные улучшения (html_entity_decode
на отдельной строке из $item['title']
назначение и т. д.), но вы получите общее представление.
В чем проблема с html_entity_decode
? У вас есть образец ввода / вывода?
<?php
// This is a minimum example of using the class
include("FeedWriter.php");
include('simple_html_dom.php');
// Create new instance of a feed
$TestFeed = create_new_feed();
$html = file_get_html('http://www.website.com');
// Loop through html pulling feed items out
foreach($html->find('td[width="380"] p table') as $article)
{
// Get a parsed item
$item = get_item_from_article($article);
// Get the item formatted for feed
$formatted_item = create_feed_item($TestFeed, $item);
//Now add the feed item
$TestFeed->addItem($formatted_item);
}
//OK. Everything is done. Now generate the feed.
$TestFeed->generateFeed();
// HELPER FUNCTIONS
/**
* Create new feed - encapsulated in method here to allow
* for change in feed class etc
*/
function create_new_feed()
{
//Creating an instance of FeedWriter class.
$TestFeed = new FeedWriter(RSS2);
//Use wrapper functions for common channel elements
$TestFeed->setTitle('Testing & Checking the RSS writer class');
$TestFeed->setLink('http://www.ajaxray.com/projects/rss');
$TestFeed->setDescription('This is test of creating a RSS 2.0 feed Universal Feed Writer');
//Image title and link must match with the 'title' and 'link' channel elements for valid RSS 2.0
$TestFeed->setImage('Testing the RSS writer class','http://www.ajaxray.com/projects/rss','http://www.rightbrainsolution.com/images/logo.gif');
return $TestFeed;
}
/**
* Take in html article segment, and convert to usable $item
*/
function get_item_from_article($article)
{
$item['title'] = $article->find('span.title', 0)->innertext;
$item['title'] = html_entity_decode($item['title'], ENT_NOQUOTES, 'UTF-8');
$item['description'] = $article->find('.ingress', 0)->innertext;
$item['link'] = $article->find('.lesMer', 0)->href;
$item['pubDate'] = $article->find('span.presseDato', 0)->plaintext;
return $item;
}
/**
* Given an $item with feed data, create a
* feed item
*/
function create_feed_item($TestFeed, $item)
{
//Create an empty FeedItem
$newItem = $TestFeed->createNewItem();
//Add elements to the feed item
$newItem->setTitle($item['title']);
$newItem->setLink($item['link']);
$newItem->setDate($item['pubDate']);
$newItem->setDescription($item['description']);
return $newItem;
}
?>