I’m trying to parse out an RSS feed for images. My original code grabbed the title, description, link, and pubDate just fine. I read a tutorial online on how to get the images out as well, but now that I’ve updated my pull it gives me the errror:
Fatal error: Call to a member function getAttribute() on a non-object in /home/ode/public_html/dev/
Here was my original code:
<?php $rss = new DOMDocument(); $rss->load('http://feeds.feedburner.com/feedburner/Dvzy?format=xml'); $feed = array(); //FOR EACH ITEM RETURN RSS foreach ($rss->getElementsByTagName('item') as $node) { $img = $rss->getElementsByTagName('img')->item(0)->getAttribute('src'); $item = array( 'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue, 'image' => $img, ); array_push($feed, $item); } echo '<pre>'; var_dump($feed); echo '</pre>';
I was able to fix the issue by tweaking the code below:
<?php error_reporting(E_ALL); echo '<meta charset="utf-8" />'; echo '<pre>'; $url = 'http://feeds.feedburner.com/feedburner/Dvzy?format=xml'; $xml = file_get_contents($url); $xml = str_replace('<content:encoded>', '<content_encoded>', $xml); $xml = str_replace('</content:encoded>', '</content_encoded>', $xml); $obj = SimpleXML_Load_String($xml, 'SimpleXMLElement', LIBXML_NOCDATA); // ACTIVATE THIS TO SEE THE XML // echo htmlentities($xml); // ACTIVATE THIS TO SEE THE OBJECT // var_dump($obj); // COLLECT INFORMATION HERE $feed = []; // A REGEX THAT FINDS IMAGE TAGS SRC ATTRIBUTE $rgx = '~' // REGEX DELIMITER . 'src="' // SRC INSIDE IMAGE TAG . '(' // START CAPTURE GROUP . '[^"]*' // ANYTHING UP TO END . ')' // ENDOF CAPTURE GROUP . '"' // END OF SRC ATTRIBUTE . '~' // REGEX DELIMITER . 'i' // FLAG: CASE INSENSITIVE . 's' // FLAG: SINGLE LINE ; foreach ($obj->channel->item as $item) { $node['title'] = (string)$item->title; $node['desc'] = (string)$item->description; $node['link'] = (string)$item->link; $node['date'] = (string)$item->pubDate; $content = $item->content_encoded; preg_match_all($rgx, $content, $match); $node['image'] = $match[0][0]; $feed[] = $node; } var_dump($feed);
<?php
//require 'db_connection.php';
error_reporting(E_ALL);
echo '’;
echo ”;
$url = ‘https://tamil.oneindia.com/rss/tamil-news-fb.xml’;
$xml = file_get_contents($url);
$xml = str_replace(”, ”, $xml);
$xml = str_replace(”, ”, $xml);
$obj = SimpleXML_Load_String($xml, ‘SimpleXMLElement’, LIBXML_NOCDATA);
// ACTIVATE THIS TO SEE THE XML
// echo htmlentities($xml);
// ACTIVATE THIS TO SEE THE OBJECT
// var_dump($obj);
// COLLECT INFORMATION HERE
$feed = [];
// A REGEX THAT FINDS IMAGE TAGS SRC ATTRIBUTE
$rgx
= ‘~’ // REGEX DELIMITER
. ‘src=”‘ // SRC INSIDE IMAGE TAG
. ‘(‘ // START CAPTURE GROUP
. ‘[^”]*’ // ANYTHING UP TO END
. ‘)’ // ENDOF CAPTURE GROUP
. ‘”‘ // END OF SRC ATTRIBUTE
. ‘~’ // REGEX DELIMITER
. ‘i’ // FLAG: CASE INSENSITIVE
. ‘s’ // FLAG: SINGLE LINE
;
foreach ($obj->channel->item as $item)
{
$node[‘title’] = (string)$item->title;
$node[‘desc’] = (string)$item->description;
$node[‘link’] = (string)$item->link;
$node[‘date’] = (string)$item->pubDate;
$node[‘image’] = (string)$item->enclosure;
echo $node[‘title’];
echo “”;
echo $node[‘desc’];
echo “”;
echo $node[‘link’];
echo “”;
echo $node[‘date’];
echo “”;
echo $node[‘image’];
$title = $node[‘title’];
$description = $node[‘desc’];
$link = $node[‘link’];
$pubdate = $node[‘date’];
$image = $node[‘image’];
if (isset($item->enclosure)) {
echo $item->enclosure[‘url’].”;
}
$sql = ‘INSERT INTO `test`(title, link, description) VALUES(“‘.$node[‘title’].'”, “‘.$node[‘desc’].'”, “‘.$node[‘link’].'”)’;
if(!mysqli_query($dblink, $sql)) {
echo ‘ERROR!‘;
}else{
echo ‘Its okay‘;
}
//$content = $item->content_encoded;
//preg_match_all($rgx, $content, $match);
//$node[‘image’] = $match[0][0];
//$feed[] = $node;
}
var_dump($feed);
?>
Please help and suggest me insert data into Mysql.