Skip to content

Instantly share code, notes, and snippets.

@CBoJI
Created September 2, 2012 09:41
Show Gist options
  • Save CBoJI/3596264 to your computer and use it in GitHub Desktop.
Save CBoJI/3596264 to your computer and use it in GitHub Desktop.
видео с превью. превью с вимео или с ютуба или загружена через админку
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