/** * Given the URL of a website, returns a single linked array containing the URL and title of a feed * (whether Microformats or RSS / Atom). The function will attempt to discover RSS and Atom feeds in * the page if this is an HTML site. Returns false if there is no feed. * @param $url * @return array|false */ function getFeedDetails($url) { if (!filter_var($url, FILTER_VALIDATE_URL)) { return false; } $client = new Webservice(); if ($result = $client->get($url)) { $feed = array(); if (!empty($result['content'])) { $feed['webmention'] = Webmention::supportsMentions($url, $result['content']); if ($html = @\DOMDocument::loadHTML($result['content'])) { $xpath = new \DOMXpath($html); $title = $xpath->query('//title')->item(0)->nodeValue; if ($xpath->query("//*[contains(concat(' ', @class, ' '), ' h-entry ')]")->length > 0) { $feed['type'] = 'mf2'; $feed['url'] = $url; if (!empty($title)) { $feed['title'] = $title; } return $feed; } if ($rss_url = $this->findXMLFeedURL($html)) { $feed['type'] = 'xml'; $feed['url'] = $rss_url; if (!empty($title)) { $feed['title'] = $title; } return $feed; } } if ($xml = @simplexml_load_string($result['content'])) { if (!empty($xml->rss->channel->item) || !empty($xml->feed) || !empty($xml->channel->item)) { $feed['type'] = 'xml'; $feed['url'] = $url; if (!empty($xml->rss->channel->title)) { $feed['title'] = $xml->rss->channel->title; } else { if (!empty($xml->channel->title)) { $feed['title'] = $xml->channel->title; } else { if (!empty($xml->title)) { $feed['title'] = $xml->title; } } } return $feed; } } } } return false; }