Ejemplo n.º 1
0
    def get_top(self,
                limit=10,
                offset=0,
                game=None,
                period=PERIOD_WEEK,
                broadcast_type=BROADCAST_TYPE_HIGHLIGHT):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')
        if period not in PERIODS:
            raise TwitchAttributeException(
                'Period is not valid. Valid values are %s' % PERIODS)

        if broadcast_type not in BROADCAST_TYPES:
            raise TwitchAttributeException(
                'Broadcast type is not valid. Valid values are %s' %
                BROADCAST_TYPES)

        params = {
            'limit': limit,
            'offset': offset,
            'game': game,
            'period': period,
            'broadcast_type': ','.join(broadcast_type)
        }

        response = self._request_get('videos/top', params=params)
        return [Video.construct_from(x) for x in response['vods']]
Ejemplo n.º 2
0
    def get_user_follows(self,
                         after=None,
                         page_size=20,
                         from_id=None,
                         to_id=None):
        if not from_id and not to_id:
            raise TwitchAttributeException(
                "from_id or to_id must be provided.")
        if page_size > 100:
            raise TwitchAttributeException(
                "Maximum number of objects to return is 100")

        params = {
            "after": after,
            "first": page_size,
            "from_id": from_id,
            "to_id": to_id,
        }

        return APICursor(
            client_id=self._client_id,
            oauth_token=self._oauth_token,
            path="users/follows",
            resource=Follow,
            params=params,
        )
Ejemplo n.º 3
0
    def get_videos(self, channel_id, limit=10, offset=0, broadcast_type=BROADCAST_TYPE_HIGHLIGHT,
                   language=None, sort=VIDEO_SORT_TIME):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        if broadcast_type not in BROADCAST_TYPES:
            raise TwitchAttributeException(
                'Broadcast type is not valid. Valid values are {}'.format(BROADCAST_TYPES))

        if sort not in VIDEO_SORTS:
            raise TwitchAttributeException(
                'Sort is not valid. Valid values are {}'.format(VIDEO_SORTS)
            )

        params = {
            'limit': limit,
            'offset': offset,
            'broadcast_type': broadcast_type,
            'sort': sort
        }
        if language is not None:
            params['language'] = language
        response = self._request_get('channels/{}/videos'.format(channel_id), params=params)
        return [Video.construct_from(x) for x in response['videos']]
Ejemplo n.º 4
0
    def get_top(
        self,
        channel=None,
        cursor=None,
        game=None,
        language=None,
        limit=10,
        period="week",
        trending=False,
    ):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        if period not in PERIODS:
            raise TwitchAttributeException(
                "Period is not valid. Valid values are {}".format(PERIODS))

        params = {
            "channel": channel,
            "cursor": cursor,
            "game": game,
            "language": language,
            "limit": limit,
            "period": period,
            "trending": str(trending).lower(),
        }

        response = self._request_get("clips/top", params=params)
        return [Clip.construct_from(x) for x in response["clips"]]
Ejemplo n.º 5
0
    def get_top(
        self,
        limit=10,
        offset=0,
        game=None,
        period=PERIOD_WEEK,
        broadcast_type=BROADCAST_TYPE_HIGHLIGHT,
    ):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")
        if period not in PERIODS:
            raise TwitchAttributeException(
                "Period is not valid. Valid values are {}".format(PERIODS))

        if broadcast_type not in BROADCAST_TYPES:
            raise TwitchAttributeException(
                "Broadcast type is not valid. Valid values are {}".format(
                    BROADCAST_TYPES))

        params = {
            "limit": limit,
            "offset": offset,
            "game": game,
            "period": period,
            "broadcast_type": ",".join(broadcast_type),
        }

        response = self._request_get("videos/top", params=params)
        return [Video.construct_from(x) for x in response["vods"]]
Ejemplo n.º 6
0
    def get_top(self,
                channel=None,
                cursor=None,
                game=None,
                language=None,
                limit=10,
                period='week',
                trending=False):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        if period not in PERIODS:
            raise TwitchAttributeException(
                'Period is not valid. Valid values are %s' % PERIODS)

        params = {
            'channel': channel,
            'cursor': cursor,
            'game': game,
            'language': language,
            'limit': limit,
            'period': period,
            'trending': str(trending).lower()
        }

        response = self._request_get('clips/top', params=params)
        return [Clip.construct_from(x) for x in response['clips']]
Ejemplo n.º 7
0
    def get_videos(
        self,
        channel_id,
        limit=10,
        offset=0,
        broadcast_type=BROADCAST_TYPE_HIGHLIGHT,
        language=None,
        sort=VIDEO_SORT_TIME,
    ):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        if broadcast_type not in BROADCAST_TYPES:
            raise TwitchAttributeException(
                "Broadcast type is not valid. Valid values are {}".format(
                    BROADCAST_TYPES))

        if sort not in VIDEO_SORTS:
            raise TwitchAttributeException(
                "Sort is not valid. Valid values are {}".format(VIDEO_SORTS))

        params = {
            "limit": limit,
            "offset": offset,
            "broadcast_type": broadcast_type,
            "sort": sort,
        }
        if language is not None:
            params["language"] = language
        response = self._request_get("channels/{}/videos".format(channel_id),
                                     params=params)
        return [Video.construct_from(x) for x in response["videos"]]
Ejemplo n.º 8
0
    def get_videos(self,
                   video_ids=None,
                   user_id=None,
                   game_id=None,
                   after=None,
                   before=None,
                   page_size=20,
                   language=None,
                   period=PERIOD_ALL,
                   sort=VIDEO_SORT_TIME,
                   video_type=VIDEO_TYPE_ALL):
        if video_ids and len(video_ids) > 100:
            raise TwitchAttributeException(
                'Maximum of 100 Video IDs can be supplied')

        params = {
            'id': video_ids,
            'user_id': user_id,
            'game_id': game_id,
        }

        if user_id or game_id:
            if page_size > 100:
                raise TwitchAttributeException(
                    'Maximum number of objects to return is 100')
            if period not in PERIODS:
                raise TwitchAttributeException(
                    'Invalid value for period. Valid values are {}'.format(
                        PERIODS))
            if sort not in VIDEO_SORTS:
                raise TwitchAttributeException(
                    'Invalid value for sort. Valid values are {}'.format(
                        VIDEO_SORTS))
            if video_type not in VIDEO_TYPES:
                raise TwitchAttributeException(
                    'Invalid value for video_type. Valid values are {}'.format(
                        VIDEO_TYPES))

            params['after'] = after
            params['before'] = before
            params['first'] = page_size
            params['language'] = language
            params['period'] = period
            params['sort'] = sort
            params['type'] = video_type

            return APICursor(client_id=self._client_id,
                             oauth_token=self._oauth_token,
                             path='videos',
                             resource=Video,
                             params=params)
        else:
            return APIGet(client_id=self._client_id,
                          oauth_token=self._oauth_token,
                          path='videos',
                          resource=Video,
                          params=params).fetch()
Ejemplo n.º 9
0
    def get_followed(self, stream_type=STREAM_TYPE_LIVE, limit=25, offset=0):
        if stream_type not in STREAM_TYPES:
            raise TwitchAttributeException(
                'Stream type is not valid. Valid values are %s' % STREAM_TYPES)
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        params = {'stream_type': stream_type, 'limit': limit, 'offset': offset}
        response = self._request_get('streams/followed', params=params)
        return [Stream.construct_from(x) for x in response['streams']]
Ejemplo n.º 10
0
    def get_followed(self, stream_type=STREAM_TYPE_LIVE, limit=25, offset=0):
        if stream_type not in STREAM_TYPES:
            raise TwitchAttributeException(
                "Stream type is not valid. Valid values are {}".format(
                    STREAM_TYPES))
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        params = {"stream_type": stream_type, "limit": limit, "offset": offset}
        response = self._request_get("streams/followed", params=params)
        return [Stream.construct_from(x) for x in response["streams"]]
Ejemplo n.º 11
0
    def get_posts(self, channel_id, limit=10, cursor=None, comments=5):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')
        if comments > 5:
            raise TwitchAttributeException(
                'Maximum number of comments returned in one request is 5')

        params = {'limit': limit, 'cursor': cursor, 'comments': comments}
        response = self._request_get('feed/{}/posts'.format(channel_id),
                                     params=params)
        return [Post.construct_from(x) for x in response['posts']]
Ejemplo n.º 12
0
    def get_posts(self, channel_id, limit=10, cursor=None, comments=5):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100"
            )
        if comments > 5:
            raise TwitchAttributeException(
                "Maximum number of comments returned in one request is 5"
            )

        params = {"limit": limit, "cursor": cursor, "comments": comments}
        response = self._request_get("feed/{}/posts".format(channel_id), params=params)
        return [Post.construct_from(x) for x in response["posts"]]
