• Ну и что вы думаете? Мы взяли и создали свой собственный чат, с блекджеком и шлюхами, теперь все легенды в одном месте: даже те 1000 человек, которых мы забанили в старом чате 🫡 Будем публиковать там очень интересные подробности нового дизайна форума, oh yeah

    Вступай и становись легендой, пока это не стало поздно: жмякай на меня, ток не сильно(

Исходник Запрос цены биткоина через API (TELEBOT)

Новичок
Статус
Оффлайн
Регистрация
8 Янв 2022
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Объясняю как работает, просто многие сюда гайды закидывают и типа "На пожри новичок, и не спрашивай как то то работает, иди документацию читай"
Для начала сам код :

Код:
import requests[/B][/SIZE][/CENTER]
[SIZE=5][B][CENTER]import telebot

def get_data_api():
    req = requests.get("https://yobit.net/api/3/ticker/btc_usd")
    response = req.json()
    print(response)
    data_koron = response["btc_usd"]["sell"]
    print(f"{data_koron}")

def telegram_bot(token):
    bot = telebot.TeleBot("YouTokenBotFather")

    @bot.message_handler(commands=["start"])
    def start_message(message):
        bot.send_message(message.chat.id, "Привет друг, Напиши команду 'Price' Чтобы получить Стоимость биткоина к доллару на данный момент")
    @bot.message_handler(content_types=["text"])
    def send_text(message):
        
        if message.text.lower() == "price":
            try:
                req = requests.get("https://yobit.net/api/3/ticker/btc_usd")
                response = req.json()
                print(response)
                data_koron = response["btc_usd"]["sell"]
                bot.send_message(
                        message.chat.id,
                        f"Стоимость БИТКОИНА к Доллару : {data_koron} Долларов"
                    )

            except Exception as ex:
                print(ex)
                bot.send_message(
                        message.chat.id,
                        "Какая то ошибка... Щас автор пофиксит"

                    )


    bot.polling()


if __name__ == '__main__':
    # get_data_api()
    telegram_bot("YouTokenBotFather")
Объясняю как эта няшечка кодяшечка работает,сначала я импортирую 2 модуля, Реквест (Для взятия данных из API)
и телебот (чтобы сделать бота для телеграмма)

Для начала я создаю лёгкую функцию получения данных
Я получаю джсон данные с апи.

Кто не понимает - API - Сокращение многих действий, то есть идёт запрос на сервер, а сервер выдаёт одну большую функцию которая заменяет много действий (извиняюсь если рассказал тупо и неправильно)

Я лично использую апишечку от юбита, так как там в режиме реального времени изменяется курс (биткоина к доллару)

потом я подсказываю боту токен и делаю реакцию на /start

и делаю функцию на команду price
если что text.lower() нужно для того чтобы "Буквы нижнего регистра" тоже учитывались
иначе бот будет реагировать только на price, а не на Price, PrIcE И т.д

после чего идёт трай и полностью скопированная функция, после чего отсыл массива с жсон элементами (btc_usd и sell)
так же есть реакция на баги (если не сработает и будет какая то ошибка)

потом идёт бот пуллинг который делает так чтобы бот не оффался и ждал пока чел напишет сообщение
сравнение и ещё раз токен бота
 
Последнее редактирование модератором:
Sos
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2019
Сообщения
256
Реакции[?]
55
Поинты[?]
0
ну проще было бы сделать это на aiogram. Во вторых вместо обычных запросов через request можно было бы подключить библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Python:
# Взято с документации
import crypto_stocks

def GetBtcCurrency():
    return crypto_stocks.Binance('btc', 'usd')
Во вторых, ты просишь пользователя ввести команду а сам проверяешь простые сообщения. Т.е те кто введут КОМАНДУ (через "/") идут нахуй. Не проще было просто скопировать декоратор с команды /start и изменить эту самую команда на /price.
В третьих, импортируешь просто класс клавиатуры и с командой старт кидаешь клавиатуру пользователю.
P.S С помощью клавиатуры можешь сделать несколько бирж и пользователь уже будет ориентироваться по курсу той самой биржи.

UPD: Написал более красивого бота на aiogram
Python:
# Фреймворк для работы с апишкой тг (aiogram)
import aiogram
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton

# Сам парсер крипты
import crypto_stocks

# В классе Bot указываем parse_mode и задаём ему значение HTML, что бы была возможно красиво оформлять сообщения с помощью HTML тегов
bot = Bot(token="", parse_mode="HTML")
dp = Dispatcher(bot)

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):

    # Клавиатура
    markup = ReplyKeyboardMarkup(resize_keyboard=True).add(
        # Кнопка
        KeyboardButton(
            f"? Узнать курс доллара"
        )
    )

    # Сообщение с текстом и клавиатурой
    await message.answer(
        f"Привет, {message.from_user.first_name}! Напиши команду /Price или нажми на кнопку ниже Чтобы получить Стоимость биткоина к доллару на данный момент",
        reply_markup=markup
    )

