|                                                                              |  | <?phpnamespace XRay\Formats;
use DOMDocument, DOMXPath;use DateTime, DateTimeZone;use Parse, Config;
class XKCD {
  public static function parse($html, $url) {    list($doc, $xpath) = self::_loadHTML($html);
    if(!$doc)      return self::_unknown();
    $entry = [      'type' => 'entry',      'url' => $url,      'author' => [        'type' => 'card',        'name' => 'XKCD',        'photo' => Config::$base.'/images/xkcd.png',        'url' => 'https://xkcd.com/'      ]    ];
    $name = $doc->getElementById('ctitle');
    if(!$name)      return self::_unknown();        $entry['name'] = $name->nodeValue;
    $photo = $xpath->query("//div[@id='comic']/img");    if($photo->length != 1)      return self::_unknown();
    $photo = $photo->item(0);    $img1 = $photo->getAttribute('src');    $img2 = $photo->getAttribute('srcset');    if($img2) {      $img2 = explode(',', $img2)[0];      if(preg_match('/([^ ]+)/', $img2, $match)) {        $img2 = $match[1];      }    }
    $src = \Mf2\resolveUrl($url, $img2 ?: $img1);
    $entry['photo'] = [$src];
    $response = [      'data' => $entry    ];
    return $response;  }
  private static function _unknown() {    return [      'data' => [        'type' => 'unknown'      ]    ];  }
  private static function _loadHTML($html) {    $doc = new DOMDocument();    @$doc->loadHTML($html);
    if(!$doc) {      return [null, null];    }
    $xpath = new DOMXPath($doc);
    return [$doc, $xpath];  }
}
 |