Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Youtube视频到Django模型的持续时间_Python_Django_Video_Youtube - Fatal编程技术网

Python Youtube视频到Django模型的持续时间

Python Youtube视频到Django模型的持续时间,python,django,video,youtube,Python,Django,Video,Youtube,从youtube视频中获取信息并保存到数据库的最简单方法是什么 例如,我想从youtube视频中获取持续时间 我的模型: class Video(models.Model): video_id = models.CharField(max_length=150) title = models.CharField(max_length=150) slug = AutoSlugField(populate_from="title") description = mo

从youtube视频中获取信息并保存到数据库的最简单方法是什么

例如,我想从youtube视频中获取持续时间

我的模型:

class Video(models.Model):

    video_id = models.CharField(max_length=150)
    title = models.CharField(max_length=150)
    slug = AutoSlugField(populate_from="title")
    description = models.TextField(blank=True)
    #duration = models.CharField(max_length=10 , default=video_duration)
    views = models.PositiveIntegerField(default=0)
    likes = models.PositiveIntegerField(default=0)
    category = models.ForeignKey("VideoCategory")
    tags = models.ManyToManyField("Tag")
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    """
    My idea:

    def get_video_duration():

        xml = "http://gdata.youtube.com/feeds/api/videos/" + video_id
        open xml
        parse
        s = take duration from xml in seconds

        import datetime

        video_duration = str(datetime.timedelta(seconds=s)) in h:m:s

    """


    def __str__(self):

        return self.title
有人能帮我吗

先谢谢你

编辑:

谢谢您的回答,所以我尝试了使用json的方法,但未定义I get error video_持续时间

class Video(models.Model):

video_id = models.CharField(max_length=150)
title = models.CharField(max_length=150)
slug = AutoSlugField(populate_from="title")
description = models.TextField(blank=True)
duration = models.CharField(max_length=10, default=video_duration)
views = models.PositiveIntegerField(default=0)
likes = models.PositiveIntegerField(default=0)
category = models.ForeignKey("VideoCategory")
tags = models.ManyToManyField("Tag")
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

def video_duration():

    h = httplib2.Http()
    url = "http://gdata.youtube.com/feeds/api/videos/%sv=2&alt=json" % video_id
    respose = h.request(url)
    res = json.loads(respose[1])
    video_duration = res['entry']['media$group'][
        'media$content'][0]['duration']
    return video_duration

从youtube获取视频的持续时间非常简单。您只需要分析api调用的响应。 我是用httplib2做的

最好使用json而不是xml

请求url中的videoID是youtube视频的id

  import httplib2
  import json

  h = httplib2.Http()
  respose = h.request("http://gdata.youtube.com/feeds/api/videos/videoID?v=2&alt=json")
  res = json.loads(respose[1])
  duration = res['entry']['media$group']['media$content'][0]['duration']

您的伪代码是正确的。您需要使用XML解析器,如。您遇到的具体问题是什么?tree=ET.parsexml->错误无效参数:。我需要在那个路径中指定.xml吗?或者?你能帮我在我的模型上实现吗?检查我编辑的问题please@John你得到这个错误是因为函数应该在模型定义之上,你的意思是这样的?视频持续时间未定义。。。我认为它必须先获取视频id,然后再使用它。给定id->url->您的代码->返回持续时间,并将其保存到数据库中。我使用Pafy library来完成此操作,下面是实现我所需的代码: