YouTube为Django CMS支持的站点嵌入插件,提供自定义视频缩略图、分析、搜索引擎优化等选项。

djangocms-youtube的Python项目详细描述


http://img.shields.io/travis/mishbahr/djangocms-youtube.svg?style=flat-squareLatest VersionDownloadsLicensehttp://img.shields.io/coveralls/mishbahr/djangocms-youtube.svg?style=flat-square

YouTube为Django CMS支持的站点嵌入插件,提供自定义视频缩略图、分析、搜索引擎优化等选项。

快速启动

  1. 安装djangocms-youtube

    pip install djangocms-youtube
    
  2. djangocms_youtube添加到INSTALLED_APPS

    INSTALLED_APPS = (
        ...
        'djangocms_youtube',
        ...
    )
    
  3. 同步数据库(如果使用的是django 1.6.x,则需要south>=1.0.1):

    python manage.py migrate
    
  4. 插件需要服务器api密钥才能使用youtube数据api:

    DJANGOCMS_YOUTUBE_API_KEY = '<youtube_data_api_server_key>'
    

您可以通过https://developers.google.com/youtube/registering_an_application注册应用程序

功能

减少页面加载时间

当你使用标准iframe标签在你的网站上嵌入任何youtube视频时,你会惊讶地发现youtube视频会给你的页面增加多少额外的权重。这些资源(css、图片和javascript)将被下载,即使你网站上的访问者选择不观看嵌入的youtube视频。

http://mishbahr.github.io/assets/djangocms-youtube/thumbnail/djangocms-youtube-004.png

djangocms youtube使用了一个聪明的解决方法来减少最初加载youtube视频播放器所需的时间。它没有嵌入完整的youtube视频播放器,而是只显示视频的缩略图,并在视频上方放置一个“播放”图标,使其看起来像视频播放器。

http://mishbahr.github.io/assets/djangocms-youtube/thumbnail/djangocms-youtube-001.png

当用户点击播放按钮时,视频缩略图将替换为标准的YouTube视频播放器。因此,只有当用户决定播放嵌入式视频而不是其他视频时,才会加载额外的资源。

注意:移动设备需要两次点击才能播放视频。轻触图像一次即可将其移除并显示视频播放器。然后,点击播放按钮开始播放视频。

高分辨率缩略图

使用django-filer从YouTube获取给定视频的最高分辨率缩略图,并提供自定义视频缩略图的选项。

{
  "default": {
    "url": "https://i.ytimg.com/vi/9bZkp7q19f0/default.jpg",
    "width": 120,
    "height": 90
  },
  "high": {
    "url": "https://i.ytimg.com/vi/9bZkp7q19f0/hqdefault.jpg",
    "width": 480,
    "height": 360
  },
  "medium": {
    "url": "https://i.ytimg.com/vi/9bZkp7q19f0/mqdefault.jpg",
    "width": 320,
    "height": 180
  },
  "maxres": {
    "url": "https://i.ytimg.com/vi/9bZkp7q19f0/maxresdefault.jpg",
    "width": 1280,
    "height": 720
  },
  "standard": {
    "url": "https://i.ytimg.com/vi/9bZkp7q19f0/sddefault.jpg",
    "width": 640,
    "height": 480
  }
}

schema.org集成

完全支持schema.orgvideoObject标记。

<div class="video-wrapper" itemprop="video" itemscope="" itemtype="http://schema.org/VideoObject">
    <meta itemprop="name" content="PSY - GANGNAM STYLE (강남스타일) M/V">
    <meta itemprop="duration" content="PT4M13S">
    <meta itemprop="thumbnailUrl" content="https://i.ytimg.com/vi/9bZkp7q19f0/maxresdefault.jpg">
    <meta itemprop="embedURL" content="https://www.youtube.com/embed/9bZkp7q19f0">
    <meta itemprop="uploadDate" content="2012-07-15T07:46:32.000Z">
    <meta itemprop="height" content="480">
    <meta itemprop="width" content="853">
    <meta itemprop="description" content="...">
</div>

https://developers.google.com/webmasters/videosearch/schema

视频结束屏幕

http://mishbahr.github.io/assets/djangocms-youtube/thumbnail/djangocms-youtube-002.png

插件可以有子插件(即其他插件放在这个插件中),呈现为一个覆盖,当视频结束。通过重写settings.py文件中的DJANGOCMS_YOUTUBE_ALLOW_CHILDREN,可以禁用此功能

谷歌分析

http://mishbahr.github.io/assets/djangocms-youtube/thumbnail/djangocms-youtube-003.png

自动将下面列出的指标发布到您的Google Analytics帐户。

+ Play
+ 10% watched
+ 25% watched
+ 50% watched
+ 75% watched
+ 90% watched
+ Watch to end

确保你已经安装了谷歌分析跟踪脚本。

https://developers.google.com/analytics/devguides/collection/analyticsjs/

视频站点地图

为YouTube视频生成站点地图。

http://mishbahr.github.io/assets/djangocms-youtube/thumbnail/djangocms-youtube-005.png

视频站点地图配置

CMSVideoSitemapdjangocms_youtube.video_sitemap导入到主urls.py的顶部

from djangocms_youtube.video_sitemap import CMSVideoSitemap

djangocms_youtube.views.video_sitemap视图添加到urlpatterns。

from djangocms_youtube.views import video_sitemap

video_sitemaps = {
    'cmspages': CMSVideoSitemap,
}

urlpatterns = patterns(
    '',
    url(r'^videos/sitemap\.xml$', video_sitemap, {'sitemaps': video_sitemaps},
        name='djangocms_youtube.views.video_sitemap'),
)

CMS页面外的占位符

一个简单的例子aldryn-newsblog

​from djangocms_youtube.video_sitemap import VideoSitemap
from aldryn_newsblog.models import Article

​
class NewsblogVideoSitemap(VideoSitemap):
    model = Article
​
    def get_queryset(self):
        queryset = super(NewsblogVideoSitemap, self).get_queryset()
        language = self.get_language()
        queryset = queryset.translated(language)
        return queryset.published()
​
    def location(self, item):
        return item.get_absolute_url(self.get_language())

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是安卓的子类。所容纳之物ClipData或ClipData。项目   毕加索中的java错误get()无法应用于(安卓.content.Context)   管道接受来自控制台和管道文本文件的Java输入   Java Windows文件权限   java如何在Selenium中找到此按钮?我尝试了partiallinktext并多次尝试cssSelector   java如何在spring jdbc模板中生成流式sql?   方法中的java全局值变为null   java设备“Mobile Intel(R)4 Series Express芯片组系列”(\\.\DISPLAY1)初始化失败:   java查找单独文件夹中的资源到类文件   java iCal4j添加会议说明   java如何处理InvalidTokenException?   oop如果Java不支持运算符重载,增量运算符如何在整数实例上工作?   java如何在Hibernate中获取<map>