def checkSubs(): now = datetime.now().timestamp() subs = db.getAllReportSubs() secondsInADay = 86400 for sub in subs: try: if (sub['lastReport'] + sub['period'] * secondsInADay < now): ## Fazer Report for i in range(len(sub['prodNames'])): ## tem apenas o produto mais barato de cada dia. singleProd = db.getCheapestsProductEachDay( sub['prodNames'][i], prodType=sub['prodTypes'][i], startTime=(now - secondsInADay * 30), endTime=now, countPerDay=1) ## Tem os 3 produtos mais baratos de cada dia threeProds = db.getCheapestsProductEachDay( sub['prodNames'][i], prodType=sub['prodTypes'][i], startTime=(now - secondsInADay * 30), endTime=now, countPerDay=3) threeProdsAvg = _getAvarageForEachDay(threeProds) _plotProducts(singleProd, threeProdsAvg, sub['prodNames'][i].upper()) _sendPlotsByEmail(sub) _deletePlots(sub['prodNames']) db.updateReportSub(sub['username'], datetime.now().timestamp()) except Exception as e: db.registerError('checkSubs', 'subscriptions.py', str(e), otherInfo='sub: ' + str(sub)) pass
def getProductsFromWeb(urls): ## Carregando os classificadores print("Começando a pegar os produtos.") products = [] for store in urls: print("Pegando os produtos de: " + store) for prodType in urls[store]: for link in urls[store][prodType]: print('Pegando {} de {}.'.format(str(prodType), str(store))) items = getProductsFromPage(link, store) for item in items: try: item["store"] = store item["prodType"] = prodType except Exception as e: print("Pequeno erro insignificante.") db.registerError( 'getProductsFromWeb', 'getPrices.py', str(e), otherInfo= 'Erro em store: {}, prodType: {}, link: {}, item: {}' .format(str(store), str(prodType), str(link), str(item))) products += items return products
def getPricesTerabyte(my_url): products = [] try: page_soup = getPage(my_url) except Exception as e: print("Erro ao baixar a página: " + str(e)) db.registerError('getPricesTerabyte', 'getPrices.py', str(e), otherInfo='erro em get Prices url: ' + my_url) return products cards = page_soup.findAll("div", {"class": "pbox col-xs-12 col-sm-6 col-md-3"}) for i in range(len(cards)): try: ## Ver se o produto está disponivel submitButton = cards[i].findAll("button", {"type": "button"}) if (len(submitButton) > 0): link = "https://www.terabyteshop.com.br" + cards[i].findAll( "a", {"class": "prod-name"})[0]['href'] name = cards[i].findAll("a", {"class": "prod-name"})[0].text price12xStr = cards[i].findAll("div", {"class": "prod-juros"})[0].text price12xStr = price12xStr[price12xStr.find("R$"):] price12xStr = re.sub('[^0-9]', '', price12xStr) price12xStr = price12xStr[:(len(price12xStr) - 2)] price12x = int(price12xStr) * 12 priceStr = cards[i].findAll( "div", {"class": "prod-new-price"})[0].text priceStr = re.sub('[^0-9]', '', priceStr) price = int(priceStr[:(len(priceStr) - 2)]) img_url = cards[i].findAll( 'a', {'class': 'commerce_columns_item_image'})[0].img['src'] prodDict = { "name": name, "price": price, "price12x": price12x, "link": link, 'img_url': img_url } products.append(prodDict) except Exception as e: print("Erro no item {}:".format(i) + str(e)) db.registerError('getPricesTerabyte', 'getPrices.py', str(e), otherInfo='erro em url: ' + my_url) return products
def getPricesKabum(my_url): products = [] try: page_soup = getPage(my_url) except Exception as e: print("Erro ao baixar a página: " + str(e)) db.registerError('getPricesKabum', 'getPrices.py', str(e), otherInfo='erro em get Page url: ' + my_url) return products data = re.findall('const listagemDados =(.+?)]\n', str(page_soup), re.S) data[0] += ']' items = json.loads(data[0]) avaibleProd = True while ((len(items) > 0) and avaibleProd): ## essa flag fica em falso até que um produto disponivel seja encontrado na pagina ## Se nenhum produto disponivel for encontrado em uma página, as proximas paginas não precisam ser verificadas. avaibleProd = False for item in items: try: if (not item['is_marketplace'] and item['disponibilidade']): avaibleProd = True prodDict = { 'name': item['nome'], 'price': item['preco_desconto'], 'price12x': item['preco'], 'link': 'kabum.com.br' + item['link_descricao'], 'img_url': item['img'] } products.append(prodDict) except Exception as e: print("Erro: " + str(e)) db.registerError('getPricesKabum', 'getPrices.py', str(e), 'url: ' + my_url) ## Se nenhum produto disponivel for encontrado nesta página, as proximas nao precisam ser verificadas. if (avaibleProd): my_url = increasePageKabum(my_url) try: page_soup = getPage(my_url) except Exception as e: print("Erro ao baixar a página: " + str(e)) db.registerError('getPricesKabum', 'getPrices.py', str(e), 'url: ' + my_url) return products data = re.findall('const listagemDados =(.+?)]\n', str(page_soup), re.S) data[0] += ']' items = json.loads(data[0]) return products
def getPricesPichau(my_url): products = [] try: page_soup = getPage(my_url) except Exception as e: print("Erro ao baixar a página: " + str(e)) db.registerError('getPricesPichau', 'getPrices.py', str(e), otherInfo='erro em get Page url: ' + my_url) return products cards = page_soup.findAll("li", {"class": "item product product-item"}) avaibleProd = True while ((len(cards) > 0) and avaibleProd): ## essa flag fica em falso até que um produto disponivel seja encontrado na pagina ## Se nenhum produto disponivel for encontrado em uma página, as proximas paginas não precisam ser verificadas. avaibleProd = False for i in range(len(cards)): try: ## Ver se o produto está disponivel submitButton = cards[i].findAll("button", {"type": "submit"}) if (len(submitButton) > 0): avaibleProd = True ## um produto disponivel foi encontrado link = cards[i].findAll( "a", {"class": "product-item-link"})[0]['href'] name = cards[i].findAll( "a", {"class": "product-item-link"})[0].text.strip() price12xStr = cards[i].findAll( "span", {"class": "price"})[0].text[2:].replace(".", "") price12x = int(price12xStr[:(len(price12xStr) - 3)]) priceStr = cards[i].findAll( "span", {"class": "price-boleto"})[0].text.strip() priceStr = priceStr[10:(priceStr.find("no boleto") - 4)].replace(".", "") price = int(priceStr) img_url = cards[i].findAll( 'img', {'class': 'product-image-photo'})[0]['src'] prodDict = { "name": name, "price": price, "price12x": price12x, "link": link, 'img_url': img_url } products.append(prodDict) except Exception as e: print("Erro no item: " + str(i)) db.registerError('getPricesPichau', 'getPrices.py', str(e), otherInfo='erro em url: ' + my_url) ## Se nenhum produto disponivel for encontrado nesta página, as proximas nao precisam ser verificadas. if (avaibleProd and (len(cards) == 48)): my_url = increasePagePichau(my_url) try: page_soup = getPage(my_url) except Exception as e: print("Erro ao baixar a página: " + str(e)) db.registerError('getPricesPichau', 'getPrices.py', str(e), otherInfo='erro em url: ' + my_url) return products cards = page_soup.findAll("li", {"class": "item product product-item"}) else: cards = [] return products