Skip to content

Commit 2df6330

Browse files
committed
Removed XML and CSV support. Save results in local folder.
1 parent c96377c commit 2df6330

File tree

5 files changed

+124
-292
lines changed

5 files changed

+124
-292
lines changed

lib/API_v1_0.js

Lines changed: 67 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var Q = require('q');
33
var rp = require('request-promise');
44
var fs = require('fs');
55
var util = require('util');
6-
var xml2json = require('./xml2json.js');
6+
var libVersion = require('../package.json').version;
77

88
// Private Vars
99
var platform = util.format('%s-%s%s', os.arch(), os.platform(), os.release());
@@ -12,12 +12,17 @@ var options = {
1212
uri: '',
1313
json: true,
1414
resolveWithFullResponse: true,
15+
gzip: true,
1516
headers: {
1617
'Authorization': '',
17-
'Accept-Encoding': 'gzip',
1818
'User-Agent': util.format('MySportsFeeds-Node/%s (%s)', libVersion, platform)
1919
},
20-
qs: {}
20+
qs: {},
21+
transform: function(body) {
22+
// console.log("response = '" + util.inspect(body, {depth: null}) + "'");
23+
24+
return body;
25+
}
2126
};
2227
var auth = null;
2328
var baseUrl = "https://www.mysportsfeeds.com/api/feed/pull";
@@ -40,9 +45,10 @@ function __verifyFeedName(feed) {
4045
}
4146

