Last active
March 23, 2018 19:14
-
-
Save mschnitzler/6994adeaea8de8c65e51 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Yahoo Fantasy Baseball Batter vs Pitcher Career Stats | |
// @namespace http://baseball.fantasysports.yahoo.com/ | |
// @version 0.4.3 | |
// @description displays batter vs pitcher career stats | |
// @author Michael Schnitzler | |
// @match https://baseball.fantasysports.yahoo.com/b1/*/* | |
// @grant none | |
// @require http://code.jquery.com/jquery-latest.js | |
// ==/UserScript== | |
function replaceIllegalCharacters(s) { | |
s = s.split('á').join('a'); | |
s = s.split('í').join('i'); | |
s = s.split('ó').join('o'); | |
s = s.split('é').join('e'); | |
s = s.split('ñ').join('n'); | |
s = s.split('Á').join('A'); | |
s = s.split('ú').join('u'); | |
return s; | |
} | |
function getMLBPlayerId(name) { | |
var playerId; | |
var sname = replaceIllegalCharacters(name); | |
var url = 'https://lookup-service-prod.mlb.com/json/named.search_player_all.bam?sport_code=%27mlb%27&name_part=%27' + encodeURIComponent(sname) + '%25%27&active_sw=%27Y%27'; | |
$.ajax({async: false, | |
url: url, | |
dataType: "json", | |
success: function(data) { | |
if (data.search_player_all.queryResults.totalSize=='1') { | |
playerId = data.search_player_all.queryResults.row.player_id; | |
} | |
else if (data.search_player_all.queryResults.totalSize>1) { | |
} | |
}, | |
error: function(data) { | |
alert('error'); | |
} | |
}); | |
//$.getJSON(url, function(data) { | |
// playerId = data.search_player_all.queryResults.row.player_id; | |
// alert(playerId); | |
// }); | |
//alert(playerId); | |
return playerId; | |
} | |
function getBatterVsPitcherStats(batterId, pitcherId) { | |
url = 'https://lookup-service-prod.mlb.com/json/named.stats_batter_vs_pitcher_composed.bam?sport_code=%27mlb%27&game_type=%27R%27&player_id=' + batterId + '&pitcher_id=' + pitcherId; | |
var stats; | |
$.ajax({async:false, | |
url: url, | |
dataType: 'json', | |
success: function(data) { | |
stats = data;} | |
}); | |
return stats; | |
} | |
function getLvsRStats(playerId) { | |
var stats = new Object(); | |
var url = 'https://lookup-service-prod.mlb.com/json/named.mlb_individual_hitting_sits_composed.bam?sport_code=%27mlb%27&game_type=%27R%27&player_id=' + playerId + '&sit_code=%27vl%27&sit_code=%27vr%27'; | |
$.ajax({async:false, | |
url: url, | |
dataType: 'json', | |
success: function(data) { | |
var l = new Array(); | |
var r = new Array(); | |
for (i=0;i<data.mlb_individual_hitting_sits_composed.mlb_individual_hitting_sits_season_total.queryResults.totalSize;i++) { | |
var row; | |
if (data.mlb_individual_hitting_sits_composed.mlb_individual_hitting_sits_season_total.queryResults.totalSize==1) { | |
row = data.mlb_individual_hitting_sits_composed.mlb_individual_hitting_sits_season_total.queryResults.row; | |
} | |
else { | |
row = data.mlb_individual_hitting_sits_composed.mlb_individual_hitting_sits_season_total.queryResults.row[i]; | |
} | |
if (row.sit_code=='vl') { | |
l.push(row); | |
} | |
else if (row.sit_code=='vr') { | |
r.push(row); | |
} | |
} | |
var lh=0, lab=0, ltb=0, rh=0, rab=0, rtb=0; | |
for(i=0;i<l.length;i++) { | |
lh = lh + parseInt(l[i].h); | |
lab = lab + parseInt(l[i].ab); | |
ltb = ltb + parseInt(l[i].tb); | |
} | |
for(i=0;i<r.length;i++) { | |
rh = rh + parseInt(r[i].h); | |
rab = rab + parseInt(r[i].ab); | |
rtb = rtb + parseInt(r[i].tb); | |
} | |
stats.lavg = (lh / lab).toFixed(3); | |
stats.lslg = (ltb / lab).toFixed(3); | |
stats.ravg = (rh / rab).toFixed(3); | |
stats.rslg = (rtb / rab).toFixed(3); | |
} | |
}); | |
return stats; | |
} | |
var opponentsLink = $("a:contains('Opponents')").attr("href"); | |
$('.Grid-u.Ta-end.Nowrap').prepend('<a class="Btn Btn-short Mend-med" href="' + opponentsLink + '">Batter vs. Pitcher</a>'); | |
if (window.location.href.indexOf("stat1=O") > -1) { | |
$('<th>Career Stats</th>').insertAfter('table#statTable0 > thead > tr > th:contains("Batters")'); | |
$('table#statTable0 > tbody > tr').each(function(rowNum,row) { | |
//var playerName = $(row).children('td.player > div > div > div.ysf-player-name > a').text(); | |
// get batter's player id | |
var playerName = $(row).find('td > div > div > div.ysf-player-name > a').text(); | |
var playerId = getMLBPlayerId(playerName); | |
// get pitcher's player id | |
var pitcherName = $(row).find('td > div > a.name').text(); | |
var pitcherHandLong = $(row).find('td > div > div.detail > span:first').text(); | |
var pitcherHand = (pitcherHandLong!=null) ? pitcherHandLong.substring(0,3) : ""; | |
var pitcherId = getMLBPlayerId(pitcherName); | |
var stats; | |
var avg0, avg1, slg0, slg1, sit0, sit1; | |
var splitStats; | |
if (playerId!=null) { | |
stats = getLvsRStats(playerId); | |
var lstat = 'vs LHP: ' + stats.lavg + ' ' + stats.lslg; | |
var rstat = 'vs RHP: ' + stats.ravg + ' ' + stats.rslg; | |
if (pitcherHand=='LHP') { | |
var lcol = (stats.lavg>=.280) ? "green" : "red"; | |
lstat = '<b style="color:' + lcol + '">' + lstat + '</b>'; | |
} | |
else if (pitcherHand=='RHP') { | |
var rcol = (stats.ravg>=.280) ? "green" : "red"; | |
rstat = '<b style="color:' + rcol + '">' + rstat + '</b>'; | |
} | |
splitStats = '<br>' + lstat + '<br>' + rstat; | |
} | |
if(playerId!=null && pitcherId!=null) { | |
stats = getBatterVsPitcherStats(playerId, pitcherId); | |
var avg = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.avg; | |
var slg = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.slg; | |
var h = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.h; | |
var ab = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.ab; | |
var hr = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.hr; | |
var so = stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.so; | |
var color = (avg>=.280) ? 'green' : 'red'; | |
var batterVsPitcherStats = ''; | |
if (stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.h!="") { | |
batterVsPitcherStats = '<b style="color:'+color+'">' + avg + '</b> ('+h+'/'+ab+')<br>'+ hr + ' HR, ' + so + 'SO'; | |
} | |
if (stats.stats_batter_vs_pitcher_composed.stats_batter_vs_pitcher_total.queryResults.row.h!=null) { | |
$('<td class="Nowrap Fz-xxs Bdrend"><div>' + batterVsPitcherStats + splitStats + '</div></td>').insertAfter($(row).find('td.player')); | |
} | |
else { | |
$('<td class="Nowrap Bdrend"></td>').insertAfter($(row).find('td.player')); | |
} | |
} | |
else { | |
$('<td class="Nowrap Bdrend"></td>').insertAfter($(row).find('td.player')); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment