-
-
Save CBoJI/3596264 to your computer and use it in GitHub Desktop.
видео с превью. превью с вимео или с ютуба или загружена через админку
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def prevent_russian_file_for_video(instance, filename): | |
return u"uploads/video/previews/%s" % (translify(filename),) | |
class Video(models.Model): | |
STATUS_CHOICES = ( | |
(0, _('not published')), | |
(1, _('published')) | |
) | |
title = models.CharField(max_length=255, | |
verbose_name=_('title')) | |
path = models.URLField(blank=True, | |
verbose_name=_('link')) | |
code = models.TextField(blank=True, | |
verbose_name=_('embed code')) | |
video_id = models.CharField(max_length=100, editable=False) | |
type = models.PositiveSmallIntegerField(editable=False) | |
status = models.PositiveSmallIntegerField(default=1, choices=STATUS_CHOICES, | |
verbose_name=_('status')) | |
order = models.PositiveSmallIntegerField(default=1, | |
verbose_name=_('order')) | |
width = models.PositiveIntegerField(verbose_name=_('width'), default=500) | |
height = models.PositiveIntegerField(verbose_name=_('height'), default=400) | |
img = models.ImageField(u'превью',upload_to=prevent_russian_file_for_video, blank=True ) | |
content_type = models.ForeignKey(ContentType) | |
object_id = models.PositiveIntegerField() | |
content_object = generic.GenericForeignKey() | |
def __unicode__(self): | |
return self.title | |
def get_preview(self): | |
path = self.get_code() | |
if self.img: | |
return [ '/media/uploads/video/previews/%s' % self.img, path, self.title ] | |
if self.type == 2: | |
url = 'http://vimeo.com/api/v2/video/' + self.video_id +'.xml' | |
result = urllib.urlopen(url).read() | |
if result > 0: | |
b = result.find('thumbnail_medium')+17 | |
e = result.find('</thumbnail_medium') | |
url = result[b:e] | |
else: | |
url = 'http://img.youtube.com/vi/' + self.video_id + '/0.jpg' | |
preview = [url, path, self.title] | |
return preview | |
def parse_path(self): | |
if not self.code: | |
if self.path: | |
import re | |
try: | |
youtube = re.search(r'youtube', self.path) | |
youtu = re.search(r'youtu\.be', self.path) | |
vimeo = re.search(r'vimeo', self.path) | |
id = 0 | |
if youtube: | |
self.type = 1 | |
m = re.search(r"v=([\w-]+)", self.path) | |
id = m.group(1) | |
if youtu: | |
self.type = 1 | |
m = re.search(r"youtu\.be/([\w-]+)", self.path) | |
id = m.group(1) | |
if vimeo: | |
self.type = 2 | |
m = re.search(r'([\d]+)', self.path) | |
id = m.group(1) | |
self.video_id = id | |
except Exception: | |
self.video_id = 'unknown' | |
self.type = 0 | |
else: | |
self.video_id = 'unknown' | |
self.type = 0 | |
else: | |
self.video_id = 'code' | |
self.type = 0 | |
def get_code(self): | |
if self.type == 2: | |
return 'http://player.vimeo.com/video/' + self.video_id | |
else: | |
return 'http://www.youtube.com/embed/'+ self.video_id | |
def save(self, *args, **kwargs): | |
self.parse_path() | |
super(Video, self).save(*args, **kwargs) | |
class Meta: | |
verbose_name=_('video') | |
verbose_name_plural = _('video') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment