跳转到主要内容

将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 &amp; Marketing Summit" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

选择要使用的插件

如果您不想所有插件都处于活动状态,您可以通过提供要使用的插件列表来选择您想要使用的插件,如下所示

import embeddify
plugins = [embeddify.YouTube(), embeddify.Vimeo()] # only video
embedder = Embedder(plugins = plugins)

创建您自己的插件

为了使用附加服务扩展功能,您可以创建自己的插件。根据服务以及它是否提供了oEmbed端点,您可以选择以下两个基类之一,即PluginOEmbedPlugin

使用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许可证下发布。

作者

embeddify由Christian ‘mrtopf’ Scholz,COM.lounge GmbH编写。

贡献者

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)

  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

embeddify-0.3.1.zip (18.1 kB 查看哈希值)

上传时间

构建分布

embeddify-0.3.1-py2.py3-none-any.whl (10.8 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持