# frozen_string_literal: true module Onebox module Engine class HackernewsOnebox include Engine include LayoutSupport include JSON REGEX = /^https?:\/\/news\.ycombinator\.com\/item\?id=(?\d+)/ matches_regexp(REGEX) # This is their official API: https://blog.ycombinator.com/hacker-news-api/ def url "https://hacker-news.firebaseio.com/v0/item/#{match[:item_id]}.json" end private def match @match ||= @url.match(REGEX) end def data return nil unless %w{story comment}.include?(raw['type']) html_entities = HTMLEntities.new data = { link: @url, title: Onebox::Helpers.truncate(raw['title'], 80), favicon: 'https://news.ycombinator.com/y18.gif', timestamp: Time.at(raw['time']).strftime("%-l:%M %p - %-d %b %Y"), author: raw['by'] } data['description'] = html_entities.decode(Onebox::Helpers.truncate(raw['text'], 400)) if raw['text'] if raw['type'] == 'story' data['data_1'] = raw['score'] data['data_2'] = raw['descendants'] end data end end end end