68 lines
2.1 KiB
Lua
68 lines
2.1 KiB
Lua
|
local golem = {}
|
||
|
|
||
|
local http = require('socket.http')
|
||
|
local json = require('dkjson')
|
||
|
local utilities = require('miku.utilities')
|
||
|
local bindings = require('miku.bindings')
|
||
|
|
||
|
function golem:init(config)
|
||
|
if not cred_data.golem_apikey then
|
||
|
print('Missing config value: golem_apikey.')
|
||
|
print('golem.lua will not be enabled.')
|
||
|
return
|
||
|
end
|
||
|
|
||
|
golem.triggers = {
|
||
|
"golem.de/news/([A-Za-z0-9-_-]+)-(%d+).html"
|
||
|
}
|
||
|
end
|
||
|
|
||
|
local BASE_URL = 'http://api.golem.de/api'
|
||
|
|
||
|
function golem:get_golem_data (article_identifier)
|
||
|
local apikey = cred_data.golem_apikey
|
||
|
local url = BASE_URL..'/article/meta/'..article_identifier..'/?key='..apikey..'&format=json'
|
||
|
local res,code = http.request(url)
|
||
|
if code ~= 200 then return "HTTP-FEHLER" end
|
||
|
local data = json.decode(res).data
|
||
|
|
||
|
local url = BASE_URL..'/article/images/'..article_identifier..'/?key='..apikey..'&format=json'
|
||
|
local res,code = http.request(url)
|
||
|
if code ~= 200 then return "HTTP-FEHLER" end
|
||
|
local image_data = json.decode(res).data
|
||
|
return data, image_data
|
||
|
end
|
||
|
|
||
|
function golem:send_golem_data(data, image_data)
|
||
|
local headline = '*'..data.headline..'*'
|
||
|
if data.subheadline ~= "" then
|
||
|
subheadline = '\n_'..data.subheadline..'_'
|
||
|
else
|
||
|
subheadline = ""
|
||
|
end
|
||
|
local subheadline = data.subheadline
|
||
|
local abstracttext = data.abstracttext
|
||
|
local text = headline..subheadline..'\n'..abstracttext
|
||
|
if image_data[1] then
|
||
|
image_url = image_data[1].native.url
|
||
|
else
|
||
|
image_url = data.leadimg.url
|
||
|
end
|
||
|
return text, image_url
|
||
|
end
|
||
|
|
||
|
function golem:action(msg, config, matches)
|
||
|
local article_identifier = matches[2]
|
||
|
local data, image_data = golem:get_golem_data(article_identifier)
|
||
|
if not data and not image_data then utilities.send_reply(self, msg, config.errors.connection) return end
|
||
|
local text, image_url = golem:send_golem_data(data, image_data)
|
||
|
|
||
|
if image_url then
|
||
|
utilities.send_typing(self, msg.chat.id, 'upload_photo')
|
||
|
local file = download_to_file(image_url)
|
||
|
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
|
||
|
end
|
||
|
utilities.send_reply(self, msg, text, true)
|
||
|
end
|
||
|
|
||
|
return golem
|