# Обработчик текста с кнопки
@dp.message_handler(text="? Узнать курс доллара")
async def text_price(message: types.Message):

    # Клавитаруа под сообщением
    markup = InlineKeyboardMarkup(inline_keyboard=False)

    # Добавляем кнопки в неё
    markup.add(
        InlineKeyboardButton(
            "BINANCE", callback_data="currency:binance"
        ),
        InlineKeyboardButton(
            "COINBASE", callback_data="currency:coinbase"
        ),
        InlineKeyboardButton(
            "FTX", callback_data="currency:ftx"
        ),
        InlineKeyboardButton(
            "Kraken", callback_data="currency:kraken"
        ),
    )

    # Редактируем сообщение и кидаем новую клавиатуру
    await message.answer(
        f"На какой бирже будем смотреть курс? ?", reply_markup=markup
    )

# Обработчик команды /price
@dp.message_handler(commands=['price'])
async def cmd_price(message: types.Message):

    # Тут всё тоже самое что и в обработчике текста

    markup = InlineKeyboardMarkup(inline_keyboard=False)

    markup.add(
        InlineKeyboardButton(
            "BINANCE", callback_data="currency:binance"
        ),
        InlineKeyboardButton(
            "COINBASE", callback_data="currency:coinbase"
        ),
        InlineKeyboardButton(
            "FTX", callback_data="currency:ftx"
        ),
        InlineKeyboardButton(
            "Kraken", callback_data="currency:kraken"
        ),
    )

    await message.answer(
        f"На какой бирже будем смотреть курс? ?", reply_markup=markup
    )

# Не много Python 3.10
# В ином случае заменяем на всем любимою конструкцию if elif else
def get_price(stock="binance"):

    # Создаём переменную в которую запишем цену битка к вечно зелёным бумажкам
    price = 0
    
    # Тут начинаем наш switch-case
    match stock:
        # Если мы передали значение binance (по дефолту установлено)
        case "binance":
            # Берём цену с бинанса.
            # Ниже и так понятно
            price = crypto_stocks.Binance('btc', 'usd')
        case "coinbase":
            price = crypto_stocks.Coinbase('btc', 'usd')
        case "ftx":
            price = crypto_stocks.FTX('btc', 'usd')
        case "kraken":
            price = crypto_stocks.Kraken('btc', 'usd')

    # Возвращаем значение
    return price

# Наш обработчик инлайн кнопок
@dp.callback_query_handler(text_startswith="currency:")
async def callback_currency(call: types.CallbackQuery):

    # Получаем выбранную биржу
    stock = call.data.split(":")[1]
    # Обращаемся к нашей функции и передаём выбранную биржу
    price = get_price(stock=stock)

    # Создадим кнопку обновления курса и выбору другой биржи
    markup = InlineKeyboardMarkup().add(
        InlineKeyboardButton("? Обновить курс", callback_data=f"currency:{stock}"),
        InlineKeyboardButton("⬅️ Выбрать другую биржу", callback_data=f"back")
    )

    # Редактируем сообщение и кидаем новую клавиатуру
    await call.message.edit_text(
        f"? Курс битка на <b>{stock}</b>:\n<b>1 BTC = ${price}</b>", reply_markup=markup
    )
    
