28 lines
540 B
Ruby
28 lines
540 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Onebox
|
|
module Engine
|
|
class XkcdOnebox
|
|
include Engine
|
|
include LayoutSupport
|
|
include JSON
|
|
|
|
matches_regexp(%r{^https?://(www\.)?(m\.)?xkcd\.com/\d+})
|
|
|
|
def url
|
|
"https://xkcd.com/#{match[:comic_id]}/info.0.json"
|
|
end
|
|
|
|
private
|
|
|
|
def match
|
|
@match ||= @url.match(%{xkcd\.com/(?<comic_id>\\d+)})
|
|
end
|
|
|
|
def data
|
|
{ link: @url, title: raw["safe_title"], image: raw["img"], description: raw["alt"] }
|
|
end
|
|
end
|
|
end
|
|
end
|