def monitor(self, productUrl, worker): self.setLogger( configureLogger( f"Walmart-{getProcessNum(multiprocessing.current_process().name)}" )) phone = Phone(self.logger) phone.startServer(worker.timeToRun) headers = { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "accept-language": "en-US,en;q=0.9", "cache-control": "max-age=0", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" } while not worker.stopEvent.is_set(): # for i in range(1): with requests.Session() as session: try: response = session.get(productUrl, headers=headers, timeout=60) product = productUrl[27:productUrl[27:].find('/') + 27] if "Add to cart" in response.text: self.logger.info( f"walmart - {product} IN STOCK!!! sending message") with worker.lock: alert() phone.sendMessage(productUrl) doc = lxml.html.fromstring(response.text) offerId = json.loads( doc.xpath('//script[@id="item"]/text()') [0])["item"]["product"]["buyBox"]["products"][0][ "offerId"] # self.atc(productUrl, offerId) # self.checkout(worker.stopEvent) # else: # self.logger.info(f"walmart - Out of stock for {product}!") except: self.logger.exception("ERROR: could not send request!", exc_info=True) time.sleep(worker.checkTime.value) phone.close()
def monitor(self, productUrl, worker): self.setLogger( configureLogger( f"Gamestop-{getProcessNum(multiprocessing.current_process().name)}" )) phone = Phone(self.logger) phone.startServer(worker.timeToRun) headers = { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "accept-language": "en-US,en;q=0.9", "cache-control": "max-age=0", "Referer": "https://www.gamestop.com/video-games/switch", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" } while not worker.stopEvent.is_set(): # for i in range(1): with requests.Session() as session: try: response = session.get(productUrl, headers=headers, timeout=60) product = productUrl[62:productUrl[62:].find('/') + 62] if not "Not Available" in response.text: self.logger.info( f"Gamestop - {product} IN STOCK!!! sending message" ) with worker.lock: alert() phone.sendMessage(productUrl) # self.atc(productUrl) # self.checkout(worker.stopEvent) # else: # self.logger.info(f"Gamestop - Out of stock for {product}!") except: self.logger.exception("ERROR: could not send request!", exc_info=True) time.sleep(worker.checkTime.value)
def monitor(self, productUrl, worker, apiLock): processNum = getProcessNum(multiprocessing.current_process().name) self.setLogger(configureLogger(f"BestBuy-{processNum}")) phone = Phone(self.logger) phone.startServer(worker.timeToRun) sku = productUrl[productUrl.find('skuId=') + 6:productUrl.find('skuId=') + 6 + 7] url = f"https://api.bestbuy.com/v1/products/{sku}.json?apiKey={self.key}" while not worker.stopEvent.is_set(): # for i in range(1): with requests.Session() as session: try: with apiLock: response = session.get(url, timeout=60) time.sleep(0.5) value = json.loads(response.text) # self.printResults(value) if value['onlineAvailability']: self.logger.info( f"best buy - {value['name']} IN STOCK!!! sending message" ) with worker.lock: alert() phone.sendMessage(productUrl) # self.atc(productUrl, sku) # self.checkout(worker.stopEvent) # else: # self.logger.info(f"best buy - Out of stock for {value['name']}") except: self.logger.exception("ERROR: could not send request!", exc_info=True) time.sleep(worker.checkTime.value) phone.close()
# worker.phone.close() sys.exit(1) if __name__ == '__main__': configFile = os.path.join(os.getcwd(), "config.json") with open(configFile) as f: data = json.load(f) jobs = [] lock = multiprocessing.Lock() checkTime = multiprocessing.Value('i', data['checkTime']) stopEvent = multiprocessing.Event() timeToRun = data['timeToRun'] logger = configureLogger('main') worker = Worker(checkTime, stopEvent, lock, timeToRun) bestBuyBot = BestBuy() walmartBot = Walmart() targetBot = Target() gamestopBot = Gamestop() kohlsBot = Kohls() costcoBot = Costco() samsclubBot = SamsClub() # test(worker, bestBuyBot, walmartBot, targetBot, gamestopBot, kohlsBot, costcoBot, samsclubBot) createBestBuyProcesses(data['bestbuy'], jobs, logger, bestBuyBot) createWalmartProcesses(data['walmart'], jobs, logger, walmartBot) createTargetProcesses(data['target'], jobs, logger, targetBot)