Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2018 15:28:51

gavrilka
Зарегистрирован: 2018-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Telegram. Учим бота узнавать курс валют

Переписал по видео уроку простого бота, который узнает курс биткоина к доллару.
Хочу эту функцию усовершенствовать, но увы никак не получается, буду очень признателен если кто подскажет.
Вот так изначально выглядит код функции в отдельном файле:

 import requests
def get_btc(): #курс биткоина к доллару
    url = 'https://yobit.net/api/2/btc_usd/ticker'
    response = requests.get(url).json()
    price = response['ticker']['last']
    return str(price) + ' usd'
Я же хочу добавить сюда переменную, которую мы будем использовать в ссылке, в зависимости от того, какой запрос нам поступит. Например, пользователь отправит /getbtc_usd, мы увидим, что сообщение содержит “/get”, и в переменную запишем только btc_usd, которая сформирует уже правильную ссылку и ответит пользователю.
Ну а сам код бота:
 import requests
import misc
from yobit import get_btc
from time import sleep
# import json
token = misc.token
URL = "https://api.telegram.org/bot" + token + "/"
global last_update_id
last_update_id = 0
def get_updates():
    url = URL + "getupdates"
    r = requests.get(url)
    return r.json()
def get_message():
    data = get_updates()
    last_object = data["result"][-1]
    current_update_id = last_object['update_id']
    global last_update_id
    if last_update_id != current_update_id:
        last_update_id = current_update_id
        chat_id = last_object["message"]["chat"]["id"]
        message_text = last_object["message"]["text"]
        message = {"chat_id": chat_id,
                   "text": message_text}
        return message
    return None
def send_message(chat_id, text="Wait a second, please..."):
    url = URL + "sendmessage?chat_id={}&text={}".format(chat_id, text)
    requests.get(url)
def main():
    # d = get_updates()
    #with open("updates.json", "w") as file:
    #    json.dump(d, file, indent=2, ensure_ascii=False)
    while True:
        answer = get_message()
        if answer != None:
            chat_id = answer['chat_id']
            text = answer['text']
            if text == '/btc':
                send_message(chat_id, get_btc())
        else:
            continue
        sleep(2)
if __name__ == "__main__":
    main()

Офлайн

#2 Янв. 28, 2018 15:33:09

gavrilka
Зарегистрирован: 2018-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Telegram. Учим бота узнавать курс валют

Понимаю что сделал корявое решение, но теперь имею следующее:

 import requests
def get_btc(pair): #курс биткоина к доллару
    url = 'https://yobit.net/api/3/ticker/' + pair + '-error_pair?ignore_invalid=1'
    response = requests.get(url).json()
    price = response[pair]['last']
    return str(price)

         if answer != None:
            chat_id = answer['chat_id']
            text = answer['text']
            if text != None:
                send_message(chat_id, get_btc(text))
        else:
            continue
        sleep(2)
Использовал 3ию версию API yobit, чтобы исключить ошибки. Если я отправляю правильную пару, то все работает. Но если отправляю неправильный запрос пары usd_eth, то код выдает ошибку.
File "yobit.py", line 6, in get_btc
price = response[pair]['last']
KeyError: 'usd_eth'

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version