Ejemplo n.º 13
0
    def get_clips(
        self,
        broadcaster_id=None,
        game_id=None,
        clip_ids=None,
        after=None,
        before=None,
        started_at=None,
        ended_at=None,
        page_size=20,
    ):
        if not broadcaster_id and not clip_ids and not game_id:
            raise TwitchAttributeException(
                "At least one of the following parameters must be provided "
                "[broadcaster_id, clip_ids, game_id]"
            )
        if clip_ids and len(clip_ids) > 100:
            raise TwitchAttributeException("Maximum of 100 Clip IDs can be supplied")
        if page_size > 100:
            raise TwitchAttributeException("Maximum number of objects to return is 100")

        params = {
            "broadcaster_id": broadcaster_id,
            "game_id": game_id,
            "id": clip_ids,
            "after": after,
            "before": before,
            "started_at": started_at,
            "ended_at": ended_at,
        }

        if broadcaster_id or game_id:
            params["first"] = page_size

            return APICursor(
                client_id=self._client_id,
                oauth_token=self._oauth_token,
                path="clips",
                resource=Clip,
                params=params,
            )

        else:
            return APIGet(
                client_id=self._client_id,
                oauth_token=self._oauth_token,
                path="clips",
                resource=Clip,
                params=params,
            ).fetch()
Ejemplo n.º 14
0
    def get_subscribers(self, channel_id, limit=25, offset=0, direction=DIRECTION_ASC):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100"
            )
        if direction not in DIRECTIONS:
            raise TwitchAttributeException(
                "Direction is not valid. Valid values are {}".format(DIRECTIONS)
            )

        params = {"limit": limit, "offset": offset, "direction": direction}
        response = self._request_get(
            "channels/{}/subscriptions".format(channel_id), params=params
        )
        return [Subscription.construct_from(x) for x in response["subscriptions"]]
Ejemplo n.º 15
0
    def get_users(self, ids=[], logins=[]):
        if len(ids) == 0 and len(logins) == 0:
            raise TwitchAttributeException(
                'at least one id or login must be provided.')
        if (len(ids) + len(logins)) > 100:
            raise TwitchAttributeException(
                'Maximum number of objects to return is 100')

        params = {'id': ids, 'login': logins}

        return APIGet(client_id=self._client_id,
                      oauth_token=self._oauth_token,
                      path='users',
                      resource=User,
                      params=params).fetch()
Ejemplo n.º 16
0
    def get_subscribers(self, channel_id, limit=25, offset=0, direction=DIRECTION_ASC):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')
        if direction not in DIRECTIONS:
            raise TwitchAttributeException(
                'Direction is not valid. Valid values are {}'.format(DIRECTIONS))

        params = {
            'limit': limit,
            'offset': offset,
            'direction': direction
        }
        response = self._request_get('channels/{}/subscriptions'.format(channel_id), params=params)
        return [Subscription.construct_from(x) for x in response['subscriptions']]
Ejemplo n.º 17
0
 def get_top(self, limit=10, cursor=None):
     if limit > 100:
         raise TwitchAttributeException(
             'Maximum number of objects returned in one request is 100')
     params = {'limit': limit, 'cursor': cursor}
     response = self._request_get('communities/top', params=params)
     return [Community.construct_from(x) for x in response['communities']]
Ejemplo n.º 18
0
    def get_games(self, game_ids=None, names=None):
        if game_ids and len(game_ids) > 100:
            raise TwitchAttributeException("Maximum of 100 Game IDs can be supplied")
        if names and len(names) > 100:
            raise TwitchAttributeException("Maximum of 100 Game names can be supplied")

        params = {
            "id": game_ids,
            "name": names,
        }
        return APIGet(
            client_id=self._client_id,
            oauth_token=self._oauth_token,
            path="games",
            resource=Game,
            params=params,
        ).fetch()
Ejemplo n.º 19
0
    def get_top(self, limit=10, offset=0):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        params = {"limit": limit, "offset": offset}
        response = self._request_get("games/top", params=params)
        return [TopGame.construct_from(x) for x in response["top"]]
Ejemplo n.º 20
0
    def get_featured(self, limit=25, offset=0):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        params = {'limit': limit, 'offset': offset}
        response = self._request_get('streams/featured', params=params)
        return [Featured.construct_from(x) for x in response['featured']]
