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']]
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, )
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']]
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"]]
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"]]
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']]
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"]]
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()
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']]
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"]]
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']]
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"]]
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()
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"]]
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()
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']]
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']]
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()
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"]]
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']]
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()
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"]]
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']]
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 []]
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']]
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, )
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']]
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 []]
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"]]
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']]