45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
#
|
|
|
|
module Jobs
|
|
class GatherOEmbedData < Base
|
|
@queue = :http_service
|
|
|
|
class GatherOEmbedRenderer < Redcarpet::Render::HTML
|
|
include ActionView::Helpers::TextHelper
|
|
include ActionView::Helpers::TagHelper
|
|
|
|
def isHttp?(url)
|
|
URI.parse(url).scheme.downcase == 'http'
|
|
end
|
|
|
|
def autolink(link, type)
|
|
url = auto_link(link, :link => :urls).scan(/href=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/).first.first
|
|
url = CGI::unescapeHTML(url)
|
|
|
|
return url if OEmbedCache.exists?(:url => url) or not isHttp?(url)
|
|
|
|
begin
|
|
res = ::OEmbed::Providers.get(url, {:maxwidth => 420, :maxheight => 420, :frame => 1, :iframe => 1})
|
|
rescue Exception => e
|
|
# noop
|
|
else
|
|
data = res.fields
|
|
data['trusted_endpoint_url'] = res.provider.endpoint
|
|
cache = OEmbedCache.new(:url => url, :data => data)
|
|
cache.save
|
|
end
|
|
|
|
return url
|
|
end
|
|
end
|
|
|
|
def self.perform(text)
|
|
renderer = GatherOEmbedRenderer.new({})
|
|
markdown = Redcarpet::Markdown.new(renderer, {:autolink => true})
|
|
message = markdown.render(text)
|
|
end
|
|
end
|
|
end
|