diff --git a/README.md b/README.md index 27ca2a3..6191f36 100644 --- a/README.md +++ b/README.md @@ -203,3 +203,38 @@ Team Fortress 2 date: 0 }] ``` + +### getOwnedGames + +Метод возвращает информацию об играх пользователя. +Для вызова метода необходим ключ Steam API Key. + +`getOwnedGames(playerId)` + +* `playerId` - идентификатор пользователя. + +```js +const Steam = require('steam-web-api'); +const steam = new Steam('STEAM_API_KEY'); + +steam.getOwnedGames('76561198030288194') + .then(result => { + console.dir(result.games); + }) + .catch(err => console.error(err.message)); +``` + +Результат: + +```js +[{ + id: 220, + name: 'Half-Life 2', + playtime: { + 'forever': 1060, + '2weeks': 0 + }, + icon: 'http://media.steampowered.com/steamcommunity/public/images/apps/220/fcfb366051782b8ebf2aa297f3b746395858cb62.jpg', + logo: 'http://media.steampowered.com/steamcommunity/public/images/apps/220/e4ad9cf1b7dc8475c1118625daf9abd4bdcbcad0.jpg' +}] +``` diff --git a/index.js b/index.js index f319d11..fefbc2a 100644 --- a/index.js +++ b/index.js @@ -40,6 +40,12 @@ class Steam { 'steamid': playerId }); } + + getOwnedGames(playerId) { + return this.client.request('getOwnedGames', { + 'steamid': playerId + }); + } } module.exports = Steam; diff --git a/src/client.js b/src/client.js index 292ad81..74c2aaf 100644 --- a/src/client.js +++ b/src/client.js @@ -9,6 +9,7 @@ const EntityAchievements = require('./entity/entityAchievements'); const EntityPlayers = require('./entity/entityPlayers'); const EntityFriends = require('./entity/entityFriends'); const EntityPlayerAchievements = require('./entity/entityPlayerAchievements'); +const EntityGames = require('./entity/entityGames'); class SteamClient { static get methods() { @@ -80,6 +81,21 @@ class SteamClient { 'defaults': {}, 'key': true, 'entity': (data, method, url) => { return new EntityPlayerAchievements(data, method, url); } + }, + 'getOwnedGames': { + 'name': 'getOwnedGames', + 'url': { + 'protocol': 'http', + 'host': 'api.steampowered.com', + 'path': '/IPlayerService/GetOwnedGames/v0001/' + }, + 'args': ['steamid', 'format', 'include_appinfo'], + 'defaults': { + 'format': 'json', + 'include_appinfo': '1' + }, + 'key': true, + 'entity': (data, method, url) => { return new EntityGames(data, method, url); } } } } diff --git a/src/entity/entityGames.js b/src/entity/entityGames.js new file mode 100644 index 0000000..a2d6973 --- /dev/null +++ b/src/entity/entityGames.js @@ -0,0 +1,28 @@ +'use strict'; + +const Entity = require('./entity'); + +class EntityGames extends Entity { + constructor(rawData, method, url) { + super(rawData, method, url); + + let data = []; + for (let index in rawData['response']['games']) { + let item = rawData['response']['games'][index]; + data.push({ + 'id': item['appid'], + 'name': item['name'], + 'playtime': { + 'forever': item['playtime_forever'], + '2weeks': (item['playtime_2weeks'] ? item['playtime_2weeks'] : 0) + }, + 'icon': `http://media.steampowered.com/steamcommunity/public/images/apps/${item['appid']}/${item['img_icon_url']}.jpg`, + 'logo': `http://media.steampowered.com/steamcommunity/public/images/apps/${item['appid']}/${item['img_logo_url']}.jpg`, + }); + } + + this.games = data; + } +} + +module.exports = EntityGames; diff --git a/test/testSteam.js b/test/testSteam.js index b1acf8f..f69f938 100644 --- a/test/testSteam.js +++ b/test/testSteam.js @@ -8,6 +8,7 @@ const EntityAchievements = require('../src/entity/entityAchievements'); const EntityPlayers = require('../src/entity/entityPlayers'); const EntityFriends = require('../src/entity/entityFriends'); const EntityPlayerAchievements = require('../src/entity/entityPlayerAchievements'); +const EntityGames = require('../src/entity/entityGames'); const STEAM_KEY = process.env.STEAM_KEY; @@ -90,4 +91,16 @@ describe('Steam', function () { }) .catch(err => done(err)); }); + + it('getOwnedGames', (done) => { + steam.getOwnedGames('76561198030288194') + .then(res => { + assert.instanceOf(res, EntityGames); + assert.equal(res.url, 'http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?steamid=76561198030288194&key=' + STEAM_KEY + '&format=json&include_appinfo=1'); + assert.equal(res.method, 'getOwnedGames'); + assert.isTrue(res.games.length > 0); + done(); + }) + .catch(err => done(err)); + }); });