|
|
- <?php
- namespace 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];
- }
-
- }
|