123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import datetime
- import re
- import humanize
- # given amount of seconds makes it into this 54 MINUTES AND 53 SECONDS (from humanize) then
- # perform a bunch of replace operations to make it look like 54mins. 53secs.
- import pytz
- def getHumanizedTimeString(seconds):
- return humanize.precisedelta(
- datetime.timedelta(seconds=seconds)).upper(). \
- replace(' month'.upper(), 'm.').replace(' months'.upper(), 'm.').replace(' days'.upper(), 'd.').replace(
- ' day'.upper(), 'd.').replace(' hours'.upper(), 'hrs.').replace(' hour'.upper(), 'hr.').replace(
- ' minutes'.upper(), 'mins.').replace(' minute'.upper(), 'min.').replace(
- 'and'.upper(), '').replace(' seconds'.upper(), 'secs.').replace(' second'.upper(), 'sec.').replace(',', '')
- # input => ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', ..., '100'] <- array of 100 video ids
- # output => ['1,2,3,4,...,50', '51,52,53,...,100'] <- array of 2 video id strings, each with upto 50 comma sperated video ids
- def getVideoIdsStrings(video_ids):
- output = []
- i = 0
- while i < len(video_ids):
- output.append(','.join(video_ids[i:i + 50]))
- i += 50
- return output
- # input: array of youtube video duration strings => ['24M23S', '2H2M2S', ...]
- # output:integer => seconds
- def calculateDuration(vid_durations):
- hours_pattern = re.compile(r'(\d+)H')
- minutes_pattern = re.compile(r'(\d+)M')
- seconds_pattern = re.compile(r'(\d+)S')
- total_seconds = 0
- for duration in vid_durations:
- hours = hours_pattern.search(duration) # returns matches in the form '24H'
- mins = minutes_pattern.search(duration) # '24M'
- secs = seconds_pattern.search(duration) # '24S'
- hours = int(hours.group(1)) if hours else 0 # returns 24
- mins = int(mins.group(1)) if mins else 0
- secs = int(secs.group(1)) if secs else 0
- video_seconds = datetime.timedelta(hours=hours, minutes=mins, seconds=secs).total_seconds()
- total_seconds += video_seconds
- return total_seconds
- def getThumbnailURL(thumbnails):
- priority = ('maxres', 'standard', 'high', 'medium', 'default')
- for quality in priority:
- if quality in thumbnails:
- return thumbnails[quality]['url']
- return ''
- # generates a message in the form of '1 / 19 watched! 31mins. 15secs. left to go!'
- def generateWatchingMessage(playlist):
- """
- This is the message that will be seen when a playlist is set to watching.
- Takes in the playlist object and calculates the watch time left by looping over unwatched video
- and using their durations
- """
- pass
- def getVideoId(video_link):
- """
- takes in a valid video link and returns a video id
- """
- if '?' not in video_link:
- return video_link
- temp = video_link.split('?')[-1].split('&')
- for el in temp:
- if 'v=' in el:
- return el.split('v=')[-1]
- def increment_tag_views(playlist_tags):
- """
- Increments playlist tag overall views and views per week. If its been a week, views per week is reset to
- zero.
- """
- for tag in playlist_tags:
- # reset tag views if its been a week
- if tag.last_views_reset + datetime.timedelta(days=7) < datetime.datetime.now(pytz.utc):
- tag.times_viewed_per_week = 0
- tag.last_views_reset = datetime.datetime.now(pytz.utc)
- else:
- tag.times_viewed_per_week += 1
- tag.times_viewed += 1
- tag.save(update_fields=['times_viewed', 'last_views_reset', 'times_viewed_per_week'])
|