Daily MLB lineups API

An isomorphic web application written with Node and Reactjs. Basic UI renders a sample API JSON response. API parses RotoWire MLB daily lineups page (rotowire.com/baseball/daily_lineups.htm) and returns data in JSON format. The application uses MongoDB and JSONWebToken for user authentication, along with several libraries for XML parsing for the API call.

Baseball lineups are difficult to predict and hard to keep up with manually. This API offers the option of programmatically hooking in to the best data source for lineups (rotowire.com). I created this API to hook into learning algorithms for generating fantasy baseball lineups.

Sample JSON response:
{"games":[{"time":"3:10 PM ET","weather":" Wind 4 MPH In ","away":{"name":"St. Louis Cardinals","record":"80-71","HA":"Away","pitcher":{"name":"Luke Weaver","pitcherHand":"R","pitcherRecord":"1-3","pitcherEra":"3.21"},"lineup":[{"player":"Matt Carpenter","ID":"572761","position":"1B","bats":"L","batting":1},{"player":"Aledmys Diaz","ID":"649557","position":"SS","bats":"R","batting":2},{"player":"Jedd Gyorko","ID":"576397","position":"3B","bats":"R","batting":3},{"player":"Brandon Moss","ID":"461235","position":"LF","bats":"L","batting":4},{"player":"Randal Grichuk","ID":"545341","position":"CF","bats":"R","batting":5},{"player":"J. Hazelbaker","ID":"571757","position":"RF","bats":"L","batting":6},{"player":"Carson Kelly","ID":"608348","position":"C","bats":"R","batting":7},{"player":"Kolten Wong","ID":"543939","position":"2B","bats":"L","batting":8},{"player":"Luke Weaver","ID":"596133","position":"P","bats":"R","batting":9}]},"home":{"name":"Colorado Rockies","record":"72-79","HA":"Away","pitcher":{"name":"German Marquez","pitcherHand":"R","pitcherRecord":"0-0","pitcherEra":"5.06"},"lineup":[{"player":"C. Blackmon","ID":"453568","position":"CF","bats":"L","batting":1},{"player":"DJ LeMahieu","ID":"518934","position":"2B","bats":"R","batting":2},{"player":"Carlos Gonzalez","ID":"471865","position":"RF","bats":"L","batting":3},{"player":"Nolan Arenado","ID":"571448","position":"3B","bats":"R","batting":4},{"player":"Gerardo Parra","ID":"467827","position":"1B","bats":"L","batting":5},{"player":"Tom Murphy","ID":"608596","position":"C","bats":"R","batting":6},{"player":"J. Patterson","ID":"641958","position":"LF","bats":"L","batting":7},{"player":"Daniel Descalso","ID":"518614","position":"SS","bats":"L","batting":8},{"player":"German Marquez","ID":"608566","position":"P","bats":"R","batting":9}]}}]};
		
Run Script:
Build the bundle file and run babel-node to start the node server:

NODE_ENV=production node_modules/.bin/webpack -p
NODE_ENV=production node_modules/.bin/babel-node --presets 'react,es2015' src/server.js
		
Sample Data
@
3:10 PM ET
St. Louis Cardinals (80-71)
Colorado Rockies (72-79)
1
1B
Matt Carpenter (L)
2
SS
Aledmys Diaz (R)
3
3B
Jedd Gyorko (R)
4
LF
Brandon Moss (L)
5
CF
Randal Grichuk (R)
6
RF
J. Hazelbaker (L)
7
C
Carson Kelly (R)
8
2B
Kolten Wong (L)
9
P
Luke Weaver (R)
1
CF
C. Blackmon (L)
2
2B
DJ LeMahieu (R)
3
RF
Carlos Gonzalez (L)
4
3B
Nolan Arenado (R)
5
1B
Gerardo Parra (L)
6
C
Tom Murphy (R)
7
LF
J. Patterson (L)
8
SS
Daniel Descalso (L)
9
P
German Marquez (R)
Luke Weaver (R)
W-L: W-L: 1-3 ERA: 3.21
German Marquez (R)
W-L: 0-0 ERA: 5.06
@
3:35 PM ET
Houston Astros (80-71)
Oakland A's (66-85)
1
RF
George Springer (R)
2
3B
Y. Gurriel (R)
3
2B
Jose Altuve (R)
4
SS
Carlos Correa (R)
5
DH
Evan Gattis (R)
6
1B
Marwin Gonzalez (S)
7
LF
Tony Kemp (L)
8
C
Jason Castro (L)
9
CF
Jake Marisnick (R)
1
CF
Joe Wendle (L)
2
DH
Stephen Vogt (L)
3
3B
Ryon Healy (R)
4
RF
Danny Valencia (R)
5
1B
Yonder Alonso (L)
6
SS
Marcus Semien (R)
7
C
Bruce Maxwell (L)
8
CF
Brett Eibner (R)
9
LF
Jake Smolinski (R)
Collin McHugh (R)
W-L: 11-10 ERA: 4.66
Daniel Mengden (R)
W-L: 2-7 ERA: 5.68
@
3:40 PM ET
Toronto Blue Jays (83-68)
Seattle Mariners (79-72)
1
2B
Devon Travis (R)
2
3B
Josh Donaldson (R)
3
DH
E. Encarnacion (R)
4
RF
Jose Bautista (R)
5
C
Russell Martin (R)
6
SS
Troy Tulowitzki (R)
7
LF
M. Saunders (L)
8
1B
Justin Smoak (S)
9
CF
Kevin Pillar (R)
1
LF
Norichika Aoki (L)
2
RF
Seth Smith (L)
3
2B
Robinson Cano (L)
4
DH
Nelson Cruz (R)
5
3B
Kyle Seager (L)
6
1B
Adam Lind (L)
7
CF
Leonys Martin (L)
8
C
Jesus Sucre (R)
9
SS
Ketel Marte (S)
Aaron Sanchez (R)
W-L: 13-2 ERA: 3.17
Felix Hernandez (R)
W-L: 11-6 ERA: 3.79
@
7:05 PM ET
Boston Red Sox (87-64)
Baltimore Orioles (82-69)
Pending
1
CF
Adam Jones (R)
2
LF
Hyun Soo Kim  (L)
3
3B
Manny Machado (R)
4
1B
Chris Davis (L)
5
RF
Mark Trumbo (R)
6
DH
Pedro Alvarez (L)
7
2B
Jonathan Schoop (R)
8
C
Matt Wieters (S)
9
SS
J.J. Hardy (R)
Clay Buchholz (R)
W-L: 7-10 ERA: 5.20
Ubaldo Jimenez (R)
W-L: 7-11 ERA: 5.94
Sample NodeJs Client:
var request = require('request');
var http = require('http');
var callback = function(response){
   var body = '';
   response.on('data', function(data) {
      body += data;
   });
   
   response.on('end', function() {
	if(body!=null){
	    	print(body);
	}

   });
}
request({
    url: "http://localhost:3000/api/authenticate",
    method: "POST",
    json: true,   // <--Very important!!!
    body: {
	name:'Admin',
        password:'qwerty1'
    }
}, function (error, response, body){
    	if(error){console.log(error)}


	var options = {
	    host: 'localhost',
	    port: '3000',
	    path:'/api/lineupsFromTestPage',
	    headers: {
		    'x-access-token':response.body.token,
		    "Content-Type": "application/json"
	    }
	 };
	var req = http.request(options, callback);
	req.end();

});