NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name removes footbal matches
// @namespace https://www.betfair.com/exchange/plus/football
// @version 0.8
// @description excludes/removes footbal matches
// @author angelo.ndira@gmail.com
// @match https://www.betfair.com/exchange/plus/football
// @match https://www.betfair.com/exchange/plus/football?*
// @match https://www.betfair.com/exchange/plus/football/today
// @grant none
// @require http://code.jquery.com/jquery-1.12.4.min.js
// ==/UserScript==
/*global window jQuery $ console*/
function getMinimumInt(minimumValue, maximumValue, prompMsg) {
'use strict';
var value = prompt(prompMsg, minimumValue);
if (typeof (value) === 'undefined' || value === null) {
value = minimumValue;
}
value = parseInt(value);
if (value < minimumValue || maximumValue < value) {
value = minimumValue;
}
return value;
}
function getMaximumInt(minimumValue, maximumValue, prompMsg) {
'use strict';
var value = prompt(prompMsg, maximumValue);
if (typeof (value) === 'undefined' || value === null) {
value = maximumValue;
}
value = parseInt(value);
if (value < minimumValue || maximumValue < value) {
value = maximumValue;
}
return value;
}
function getMinimumFloat(minimumValue, maximumValue, prompMsg) {
'use strict';
var value = prompt(prompMsg, minimumValue);
if (typeof (value) === 'undefined' || value === null) {
value = minimumValue;
}
value = parseFloat(value);
if (value < minimumValue || maximumValue < value) {
value = minimumValue;
}
return value;
}
function getMaximumFloat(minimumValue, maximumValue, prompMsg) {
'use strict';
var value = prompt(prompMsg, maximumValue);
if (typeof (value) === 'undefined' || value === null) {
value = maximumValue;
}
value = parseFloat(value);
if (value < minimumValue || maximumValue < value) {
value = maximumValue;
}
return value;
}
function isValidSnapshot(marketDataSnapshot) {
'use strict';
if (typeof (marketDataSnapshot.timeInPlay) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.home) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.draw) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.away) === 'undefined') {
return false;
}
return true;
}
function readTimeInPlay(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('div.middle-label').each(function () {
var divNode = $(this);
marketDataSnapshot.timeInPlay = divNode.text().replace("'", "");
});
}
function readPriceAndSize(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('td.coupon-runners > div.coupon-runner').each(function () {
var divNode = $(this);
var selection = {};
divNode.find('button.bf-bet-button.back-button.back-selection-button').each(function () {
var buttonNode = $(this);
selection.backPrice = parseFloat(buttonNode.attr("price"));
selection.backSize = parseFloat(buttonNode.attr("size").replace(",", "").substring(1));
});
divNode.find('button.bf-bet-button.lay-button.lay-selection-button').each(function () {
var buttonNode = $(this);
selection.layPrice = parseFloat(buttonNode.attr("price"));
selection.laySize = parseFloat(buttonNode.attr("size").replace(",", "").substring(1));
});
if (typeof (marketDataSnapshot.home) === 'undefined') {
marketDataSnapshot.home = selection;
} else if (typeof (marketDataSnapshot.draw) === 'undefined') {
marketDataSnapshot.draw = selection;
} else if (typeof (marketDataSnapshot.away) === 'undefined') {
marketDataSnapshot.away = selection;
}
});
}
function readTeamNames(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('section.mod-event-line > ul.runners > li').each(function () {
var liNode = $(this);
try {
if (typeof (marketDataSnapshot.home.name) === 'undefined') {
marketDataSnapshot.home.name = liNode.text();
} else if (typeof (marketDataSnapshot.away.name) === 'undefined') {
marketDataSnapshot.away.name = liNode.text();
}
} catch (ex) {
console.log("error occurred while reading team name. liNode.text(): " + liNode.text() + ". " + ex);
}
});
}
function readMatchedAmount(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('section.mod-event-line > ul.matched-amount > li.matched-amount-value').each(function () {
var liNode = $(this);
marketDataSnapshot.matchedAmount = parseFloat(liNode.text().replace(",", "").substring(1));
});
}
function readHomeTeamScore(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('div.scores > span.home').each(function () {
var spanNode = $(this);
if (typeof (spanNode.text()) !== 'undefined') {
try {
marketDataSnapshot.home.score = parseInt(spanNode.text());
} catch (ex) {
console.log("error occurred while read home team score. spanNode.text(): " + spanNode.text());
}
}
});
}
function readAwayTeamScore(rowNode, marketDataSnapshot) {
'use strict';
rowNode.find('div.scores > span.away').each(function () {
var spanNode = $(this);
if (typeof (spanNode.text()) !== 'undefined') {
try {
marketDataSnapshot.away.score = parseInt(spanNode.text());
} catch (ex) {
console.log("error occurred while read away team score. spanNode.text(): " + spanNode.text());
}
}
});
}
function readMarketDataSnapshot(rowNode) {
'use strict';
var marketDataSnapshot = {};
readTimeInPlay(rowNode, marketDataSnapshot);
readPriceAndSize(rowNode, marketDataSnapshot);
readTeamNames(rowNode, marketDataSnapshot);
readMatchedAmount(rowNode, marketDataSnapshot);
readHomeTeamScore(rowNode, marketDataSnapshot);
readAwayTeamScore(rowNode, marketDataSnapshot);
//console.log(JSON.stringify(marketDataSnapshot, null, 4));
return marketDataSnapshot;
}
function checkTimeInPlayAndRemove(marketDataSnapshot, rowNode, minimumValue, maximumValue) {
'use strict';
if (typeof (marketDataSnapshot.timeInPlay) === 'undefined') {
return false;
}
if (marketDataSnapshot.timeInPlay === "END") {
console.log('checkTimeInPlayAndRemove. Match ENDED. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + marketDataSnapshot.timeInPlay);
rowNode.remove();
return true;
}
if (marketDataSnapshot.timeInPlay === "FT") {
console.log('checkTimeInPlayAndRemove. Match FullTime. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + marketDataSnapshot.timeInPlay);
rowNode.remove();
return true;
}
if (marketDataSnapshot.timeInPlay === "HT" && (minimumValue > 45 || maximumValue < 45)) {
console.log('checkTimeInPlayAndRemove. Match HalfTime. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + marketDataSnapshot.timeInPlay);
rowNode.remove();
return true;
}
var timeInPlay = parseInt(marketDataSnapshot.timeInPlay);
if (timeInPlay < minimumValue || timeInPlay > maximumValue) {
console.log('checkTimeInPlayAndRemove. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + marketDataSnapshot.timeInPlay);
rowNode.remove();
return true;
}
return false;
}
function checkMatchedAmountAndRemove(marketDataSnapshot, rowNode, minimumValue, maximumValue) {
'use strict';
if (typeof (marketDataSnapshot.matchedAmount) === 'undefined') {
return false;
}
if (marketDataSnapshot.matchedAmount < minimumValue || maximumValue < marketDataSnapshot.matchedAmount) {
console.log('checkMatchedAmountAndRemove. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + marketDataSnapshot.matchedAmount);
rowNode.remove();
return true;
}
return false;
}
function checkFavouriteTeamPriceAndRemove(marketDataSnapshot, rowNode, minimumValue, maximumValue) {
'use strict';
if (typeof (marketDataSnapshot.home) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.draw) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.away) === 'undefined') {
return false;
}
var price = marketDataSnapshot.home.backPrice;
if (price > marketDataSnapshot.draw.backPrice) {
price = marketDataSnapshot.draw.backPrice;
}
if (price > marketDataSnapshot.away.backPrice) {
price = marketDataSnapshot.away.backPrice;
}
if (price < minimumValue || maximumValue < price) {
console.log('checkFavouriteTeamPriceAndRemove. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + price);
rowNode.remove();
return true;
}
return false;
}
function checkUnderdogTeamPriceAndRemove(marketDataSnapshot, rowNode, minimumValue, maximumValue) {
'use strict';
if (typeof (marketDataSnapshot.home) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.draw) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.away) === 'undefined') {
return false;
}
var price = marketDataSnapshot.home.backPrice;
if (price < marketDataSnapshot.draw.backPrice) {
price = marketDataSnapshot.draw.backPrice;
}
if (price < marketDataSnapshot.away.backPrice) {
price = marketDataSnapshot.away.backPrice;
}
if (price < minimumValue || maximumValue < price) {
console.log('checkUnderdogTeamPriceAndRemove. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + price);
rowNode.remove();
return true;
}
return false;
}
function checkGoalDifferenceAndRemove(marketDataSnapshot, rowNode, minimumValue, maximumValue) {
'use strict';
if (typeof (marketDataSnapshot.home) === 'undefined') {
return false;
}
if (typeof (marketDataSnapshot.away) === 'undefined') {
return false;
}
var goalDifference = marketDataSnapshot.away.score - marketDataSnapshot.home.score;
if (marketDataSnapshot.home.score > marketDataSnapshot.away.score) {
goalDifference = marketDataSnapshot.home.score - marketDataSnapshot.away.score;
}
if (goalDifference < minimumValue || maximumValue < goalDifference) {
console.log('checkGoalDifferenceAndRemove. minimumValue: ' + minimumValue + ' maximumValue: ' + maximumValue + '. Removed ' + goalDifference);
rowNode.remove();
return true;
}
return false;
}
function repeatedExecution(count, minimumTimeInPlay, maximumTimeInPlay, minimumMatchedAmount, maximumMatchedAmount, minimumFavouritePrice, maximumFavouritePrice, minimumUnderdogPrice, maximumUnderdogPrice, minimumGoalDifference, maximumGoalDifference) {
if(count > 3) {
window.location.reload(false);
return;
}
$(document).find('table.coupon-table > tbody > tr').each(function () {
var rowNode = $(this);
var marketDataSnapshot = readMarketDataSnapshot(rowNode);
var removedTimeInPlay = checkTimeInPlayAndRemove(marketDataSnapshot, rowNode, minimumTimeInPlay, maximumTimeInPlay);
if (removedTimeInPlay) {
return;
}
var removedMatchedAmount = checkMatchedAmountAndRemove(marketDataSnapshot, rowNode, minimumMatchedAmount, maximumMatchedAmount);
if (removedMatchedAmount) {
return;
}
var removedFavouriteTeamPrice = checkFavouriteTeamPriceAndRemove(marketDataSnapshot, rowNode, minimumFavouritePrice, maximumFavouritePrice);
if (removedFavouriteTeamPrice) {
return;
}
var removedUnderdogTeamPrice = checkUnderdogTeamPriceAndRemove(marketDataSnapshot, rowNode, minimumUnderdogPrice, maximumUnderdogPrice);
if (removedUnderdogTeamPrice) {
return;
}
var removedGoalDifference = checkGoalDifferenceAndRemove(marketDataSnapshot, rowNode, minimumGoalDifference, maximumGoalDifference);
if (removedGoalDifference) {
return;
}
});
count++;
setTimeout(repeatedExecution, 10000, count, minimumTimeInPlay, maximumTimeInPlay, minimumMatchedAmount, maximumMatchedAmount, minimumFavouritePrice, maximumFavouritePrice, minimumUnderdogPrice, maximumUnderdogPrice, minimumGoalDifference, maximumGoalDifference);
}
function start() {
'use strict';
var minimumTimeInPlay = 0;
var maximumTimeInPlay = 90;
var minimumMatchedAmount = 0;
var maximumMatchedAmount = 999999999;
var minimumFavouritePrice = 1.02;
var maximumFavouritePrice = 1.20;
var minimumUnderdogPrice = 2.00;
var maximumUnderdogPrice = 1000;
var minimumGoalDifference = 1;
var maximumGoalDifference = 999;
var getUserInput = false;
if (getUserInput) {
minimumTimeInPlay = getMinimumInt(46, 90, "Choose minimum time in play .... Enter minutes");
maximumTimeInPlay = getMaximumInt(minimumTimeInPlay, 90, "Choose maximum time in play .... Enter minutes");
minimumMatchedAmount = getMinimumFloat(0, 999999999, "Choose minimum matched amount .... Enter amount");
maximumMatchedAmount = getMaximumFloat(minimumMatchedAmount, 999999999, "Choose maximum matched amount .... Enter amount");
minimumFavouritePrice = getMinimumFloat(1.02, 1000, "Choose minimum back price for favourite team .... Enter price");
maximumFavouritePrice = getMaximumFloat(minimumFavouritePrice, 1000, "Choose maximum back price for favourite team .... Enter price");
minimumUnderdogPrice = getMinimumFloat(2.00, 1000, "Choose minimum back price for underdog team .... Enter price");
maximumUnderdogPrice = getMaximumFloat(minimumUnderdogPrice, 1000, "Choose maximum back price for underdog team .... Enter price");
minimumGoalDifference = getMinimumInt(1, 999, "Choose minimum goal difference .... Enter goal difference");
maximumGoalDifference = getMaximumInt(minimumGoalDifference, 999, "Choose maximum goal difference .... Enter goal difference");
}
var count = 0;
setTimeout(repeatedExecution, 0, count, minimumTimeInPlay, maximumTimeInPlay, minimumMatchedAmount, maximumMatchedAmount, minimumFavouritePrice, maximumFavouritePrice, minimumUnderdogPrice, maximumUnderdogPrice, minimumGoalDifference, maximumGoalDifference);
}
(function () {
'use strict';
console.log("document loaded(). Filtering will start in 10 seconds");
setTimeout(start, 10000);
})();