<?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');
							 | 
						|
								    $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];
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								}
							 |