rendered paste bodyExample Usage:
$url = "http://www.bknebel.blogspot.com";
$sp = new SimplePie();
$feeds = $sp->autodiscovery($url, false);
foreach($feeds as $feed) {
echo "{$feed['title']} {$feed['url']} <br/>";
}
That will show all local and external feeds.
$feeds = $sp->autodiscovery($url) would show only local feeds.
function autodiscovery($url, $local_only = true)
{
$feed_urls = array();
$spl = new SimplePie_Locator($url);
// Check to see if URL is already a feed ?
$spf = new SimplePie_File($url, 1, 5, null, $spl->useragent);
$spf->body();
$spf->close();
if (((stristr($spf->body(), '<rss') || preg_match('/<([a-z0-9]+\:)?RDF/mi', $spf->body())) && (preg_match('/<([a-z0-9]+\:)?channel/mi', $spf->body()) || preg_match('/<([a-z0-9]+\:)?item/mi', $spf->body()))) || (preg_match('/<([a-z0-9]+\:)?feed/mi', $spf->body()) && (preg_match('/<([a-z0-9]+\:)?author/mi', $spf->body()) || preg_match('/<([a-z0-9]+\:)?entry/mi', $spf->body()))))
{
$feed = new SimplePie();
$feed->strip_ads(false);
$feed->bypass_image_hotlink(false);
$feed->set_file($spf);
$feed->init();
$feeds[] = array( 'url' => $url, 'title' => $feed->get_feed_title());
return $feeds;
}
// Search for feeds in <link> elements
$links = SimplePie_Misc::get_element('link', $spl->file->body());
$done = array();
foreach ($links as $link)
{
if (!empty($link['attribs']['TYPE']['data']) && !empty($link['attribs']['HREF']['data']))
{
$type = strtolower(trim($link['attribs']['TYPE']['data']));
$href = SimplePie_Misc::absolutize_url(trim($link['attribs']['HREF']['data']), $spl->file->url);
if (!in_array($href, $done) && in_array($type, array('application/rss+xml', 'application/atom+xml', 'application/rdf+xml', 'application/xml+rss', 'application/xml+atom', 'application/xml+rdf', 'application/xml', 'application/x.atom+xml', 'text/xml')))
{
$feed_urls[] = $href;
}
$done[] = $href;
}
}
// Find links to feeds in <body>
$spl->useragent = $spl->file->useragent;
if ($spl->get_links($spl->file))
{
if (!empty($spl->local))
{
foreach ($spl->local as $key => $value)
{
$value = SimplePie_Misc::absolutize_url($value, $spl->file->url);
if (in_array(strrchr($value, '.'), array('.rss', '.rdf', '.atom', '.xml')))
{
$feed_urls[] = $value;
}
elseif (preg_match('/(rss|rdf|atom|xml)/i', $value))
{
$feed_urls[] = $value;
}
}
}
if (!empty($spl->elsewhere) && $local_only == false)
{
foreach ($spl->elsewhere as $key => $value)
{
$value = SimplePie_Misc::absolutize_url($value, $spl->file->url);
if (in_array(strrchr($value, '.'), array('.rss', '.rdf', '.atom', '.xml')))
{
$feed_urls[] = $value;
}
elseif (preg_match('/(rss|rdf|atom|xml)/i', $value))
{
$feed_urls[] = $value;
}
}
}
}
if(!empty($feed_urls))
{
foreach($feed_urls as $url)
{
$spf = new SimplePie_File($url, 1, 5, null, $spl->useragent);
$spf->body();
$spf->close();
if (((stristr($spf->body(), '<rss') || preg_match('/<([a-z0-9]+\:)?RDF/mi', $spf->body())) && (preg_match('/<([a-z0-9]+\:)?channel/mi', $spf->body()) || preg_match('/<([a-z0-9]+\:)?item/mi', $spf->body()))) || (preg_match('/<([a-z0-9]+\:)?feed/mi', $spf->body()) && (preg_match('/<([a-z0-9]+\:)?author/mi', $spf->body()) || preg_match('/<([a-z0-9]+\:)?entry/mi', $spf->body()))))
{
$feed = new SimplePie();
$feed->strip_ads(false);
$feed->bypass_image_hotlink(false);
$feed->set_file($spf);
$feed->init();
$feeds[] = array( 'url' => $url, 'title' => $feed->get_feed_title());
}
}
}
return $feeds;
}