Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 15, 2020 19:22:39

Alexandr88
Зарегистрирован: 2020-08-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

Добрый день! Недавно приступил к изучение данного языка программирования. Ну и вообще первого в моей жизни
Решил попробовать спарсить события с сайта и отправить их сообщением через телеграм бота.

 import telebot
from bs4 import BeautifulSoup
import requests
bot = telebot.TeleBot("828935062:AAGO7-sS7KkqkRYD2BvdJ-URTETkWJM8dkI")
url = 'https://www.afisha.ru/chelyabinsk/schedule_concert/'
page = requests.get(url)
 
# Парсим страницу
 
soup = BeautifulSoup(page.text, 'html.parser')
events = soup.findAll('li', class_='SlE6Y _1gSmu')
 
# Собираем необходимые данные со страницы:
 
for i in events:
    event = i.find('section').find('h3').find('a').get_text()
    try:
        desc = i.find('section').find('div', class_='').get_text()
    except:
        desc = "Нет описания"
    date = i.find('section').find('div', class_='_1Jo7v').get_text()
    answer = event + desc + date
 
# Отправляем через бота:
 
    @bot.message_handler(content_types=['text'])
    def send_events_chel(message):
        bot.send_message(message.chat.id, answer)
    bot.polling(none_stop=True)
Столкнулся с такой проблемой. Если принтом вывести переменную answer, то выводится полный список событий.
Однако бот отправляет сообщением только первую строку.
В чём моя ошибка?

Офлайн

#2 Авг. 16, 2020 03:02:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

Alexandr88
Если принтом вывести переменную answer, то выводится полный список событий.
Не вижу у тебя собирания нескольких строк в цикле в список строк.

И для отправки в Telegram не нужен модуль telebot. Достаточно только адрес бота и запрос к методу.

Скрипт отправки сообщения через бота в приват пользователя, в канал или группу.
  
#!/usr/bin/env python3
 
# Посылает сообщение в Telegram через заданного бота в заданный чат.
#
# Для посылки сообщения нужно:
# 1. Установить переменную среды BOTTOKEN в значение токен бота.
# 2. Установить переменную среды CHATID в значение идентификатор чата
# (числовой или @буквенный).
# 3. Запустить скрипт.
#
# Например (в Linux):
# $ export BOTTOKEN=1111111111:AAA1Aa1A1aaaA1AA1aaaaaAaAaAG-aA1Aaa
# $ export CHATID=2222222222
# $ ./tg_sender.py
 
import os
import urllib.request
import json
 
def send_message():
    bottoken = os.getenv('BOTTOKEN')
    send_url = 'https://api.telegram.org/bot{}/sendMessage'.format(bottoken)
    send_headers = {
        'Content-Type': 'application/json'
    }
    send_method = 'POST'
 
    chatid = os.getenv('CHATID')
    username = 'User'
    text = 'Text'
 
    data_dict = {
        "chat_id": chatid,
        "text": 'Привет, {}. Твой текст: "{}"'.format(
            username, text)
    }
    send_data = json.dumps(data_dict).encode('latin1')
 
    req = urllib.request.Request(
        url=send_url,
        headers=send_headers,
        method=send_method,
        data=send_data)
    with urllib.request.urlopen(req) as recv_data:
        out = recv_data.read()
    return True
 
def main():
    if send_message():
        print('ok')
 
if __name__ == '__main__':
    try:
        main()
    except urllib.error.HTTPError:
        print('Can\'t send:'
              ' set environment variables:'
              ' BOTTOKEN and CHATID')


tags: telegram



Офлайн

#3 Авг. 16, 2020 10:24:15

Alexandr88
Зарегистрирован: 2020-08-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

По поводу вашего скрипта. Это для меня пока слишком сложно)
Telebot использую для того чтобы можно было общаться с ботом. Получать список событий по запросу к нему. Возможно потом добавлю что то ещё.
Я попробовал обернуть полученные данные в список вот так:

    answer.append(event + "|" + desc + "|" + "|" + date)
    answer1 = answer[-1]
Коряво, но по-другому пока не умею. Если вывести принтом получается вот так:
«Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00
«Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00
«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00
«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00
Cream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00
«ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00
XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00
Макс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00
Niletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00
«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00
Noize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00
Баста|Важнейший российский рэпер||Трактор, 31 октября в 20:00
Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00
«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00
Пелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00
Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00
«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00
Morgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00
«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00
«Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00
«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00
«Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00
Saluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00
«Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00

Теперь, когда обращаешься к боту, он вообще ничего не отвечает. Может ему надо список как-то передать строкой? Или сообщение слишком длинное?

Отредактировано Alexandr88 (Авг. 16, 2020 10:26:49)

Офлайн

#4 Авг. 16, 2020 11:00:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

