carmolim / olx-monitor Goto Github PK
View Code? Open in Web Editor NEWScript que monitora novos anúncios feitos no OLX, alteração de preços em anúncios existentes e envia notificações para seu Telegram.
License: MIT License
Script que monitora novos anúncios feitos no OLX, alteração de preços em anúncios existentes e envia notificações para seu Telegram.
License: MIT License
Olá, amigo! Consegui executar o script e até agora tudo bem. O problema é que os vendedores estão adicionando tags irrelevantes nas descrições dos anúncios, incluindo várias coisas que não têm relação com o produto que estão vendendo, o que acaba confundindo os resultados.
Por exemplo, se você tentar filtrar por "iPhone 13", vai acabar recebendo até anúncios de relógios. Quando inspeciono o anúncio para entender o motivo, vejo uma longa lista de tags que o vendedor inseriu na descrição.
Minha dúvida é se existe alguma forma de eu filtrar os resultados de busca para considerar apenas o título do anúncio? Agradeço pela atenção.
Atualmente o script verifica se já existe um arquivo de log no diretório, se não tiver um arquivo de log significa, que o script está rodando pela primeira vez, logo ele não envia uma notificação para cada anúncio encontrado.
Mas quando incluo uma nova URL a ser monitorada no arquivo config.js, ao script rodar ele vai verificar se existe o arquivo de log e possivelmente já exista um arquivo, por isso ele envia as notificações para todos os anúncios encontrados.
Criar um log para cada URL encontrada
Dessa forma cada url terá seu próprio log para fazer a verificação, e facilitaria para o usuário acompanhar o progresso de cada URL. Para idenficar cada log poderia ser utilzado algum HASH para gerar um ID único com base na URL passada.
Desvantagem
Criaria vários arquivos log com nomes relativamente grandes pode causa do HASH.
Fazer o controle através do banco de dados
Criar um novo banco de dados para controlar as URLs que estão sendo monitoradas, mantendo um controle de qual delas já foi monitorada.
Desvantagem
Além de impedir que todos os anúncios sejam notificados não trás nenhuma vantagem para o usuário.
Olá.
Minha primeira vez rodando o script, e tentei utilizar minhas próprias pesquisas em config.js
, mas sempre acontece esse mesmo erro de config is not defined
.
Dessa última vez, tentei utilizando a mesma URL retirada do exemplo no README, mas o mesmo erro ocorre. Alguma sugestão?
Cópia do erro abaixo
root@proxy:~/olx-monitor# node index.js
/root/olx-monitor/config.js:1
config.urls = ['https://sp.olx.com.br/sao-paulo-e-regiao/centro/celulares/iphone?cond=1&cond=2&pe=1600&ps=600&q=iphone']
^
ReferenceError: config is not defined
at Object.<anonymous> (/root/olx-monitor/config.js:1:1)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/root/olx-monitor/index.js:1:16)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
Conteúdo de config.js:
root@proxy:~/olx-monitor# cat config.js
config.urls = ['https://sp.olx.com.br/sao-paulo-e-regiao/centro/celulares/iphone?cond=1&cond=2&pe=1600&ps=600&q=iphone']
root@proxy:~/olx-monitor#
Boa noite @carmolim, obrigado mais uma vez pelo excelente projeto.
Recentemente, tive uma ideia para mantermos a monitoria e, consequentemente as notificações, mais assertivas, visto que atualmente o programa pega os anúncios impulsionados que não são originários/oriundos do termo de busca monitorado. Poderia por gentileza remove-los do scraper? Atualmente eu tenho uma solução paliativa mas não estou muito satisfeito.
Geralmente são identificados pela tag a seguir
<span data-ds-component="DS-Badge" role="status" class="olx-badge olx-badge--info" aria-label="Impulsionado" style="color: var(--color-neutral-70); background-color: var(--color-primary-100);">IMPULSIONADO</span>
E costuma aparecer itens que não são exclusivamente os anúncios desejados.
Podem me ajudar com o problema?
Segui as notas, e ao executar o comando [ node index.js ] encontrei o seguinte problema:
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\Teste\Desktop\OLX\olx-monitor\node_modules\sqlite-async\sqlite-async.js from C:\Users\Teste\Desktop\OLX\olx-monitor\index.js not supported.
Instead change the require of sqlite-async.js in C:\Users\Teste\Desktop\OLX\olx-monitor\index.js to a dynamic import() which is available in all CommonJS modules.
at Object. (C:\Users\Teste\Desktop\OLX\olx-monitor\index.js:4:18) {
code: 'ERR_REQUIRE_ESM'
}
Olá @carmolim!
Desde já muito obrigado por compartilhar esse projeto conosco, tem me ajudado muito!
Estou enfrentando um problema após a exclusão e reinstalação do projeto. Ao listar os anúncios, ocorre este erro. O processo identifica a presença de certos anúncios, mas em seguida, ocorre um erro e o sistema tenta reiniciar a busca, voltando novamente para o mesmo erro
2024-01-04 09:55:25 INFO Ads found: 2047
2024-01-04 09:55:26 ERROR No adverts found
{}
Error: No adverts found
at scrapePage (/Users/possomato/Downloads/olx-monitor-main/components/Scraper.js:72:19)
at scraper (/Users/possomato/Downloads/olx-monitor-main/components/Scraper.js:36:37)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2024-01-04 09:55:26 ERROR Scraping failed
{}
Error: Scraping failed
at scrapePage (/Users/possomato/Downloads/olx-monitor-main/components/Scraper.js:113:15)
at scraper (/Users/possomato/Downloads/olx-monitor-main/components/Scraper.js:36:37)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
as in title?
Boa tarde amigo,
Fui executar o script hoje e pela primeira vez ele me retornou diversos erros ao tentar enviar a requisição pra URL especificada, você também está enfrentando esse tipo de erro? Vou informar o log abaixo, bem como o trecho do código responsável por isso.
12:03:53.571 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=41
12:03:53.673 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=42
12:03:53.776 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=43
12:03:53.876 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=44
12:03:53.978 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=45
12:03:54.082 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=46
12:03:54.188 ERROR Could not fetch the url https://www.olx.com.br/brasil?q=funko&o=47
do {
currentUrl = setUrlParam(url, 'o', page)
try {
const response = await axios(currentUrl)
const html = response.data;
const $ = cheerio.load(html)
nextPage = await scrapePage($, searchTerm, notify, url)
} catch (error) {
log.error('Could not fetch the url ' + currentUrl)
}
page++
} while (nextPage);
Minha URL monitorada:
config.urls = [
'https://www.olx.com.br/brasil?q=funko'
]
WORKAROUNDS
Já tentei solucionar removendo o database e recriando e mesmo assim o erro persiste.
Acontece quando eu inicializo o index.js
Segue o arquivo de configuração:
require('dotenv').config()
let config = {}
config.urls = [
'https://www.olx.com.br/videogames/estado-pe/grande-recife?vgm=18&vgm=17',
'https://www.olx.com.br/videogames?op=2&vgm=18&vgm=17&opst=2'
]
// this tool can help you create the interval string:
// https://tool.crontap.com/cronjob-debugger
config.interval = '*/5 * * * *'
config.telegramChatID = process.env.TELEGRAM_CHAT_ID
config.telegramToken = process.env.TELEGRAM_TOKEN
config.logFile = 'scrapper.log'
config.dbFile = 'ads.db'
module.exports = config
O token foi configurado de acordo com o Token entregue pelo @Botfather no formato: 1234567890:AAAAAAAAAAAAAAAAAA
O bot foi adicionado ao grupo, cujo ID foi obtido pelo IDBot no formato: -123456789
Fiz todos os passos conforme a descrição, porém, não funcionou.
na hora de rodar o node index.js aparece o seguinte erro como o print abaixo:
Instalei o node e fiz o processo pelo npm install tudo certinho,
estou utilizando uma máquina virtual com o Ubuntu
Alguém percebeu se houve uma baixa de notificações após o último commit?
Eu estava utilizando o commit 1af2f03 há algumas semanas e o script estava funcionando bem, encontrando novos anúncios que correspondiam aos meus filtros, e me notificando no Telegram. Eu sou o inimigo do update quando algo está funcionando, então mesmo após a última atualização 6aaa31c, eu permaneci no commit anterior 1af2f03.
Eis que há uma semana atrás, eu estava ocioso e atualizei para o último commit.
O script rodou ok, e continuou me notificando sobre baixa de preços dos anúncios que eu já tinha em DB, mas após alguns dias eu percebi que houve uma baixa nas notificações de novos anúncios, e até pensei: "Devem ser as pessoas que estão vendendo menos esse mês" 😂
Se antes eu recebia umas 3-5 notificações de novos anúncios por dia, após a atualização eu passei alguns dias sem receber nenhuma notificação de novos anúncios, mas apenas notificação de preços caindo (do que já estava em minha DB).
Acontece que hoje, um amigo me mandou um link de um produto que ele sabia que eu estava esperando aparecer, e o produto correspondia ao filtro que eu havia setado na config, então eu pesquisei no DB e vi que o anúncio não estava no DB.
Para fazer um teste, eu copiei o link de busca do produto diretamente da minha config e colei no navegador, para verificar se o anúncio que meu amigo me passou seria listado no site da OLX.
Quando colei o link de pesquisa no navegador, o anúncio que ele havia me passado apareceu como um dos primeiros resultados, então concluí que o script poderia não estar encontrando ou não estar cadastrando os novos anúncios no DB.
Para tentar voltar ao estado de quando estava funcionando, eu voltei ao commit anterior (git reset 1af2f03 --hard), rodei o script novamente, e esse foi o resultado:
10:20:02.330 INFO Ad 124xxxxx1 added to the database
10:20:02.333 INFO Ad 124xxxxx8 added to the database
10:20:02.335 INFO Ad 124xxxxx8 added to the database
10:20:02.576 ERROR SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
{"errno":19,"code":"SQLITE_CONSTRAINT"}
Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
10:20:02.576 INFO Ad 124xxxxx6 added to the database
10:20:02.579 INFO Ad 124xxxxx8 added to the database
10:20:02.581 INFO Ad 124xxxxx1 added to the database
10:20:02.582 INFO Ad 124xxxxx4 added to the database
10:20:02.584 INFO Ad 124xxxxx9 added to the database
10:20:02.586 INFO Ad 124xxxxx5 added to the database
10:20:02.588 INFO Ad 124xxxxx2 added to the database
10:20:02.590 INFO Ad 124xxxxx7 added to the database
10:20:02.591 ERROR SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
{"errno":19,"code":"SQLITE_CONSTRAINT"}
Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
10:20:02.602 ERROR SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
{"errno":19,"code":"SQLITE_CONSTRAINT"}
Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
10:20:02.603 INFO Ad 124xxxxx4 added to the database
10:20:02.813 INFO Ad 124xxxxx3 added to the database
10:20:02.816 INFO Ad 110xxxxx1 added to the database
10:20:02.848 INFO Ad 124xxxxx2 added to the database
10:20:02.850 INFO Ad 124xxxxx9 added to the database
10:20:02.852 INFO Ad 124xxxxx6 added to the database
10:20:02.854 INFO Ad 124xxxxx3 added to the database
10:20:02.856 INFO Ad 124xxxxx2 added to the database
10:20:02.858 INFO Ad 124xxxxx9 added to the database
(Editei o número dos anúncios com xxxxx).
Quando voltei para o commit antigo (sem deletar a DB) e rodei o script novamente, ele já encontrou diversos novos anúncios que não havia encontrado quando estava no último commit, inclusive o anúncio que meu amigo me mandou o link.
Recebi aproximadamente 20 notificações no Telegram de novos anúncios, acredito que foram os anúncios que eu não recebia enquanto estava no último commit.
Não sei exatamente o que pode ter causado isso, se foi culpa minha, mas apenas reportando para ver se mais alguém teve o mesmo problema.
Adicionei uma funcionalidade que senti falta: filtro por título.
Não consigo construir a PR. Qual branch é a mais atualizada, acredito que seja a docker, mas a branch main é incompatível com ela, como posso propor essa feature, na branch docker mesmo?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.