Advertisement
Guest User

Untitled

a guest
Sep 11th, 2017
562
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. import pip
  2.  
  3. def install(package):
  4. pip.main(['install', package]);
  5.  
  6. install("beautifulsoup4");
  7. install("requests");
  8. install("pymysql");
  9.  
  10.  
  11.  
  12. from bs4 import BeautifulSoup
  13. import requests
  14. from html.parser import HTMLParser
  15. import pymysql
  16. import smtplib
  17. import datetime
  18.  
  19.  
  20.  
  21. class Horse(object):
  22. def __init__(self, name, header, b365ToFairPercent, columnsTheSamePercent, columnsTheSame, bet365, betFair):
  23. self.name = name;
  24. self.header = header;
  25. self.b365ToFairPercent = b365ToFairPercent;
  26. self.columnsTheSame = columnsTheSame;
  27. self.columnsTheSamePercent = columnsTheSamePercent;
  28. self.bet365 = bet365;
  29. self.betFair = betFair;
  30.  
  31.  
  32. def getRaceList():
  33. ans = [];
  34. url = "https://www.oddschecker.com/horse-racing";
  35. r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'});
  36. r = r.content;
  37. soup = BeautifulSoup(r, "html.parser");
  38. data = soup.find("div", class_="module show-times");
  39. data = data.find_all("div", { "class" : "racing-time"});
  40. for item in data:
  41. betURL = item.find("a");
  42. betURL = "https://www.oddschecker.com" + betURL["href"];
  43. ans.append(betURL);
  44. return ans;
  45.  
  46. def getData(raceURL):
  47. r = requests.get(raceURL, headers={'User-Agent': 'Mozilla/5.0'});
  48. r = r.content;
  49. soup = BeautifulSoup(r, "html.parser");
  50. header = soup.find("div", class_="page-description module").find("h1").text;
  51. dataTable = soup.find("tbody", {"id" : "t1"});
  52. rows = dataTable.find_all("tr");
  53. for row in rows:
  54. if row is not None:
  55. bet365Odds = getB365Odds(row);
  56. if (bet365Odds != -1):
  57. name = getName(row);
  58. otherOdds = getOtherOdds(row);
  59. betFairOdd = otherOdds[-3];
  60. b365ToFairPercent = convertFraction(bet365Odds)/convertFraction(betFairOdd);
  61. b365ToFairPercent = round(b365ToFairPercent*100, 2);
  62. if (b365ToFairPercent > 101):
  63. columnsTheSame = otherOdds.count(bet365Odds) - 1;
  64. if (columnsTheSame == -1):
  65. columnsTheSame = 0;
  66. columnsTheSamePercent = 0;
  67. else:
  68. columnsTheSamePercent = 1/columnsTheSame;
  69. columnsTheSamePercent = round(columnsTheSamePercent * 100, 2);
  70. horseList.append(Horse(name, header, b365ToFairPercent, columnsTheSamePercent, columnsTheSame, convertFraction(bet365Odds), convertFraction(betFairOdd)));
  71. print(name);
  72.  
  73. def getName(row):
  74. name = row.find("a");
  75. unwanted = name.find("span");
  76. unwanted.extract();
  77. name=name.text;
  78. return name;
  79.  
  80. def getB365Odds(row):
  81. odds = row.select(".bc.bs");
  82. try:
  83. b365Class = odds[0]["class"];
  84. except:
  85. return -1;
  86. if "b" in b365Class:
  87. return odds[0].text;
  88. else:
  89. return -1;
  90.  
  91. def getOtherOdds(row):
  92. otherOdds = [];
  93. odds = row.select(".bc.bs");
  94. for odd in odds:
  95. if (odd.text == ""):
  96. otherOdds.append(-1);
  97. else:
  98. otherOdds.append(odd.text);
  99. return otherOdds;
  100.  
  101. def convertFraction(frac_str):
  102. try:
  103. return float(frac_str)
  104. except ValueError:
  105. num, denom = frac_str.split('/')
  106. try:
  107. leading, num = num.split(' ')
  108. whole = float(leading)
  109. except ValueError:
  110. whole = 0
  111. frac = float(num) / float(denom)
  112. return whole - frac if whole < 0 else whole + frac
  113.  
  114. def sendEmail():
  115. server = smtplib.SMTP('smtp.mailgun.org', 587)
  116. server.starttls()
  117. server.login("b365@netontarget.com", "f5wqd84c")
  118. msg = "JOB DONE!"
  119. server.sendmail("b365@netontarget.com", "asw@netontarget.com", msg)
  120. server.quit()
  121.  
  122. raceList = [];
  123. raceList = getRaceList();
  124. raceList = ["https://www.oddschecker.com/horse-racing/perth/16:05/winner"];
  125. horseList = [];
  126.  
  127. for raceURL in raceList:
  128. getData(raceURL);
  129.  
  130. hostname="s1.netontarget.net"
  131. user="admin_horses"
  132. password="1dOXRTcfBq"
  133. db="admin_b365"
  134.  
  135. myConnection = pymysql.connect( host=hostname, user=user, passwd=password, db=db )
  136. cur = myConnection.cursor();
  137. now = datetime.datetime.now()
  138. for horse in horseList:
  139. query = "INSERT INTO b365alerts(horse, race, bet365, betfair, columnsthesame, columnsthesamepercentage, bet365tobetfairpercentage, `datetime`)VALUES(\'"
  140. query += horse.name + "\', \'" + horse.header + "\', \'" + str(horse.bet365) + "\', \'" + str(horse.betFair) + "\', \'";
  141. query += str(horse.columnsTheSame) + "\', \'" + str(horse.columnsTheSamePercent) + "\', \'" + str(horse.b365ToFairPercent) + "\', \'" + str(now) + "\')";
  142. print(query);
  143. cur.execute(query);
  144. myConnection.commit();
  145.  
  146. myConnection.close();
  147.  
  148. sendEmail();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement