2015-03-09 3 views
0

Какой самый простой способ получить информацию с youtube видео и сохранить в базе данных?Продолжительность видео Youtube до модели Django

Например, я хочу получить продолжительность от 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 

Может кто-нибудь помочь мне, пожалуйста?

Спасибо заранее

Edit:

Спасибо за ответы, так что я попробовал метод с помощью JSON, но я получаю VIDEO_DURATION ошибки не определен

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 
+2

Ваш псевдо-код является правильным. Вам нужно использовать XML-парсер, например [ElementTree] (https://docs.python.org/2/library/xml.etree.elementtree.html). Какова конкретная проблема, с которой вы сталкиваетесь? – Selcuk

+0

tree = ET.parse (xml) -> error Неверный аргумент: 'http://gdata.youtube.com/feeds/api/videos/LPfnK8lSLOQ'. Нужен ли мне конкретный .xml в этом пути или? – John

ответ

0

получения длительности видео с youtube довольно просто. Вам просто нужно проанализировать ответ вызова api. Я сделал это с httplib2.

его лучше работать с JSON вместо XML

VideoID в URL запроса является идентификатор YouTube видео

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'] 
+0

Можете ли вы мне помочь с реализацией моей модели? Проверьте мой отредактированный вопрос – John

+0

@ Джон, вы получаете ошибку, потому что функция должна быть выше определения модели – frank

+0

Вы имеете в виду вот так? https://gist.github.com/aznnoh/27edbec4ba1834683e9d? video_duration не определен ... Я думаю, что он должен сначала взять video_id, а затем работать с ним. Идентификатор id -> url -> ваш код -> продолжительность возврата и сохранить его в базе данных – John

Смежные вопросы