Git Product home page Git Product logo

Comments (25)

brunojsilv avatar brunojsilv commented on June 7, 2024 2

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.

carmolim avatar carmolim commented on June 7, 2024 2

@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:

const notify = await termAlreadySearched(searchId)

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.

carmolim avatar carmolim commented on June 7, 2024 1

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.

carmolim avatar carmolim commented on June 7, 2024 1

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.

FernandoGiovannini avatar FernandoGiovannini commented on June 7, 2024 1

testado por mais de 24h no meu raspberry pi e funcionando perfeitamente

from olx-monitor.

mermao1 avatar mermao1 commented on June 7, 2024 1

@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.

carmolim avatar carmolim commented on June 7, 2024 1

É 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

const notify = await termAlreadySearched(searchId)

para:

 const notify = true

Dessa forma todos os anúncios encontrados serão notificados no telegram.

from olx-monitor.

FernandoGiovannini avatar FernandoGiovannini commented on June 7, 2024 1

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.

mermao1 avatar mermao1 commented on June 7, 2024 1

@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.

carmolim avatar carmolim commented on June 7, 2024

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.

Krunsher avatar Krunsher commented on June 7, 2024

Continua. Ele encontrava em média uns 5 anúncios por dia até parar de funcionar.

from olx-monitor.

Krunsher avatar Krunsher commented on June 7, 2024

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.

Jhenesson avatar Jhenesson commented on June 7, 2024

Por aqui também parou de funcionar

from olx-monitor.

carmolim avatar carmolim commented on June 7, 2024

@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.

brunojsilv avatar brunojsilv commented on June 7, 2024

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.

carmolim avatar carmolim commented on June 7, 2024

@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.

mermao1 avatar mermao1 commented on June 7, 2024

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.

carmolim avatar carmolim commented on June 7, 2024

@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.

carmolim avatar carmolim commented on June 7, 2024

@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.

mermao1 avatar mermao1 commented on June 7, 2024

@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.

mermao1 avatar mermao1 commented on June 7, 2024

@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.

Jhenesson avatar Jhenesson commented on June 7, 2024

Eu particularmente curti o fato de não carregar tudo encontrado no primeiro scan... chegava da uns bug no telegran 😂

from olx-monitor.

carmolim avatar carmolim commented on June 7, 2024

@brunojsilv

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.

mermao1 avatar mermao1 commented on June 7, 2024

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.

carmolim avatar carmolim commented on June 7, 2024

Novo script disponível, mais detalhes nos comentários da PR: #14

from olx-monitor.

Related Issues (16)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.