http = $http; } public function parse($url, $opts=[]) { if(isset($opts['timeout'])) $this->http->set_timeout($opts['timeout']); if(isset($opts['max_redirects'])) $this->http->set_max_redirects($opts['max_redirects']); $scheme = parse_url($url, PHP_URL_SCHEME); if(!in_array($scheme, ['http','https'])) { return [ 'error' => 'invalid_url', 'error_description' => 'Only http and https URLs are supported' ]; } $host = parse_url($url, PHP_URL_HOST); if(!$host) { return [ 'error' => 'invalid_url', 'error_description' => 'The URL provided was not valid' ]; } $url = normalize_url($url); $result = $this->http->get($url); $html = $result['body']; $mf2 = \mf2\Parse($html, $result['url']); $rels = $result['rels']; if(isset($mf2['rels'])) { $rels = array_merge($rels, $mf2['rels']); } // Resolve all relative URLs foreach($rels as $rel=>$values) { foreach($values as $i=>$value) { $value = \mf2\resolveUrl($result['url'], $value); $rels[$rel][$i] = $value; } } if(count($rels) == 0) $rels = new \StdClass; return [ 'url' => $result['url'], 'code' => $result['code'], 'rels' => $rels ]; } }