33 lines
589 B
Ruby
33 lines
589 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Onebox
|
||
|
module Engine
|
||
|
class XkcdOnebox
|
||
|
include Engine
|
||
|
include LayoutSupport
|
||
|
include JSON
|
||
|
|
||
|
matches_regexp(/^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
|