Ejemplo n.º 21
0
    def get_games(self, game_ids=None, names=None):
        if game_ids and len(game_ids) > 100:
            raise TwitchAttributeException(
                'Maximum of 100 Game IDs can be supplied')
        if names and len(names) > 100:
            raise TwitchAttributeException(
                'Maximum of 100 Game names can be supplied')

        params = {
            'id': game_ids,
            'name': names,
        }
        return APIGet(client_id=self._client_id,
                      oauth_token=self._oauth_token,
                      path='games',
                      resource=Game,
                      params=params).fetch()
Ejemplo n.º 22
0
 def get_top(self, limit=10, cursor=None):
     if limit > 100:
         raise TwitchAttributeException(
             "Maximum number of objects returned in one request is 100"
         )
     params = {"limit": limit, "cursor": cursor}
     response = self._request_get("communities/top", params=params)
     return [Community.construct_from(x) for x in response["communities"]]
Ejemplo n.º 23
0
    def get_all(self, limit=10, offset=0):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        params = {'limit': limit, 'offset': offset}
        response = self._request_get('teams', params=params)
        return [Team.construct_from(x) for x in response['teams']]
Ejemplo n.º 24
0
    def streams(self, query, limit=25, offset=0, hls=None):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        params = {"query": query, "limit": limit, "offset": offset, "hls": hls}
        response = self._request_get("search/streams", params=params)
        return [Stream.construct_from(x) for x in response["streams"] or []]
Ejemplo n.º 25
0
    def get_followers(self, channel_id, limit=25, offset=0, cursor=None, direction=DIRECTION_DESC):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')
        if direction not in DIRECTIONS:
            raise TwitchAttributeException(
                'Direction is not valid. Valid values are {}'.format(DIRECTIONS))

        params = {
            'limit': limit,
            'offset': offset,
            'direction': direction
        }
        if cursor is not None:
            params['cursor'] = cursor
        response = self._request_get('channels/{}/follows'.format(channel_id), params=params)
        return [Follow.construct_from(x) for x in response['follows']]
Ejemplo n.º 26
0
    def get_tags(self, after=None, page_size=20, tag_ids=None):
        """https://dev.twitch.tv/docs/api/reference#get-all-stream-tags"""

        if tag_ids and len(tag_ids) > 100:
            raise TwitchAttributeException("Maximum of 100 Tag IDs can be supplied")
        if page_size > 100:
            raise TwitchAttributeException("Maximum number of objects to return is 100")

        params = {"after": after, "first": page_size, "tag_id": tag_ids}

        return APICursor(
            client_id=self._client_id,
            oauth_token=self._oauth_token,
            path="tags/streams",
            resource=Tag,
            params=params,
        )
Ejemplo n.º 27
0
    def get_followed_videos(self, limit=10, offset=0, broadcast_type=BROADCAST_TYPE_HIGHLIGHT):
        if limit > 100:
            raise TwitchAttributeException(
                'Maximum number of objects returned in one request is 100')

        if broadcast_type not in BROADCAST_TYPES:
            raise TwitchAttributeException(
                'Broadcast type is not valid. Valid values are {}'.format(BROADCAST_TYPES))

        params = {
            'limit': limit,
            'offset': offset,
            'broadcast_type': broadcast_type
        }

        response = self._request_get('videos/followed', params=params)
        return [Video.construct_from(x) for x in response['videos']]
Ejemplo n.º 28
0
    def channels(self, query, limit=25, offset=0):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        params = {"query": query, "limit": limit, "offset": offset}
        response = self._request_get("search/channels", params=params)
        return [Channel.construct_from(x) for x in response["channels"] or []]
Ejemplo n.º 29
0
    def get_featured(self, limit=25, offset=0):
        if limit > 100:
            raise TwitchAttributeException(
                "Maximum number of objects returned in one request is 100")

        params = {"limit": limit, "offset": offset}
        response = self._request_get("streams/featured", params=params)
        return [Featured.construct_from(x) for x in response["featured"]]
Ejemplo n.º 30
0
 def get_timed_out_users(self, community_id, limit=10, cursor=None):
     if limit > 100:
         raise TwitchAttributeException(
             'Maximum number of objects returned in one request is 100')
     params = {'limit': limit, 'cursor': cursor}
     response = self._request_get(
         'communities/{}/timeouts'.format(community_id), params=params)
     return [User.construct_from(x) for x in response['timed_out_users']]