Comments (25)
Agora entendi, vou tentar ajudar a esclarecer o que mudou.
Essa nova versão do script não dispara mais no telegram os anúncios que são encontrados no primeiro scan,
após encontrar todos os anúncios já publicados, ele só guarda tudo no ads.db e fica monitorando até que alguém poste um novo anúncio que entre na busca, quando isso acontecer, aí sim ele vai disparar a mensagem, pois esse anúncio não existia no momento do primeiro scan.
Faz sentido com pesquisas extremamente pesadas, eu fiz um teste com uma e deu certo (https://www.olx.com.br/brasil?q=iphone).
Essa pesquisa retornou no site 317568 resultados, esse é só um exemplo hipotético, mas imagina vc receber 317 mil mensagens no telegram, deve travar tudo kk, mas era assim que o script funcionava antes da atualização.
No caso dessa nova versão, ele guardou os 317568 resultados no ads.db e ficou monitorando, quando foi publicado um novo anúncio após esses 317568, ele disparou esse novo anúncio no Telegram, bem mais inteligente do que floodar o telegram com essa quantidade colossal de anúncios que já se encontravam publicados antes do scan kk.
Mas como o próprio @carmolim falou, esse novo funcionamento pode suprimir o primeiro resultado de uma pesquisa que não continha nenhum anúncio no primeiro scan, porém acho que resolver isso não seja tão complicado.
@carmolim uma sugestão minha seria, ao invés de apenas suprimir as mensagens dos resultados encontrados no primeiro scan, uma URL que retorne 0 anúncios também seja registrada no ads.db como uma especie de "anúncio zero", ou algo do tipo, pois quando o primeiro anúncio de fato for publicado e encontrado, o script não irá suprimir ele, pois já havia um "zero" que foi registrado no primeiro scan, e a partir daí, o funcionamento segue normal.
Não tenho muito conhecimento em node, mas pelo que estudei de lógica, pode ser que essa sugestão lhe ajude em algo.
Grato pela correção e melhoria do script, tmj.
from olx-monitor.
@mermao1 com a correção que eu vou fazer ele vai passar a notificar sempre que tiver algo novo ou mudança de preço com exceção do primeiro scan.
A ideia do script é receber notificações quando aparece um anúncio novo ou quando ocorre uma diminuição no preço, receber uma notificação de todos os anúncios no telegram, ao meu ver, não adiciona nenhum valor, seria a mesma coisa do que entrar no olx e ficar rolando para ver todos os anúncios, só que dentro do telegram.
De qualquer forma, alterando essa linha aqui vai enviar as notificações sempre:
olx-monitor/components/Scraper.js
Line 31 in 1af2f03
para:
const notify = true
Mas, dependendo da quantidade de anúncios vai cair nos limites do telegram e você não irá receber todas as notificações. Ainda quero corrigir isso, mas vai ficar para depois...
from olx-monitor.
Bom dia pessoal o OLX mudou a estrutura dos dados e por isso o script parou de funcionar, vou ver se consigo fazer uma atualização para adaptar o script a essa nova estrutura.
from olx-monitor.
Peço que tentem utilizar a nova versão para verificar se voltou a funcionar, fiz alguns testes rápidos aqui parece que está funcional novamente.
from olx-monitor.
testado por mais de 24h no meu raspberry pi e funcionando perfeitamente
from olx-monitor.
@mermao1 os alertas do telegram só ocorrem após a primeira busca e apenas se é um anúncio novo ou teve uma diminuição no preço, sabe dizer se essas condições foram atendida
Não foram atendidas.
Para saber se é a primeira vez que aquele resultado aparece, o script checa o ads.db, correto? Ou existe algum outro arquivo de cache?
Eu apaguei o ads.db para rodar o script 'do zero'. Após o primeiro run, o script criou um novo ads.db, povoou o db com os anúncios que correspondiam, mas não entregou os alertas no telegram.
from olx-monitor.
É exatamente isso que o @brunojsilv descreveu que acontece. Na verdade era para o comportamento sempre ter sido esse de avisar a partir do segundo scan, mas em alguma mudança o script sofreu essa regressão.
Eu estou pensando em fazer algo similar ao que você sugeriu de criar um anúncio zero, mas ao invés disso criar uma nova tabela, que registra o scan com a url e mais algumas informações, talvez, preço médio, link do anúncio com o menor valor, e usar os registros dessa tabela para determinar se o scan já aconteceu para a aquela url ou não. Até esse ajuste sair dá para mudar diretamente no código para sempre enviar os alertas no telegram modificando essa linha
olx-monitor/components/Scraper.js
Line 31 in 1af2f03
para:
const notify = true
Dessa forma todos os anúncios encontrados serão notificados no telegram.
from olx-monitor.
Usando ele desde a semana passada 24h por dias no raspberry pi 3 b+ sem problema algum, rodando liso e notificando perfeitamente, em relação ás primeiras notificações é do jeito que o carmolim falou
from olx-monitor.
@carmolim Verdade, cara. Realmente não faz sentido receber todos os resultados na primeira busca, pois se for para ver TUDO, é mais eficiente abrir o navegador e farmar página por página.
Obrigado!
from olx-monitor.
Está dando NaN porque não encontrou nenhum anúncio e o cálculo da média deu errado, se deixar aberto ele continua rodando?
from olx-monitor.
Continua. Ele encontrava em média uns 5 anúncios por dia até parar de funcionar.
from olx-monitor.
Outra observação, é que quando estava funcional, ao iniciar ele buscava alguns que produtos que já estavam cadastrados na OLX com os filtros escolhidos, e adicionava ao scrapper.log e publicava no Telegram, agora não está fazendo isso também.
from olx-monitor.
Por aqui também parou de funcionar
from olx-monitor.
@Krunsher não notificar no telegram foi proposital, a ideia é que na primeira vez que o script rodar todos os anúncios são novos, então você vai receber uma notificação por anúncio e dependendo da quantidade de anúncios está caindo no rate limit do telegram e as mensagens não são enviadas. Acredito que faz mais sentido receber notificações no telegram apenas de novos anúncios a partir do primeiro scan. O log foi um bug mesmo, ele só está adicionando no logo quando manda a notificação para o telegram e o certo seria enviar sempre, vou corrigir isso na próxima pr.
from olx-monitor.
Atualizei aqui, ele está recebendo os anúncios e registrando tudo no scrapper.log, porém, nenhuma mensagem chega no grupo do telegram.
Verifiquei o token / groupid no .env e estavam todos corretos, então eu excluí o bot juntamente com o grupo e criei tudo novamente, configurei as novas informações no aquivo .env, mas continuo sem receber as mensagens.
Tambem executei o script em outro computador e deu na mesma.
from olx-monitor.
@brunojsilv os alertas do telegram só ocorrem após a primeira busca e apenas se encontra um anúncio novo ou algum que teve uma diminuição no preço, sabe dizer se essas condições foram atendidas?
from olx-monitor.
Atualizei, ele voltou a pegar os anúncios, mas não notifica no Telegram e apresenta um erro no log:
11:15:03.263 ERROR SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
{"errno":19,"code":"SQLITE_CONSTRAINT"}
Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
11:15:03.264 ERROR SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
{"errno":19,"code":"SQLITE_CONSTRAINT"}
Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: ads.id
Nem mesmo o primeiro anúncio encontrado ele notifica.
Eu apaguei meu ads.db e rodei o script novamente, então um novo ads.db foi criado, pegou novamente todos os anúncios, mas o erro acima persistiu e nada foi enviado para o Telegram.
from olx-monitor.
@mermao1 os alertas do telegram só ocorrem após a primeira busca e apenas se é um anúncio novo ou teve uma diminuição no preço, sabe dizer se essas condições foram atendida
from olx-monitor.
@mermao1 na primeira vez que o script roda ele cria o banco de dados caso ainda não tenha sido criado e começa a scanear as urls que você listou, a cada url ele verifica se tem algum anúncio salvo previamente para aquela url, caso não tenha nenhum anúncio ele entende que é a primeira que está scaneando aquela url e só salva os anúncios mas não notifica, tomei essa decisão baseado na minha situação, nas urls que monitorava já tinham alguns anúncios listados, fiz dessa forma porque se tivesse uma url com muitos anúncios o script enviaria um alerta para cada anúncio já no primeiro scan e dependendo da quantidade recebia dezenas de notificações que não me ajudavam em nada e caia no rate limit do bot do telegram.
Mas agora entendo que esse pode não ser o comportamento adequado para quando você está tentando monitorar uma url que não tem anúncios, nesse caso, quando aparecer o primeiro anúncio ele não será enviado pelo telegram porque o script vai entender que é o primeiro scan.
Para funcionar nos dois casos será necessário determinar de outra forma se o scan já aconteceu pelo menos uma vez, da forma que está hoje não vai ter o comportamento adequado no segundo cenário.
É esse o cenário que está acontecendo com você?
from olx-monitor.
@carmolim No meu caso, eu tenho 9 URLs para scaneamento, todas filtrando a sessão de computadores-e-acessorios e 8 delas com preço máximo de R$ 2.000,00.
Acabei de simular novamente o "first run" para ver se dessa vez as notificações chegavam.
01 - apaguei o ads.db
02 - rodei o script 'do zero' (sem db)
O comportamento foi o seguinte:
01 - O arquivo ads.db foi novamente criado ✅
02 - O banco de dados foi povoado com uma boa quantidade de anúncios, talvez uns 40 somando todas as URLs buscadas ✅
03 - Nenhuma notificação foi enviada ao telegram
A primeira vez que rodei o script (um commit atrás), eu já havia recebido as notificações correspondentes da busca no primeiro run, no entanto, minha config possuia APENAS UMA URL sendo buscada.
Por isso eu havia perguntado se havia algum outro arquivo de cache além do ads.db, mas talvez o problema seja a quantidade de resultados retornados quando existem muitas URLs sendo buscadas pela primeira vez (9 dessa vez), e que totalizam mais de 40 anúncios.
Só estou recebendo notificações no telegram quando o anúncio tem seu preço modificado.
E talvez, eu só receba notificação de um novo resultado, quando algum anúncio novo seja postado e que ainda não foi adicionado no db durante a primeira execução
from olx-monitor.
@carmolim E pelo que você falou no último comentário, quanto mais vezes eu apago meu ads.db, mais resultados de novos anúncios vou perdendo, correto? 😂
from olx-monitor.
Eu particularmente curti o fato de não carregar tudo encontrado no primeiro scan... chegava da uns bug no telegran 😂
from olx-monitor.
Estou testando uma nova versão com que vai corrigir essa questão de não enviar o anúncio para o telegram quando não tiver nenhum anúncio na url, como vai exigir mudanças no banco de dados será necessário deletar o banco existente e rodar o script para criar as tabelas com a nova estrutura.
from olx-monitor.
Eu entendi a lógica de não enviar notificação quando for a primeira busca, principalmente pelo problema causado por uma busca com muitos resultados.
Agora fiquei dividido sobre qual a melhor lógica 😂
from olx-monitor.
Novo script disponível, mais detalhes nos comentários da PR: #14
from olx-monitor.
Related Issues (16)
- Enviando notificação de todos os anúncios encontrados quando adiciono uma nova URL
- ReferenceError: config is not defined HOT 1
- ERROR Cannot read properties of undefined (reading 'length') HOT 7
- Bot roda normal mas não envia a mensagem para o TELEGRAM HOT 2
- Problemas em encontrar novos anúncios HOT 4
- Não é mais possível persistir as URLs a partir de hoje HOT 34
- [Feature Request] Monitoria mais limpa/assertiva HOT 1
- Does it still work? HOT 1
- ERROR Scraping failed HOT 4
- Dúvida sobre o filtro das pesquisas HOT 3
- Como contribuir? HOT 2
- Dúvida HOT 6
- Erro ao executar o node index.js HOT 1
- Dúvida sobre arquivo .env HOT 5
- Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: ads.searchTerm HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from olx-monitor.