Уведомления

Группа в Telegram: @pythonsu

#1 Июль 27, 2018 10:09:13

Dykat
Зарегистрирован: 2018-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как не отправлять одинаковые объявления

Здравствуйте. Я написал бота который парсит объявления с сайта и результат нового сообщения отправляет в телеграм. Однако не могу сделать так, чтобы бот не отправлял те сообщения, которые уже отправил, тоесть,как сделать так , чтоб бот отправлял только новые сообщения и куда это вставлять? Вот полностью весь код :

#НА ПРИМЕРЕ САЙТА onliner.by

from flask import Flask
from flask import request
from flask import jsonify
import requests
import json
from datetime import datetime
from bs4 import BeautifulSoup
from flask_sslify import SSLify
app = Flask(__name__)

sslify = SSLify(app)

URL = 'https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/'

def write_json(data, filename='answer.json'):
with open('answer.json','w') as f:
json.dump(data,f,indent=2,ensure_ascii=False)

def send_message(chat_id,text='Подождите секунду'):
url = URL + ‘sendMessage’
answer = {'chat_id': chat_id,'text': text}
r = requests.post(url, json = answer)
return r.json()


def get_html(urls):
r = requests.get(urls)
return r.text

def get_all_links(html):
#блок который парсим
soup = BeautifulSoup(html, ‘lxml’)
divs = soup.find('table', class_='ba-tbl-list__table')
divs = soup.find_all('h2',class_='wraptxt')
links =
# теги, потом изменю или добавлю дополнения
for div in divs:
a = div.find('a').get('href')
link = 'https://baraholka.onliner.by' + a.strip('.') +'\n ‘ #+ b #’ ‘ + b +’\n ‘# ’ ‘ + c + str(d) +’\n ‘
links.append(link)
return links

def mains():
start = datetime.now() # время
urls = ’https://baraholka.onliner.by/viewforum.php?f=214'
all_links = get_all_links(get_html(urls))
result_list =
for i in all_links:
result_list.append (i)
return result_list

@app.route('/',methods
def index():
if request.method == ‘POST’:
r = request.get_json()
chat_id = r
message = r
send_message(chat_id, text = mains())
#return jsonify(r)
sleep(2)
return mains()

#https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/setWebhook?url=https://b2289b30.ngrok.io
#https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/setWebhook?url=https://dykat90.pythonanywhere.com/

if __name__ == ‘__main__’:

app.run()

Офлайн

#2 Июль 27, 2018 10:40:27

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

как не отправлять одинаковые объявления

Dykat для нчала, не мешало бы научиться вставлять свой код в теги

[code python][/code]
, чтобы не пропадало форматирование и текст в квадратных скобках.
По поводу, алгоритма, нужно запоминать время последнего объявление, и в следующий раз брать только те объявы, котороые рамещены позднее сохраненной даты.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Июль 27, 2018 11:19:29

Dykat
Зарегистрирован: 2018-07-26
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как не отправлять одинаковые объявления

 from flask import Flask
from flask import request
from flask import jsonify
import requests
import json
from datetime import datetime
from bs4 import BeautifulSoup
from flask_sslify import SSLify
app = Flask(__name__)
sslify = SSLify(app)
URL = 'https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/'
def write_json(data, filename='answer.json'):
    with open('answer.json','w') as f:
        json.dump(data,f,indent=2,ensure_ascii=False)
def send_message(chat_id,text='Подождите секунду'):
    url = URL + 'sendMessage'
    answer = {'chat_id': chat_id,'text': text}
    r = requests.post(url, json = answer)
    return r.json()
def get_html(urls):
    r = requests.get(urls)
    return r.text
def get_all_links(html):
     #блок который парсим
    soup = BeautifulSoup(html, 'lxml')
    divs = soup.find('table', class_='ba-tbl-list__table')
    divs = soup.find_all('h2',class_='wraptxt')
    links = []
    # теги, потом изменю или добавлю дополнения
    for div in divs:
        a = div.find('a').get('href')
        
        #b = div.find('div',class_='content').text.strip()        
        link = 'https://baraholka.onliner.by' + a.strip('.')  +'\n '  #+ b #'    ' + b  +'\n   '# '    ' + c + str(d) +'\n   '        
        links.append(link)
    return links
    
def mains():
    start = datetime.now()  # время
    urls = 'https://baraholka.onliner.by/viewforum.php?f=214'
    all_links = get_all_links(get_html(urls)) 
    result_list = []
    for i in all_links:
        result_list.append (i)
    return result_list[6]
    
    
@app.route('/',methods=['POST', 'GET'])
def index():
    if request.method == 'POST':
        r = request.get_json()
        chat_id = r['message']['chat']['id']
        message = r['message']['text']
        send_message(chat_id, text = mains())
        #return jsonify(r)
        sleep(2)
    return mains()
#https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/setWebhook?url=https://b2289b30.ngrok.io
#https://api.telegram.org/bot672241145:AAFPHlsPN8RHhyGBwZZbGvMI7vZUDts6agE/setWebhook?url=https://dykat90.pythonanywhere.com/
if __name__ == '__main__':
    
    app.run()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version