This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot/plugins/tumblr.lua

125 lines
3.3 KiB
Lua

do
local api_key = cred_data.tumblr_api_key
local makeOurDate = function(dateString)
local pattern = "(%d+)%-(%d+)%-(%d+)"
local year, month, day = dateString:match(pattern)
if month == "00" then
return year
elseif day == "00" then
return month..'.'..year
else
return day..'.'..month..'.'..year
end
end
local function get_tumblr_text(data)
local title = data.posts[1].title
local post = unescape(data.posts[1].body)
return title, post
end
local function get_tumblr_photo(data)
local caption = data.posts[1].summary
local image_url = data.posts[1].photos[1].original_size.url
return caption, image_url
end
local function get_tumblr_video(data)
local caption = data.posts[1].caption
local video_url = data.posts[1].video_url
return caption, video_url
end
local function get_tumblr_info(blog, post, receiver)
local url = 'https://api.tumblr.com/v2/blog/'..blog..'.tumblr.com/posts?id='..post..'&api_key='..api_key..'&filter=text'
local res,code = https.request(url)
local data = json:decode(res).response
if code ~= 200 then return "HTTP-Fehler" end
if not data.posts then return "HTTP-Fehler" end
-- General blog info, present on every type
local blog_name = data.blog.title
local created_at = makeOurDate(data.posts[1].date)
local short_url = data.posts[1].short_url
local typ = data.posts[1].type
local text = blog_name..' am '..created_at..':\n'
-- type-specific
if typ == 'text' then
local title, post = get_tumblr_text(data)
text = text..title..'\n'..post..'\n'..short_url
elseif typ == 'photo' then
local caption, image_url = get_tumblr_photo(data)
text = text..caption..'\n'..short_url
local file = download_to_file(image_url)
local cb_extra = {file_path=file}
if string.ends(image_url, '.gif') then
send_document(receiver, file, rmtmp_cb, cb_extra)
else
send_photo(receiver, file, rmtmp_cb, cb_extra)
end
elseif typ == 'video' then
local caption, video_url = get_tumblr_video(data)
text = text..caption..'\n'..video_url..'\n'..short_url
else
text = text..'Konnte Format nicht bestimmen (ist: '..typ..')'
end
return text
end
local function get_tumblr_blog(blog, receiver)
local url = 'https://api.tumblr.com/v2/blog/'..blog..'.tumblr.com/info?api_key='..api_key
local res,code = https.request(url)
local data = json:decode(res).response.blog
if code ~= 200 then return "HTTP-Fehler" end
if not data then return "HTTP-Fehler" end
local title = data.title
if data.description == "" then
description = ''
else
description = '\n'..data.description
end
if data.posts == 1 then
posts = data.posts..' Post'
else
posts = data.posts..' Posts'
end
if data.likes then
likes = ', '..data.likes..' Likes'
else
likes = ''
end
local text = title..description..'\n\n'..posts..likes..'\n'
return text
end
local function run(msg, matches)
local blog = matches[1]
local post = matches[2]
local receiver = get_receiver(msg)
if not post then
return get_tumblr_blog(blog, receiver)
else
return get_tumblr_info(blog, post, receiver)
end
end
return {
description = "Sendet Infos zu einem tumblr-Post oder -Blog",
usage = "Link zu tumblr-Post oder -Blog",
patterns = {
"^https?://(.*).tumblr.com/post/(%d+)",
"^https?://(.*).tumblr.com/image/(%d+)",
"^https?://(.*).tumblr.com/?$"
},
run = run
}
end