@dp.callback_query_handler(text="back")
async def callback_back(call: types.CallbackQuery):

    markup = InlineKeyboardMarkup(inline_keyboard=False)

    markup.add(
        InlineKeyboardButton(
            "BINANCE", callback_data="currency:binance"
        ),
        InlineKeyboardButton(
            "COINBASE", callback_data="currency:coinbase"
        ),
        InlineKeyboardButton(
            "FTX", callback_data="currency:ftx"
        ),
        InlineKeyboardButton(
            "Kraken", callback_data="currency:kraken"
        ),
    )

    await call.message.edit_text(
        f"На какой бирже будем смотреть курс? ?", reply_markup=markup
    )

# RUN
if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
26 Май 2019
Сообщения
51
Реакции[?]
6
Поинты[?]
0
фу, не аиограм и реквесты вместо нормального апишного модуля
 
Пользователь
Статус
Оффлайн
Регистрация
12 Июн 2019
Сообщения
867
Реакции[?]
125
Поинты[?]
1K
ну проще было бы сделать это на aiogram
Чем проще? Библиотеки схожи, ни чём telebot не сложнее aiogram
P.S Для данной задачи она будет излишеством
Во вторых, ты просишь пользователя ввести команду а сам проверяешь простые сообщения. Т.е те кто введут КОМАНДУ (через "/") идут нахуй. Не проще было просто скопировать декоратор с команды /start и изменить эту самую команда на /price.
Тут согласен
Во вторых вместо обычных запросов через request можно было бы подключить библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.
Сдесь не вижу смысла как получать курс битка,я более чем уверен что crypto-stocks тоже парсит с какого-то сайта.

А вообще не вижу какой-либо умственной нагрузки в данной теме, только отсталые в развитии пастеры не смогут сделать самому такую штуку.
 
Sos
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2019
Сообщения
256
Реакции[?]
55
Поинты[?]
0
Чем проще? Библиотеки схожи, ни чём telebot не сложнее aiogram
P.S Для данной задачи она будет излишеством

Тут согласен

Сдесь не вижу смысла как получать курс битка,я более чем уверен что crypto-stocks тоже парсит с какого-то сайта.

А вообще не вижу какой-либо умственной нагрузки в данной теме, только отсталые в развитии пастеры не смогут сделать самому такую штуку.
а зачем делать парсер заново если можно просто подключить библиотеку и не париться на этот счет :LUL:
Ну естественно он парсит с сайтов, ведь не просто так там сделаны классы по парсингу с бинанса или того же битстампа
 
Пользователь
Статус
Оффлайн
Регистрация
12 Июн 2019
Сообщения
867
Реакции[?]
125
Поинты[?]
1K
а зачем делать парсер заново если можно просто подключить библиотеку и не париться на этот счет :LUL:
Ну естественно он парсит с сайтов, ведь не просто так там сделаны классы по парсингу с бинанса или того же битстампа
Тут вопрос кому как удовбно,в перфомансе оно приемуществ не даёт?
 
Начинающий
Статус
Оффлайн
Регистрация
26 Май 2019
Сообщения
51
Реакции[?]
6
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
12 Июн 2019
Сообщения
867
Реакции[?]
125
Поинты[?]
1K
зачем придумывать велосипед увеличивая код на 8047897123 лишних строк :roflanBuldiga:
Пожалуйста, авторизуйтесь для просмотра ссылки.
а теперь читаем документацию и понимаем что requests являеться класом,где метод get имеет объекты. Это означает что делаеться всё в одну строчку
requests.get("https://yobit.net/api/3/ticker/btc_usd").json()
Ещё раз повторюсь что сдесь решает кому как удобно,абсолютной разницы сдесь нету и в использовании requests не есть плохим решением. Если ты думаешь что это велосипед, то по коду создателя треда видно что он только учиться.Иначе зачем тогда допустим пытаться сделать калькулятор факториалов вручную,когда есть библиотека math? Ответ: нужно самому развивать свой мозг,а не пастить потому-что так "модно"
 
