All pastes #156079 Raw Edit

Mine

public text v1 · immutable
#156079 ·published 2006-08-31 15:38 UTC
rendered paste body
    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;
    }