/** * Find feed urls inside a HTML document * * @access public * @param string $url Website url * @param string $html HTML content * @return array List of feed links */ public function find($url, $html) { Logger::setMessage(get_called_class() . ': Try to discover subscriptions'); $dom = XmlParser::getHtmlDocument($html); $xpath = new DOMXPath($dom); $links = array(); $queries = array('//link[@type="application/rss+xml"]', '//link[@type="application/atom+xml"]'); foreach ($queries as $query) { $nodes = $xpath->query($query); foreach ($nodes as $node) { $link = $node->getAttribute('href'); if (!empty($link)) { $feedUrl = new Url($link); $siteUrl = new Url($url); $links[] = $feedUrl->getAbsoluteUrl($feedUrl->isRelativeUrl() ? $siteUrl->getBaseUrl() : ''); } } } Logger::setMessage(get_called_class() . ': ' . implode(', ', $links)); return $links; }
public function testAbsoluteUrl() { $url = new Url('http://google.fr/'); $this->assertEquals('http://google.fr/', $url->getAbsoluteUrl()); $url = new Url('http://google.ca'); $this->assertEquals('http://google.ca/', $url->getAbsoluteUrl()); $url = new Url('../bla'); $this->assertEquals('', $url->getAbsoluteUrl('')); $url = new Url('/2014/08/03/4668-noisettes'); $this->assertEquals('http://www.la-grange.net/2014/08/03/4668-noisettes', $url->getAbsoluteUrl('http://www.la-grange.net/')); $url = new Url('http://www.google.fr/../bla'); $this->assertEquals('http://www.google.fr/../bla', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('http://www.google.fr/'); $this->assertEquals('http://www.google.fr/', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('//www.google.fr/search'); $this->assertEquals('http://www.google.fr/search', $url->getAbsoluteUrl('//www.google.fr/')); $url = new Url('//www.google.fr/search'); $this->assertEquals('http://www.google.fr/search', $url->getAbsoluteUrl()); $url = new Url('/path'); $this->assertEquals('http://www.google.fr/path', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('/path#test'); $this->assertEquals('http://www.google.fr/path#test', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('anything'); $this->assertEquals('http://www.google.fr/anything', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('index.php?foo=bar&test=1'); $this->assertEquals('http://www.google.fr/index.php?foo=bar&test=1', $url->getAbsoluteUrl('http://www.google.fr/')); $url = new Url('index.php?foo=bar&test=1'); $this->assertEquals('', $url->getAbsoluteUrl()); $url = new Url('https://127.0.0.1:8000/here/test?v=3'); $this->assertEquals('https://127.0.0.1:8000/here/test?v=3', $url->getAbsoluteUrl()); $url = new Url('http://www.lofibucket.com/articles/oscilloscope_quake.html'); $this->assertEquals('http://www.lofibucket.com/articles/oscilloscope_quake.html', $url->getAbsoluteUrl()); $url = new Url('test?v=3'); $this->assertEquals('https://127.0.0.1:8000/here/test?v=3', $url->getAbsoluteUrl('https://127.0.0.1:8000/here/')); }