class AddFromFeedForm(forms.Form, AjaxForm): VIDEOS_LIMIT = 10 usernames = UsernameListField( required=False, label=_(u'Youtube usernames'), help_text=_(u'Enter usernames separated by comma.')) feed_url = FeedURLField( required=False, help_text= _(u'We support: rss 2.0 media feeds including Youtube, Vimeo, Dailymotion, and more.' )) def __init__(self, user, *args, **kwargs): if not user.is_authenticated(): user = None self.user = user super(AddFromFeedForm, self).__init__(*args, **kwargs) self.video_limit_routreach = False self.urls = [] def clean_feed_url(self): url = self.cleaned_data.get('feed_url', '') if url: self.parse_feed_url(url) return url def parse_feed_url(self, url): feed_parser = FeedParser(url) if not hasattr(feed_parser.feed, 'version') or not feed_parser.feed.version: raise forms.ValidationError( _(u'Sorry, we could not find a valid feed at the URL you provided. Please check the URL and try again.' )) if url in self.urls: raise forms.ValidationError( fmt(_(u"Duplicate feed URL in form: %(url)s"), url=url)) if VideoFeed.objects.filter(url=url).exists(): raise forms.ValidationError( fmt(_(u'Feed for %(url)s already exists'), url=url)) self.urls.append(url) def success_message(self): return _( u"The videos are being added in the background. " u"If you are logged in, you will receive a message when it's done") def save(self): for url in self.urls: feed = self.make_feed(url) import_videos_from_feed.delay(feed.id) def make_feed(self, url): return VideoFeed.objects.create(user=self.user, url=url)
class AddFromFeedForm(forms.Form, AjaxForm): usernames = UsernameListField(required=False, label=_(u'Youtube usernames'), help_text=_(u'<span class="hint">Enter usernames separated by comma.</span>')) youtube_user_url = forms.RegexField(youtube_user_url_re, required=False, label=_(u'Youtube page link.')) feed_url = forms.URLField(required=False, help_text=_(u'<span class="hint">Supported: Youtube, Vimeo, Blip or Dailymotion. Only supported sites added.</span>')) save_feed = forms.BooleanField(required=False, label=_(u'Save feed'), help_text=_(u'<span class="hint checkbox_hint">Choose this if you wish to add videos from this feed in the future. Only valid RSS feeds will be saved.</span>')) def __init__(self, user, *args, **kwargs): if not user.is_authenticated(): user = None self.user = user super(AddFromFeedForm, self).__init__(*args, **kwargs) self.yt_service = YouTubeService() self.video_types = [] self.feed_urls = [] def clean_feed_url(self): url = self.cleaned_data.get('feed_url') if url: feed = feedparser.parse(url) for item in feed['entries']: vt = self.try_get_video_type(item['link']) if not vt: for obj in item.get('enclosures', []): type = obj.get('type', '') href = obj.get('href', '') if href and type.startswith('video'): self.try_get_video_type(href) if feed.version: self.feed_urls.append(url) return url def clean_youtube_user_url(self): url = self.cleaned_data.get('youtube_user_url') if url: username = youtube_user_url_re.match(url).groupdict()['username'] self.add_for_youtube_user(username) return url def clean_usernames(self): usernames = self.cleaned_data.get('usernames', []) for username in usernames: self.add_for_youtube_user(username) return usernames def clean(self): data = self.cleaned_data return data def try_get_video_type(self, link): try: video_type = video_type_registrar.video_type_for_url(link) except VideoTypeError, e: raise forms.ValidationError(e) if video_type: self.video_types.append(video_type) return video_type
class AddFromFeedForm(forms.Form, AjaxForm): VIDEOS_LIMIT = 10 youtube_feed_url_pattern = 'https://gdata.youtube.com/feeds/api/users/%s/uploads' usernames = UsernameListField(required=False, label=_(u'Youtube usernames'), help_text=_(u'<span class="hint">Enter usernames separated by comma.</span>')) youtube_user_url = StripRegexField(youtube_user_url_re, required=False, label=_(u'Youtube page link.'), help_text=_(u'<span class="hint">For example: http://www.youtube.com/user/username</span>')) feed_url = FeedURLField(required=False, help_text=_(u'<span class="hint">Supported: Youtube, Vimeo, Blip or Dailymotion. Only supported sites added.</span>')) save_feed = forms.BooleanField(required=False, label=_(u'Save feed'), help_text=_(u'<span class="hint checkbox_hint">Choose this if you wish to add videos from this feed in the future. Only valid RSS feeds will be saved.</span>')) def __init__(self, user, *args, **kwargs): if not user.is_authenticated(): user = None self.user = user super(AddFromFeedForm, self).__init__(*args, **kwargs) self.yt_service = YouTubeService() self.video_types = [] #tuples: (video_type, video_info) self.feed_urls = [] #tuples: (feed_url, last_saved_entry_url) self.video_limit_routreach = False def clean_feed_url(self): url = self.cleaned_data.get('feed_url', '') if url: self.parse_feed_url(url) return url def clean_youtube_user_url(self): url = self.cleaned_data.get('youtube_user_url', '').strip() if url: username = youtube_user_url_re.match(url).groupdict()['username'] url = self.youtube_feed_url_pattern % str(username) self.parse_feed_url(url) return url def clean_usernames(self): usernames = self.cleaned_data.get('usernames', []) for username in usernames: url = self.youtube_feed_url_pattern % str(username) self.parse_feed_url(url) return usernames def parse_feed_url(self, url): feed_parser = FeedParser(url) entry = '' try: for vt, info, entry in feed_parser.items(): if vt: self.video_types.append((vt, info)) if len(self.video_types) >= self.VIDEOS_LIMIT: self.video_limit_routreach = True break if feed_parser.feed.version: try: self.feed_urls.append((url, entry and entry['link'])) except KeyError: raise forms.ValidationError(_(u'Sorry, we could not find a valid feed at the URL you provided. Please check the URL and try again.')) except FeedParserError, e: raise forms.ValidationError(e)
class AddFromFeedForm(forms.Form, AjaxForm): VIDEOS_LIMIT = 10 youtube_feed_url_pattern = 'https://gdata.youtube.com/feeds/api/users/%s/uploads' usernames = UsernameListField( required=False, label=_(u'Youtube usernames'), help_text=_(u'Enter usernames separated by comma.')) youtube_user_url = StripRegexField( youtube_user_url_re, required=False, label=_(u'Youtube page link.'), help_text=_(u'For example: http://www.youtube.com/user/username')) feed_url = FeedURLField( required=False, help_text= _(u'Supported: Youtube, Vimeo, or Dailymotion. Only supported sites added.' )) save_feed = forms.BooleanField( required=False, label=_(u'Save feed'), help_text= _(u'Choose this if you wish to add videos from this feed in the future. Only valid RSS feeds will be saved.' )) def __init__(self, user, *args, **kwargs): if not user.is_authenticated(): user = None self.user = user super(AddFromFeedForm, self).__init__(*args, **kwargs) self.yt_service = yt_service self.urls = [] self.video_limit_routreach = False def clean_feed_url(self): url = self.cleaned_data.get('feed_url', '') if url: self.parse_feed_url(url) return url def clean_youtube_user_url(self): url = self.cleaned_data.get('youtube_user_url', '').strip() if url: username = youtube_user_url_re.match(url).groupdict()['username'] url = self.youtube_feed_url_pattern % str(username) self.parse_feed_url(url) return url def clean_usernames(self): usernames = self.cleaned_data.get('usernames', []) for username in usernames: url = self.youtube_feed_url_pattern % str(username) self.parse_feed_url(url) return usernames def parse_feed_url(self, url): feed_parser = FeedParser(url) if not hasattr(feed_parser.feed, 'version') or not feed_parser.feed.version: raise forms.ValidationError( _(u'Sorry, we could not find a valid feed at the URL you provided. Please check the URL and try again.' )) self.urls.append(url) def success_message(self): return _( u"The videos are being added in the background. " u"If you are logged in, you will receive a message when it's done") def save(self): user_id = self.user.id if self.user else None import_videos_from_feeds.delay(self.urls, user_id)