Alexandr88
Telebot использую для того чтобы можно было общаться с ботом. Получать список событий по запросу к нему.
Чтобы отправить боту сообщение можешь использовать мой скрипт. Можешь токен и идентификатор чата прямо в скрипт записать без взятия их из переменных окружения. Сначала научись просто в цикле любые сообщения боту отправлять. Отправь боту в цикле три строки любые. Не какие-то там, которые ты собираешь, а просто сообщения из строк 1 2 3. И ты увидишь, что ты нихрена не можешь отправить. Всё это следует из твоего кода, который ты отправил выше. А потом, когда ты научишься строки боту отправлять последовательно в цикле, тогда ты уже займёшься отправкой данных, которые ты тоже собирать воедино не умеешь.

Alexandr88
Если вывести принтом получается вот так:
А ты должен его не выводить принтом, а склеить в один текст и отправить этот весь склеенный текст боту один раз.
Но можно и построчно отправлять боту строку за строкой. Но если с ботом идёт общение у пользователя, то эта отправка строка за строкой будет разрывать содержимое у пользователя на экране.

Alexandr88
Или сообщение слишком длинное?
Боты Telegram поддерживают поле text в размере 4 килобайта в одном сообщении.
https://core.telegram.org/bots/api#message
text 	String 	Optional. For text messages, the actual UTF-8 text of the message, 0-4096 characters

>>> s = """\
... «Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00
... «Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00
... «Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00
... «Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00
... Cream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00
... «ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00
... XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00
... Макс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00
... Niletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00
... «Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00
... Noize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00
... Баста|Важнейший российский рэпер||Трактор, 31 октября в 20:00
... Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00
... «Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00
... Пелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00
... Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00
... «Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00
... Morgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00
... «Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00
... «Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00
... «Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00
... «Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00
... Saluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00
... «Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00"""
>>>
>>> s
'«Джаз-детям» (онлайн-трансляция)|Нет описания|| 19 августа в 15:00\n«Помни имя свое» (онлайн-трансляция)|Нет описания|| сегодня в 20:00\n«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания|| 29 августа в 17:00\n«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века||Галактика развлечений, 25 сентября в 19:00\nCream Soda|Эклектичный хаус-поп от самого модного трио страны||Ozz, 25 сентября в 19:00\n«ДДТ»|Душевные герои русского рока||Трактор, 23 апреля 2021 г. в 19:00\nXIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания|| 18 августа в 19:00\nМакс Барских|Традиционный поп в трендовой обертке||Дворец спорта «Юность», 25 сентября в 20:00\nNiletto|Бро-хаус-артист, взорвавший чаты||Галактика развлечений, 18 ноября в 19:00\n«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»||World Trade Center, 11 июля 2021 г. в 20:00\nNoize MC|Видный герой русского хип-хопа||World Trade Center, 9 октября в 19:00\nБаста|Важнейший российский рэпер||Трактор, 31 октября в 20:00\nBoulevard Depo|Уникальный флоу от талантливого и необычного рэпера||Галактика развлечений, 10 октября в 19:00\n«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока||Галактика развлечений, 16 сентября в 19:00\nПелагея|Главная звезда российского фолк-рока||World Trade Center, 8 октября в 19:00\nТони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта||Ozz, 13 октября в 19:00\n«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект||Ozz, 17 октября в 19:00\nMorgenshtern|От рэп-разоблачителя до стадионного артиста||Галактика развлечений, 23 октября в 19:00\n«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих||Ozz, 23 ноября в 20:00\n«Аффинаж»|Чувственный нуар-шансон с аккордеоном||Ozz, 20 сентября в 19:00\n«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года||Ozz, 21 сентября в 19:00\n«Сказки с большим оркестром»|Нет описания||Концертный зал им. Прокофьева, 26 сентября в 15:00\nSaluki|Из битмейкеров — в хитмейкеры||Ozz, 26 сентября в 20:00\n«Нервы»|Подростковый поп-панк — разумеется, о любви||Галактика развлечений, 5 октября в 19:00'
>>> len(s)
2183
>>> len(s.encode('utf-8'))
3656
>>>



Отредактировано py.user.next (Авг. 16, 2020 11:06:02)

Офлайн

#5 Авг. 16, 2020 15:02:01

Alexandr88
Зарегистрирован: 2020-08-15
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

Спасибо за помощь!
В цикле for добавил

     answer.append(event + "|" + desc + "|" + date)
string = "\n \n".join(answer)
И после этого бот выдал сообщение в телеграме в таком виде:
«Джаз-детям» (онлайн-трансляция)|Нет описания| 19 августа в 15:00

«Помни имя свое» (онлайн-трансляция)|Нет описания| сегодня в 20:00

«Будь с Городом!»: Елка, Муся Тотибадзе, IOWA, «Марсель» (онлайн-трансляция)|Нет описания| 29 августа в 17:00

