|                                                                                    |  | <?phpnamespace p3k\XRay\Formats;
use DateTime, DateTimeZone;use Config;use cebe\markdown\GithubMarkdown;
class Hackernews extends Format {
  public static function matches_host($url) {    $host = parse_url($url, PHP_URL_HOST);    return $host == 'news.ycombinator.com';  }
  public static function matches($url) {    if(preg_match('~https?://news\.ycombinator\.com/item\?id=(\d+)$~', $url, $match))      return $match;    else      return false;  }
  public static function fetch($http, $url, $opts) {    $match = self::matches($url);
    $response = $http->get('https://hacker-news.firebaseio.com/v0/item/'.$match[1].'.json');    if($response['code'] != 200) {      return [        'error' => 'hackernews_error',        'error_description' => $response['body'],        'code' => $response['code'],      ];    }
    return [      'url' => $url,      'body' => $response['body'],      'code' => $response['code'],    ];  }
  public static function parse($json, $url) {    $data = @json_decode($json, true);
    if(!$data)      return self::_unknown();
    $match = self::matches($url);
    $date = DateTime::createFromFormat('U', $data['time']);
    // Start building the h-entry
    $entry = array(      'type' => 'entry',      'url' => $url,      'author' => [        'type' => 'card',        'name' => $data['by'],        'photo' => null,        'url' => 'https://news.ycombinator.com/user?id='.$data['by']      ],      'published' => $date->format('c')    );
    if(isset($data['title'])) {      $entry['name'] = $data['title'];    }
    if(isset($data['text'])) {      $htmlContent = trim(self::sanitizeHTML($data['text']));      $textContent = str_replace('<p>', "\n<p>", $htmlContent);      $textContent = strip_tags($textContent);      $entry['content'] = [        'html' => $htmlContent,        'text' => $textContent      ];    }
    if(isset($data['parent'])) {      $entry['in-reply-to'] = ['https://news.ycombinator.com/item?id='.$data['parent']];    }
    return [      'data' => $entry,      'original' => $json    ];  }
}
 |