Beispiel #1
0
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)
Beispiel #2
0
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) 
Beispiel #3
0
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)