Начинающий
Статус
Оффлайн
Регистрация
26 Май 2019
Сообщения
51
Реакции[?]
6
Поинты[?]
0
Пожалуйста, авторизуйтесь для просмотра ссылки.
а теперь читаем документацию и понимаем что requests являеться класом,где метод get имеет объекты. Это означает что делаеться всё в одну строчку
requests.get("https://yobit.net/api/3/ticker/btc_usd").json()
Ещё раз повторюсь что сдесь решает кому как удобно,абсолютной разницы сдесь нету и в использовании requests не есть плохим решением. Если ты думаешь что это велосипед, то по коду создателя треда видно что он только учиться.Иначе зачем тогда допустим пытаться сделать калькулятор факториалов вручную,когда есть библиотека math? Ответ: нужно самому развивать свой мозг,а не пастить потому-что так "модно"
да, теперь 100500 try-exceptов на любые возможные ошибки которые могут быть вызваны во время этих запросов, отдельный класс (в идеале, если ты не хочешь статус говнокода на своем проекте) и все такое

итого: 283472934 строк, проще юзать либу

апд228: и еще 13902847298034 строк кода на взятие инфы с других сервисов, да

апд1337: использование библиотек созданных под определенные задачи, которые упрощают код != копипаста
с таким успехом твой совет по поводу использования math вместо ручного калькулятора факториалов == совет копипастить?
 
Пользователь
Статус
Оффлайн
Регистрация
12 Июн 2019
Сообщения
867
Реакции[?]
125
Поинты[?]
1K
да, теперь 100500 try-exceptов на любые возможные ошибки которые могут быть вызваны во время этих запросов, отдельный класс (в идеале, если ты не хочешь статус говнокода на своем проекте) и все такое
Почему нужно использовать try-exceptы? Смотря под какую задачу
итого: 283472934 строк, проще юзать либу
Говнокодер будет делать столько строк,нормальный человек выберет что ему конктретно нужно.Не будут-же делать для каждого сервиса\сайта отдельную библиотеку:roflanBuldiga:
и еще 13902847298034 строк кода на взятие инфы с других сервисов, да
Зачем на м другие сервисы,если мы делаем про получение биткоин цены.Питон уже не такой как 2-3 года назад,щас он быстрый
использование библиотек созданных под определенные задачи, которые упрощают код != копипаста
Я имел ввиду не то что библиотеки == копипаста,а то что тема максимум полезна в образовательных целях как для работы с тг апи и библиотекой requests,но нет про кодеры пошли давать ему библиотеку под крипту
с таким успехом твой совет по поводу использования math вместо ручного калькулятора факториалов == совет копипастить?
Повторюсь ещё разок, если ты на стадии обучения то тебе нужно понимать как работает твоё творение.Это нужно что-бы потом небыло дебильных вопросов,-"пОчЕмУ в цЫкЛе while TrueгДе сОзДаЮ пОтОкИ у МеНя кОмП нА лУнУ уЛеТеЛ????!?!?"(вопрос как пример,а то снова не поймешь)

И под конец: если ты вместо того чтобы попробывать самому сделать то что уже есть в образовательной цели, пошёл пастить свой недо-проект то очень жаль что таких людей земля носит, зачем это делать? Когда прийдёт время сделать что-то своё такое существо ничего не сделает.

upd: тебе никто не запрещает использовать try except. Я делал сервер с авто-обновлением ПО на питоне,через request делал все запросы и ничего, клиент тоже был написан на requests и ничего не отваливалось.Причём тогда твой try-except, для меня загадка
 
Последнее редактирование:
Сверху Снизу