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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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