«Каста»|Ветераны русского хип-хопа, переворачивавшие игру еще в начале века|Галактика развлечений, 25 сентября в 19:00

Cream Soda|Эклектичный хаус-поп от самого модного трио страны|Ozz, 25 сентября в 19:00

«ДДТ»|Душевные герои русского рока|Трактор, 23 апреля 2021 г. в 19:00

XIV фестиваль «Собираем друзей»:«Восходящая звезда Альбиона» (онлайн-трансляция)|Нет описания| 18 августа в 19:00

Макс Барских|Традиционный поп в трендовой обертке|Дворец спорта «Юность», 25 сентября в 20:00

Niletto|Бро-хаус-артист, взорвавший чаты|Галактика развлечений, 18 ноября в 19:00

«Король и Шут». 20 лет альбому «Кукла Колдуна»: «Княzz»|Сказочный панк от создателя группы «Король и Шут»|World Trade Center, 11 июля 2021 г. в 20:00

Noize MC|Видный герой русского хип-хопа|World Trade Center, 9 октября в 19:00

Boulevard Depo|Уникальный флоу от талантливого и необычного рэпера|Галактика развлечений, 10 октября в 19:00

Баста|Важнейший российский рэпер|Трактор, 31 октября в 20:00

«Пошлая Молли»|Кумиры молодежи и новаторы рейв-рока|Галактика развлечений, 16 сентября в 19:00

Пелагея|Главная звезда российского фолк-рока|World Trade Center, 8 октября в 19:00

Тони Раут & Гарри Топор|Слэм и хардкор от агрессивного рэп-дуэта|Ozz, 13 октября в 19:00

«Нейромонах Феофан»|Древнерусский драм-н-бейс-проект|Ozz, 17 октября в 19:00

Morgenshtern|От рэп-разоблачителя до стадионного артиста|Галактика развлечений, 23 октября в 19:00

«Френдзона»|Мультяшный поп-панк-проект для школьников и сочувствующих|Ozz, 23 ноября в 20:00

«Аффинаж»|Чувственный нуар-шансон с аккордеоном|Ozz, 20 сентября в 19:00

«Хадн дадн»|Фолк и прозрачная электроника от важных новичков 2019 года|Ozz, 21 сентября в 19:00

«Сказки с большим оркестром»|Нет описания|Концертный зал им. Прокофьева, 26 сентября в 15:00

Saluki|Из битмейкеров — в хитмейкеры|Ozz, 26 сентября в 20:00

«Нервы»|Подростковый поп-панк — разумеется, о любви|Галактика развлечений, 5 октября в 19:00

Щас допилю чтобы на команды реагировал.
Позже буду разбираться как обойтись без библиотеки Telebot

Отредактировано Alexandr88 (Авг. 16, 2020 15:04:02)

Офлайн

#6 Авг. 17, 2020 00:42:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Парсинг с выводом в Telegram через бота

Alexandr88
Щас допилю чтобы на команды реагировал.
Позже буду разбираться как обойтись без библиотеки Telebot
Там два вида ботов можно делать.
Один вид - это активный бот. Ты ставишь где-то скрипт управления ботом (на своём компе или на хостинге) и он активно опрашивает через бота, установленного в Telegram, какой-то канал, группу или приват бота, нет ли там новых сообщений. Если там есть новые сообщения, он получает информацию о них и на это может реагировать, а может и ничего не делать.
Второй вид - это пассивный бот. Ты можешь делать скрипт управления ботом как угодно и вообще не использовать питон даже. При обращении к боту, установленному в Telegram, из канала, группы или в привате бот посылает сообщение об этом обращении на какой-то адрес, который у него настроен. Что там происходит на этом адресе, бот вообще не знает. И он ничего не ждёт в ответ.
При любом из этих видов ты можешь в любой момент подключиться к боту, установленному в Telegram, и что-то ему отправить. Это делается независимо от того, посылал ему кто-то команду или не посылал. Он просто в любой момент готов принять какую-то произвольную инструкцию от того, кто знает его секретный токен, и выполнить её.

Активные боты менее надёжны и больше требуют ресурсов. Большую часть времени они работают впустую. Если ему месяц никто ничего не посылал, он всё равно весь месяц проопрашивает сервер Telegram “а не присылал ли мне кто-то что-то за последние секунды?”. Другое дело пассивные боты. Они могут спать вообще весь месяц, но когда Telegram им что-то пришлёт, они сразу проснутся и один раз обработают пришедшее сообщение. То есть они не жрут ресурсы.

Тут тебе пару ссылок, которые предоставляют обзоры на пассивные боты
https://retifrav.github.io/blog/2018/12/02/telegram-bot-webhook-ru/
https://groosha.gitbook.io/telegram-bot-lessons/chapter4


tags: telegram bot



Отредактировано py.user.next (Фев. 17, 2021 00:49:37)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version