Watches News Website For Sell

About the Seller
we're the owner of http://watchesdeals.net/ Basically, we do it all on this business. we spent about 2 hours a day to plan and create content and to update social networks. we also manage all the monetization strategies (Amazon Affiliate ,Ads) and that's something that sometimes requires more time to think, plan and implement.

Business Modelwatchesdeals is a Affiliate website Store about Watches. It has over 15 uinque Seo Aricles About Watches .
At…

Watches News Website For Sell

Premium Shopify Dropshipping Ecommerce Watches Store

Premium Shopify Dropshipping Ecommerce Watches Store

Zero Capital Required to Get Started – You don’t need to buy any product inventory upfront, you only pay the supplier a portion of what you get from the customer.

Work from Anywhere – Having suppliers dropship for you, basically means you have partners taking care of all physical aspects of running your business, while you’re in charge of the digital aspects – listing products, marketing, optimizing, supporting customers…

Premium Shopify Dropshipping Ecommerce Watches Store

A bot for SaltyBet that watches and records matches

I’ve been working on a bot that records the result of matches on SaltyBet.com. It uses that data to calculate the probability of winning for fighters of a given match. A fighters probability is based on the Elo rating system. I’m posting this here to share the code.

Repo: https://github.com/zakarh/salt-bot

    import json  import selenium from selenium import webdriver from selenium.common import exceptions from selenium.webdriver.common.keys import Keys   class SaltBot():     def __init__(self):         self.data = {}      def watch(self, browser, source="data.json", output="data.json", matches=1):         """         Watch matches, make predictions, and record the results.         :type browser: selenium.webDriver, Example: selenium.webdriver.Chrome().          :type source: str, directory to source file.         :type target: str, directory to output file.         :type matches: int, No. matches to watch.         """         if type(browser) != selenium.webdriver.chrome.webdriver.WebDriver:             raise TypeError(                 "type(browser) != selenium.webdriver.chrome.webdriver.WebDriver, type(browser) == {}".format(type(browser)))         if type(source) != str:             raise TypeError(                 "type(source) != str, type(source) == {}".format(type(source)))         if type(output) != str:             raise TypeError(                 "type(output) != str, type(output) == {}".format(type(output)))         if type(matches) != int:             raise TypeError(                 "type(matches) != int, type(matches) == {}".format(type(matches)))         if matches <= 0:             raise ValueError(                 "matches <= 0, matches == {}, matches must be > 0".format(matches))          # Load data from source:         self.load_data(source)          # Navigate to SaltyBet.com using the browser.         url_address = "https://www.saltybet.com/"         browser.get(url_address)          print("Salt Bot is now watching {} matches.\n".format(matches))          # Handle operations performed in the while loop:         bet_status = ""  # Handle control flow.         recorded = False  # Decide when to record the result of matches.         red = ""  # Fighter.         blue = ""  # Fighter.          match = 0         print("{}/{} matches watched.".format(match, matches))         while match <= matches:             try:                 # Get bet status:                 current_bet_status = browser.find_element_by_id(                     "betstatus").text                 if len(current_bet_status) == 0:                     continue                 elif bet_status == "":                     bet_status = current_bet_status                 elif bet_status != current_bet_status:                     bet_status = current_bet_status             except exceptions.StaleElementReferenceException:                 pass             except Exception:                 pass              try:                 # Get fighter names:                 red_current = browser.find_element_by_id(                     "sbettors1").find_element_by_tag_name("strong").text                 blue_current = browser.find_element_by_id(                     "sbettors2").find_element_by_tag_name("strong").text                 # Calculate probability for fighters:                 if len(red_current) == 0 or len(blue_current) == 0:                     continue                 elif red == "" or blue == "":                     red = self.extract_name(red_current)                     blue = self.extract_name(blue_current)                     self.display(red, blue)                 elif red != red_current or blue != blue_current:                     red = self.extract_name(red_current)                     blue = self.extract_name(blue_current)                     self.display(red, blue)             except exceptions.StaleElementReferenceException:                 pass             except Exception:                 pass              # Record the results of a match.             try:                 if "win" in bet_status:                     if recorded is False:                         if red in bet_status:                             s = "Winner: {}, Loser: {}\n".format(red, blue)                             print(s)                             self.save_data("data.json", red, blue)                             self.log_data(s)                         elif blue in bet_status:                             s = "Winner: {}, Loser: {}\n".format(blue, red)                             print(s)                             self.save_data("data.json", blue, red)                             self.log_data(s)                         recorded = True                         match += 1                         print(                             "{}/{} matches watched.".format(match, matches))                 else:                     recorded = False             except exceptions.StaleElementReferenceException:                 pass             except Exception:                 pass      def get_probability(self, red, blue):         """         Calculate the probability of red and blue winning the match using the Elo Rating System.         :type red: str, name of fighter.          :type blue: str, name of fighter.         :rtype: tuple, respective probability of red and blue winning the match.         TODO: Account for win:loss ratio of red's opponents against blue vice versa.         """         # Validate input:         if type(red) != str:             raise TypeError("type(red) != str")         if type(blue) != str:             raise TypeError("type(blue) != str")          # Insufficient data return (0.5, 0.5)         if red not in self.data or blue not in self.data:             return (0.5, 0.5)         else:             # Compute the sum of matches won by both fighters:             red_rating = sum([self.data[red][loser]                             for loser in self.data[red]])             blue_rating = sum([self.data[blue][loser]                             for loser in self.data[blue]])              # Decremenet fighter rating by their total losses against the other fighter:             if red in self.data[blue]:                 red_rating -= self.data[blue][red]             if blue in self.data[red]:                 blue_rating -= self.data[red][blue]              # Transform fighter rating:             red_rating = pow(10, max(0, red_rating) / 400)             blue_rating = pow(10, max(0, blue_rating) / 400)              # Calculate red and blue's probability of winning:             red_probability = red_rating / (red_rating + blue_rating)             blue_probability = blue_rating / (red_rating + blue_rating)              return (red_probability, blue_probability)      def save_data(self, file_path, winner, loser):         """         Open the target file and update the winner and loser data.          :type file_path: str, directory path to target file.         :type winner: str, name of fighter.         :type loser: str, name of fighter.         """         # Validate input:         if type(file_path) != str:             raise TypeError("type(file_path) != str")         if type(winner) != str:             raise TypeError("type(winner) != str")         if type(loser) != str:             raise TypeError("type(loser) != str")          # Open the target file and write the results.         with open(file=file_path, mode="w+") as f:             # Add winner and loser if they don't exist in self.data:             self.data.setdefault(winner, {})             self.data.setdefault(loser, {})             self.data[winner].setdefault(loser, 0)             self.data[loser].setdefault(winner, 0)             # Increment the number of wins winner has against the loser:             self.data[winner][loser] += 1             f.write(json.dumps(self.data))      def load_data(self, file_path):         """         Open the target file and load its contents as JSON.         :type file_path: str, directory path to target file.         :rtype: None         """         # Validate input:         if type(file_path) != str:             raise TypeError("type(file_path) != str")         # Open the target file and load contents as json.         with open(file=file_path, mode="r+") as f:             data = json.load(f)             self.data = data      def log_data(self, data):         file_path = "data.txt"         with open(file=file_path, mode="a+") as f:             f.write(data)      def extract_name(self, raw_name):         return str(raw_name).strip(" ")      def display(self, red, blue):         s = "\n{} vs. {}\n{}".format(             red, blue, self.get_probability(red, blue))         print(s)   def main():     sb = SaltBot()     sb.watch(browser=webdriver.Chrome(), source="data.json",             output="data.json", matches=100)   if __name__ == '__main__':     main()