将URL转换为嵌入代码
项目描述
将链接转换为嵌入代码。对于任何接受用户输入的系统,它可以通过不允许任何直接iframe标签,同时使用户能够更容易地添加丰富内容并使平台更安全。
用法
以下是一个快速示例
>>> from embeddify import Embedder >>> embedder = Embedder() >>> embedder("https://www.youtube.com/watch?v=2wii8hfNkzE") <iframe width="560" height="315" src="http://www.youtube.com/embed/2wii8hfNkzE?feature=oembed" frameborder="0" allowfullscreen></iframe>
目前适用于
youtube.com(插件名称:youtube)
vimeo.com(插件名称:vimeo)
flickr.com(插件名称:flickr)
slideshare.net(插件名称:slideshare)
facebook.com视频(插件名称:facebookvideos)
如果结果是一个OEmbedMarkup实例,可以通过结果的data属性访问原始OEmbed数据。
>>> result = embedder("https://www.youtube.com/watch?v=2wii8hfNkzE") >>> isinstance(result, embedder.OEmbedMarkup) True >>> result.data['thumbnail_url'] https://i.ytimg.com/vi/2wii8hfNkzE/hqdefault.jpg
如果无法转换链接,则将返回链接。
配置
您可以通过指定宽度高度来配置嵌入工具。这将被作为最大宽度和高度传递给服务的oEmbed端点,因此生成的对象可能更小。
您可以通过这种方式为所有嵌入插件进行通用配置
embedder = Embedder(width=100, height=100)
您也可以根据插件名称逐个配置,如下所示
plugin_config = { 'youtube': {'width' : 200}, 'slideshare': {'width' : 500}, } embedder = Embedder(plugin_config = plugin_config)
特定插件的配置会覆盖通用配置。
您还可以逐个调用传递参数,如下所示
embedder = Embedder() embedder("https://www.youtube.com/watch?v=2wii8hfNkzE", width=200)
自动播放
一些提供商支持自动播放。您可以使用自动播放设置使用它
embedder = Embedder(autoplay=True)
通常YouTube不会支持此设置,但YouTube插件通过重写返回的HTML代码来处理它。如果YouTube更改了HTML代码,这可能会导致损坏。
附加参数
一些OEmbed提供商允许附加参数。例如Vimeo允许自动播放
>>> embedder('https://player.vimeo.com/video/6791752', params=dict(autoplay=True)) <iframe src="https://player.vimeo.com/video/6791752?autoplay=1" width="420" height="315" frameborder="0" title="Intro Presentation for the Open Platforms Panel at the Community & Marketing Summit" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
选择要使用的插件
如果您不想所有插件都处于活动状态,您可以通过提供要使用的插件列表来选择您想要使用的插件,如下所示
import embeddify plugins = [embeddify.YouTube(), embeddify.Vimeo()] # only video embedder = Embedder(plugins = plugins)
创建您自己的插件
为了使用附加服务扩展功能,您可以创建自己的插件。根据服务以及它是否提供了oEmbed端点,您可以选择以下两个基类之一,即Plugin或OEmbedPlugin。
使用oEmbed端点
为了为启用了oEmbed的服务编写插件,您需要知道它的端点。例如YouTube实现看起来像这样
from embeddify import OEmbedPlugin class YouTube(OEmbedPlugin): """converts youtube links into embeds """ api_url = "http://www.youtube.com/oembed" def test(self, parts): """test if the plugin is able to convert that link""" return "youtube.com" in parts.netloc
因此,您只需要输入端点URL和一个test()方法。这个方法接收urlparse.urlparse()调用的结果作为输入,并通常简单地检查netloc属性是否为正确的域名。如果它返回False,则尝试下一个插件,如果返回True,则调用端点,如果调用成功,则返回嵌入代码。否则再次尝试下一个插件。
使用纯插件
如果没有oEmbed端点可用或您想创建一个不包含外部调用的插件,您可以像这样从Plugin类派生
from embeddify import Plugin class ExamplePlugin(Plugin): default = { 'width' : 200, 'height' : 300, } def __call__(self, parts, config = {}): if "example.org" in parts.netloc: return """<iframe src="something" width="%(width)s"></iframe>""" %config['width'] return None
您再次接收到urlparse.urlparse()的结果,以及一个config字典。然后您必须测试您的插件是否知道这个服务,如果是,则返回一个包含嵌入代码的字符串。如果您的插件不负责或发生其他错误,则简单地返回None。然后尝试下一个插件。
为了接受配置,只需在类中创建一个default字典。这将被复制到您的配置中,并更新为插件特定配置和逐个调用配置,然后作为config参数传递。因此,您不需要对其进行任何修改,只需确保您提供一些默认值。
许可证
此软件包在BSD许可证下发布。
贡献者
Florian Schulze (fschulze)
源代码
源代码可以在github上找到。
变更日志
0.3.1 (2017-08-28)
修复Python 2.7中标记的unicode问题[fschulze]
0.3.0 (2017-07-31)
支持自动播放设置并在YouTube插件中添加一个解决方案[fschulze]
允许通过params关键字发送附加参数[fschulze]
不要让使用关键字调用Embedder覆盖插件配置[fschulze]
如果结果来自OEmbed插件,则可以通过结果对象的data属性访问原始OEmbed数据字典[fschulze]
Python 3.x兼容性[fschulze]
0.2.0 (2016-11-21)
支持 youtu.be 链接 [fschulze]
支持 facebook.com 视频链接 [fschulze]
所有服务使用 https 端点 [fschulze]
将 flickr oembed 改为返回一个链接图片,而不是仅仅返回图片。 [mrtopf]
为 flickr 图片添加了类 flickr-embed-img 以便更好地进行样式设计 [mrtopf]
将插件中的 __call__() 方法拆分为两个方法,do_request() 用于执行实际请求,而 __call__() 将执行实际处理 [mrtopf]
0.1.1 (2016-10-27)
修复测试和打包
0.1.0.2 (2014-03-30)
修复了测试
0.1.0.1 (2013-06-20)
初始发布
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。