/** * undocumented function * * @param string $url * @return array * @link http://www.oexchange.org/spec/#discovery-page */ public static function page($url) { $htmlDocument = new DOMDocument(); $loaded = @$htmlDocument->loadHTML(self::_retrieve($url)); if (!$loaded) { throw new OExchange_Exception("Failed to load {$url}"); } $xpath = new DOMXpath($htmlDocument); $expression = "/html/head/link[@rel='" . self::OEXCHANGE_RELATED_TARGET_REL . "']"; $links = $xpath->query($expression); $targets = array(); foreach ($links as $link) { $serviceXRD = XRD_Document::fromString(self::_retrieve($link->getAttribute('href'))); $targets[] = OExchange_Target::fromXRD($serviceXRD); } return $targets; }
/** * undocumented function * * @param XRD_Document $xrd * @return OExchange_Service */ public static function fromXRD(XRD_Document $xrd) { $service = new OExchange_Target(); $service->subject = $xrd->subject; $iconLink = $xrd->firstLinkByRel('icon'); $service->icon = $iconLink->href; $service->iconType = $iconLink->type; $icon32Link = $xrd->firstLinkByRel('icon32'); $service->icon32 = $icon32Link->href; $service->icon32Type = $icon32Link->type; $offerLink = $xrd->firstLinkByRel(self::OEXCHANGE_OFFER_REL); $service->offer = $offerLink->href; $service->offerType = $offerLink->type; $propertyMap = array('title' => self::OEXCHANGE_TITLE_PROPERTY_TYPE, 'vendor' => self::OEXCHANGE_VENDOR_PROPERTY_TYPE, 'name' => self::OEXCHANGE_NAME_PROPERTY_TYPE, 'prompt' => self::OEXCHANGE_PROMPT_PROPERTY_TYPE); foreach ($propertyMap as $propertyName => $propertyType) { $service->{$propertyName} = $xrd->firstPropertyByType($propertyType)->value; } return $service; }