4247
function __verifyFormat(format) {
43-
var isValid = false;
48+
var isValid = true;
4449

45-
if ( format != 'json' && format != 'xml' && format != 'csv' ) {
50+
// Only JSON format supported
51+
if ( format != 'json' ) {
4652
isValid = false;
4753
}
4854

@@ -60,7 +66,7 @@ function __leagueAndSeasonUrl(league, season, feed, format, params) {
6066
function __makeOutputFilename(league, season, feed, format, params) {
6167
var filename = feed + '-' + league + '-' + season;
6268

63-
if (Object.keys(params).includes("gameid") ) {
69+
if ( Object.keys(params).includes("gameid") ) {
6470
filename += "-" + params["gameid"];
6571
}
6672

@@ -73,65 +79,39 @@ function __makeOutputFilename(league, season, feed, format, params) {
7379
return filename;
7480
}
7581

76-
function __parseXml(xmlStr) {
77-
var dom = null;
78-
79-
if ( window.DOMParser ) {
80-
try {
81-
dom = (new DOMParser()).parseFromString(xmlStr, "text/xml");
82-
} catch (e) {
83-
dom = null;
84-
}
85-
} else if ( window.ActiveXObject ) {
86-
try {
87-
dom = new ActiveXObject('Microsoft.XMLDOM');
88-
dom.async = false;
89-
90-
if ( !dom.loadXML(xml) ) { // parse error ..
91-
throw new Error(dom.parseError.reason + dom.parseError.srcText);
92-
}
93-
} catch (e) {
94-
dom = null;
95-
}
96-
} else {
97-
throw new Error("cannot parse xml string!");
98-
}
99-
100-
return dom;
101-
}
102-
10382
function __saveFeed(response, league, season, feed, format, params) {
10483
var storeOutput = null;
105-
var filename = "";
10684

10785
// Save to memory regardless of selected method
10886
if ( format == "json" ) {
109-
storeOutput = JSON.parse(response);
87+
storeOutput = response;
11088
} else if ( format == "xml" ) {
111-
storeOutput = eval(xml2json(__parseXml(response)));
89+
throw new Error("XML feed format not supported in this version.");
11290
} else if ( format == "csv" ) {
113-
throw new Error("CSV feed format not supported.");
91+
throw new Error("CSV feed format not supported in this version.");
11492
}
11593

11694
if ( storeType == "file" ) {
11795
if ( !fs.existsSync(storeLocation) ) {
11896
fs.mkdir(storeLocation);
11997
}
12098

121-
filename = __makeOutputFilename(league, season, feed, format, params);
99+
var filename = __makeOutputFilename(league, season, feed, format, params);
122100

123101
if ( format == "json" ) { // This is JSON
124-
fs.writeFileSync(filename, JSON.stringify(storeOutput));
125-
} else if ( format == "xml" ) { // This is xml
126-
fs.writeFileSync(filename, JSON.stringify(storeOutput));
102+
fs.writeFileSync(storeLocation + filename, JSON.stringify(storeOutput));
127103
} else {
128104
throw new Error("Could not interpret feed output format.");
129105
}
106+
107+
if ( verbose ) {
108+
console.log("File saved as '" + storeLocation + filename + "'.");
109+
}
130110
}
131111
}
132112

133113
// Public Functions
134-
function API_v1_0(v, storeT, storeL) {
114+
var API_v1_0 = function(v, storeT, storeL) {
135115
verbose = v;
136116
storeType = storeT;
137117
storeLocation = storeL;
@@ -152,9 +132,13 @@ function API_v1_0(v, storeT, storeL) {
152132
'active_players',
153133
'player_injuries',
154134
'latest_updates',
155-
'daily_dfs'
135+
'daily_dfs',
136+
'overall_team_standings',
137+
'division_team_standings',
138+
'conference_team_standings',
139+
'playoff_team_standings'
156140
];
157-
}
141+
};
158142

159143
// Indicate this version does support BASIC auth
160144
API_v1_0.prototype.supportsBasicAuth = function() {
@@ -177,28 +161,29 @@ API_v1_0.prototype.getData = function(league, season, feed, format, params) {
177161
throw new Error("You must authenticate() before making requests.");
178162
}
179163

180-
// add force=false parameter (helps prevent unnecessary bandwidth use)
164+
// Add force=false parameter (helps prevent unnecessary bandwidth use)
181165
if ( !Object.keys(params).includes("force") ) {
182166
params['force'] = 'false';
183167
}
184168

185169
if ( !__verifyFeedName(feed) ) {
186170
throw new Error("Unknown feed '" + feed + "'.");
171+
}
187172

188173
if ( !__verifyFormat(format) ) {
189-
throw new Error("Unsupported format '" + output_format + "'.");
174+
throw new Error("Unsupported format '" + format + "'.");
190175
}
191176

192177
var url = "";
193178

194179
if ( feed == 'current_season' ) {
195-
url = __leagueOnlyUrl(league, feed, output_format, params);
180+
url = __leagueOnlyUrl(league, feed, format, params);
196181
} else {
197-
url = __leagueAndSeasonUrl(league, season, feed, output_format, params);
182+
url = __leagueAndSeasonUrl(league, season, feed, format, params);
198183
}
199184

200185
if ( verbose ) {
201-
console.log("Making API request to '" + url + "'.";
186+
console.log("Making API request to '" + url + "'.");
202187
console.log(" with headers:");
203188
console.log(options.headers);
204189
console.log(" and params:");
@@ -210,45 +195,52 @@ API_v1_0.prototype.getData = function(league, season, feed, format, params) {
210195
options.qs = params;
211196

212197
// Make the request
213-
rp(options).then(function(response) {
214-
var data = response.body;
198+
rp(options).then(function(body) {
199+
var data = body;
200+
201+
if ( storeType ) {
202+
__saveFeed(data, league, season, feed, format, params);
203+
}
204+
205+
if ( format == "json" ) {
206+
data = body;
207+
} else if ( format == "xml" ) {
208+
throw new Error("XML feed format not supported in this version.");
209+
} else if ( format == "csv" ) {
210+
throw new Error("CSV feed format not supported in this version.");
211+
}
215212

216-
if ( response.statusCode == 200 ) { // Success!
217-
if ( storeType ) {
218-
__saveFeed(data, league, season, feed, format, params);
213+
deferred.resolve(data);
214+
})
215+
.catch(function(err) {
216+
if ( verbose ) {
217+
console.log("err = '" + util.inspect(err, {depth: null}) + "'");
218+
}
219+
220+
if ( err.statusCode == 304 ) { // Content hasn't changed, read from local file
221+
if ( verbose ) {
222+
console.log("Data hasn't changed since last call.");
219223
}
220224

225+
var filename = __makeOutputFilename(league, season, feed, format, params);
226+
227+
var data = fs.readFileSync(storeLocation + filename);
228+
221229
if ( format == "json" ) {
222230
data = JSON.parse(data);
223231
} else if ( format == "xml" ) {
224-
data = eval(xml2json(__parseXml(data)));
232+
throw new Error("XML feed format not supported in this version.");
225233
} else if ( format == "csv" ) {
226-
throw new Error("CSV feed format not supported.");
227-
}
228-
} else if ( response.statusCode == 304 ) { // Content hasn't changed, read from local file
229-
if ( verbose ) {
230-
console.log("Data hasn't changed since last call.");
234+
throw new Error("CSV feed format not supported in this version.");
231235
}
232236

233-
var filename = __makeOutputFilename(league, season, feed, output_format, params);
234-
235-
fs.readFile(storeLocation + filename, function(err, data) {
236-
if ( format == "json" ) {
237-
data = JSON.parse(data);
238-
} else if ( format == "xml" ) {
239-
data = eval(xml2json(__parseXml(data)));
240-
} else if ( format == "csv" ) {
241-
throw new Error("CSV feed format not supported.");
242-
}
243-
});
237+
deferred.resolve(data);
244238
} else {
245-
throw new Error("API call failed with error: " + response.statusCode);
239+
throw new Error("API call failed with error: " + err.statusCode);
246240
}
247-
248-
deferred.resolve(data);
249241
});
250242

251243
return deferred.promise;
252244
};
253245

254-
module.exports = API_v1_0;
246+
exports = module.exports = API_v1_0;

lib/MySportsFeeds.js

Lines changed: 0 additions & 57 deletions
This file was deleted.

lib/index.js

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,57 @@
1-
var msf = require('./MySportsFeeds.js');
1+
var API_v1_0 = require('./api_v1_0.js');
22

3-
exports.MySportsFeeds = msf.MySportsFeeds;
3+
// Private Vars
4+
var apiVersion = "1.0";
5+
var storeType = "file";
6+
var storeLocation = "results/";
7+
var apiInstance = null;
8+
9+
// Private Functions
10+
function __verifyVersion(version) {
11+
if ( version != '1.0' ) {
12+
throw new Error("Unrecognized version specified. Supported versions are: '1.0'");
13+
}
14+
}
15+
16+
function __verifyStore(storeType, storeLocation) {
17+
if ( storeType && storeType != 'file' ) {
18+
throw new Error("Unrecognized storage type specified. Supported values are: None,'file'");
19+
}
20+
21+
if ( storeType && storeType == 'file' ) {
22+
if ( !storeLocation ) {
23+
throw newError("Must specify a location for stored data.");
24+
}
25+
}
26+
}
27+
28+
// Public Functions
29+
var MySportsFeeds = function(apiVers = "1.0", verb = true, storeT = "file", storeL = "results/") {
30+
__verifyVersion(apiVers);
31+
__verifyStore(storeT, storeL);
32+
33+
apiVersion = apiVers;
34+
verbose = verb;
35+
storeType = storeT;
36+
storeLocation = storeL;
37+
38+
// Instantiate an instance of the appropriate API depending on version
39+
if ( apiVersion == '1.0' ) {
40+
apiInstance = new API_v1_0(verbose, storeType,
41+
storeLocation);
42+
}
43+
};
44+
45+
MySportsFeeds.prototype.authenticate = function(username, password) {
46+
if ( !apiInstance.supportsBasicAuth() ) {
47+
throw new Error("BASIC authentication not supported for version " + apiVersion);
48+
}
49+
50+
apiInstance.setAuthCredentials(username, password);
51+
};
52+
53+
MySportsFeeds.prototype.getData = function(league, season, feed, format, params) {
54+
return apiInstance.getData(league, season, feed, format, params);
55+
};
56+
57+
exports = module.exports = MySportsFeeds;

0 commit comments

Comments
 (0)