twitch-api
Version:
Simple module for using twitch.tv's REST API in node.js
1,182 lines (1,107 loc) • 35.2 kB
JavaScript
'use strict';
var request = require("request");
var baseUrl = 'https://api.twitch.tv/kraken';
var authorizePath = '/oauth2/authorize';
var accessTokenPath = '/oauth2/token';
var Twitch = function (options){
if (!(this instanceof Twitch))
return new Twitch(options);
this.clientId = options.clientId;
this.clientSecret = options.clientSecret;
this.redirectUri = options.redirectUri;
this.scopes = options.scopes || [];
return this;
};
/**
* The callback that will handle the response
* @callback requestCallback
* @param err {Object} In request produces an error, it will be stored in
* this parameter. null if the request was successful
* @param body {Object} The body of the response if the request was successful
*/
/**
* Creates a request to Twitch.tv v3 API
*
* @access private
*
* @param options {Object} The options of the request
* @param [options.method] {String} The HTTP method.
* 'GET', 'POST', 'PUT' or 'DELETE'. Defaults to 'GET'
* @param options.path {String} The RELATIVE path of the request
* @param [options.accessToken] {String} The accessToken of the
* authenticated user
* @param [options.body] {JSON} The JSON data to send with the request
* @param [parameters] {Object} The URL parameters of the request in JSON format
*/
Twitch.prototype._createRequest = function(options, parameters){
return {
method: options.method,
url: baseUrl + options.path,
qs: parameters,
headers: {
'Authorization': options.accessToken?'OAuth ' + options.accessToken : undefined,
'Accept': 'Accept: application/vnd.twitchtv.v3+json',
'Client-ID': this.clientId
},
body: options.body,
json: true
};
};
/**
* Forges and executes a request against Twitch.tv's v3 API
*
* @access private
*
* @param options {Object} The options of the request
* @param [options.method] {String} The HTTP method.
* 'GET', 'POST', 'PUT' or 'DELETE'. Defaults to 'GET'
* @param options.path {String} The RELATIVE path of the request
* @param [options.accessToken] {String} The accessToken of the
* authenticated user
* @param [options.body] {JSON} The JSON data to send with the request
* @param [parameters] {Object} The URL parameters of the request in JSON format
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype._executeRequest = function(options, parameters, callback){
// check for optional parameters
if(!callback){
callback = parameters;
parameters = undefined;
}
var req = this._createRequest(options, parameters);
request(req, function(err, response, body){
if (!err && body && !body.error){
callback(null, body);
} else {
callback(err || body);
}
});
};
/**
* Returns the full URL to witch you must send your user in order to authorize
* your application
*
* @returns {String} The the full URL to witch you must send your user for
* authorization
*/
Twitch.prototype.getAuthorizationUrl = function(){
var scopesParam = '';
for (var i = 0; i < this.scopes.length; i++){
scopesParam += this.scopes[i];
if (i != (this.scopes.length - 1)){
scopesParam += '+';
}
}
return baseUrl + authorizePath +
'?response_type=code' +
'&client_id=' + this.clientId +
'&redirect_uri=' + this.redirectUri +
'&scope=' + scopesParam;
};
/**
* Requests Twitch.tv for an accessCode for your authorized user
*
* @param code {String} The code that twitch.tv's API sent in the
* redirection URI parameters when the user authorized your application
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getAccessToken = function(code, callback){
var parameters = {
client_id: this.clientId,
client_secret: this.clientSecret,
grant_type: 'authorization_code',
redirect_uri: this.redirectUri,
code: code
};
this._executeRequest(
{
method: 'POST',
path: accessTokenPath,
},
parameters,
callback
);
};
/**
* Requests Twitch.tv for an accessCode for using your refresh token
*
* @param refreshToken {String} The code that twitch.tv's API sent in the
* getAccessToken response
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.refreshAccessToken = function(refreshToken, callback){
var parameters = {
client_id: this.clientId,
client_secret: this.clientSecret,
refresh_token : refreshToken,
grant_type: 'refresh_token',
redirect_uri: this.redirectUri
};
this._executeRequest(
{
method: 'POST',
path: accessTokenPath,
},
parameters,
callback
);
};
// ###### # ####### ##### # # #####
// # # # # # # # # # # #
// # # # # # # # # #
// ###### # # # # ### #####
// # # # # # # # # #
// # # # # # # # # # # #
// ###### ####### ####### ##### # # #####
/**
* Get user's block list
*
* GET /users/:user/blocks
*
* @param user {String} The user name of wich you want to get the block list,
* authenticated by accesToken
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the API endpoint
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getBlocks =
function (user, accessToken, parameters, callback){
this._executeRequest(
{
method: 'GET',
path: '/users/' + user + '/blocks',
accessToken: accessToken,
},
parameters,
callback
);
};
/**
* Add target to user's block list
*
* PUT /users/:user/blocks/:target
*
* @param user {String} The user name of the user
* @param accessToken {String} The token representing the authenticated user
* @param target {String} the user name your user wants to block
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.addBlock = function(user, accessToken, target, callback){
this._executeRequest(
{
method: 'PUT',
path: '/users/' + user + '/blocks/' + target,
accessToken: accessToken,
},
callback
);
};
/**
* Delete target from user's block list
*
* DELETE /users/:user/blocks/:target
*
* @param user {String} The user name of the user
* @param accessToken {String} The token representing the authenticated user
* @param target {String} the user name your user wants to unblock
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.removeBlock =
function(user, accessToken, target, callback){
this._executeRequest(
{
method: 'DELETE',
path: '/users/' + user + '/blocks/' + target,
accessToken: accessToken,
},
callback
);
};
// ##### # # # # # # # ####### # #####
// # # # # # # ## # ## # # # # #
// # # # # # # # # # # # # # #
// # ####### # # # # # # # # ##### # #####
// # # # ####### # # # # # # # # #
// # # # # # # # ## # ## # # # #
// ##### # # # # # # # # ####### ####### #####
/**
* Returns a channel object.
*
* GET /channels/:channel/
*
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannel = function(channel, callback){
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel
},
callback
);
};
/**
* Returns a channel object of authenticated user.
* Channel object includes stream key.
*
* GET /channel
*
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getAuthenticatedUserChannel = function(accessToken, callback){
this._executeRequest(
{
method: 'GET',
path: '/channel',
accessToken: accessToken
},
callback
);
};
/**
* Returns a list of user objects who are editors of channel.
* The user should be the owner (maybe editor?) of the channel
*
* GET /channels/:channel/editors
*
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelEditors = function(channel, accessToken, callback){
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/editors',
accessToken: accessToken
},
callback
);
};
/**
* Update channel's status or game.
*
* PUT /channels/:channel/
*
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param channelOptions {Object} The options you want to change in JSON format
* @param channelOptions.channel {JSON} The real options are wrapped here
* @param channelOptions.channel.status {String} The new status of the channel
* @param channelOptions.channel.game {String} The new game of the channel
* @param channelOptions.channel.delay {Number} The delay of the channel
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.updateChannel =
function (channel, accessToken, channelOptions, callback) {
this._executeRequest(
{
method: 'PUT',
path: '/channels/' + channel,
accessToken: accessToken,
body: channelOptions
},
callback
);
};
/**
* Resets channel's stream key.
*
* DELETE /channels/:channel/stream_key
*
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.resetStreamKey =
function (channel, accessToken, callback) {
this._executeRequest(
{
method: 'DELETE',
path: '/channels/' + channel + '/stream_key',
accessToken: accessToken
},
callback
);
};
/**
* Start commercial on channel.
*
* POST /channels/:channel/commercial
*
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the request
* @param [parameters.length] {Number} The length of the commercial break in
* seconds. One of 30, 60, 90, 120, 150 or 180. Defaults to 30.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.startCommercial =
function (channel, accessToken, parameters, callback) {
this._executeRequest(
{
method: 'POST',
path: '/channels/' + channel + '/commercial',
accessToken: accessToken
},
parameters,
callback
);
};
/**
* Returns a list of team objects channel belongs to.
*
* GET /channels/:channel/teams
*
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelTeams = function(channel, callback){
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/teams'
},
callback
);
};
// ##### # # # #######
// # # # # # # #
// # # # # # #
// # ####### # # #
// # # # ####### #
// # # # # # # #
// ##### # # # # #
/**
* Returns a links object to all other chat endpoints.
*
* GET /chat/:channel
*
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelChat = function(channel, callback){
this._executeRequest(
{
method: 'GET',
path: '/chat/' + channel,
},
callback
);
};
/**
* Returns a list of all emoticon objects for Twitch.
*
* GET /chat/emoticons
*
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getEmoticons = function(callback){
this._executeRequest(
{
method: 'GET',
path: '/chat/emoticons',
},
callback
);
};
/**
* Returns a list of chat badges that can be used in the channel's chat.
*
* GET /chat/:channel/badges
*
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelBadges = function(channel, callback){
this._executeRequest(
{
method: 'GET',
path: '/chat/' + channel + '/badges',
},
callback
);
};
// ####### ####### # # ####### # # #####
// # # # # # # # # # # # #
// # # # # # # # # # # #
// ##### # # # # # # # # # #####
// # # # # # # # # # # #
// # # # # # # # # # # # #
// # ####### ####### ####### ####### ## ## #####
/**
* Returns a list of follow objects.
*
* GET /channels/:channel/follows
*
* @param channel {String} The channel name
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of follow objects.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.direction] {String} Creation date sorting direction.
* Defaults to desc. Valid values are asc and desc.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelFollows = function(channel, parameters, callback){
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/follows',
},
parameters,
callback
);
};
/**
* Returns a list of follow objects
*
* GET /users/:user/follows/channels
*
* @param user {String} The user name
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of follow objects.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.direction] {String} Creation date sorting direction.
* Defaults to desc. Valid values are asc and desc.
* @param [parameters.sortby] {String} Sort key. Defaults to created_at.
* Valid values are created_at, last_broadcast, and login.
* Defaults to desc. Valid values are asc and desc.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getUserFollowedChannels = function(user, parameters, callback){
this._executeRequest(
{
method: 'GET',
path: '/users/' + user + '/follows/channels',
},
parameters,
callback
);
};
/**
* Returns a follow object if user is following channel, 404 otherwise.
*
* GET /users/:user/follows/channels/:target
*
* @param user {String} The user name
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getUserFollowsChannel = function(user, channel, callback){
this._executeRequest(
{
method: 'GET',
path: '/users/' + user + '/follows/channels/' + channel,
},
callback
);
};
/**
* Adds user to channel's followers.
*
* PUT /users/:user/follows/channels/:target
*
* @param user {String} The user name
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the request
* @param [parameters.notifications] {boolean} Whether user should receive
* notifications when channel goes live. Defaults to false.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.userFollowChannel =
function(user, channel, accessToken, parameters, callback){
this._executeRequest(
{
method: 'PUT',
path: '/users/' + user + '/follows/channels/' + channel,
accessToken: accessToken
},
parameters,
callback
);
};
/**
* Removes user from channel's followers.
*
* DELETE /users/:user/follows/channels/:target
*
* @param user {String} The user name
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.userUnfollowChannel =
function(user, channel, accessToken, callback){
this._executeRequest(
{
method: 'DELETE',
path: '/users/' + user + '/follows/channels/' + channel,
accessToken: accessToken
},
callback
);
};
// ##### # # # ####### #####
// # # # # ## ## # # #
// # # # # # # # # #
// # #### # # # # # ##### #####
// # # ####### # # # #
// # # # # # # # # #
// ##### # # # # ####### #####
/**
* Returns a list of games objects sorted by number of current viewers
* on Twitch, most popular first.
*
* GET /games/top
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of games.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getTopGames = function(parameters, callback){
this._executeRequest(
{
method: 'GET',
path: '/games/top'
},
parameters,
callback
);
};
// ### # # ##### ####### ##### ####### #####
// # ## # # # # # # # # #
// # # # # # # # # #
// # # # # # #### ##### ##### # #####
// # # # # # # # # # #
// # # ## # # # # # # # #
// ### # # ##### ####### ##### # #####
/**
* Returns a list of ingest objects.
*
* GET /ingests/
*
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getIngests = function(callback){
this._executeRequest(
{
method: 'GET',
path: '/ingests'
},
callback
);
};
// ###### ####### ####### #######
// # # # # # # #
// # # # # # # #
// ###### # # # # #
// # # # # # # #
// # # # # # # #
// # # ####### ####### #
/**
* Basic information about the API and authentication status.
* If you are accessToken is provided, the response includes the status of your
* token and links to other related resources.
*
* GET /
*
* @param [accessToken] {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getRoot = function(accessToken, callback){
// acccessToken is optional
if (!callback){
callback = accessToken;
accessToken = undefined;
}
this._executeRequest(
{
method: 'GET',
path: '/',
accessToken: accessToken
},
callback
);
};
// ##### ####### # ###### ##### # #
// # # # # # # # # # # #
// # # # # # # # # #
// ##### ##### # # ###### # #######
// # # ####### # # # # #
// # # # # # # # # # # #
// ##### ####### # # # # ##### # #
/**
* Convenience method to search by entity
*
* @access private
*
* @param entity {String} Entity to search by
* @param [parameters] {Object} Parameters of the seach, content depends on entity
* @param accessToken {String} The token representing the authenticated user
*/
Twitch.prototype._search = function(entity, parameters, callback){
this._executeRequest(
{
method: 'GET',
path: '/search/' + entity
},
parameters,
callback
);
};
/**
* Returns a list of channel objects matching the search query.
*
* GET /search/channels
*
* @param parameters {Object} The parameters of the request
* @param parameters.query {String} Search query. The field can also be
* parameters.q
* @param [parameters.limit] {Number} Maximum number of channel objects.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.searchChannels = function(parameters, callback){
this._search('channels', parameters, callback);
};
/**
* Returns a list of stream objects matching the search query.
*
* GET /search/streams
*
* @param parameters {Object} The parameters of the request
* @param parameters.query {String} Search query. The field can also be
* parameters.q
* @param [parameters.limit] {Number} Maximum number of stream objects.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.hls] {boolean} If set to true, only returns streams
* using HLS. If set to false, only returns streams that are non-HLS.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.searchStreams = function(parameters, callback){
this._search('streams', parameters, callback);
};
/**
* Returns a list of game objects matching the search query.
*
* GET /search/games
*
* @param parameters {Object} The parameters of the request
* @param parameters.query {String} Search query. The field can also be
* parameters.q
* @param parameters.type {String} Only accepts suggest: Suggests a list of
* games similar to query
* @param [parameters.live] {boolean} If true, only returns games that are
* live on at least one channel.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.searchGames = function(parameters, callback){
this._search('games', parameters, callback);
};
// ##### ####### ###### ####### # # # #####
// # # # # # # # # ## ## # #
// # # # # # # # # # # # #
// ##### # ###### ##### # # # # # #####
// # # # # # ####### # # #
// # # # # # # # # # # # #
// ##### # # # ####### # # # # #####
/**
* Returns a stream object if live.
*
* GET /streams/:channel/
*
* @param channel {String} The channel name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelStream = function (channel, callback) {
this._executeRequest(
{
method: 'GET',
path: '/streams/' + channel
},
callback
);
};
/**
* Returns a list of stream objects that are queried by a number of parameters
* sorted by number of viewers descending.
*
* GET /streams
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.game] {String} Streams categorized under game.
* @param [parameters.channel] {String} Streams from a comma separated
* list of channels.
* @param [parameters.limit] {Number} Maximum number of streams.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.client_id] {String} Only shows streams from
* applications of client_id.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getStreams = function (parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/streams'
},
parameters,
callback
);
};
/**
* Returns a list of featured (promoted) stream objects.
*
* GET /streams/featured
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of streams.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getFeaturedStreams = function (parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/streams/featured'
},
parameters,
callback
);
};
/**
* Returns a summary of current streams.
*
* GET /streams/summary
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.game] {String} Streams categorized under game.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getStreamsSummary = function (parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/streams/summary'
},
parameters,
callback
);
};
// ##### # # ###### #####
// # # # # # # # #
// # # # # # #
// ##### # # ###### #####
// # # # # # # ###
// # # # # # # # # ###
// ##### ##### ###### ##### ###
/**
* Returns a list of subscription objects sorted by subscription relationship
* creation date which contain users subscribed to channel.
*
* GET /channels/:channel/subscriptions
*
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of subscription objects.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.direction] {String} Creation date sorting direction.
* Defaults to asc. Valid values are asc and desc.
*/
Twitch.prototype.getChannelSubscriptions =
function (channel, accessToken, parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/subscriptions',
accessToken: accessToken
},
parameters,
callback
);
};
/**
* Returns a subscription object which includes the user if that user
* is subscribed. Requires authentication for channel.
* The authenticated user must be the owner of the channel
*
* GET /channels/:channel/subscriptions/:user
*
* @param user {String} The user name
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getUserSubscriptionToChannel =
function (user, channel, accessToken, callback) {
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/subscriptions/' + user,
accessToken: accessToken
},
callback
);
};
/**
* Returns a channel object that user subscribes to. user must be authenticated
* by accessToken.
*
* GET /users/:user/subscriptions/:channel
*
* @param user {String} The user name
* @param channel {String} The channel name
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelSubscriptionOfUser =
function (user, channel, accessToken, callback) {
this._executeRequest(
{
method: 'GET',
path: '/users/' + user + '/subscriptions/' + channel,
accessToken: accessToken
},
callback
);
};
// ####### ####### # # # #####
// # # # # ## ## # #
// # # # # # # # # #
// # ##### # # # # # #####
// # # ####### # # #
// # # # # # # # #
// # ####### # # # # #####
/**
* Returns a list of active teams.
*
* GET /teams/
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of teams.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getTeams = function (parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/teams'
},
parameters,
callback
);
};
/**
* Returns a team object for team.
*
* GET /teams/:team/
*
* @param team {String} The team name
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getTeam = function (team, callback) {
this._executeRequest(
{
method: 'GET',
path: '/teams/' + team
},
callback
);
};
// # # ##### ####### ###### #####
// # # # # # # # # #
// # # # # # # #
// # # ##### ##### ###### #####
// # # # # # # #
// # # # # # # # # #
// ##### ##### ####### # # #####
/**
* Returns a user object.
*
* GET /users/:user
*
* @param user {String} The user name of the user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getUser = function (user, callback) {
this._executeRequest(
{
method: 'GET',
path: '/users/' + user
},
callback
);
};
/**
* Returns a user object that represents the user authenticated by accessToken.
*
* GET /user
*
* @param accessToken {String} The token representing the authenticated user
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getAuthenticatedUser = function (accessToken, callback) {
this._executeRequest(
{
method: 'GET',
path: '/user',
accessToken: accessToken
},
callback
);
};
/**
* Returns a list of stream objects that the authenticated user is following.
*
* GET /streams/followed
*
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of streams.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.stream_type] {String} Only shows streams from a certain
* type. Permitted values: all, playlist, live
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getAuthenticatedUserFollowedStreams =
function (accessToken, parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/streams/followed',
accessToken: accessToken
},
parameters,
callback
);
};
/**
* Returns a list of video objects from channels that the authenticated user
* is following.
*
* GET /videos/followed
*
* @param accessToken {String} The token representing the authenticated user
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of videos.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getAuthenticatedUserFollowedVideos =
function (accessToken, parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/videos/followed',
accessToken: accessToken
},
parameters,
callback
);
};
// # # ### ###### ####### ####### #####
// # # # # # # # # # #
// # # # # # # # # #
// # # # # # ##### # # #####
// # # # # # # # # #
// # # # # # # # # # #
// # ### ###### ####### ####### #####
/**
* Returns a video object.
*
* GET /videos/:id
*
* @param videoId {String} The id of the video
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getVideo = function (videoId, callback) {
this._executeRequest(
{
method: 'GET',
path: '/videos/' + videoId
},
callback
);
};
/**
* Returns a list of videos created in a given time period sorted by number of
* views, most popular first.
*
* GET /videos/top
*
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of videos.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.game] {String} Returns only videos from game.
* @param [parameters.period] {String} Returns only videos created in time
* period. Valid values are week, month, or all. Defaults to week.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getTopVideos = function (parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/videos/top'
},
parameters,
callback
);
};
/**
* Returns a list of videos ordered by time of creation, starting with
* the most recent from channel.
*
* GET /channels/:channel/videos
*
* @param channel {String} The channel name
* @param [parameters] {Object} The parameters of the request
* @param [parameters.limit] {Number} Maximum number of videos.
* Maximum is 100, defaults to 25
* @param [parameters.offset] {Number} Follow object offset for pagination.
* Defaults to 0
* @param [parameters.broadcasts] {boolean} Returns only broadcasts
* when true, only highlights when false. Defaults to false.
* @param [parameters.hls] {boolean} If set to true, only returns streams
* using HLS. If set to false, only returns streams that are non-HLS.
* @param callback {requestCallback} The callback that will manage the response
*/
Twitch.prototype.getChannelVideos = function (channel, parameters, callback) {
this._executeRequest(
{
method: 'GET',
path: '/channels/' + channel + '/videos'
},
parameters,
callback
);
};
module.exports = Twitch;