@@ -3,7 +3,7 @@ var Q = require('q');
33var rp = require ( 'request-promise' ) ;
44var fs = require ( 'fs' ) ;
55var util = require ( 'util' ) ;
6- var xml2json = require ( './xml2json.js' ) ;
6+ var libVersion = require ( '../package.json' ) . version ;
77
88// Private Vars
99var 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} ;
2227var auth = null ;
2328var baseUrl = "https://www.mysportsfeeds.com/api/feed/pull" ;
@@ -40,9 +45,10 @@ function __verifyFeedName(feed) {
4045}
4146
4247function __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) {
6066function __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-
10382function __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
160144API_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 ;
0 commit comments