问题描述
我正在尝试为我的电报群制作一个非常简单的价格机器人。
令牌的数据取自 API。数据被正确提取,没有任何问题。但是,当我打开机器人并调用价格时,它只显示第一个价格,因为它请求了一次,之后不再循环。
有什么方法可以在机器人的函数中构建 API 调用,以便当我调用 /price 命令时,它会在那一刻从 API 中拉取它?
我尝试过:将 API 调用放入机器人消息函数中,但它无法正常工作。
有没有办法让这个工作?
在我的代码下面:
import os
import telebot
from requests_html import HTMLSession
import json
import urllib.request
from urllib.request import urlopen
import ssl
#Creating the bot with the attached API
API_KEY = ''
bot = telebot.TeleBot(API_KEY)
#Token price scraping
ssl._create_default_https_context = ssl._create_unverified_context
url = ''
data = urllib.request.urlopen(url).read()
jsonn = json.loads(data)
price_token = jsonn[-1][1]
print(price_token)
#Token price bot commands
@bot.message_handler(commands=['price'])
def pricetoken(message):
bot.send_message(message.chat.id,price_token)
bot.polling(none_stop=True,timeout=200)
解决方法
嘿,尝试替换代码片段,您使用的是仅获得一次并在发生价格命令时多次使用的单一价格
#Token price scraping
ssl._create_default_https_context = ssl._create_unverified_context
url = ''
data = urllib.request.urlopen(url).read()
jsonn = json.loads(data)
price_token = jsonn[-1][1]
print(price_token)
因此,将其替换为类似函数的方法,以便每次从 API 中获取新值,如下所示。
def obtain_price():
ssl._create_default_https_context = ssl._create_unverified_context
url = ''
data = urllib.request.urlopen(url).read()
jsonn = json.loads(data)
price_token = jsonn[-1][1]
return price_token
这就是你所需要的!
你的新代码现在看起来像
import os
import telebot
from requests_html import HTMLSession
import json
import urllib.request
from urllib.request import urlopen
import ssl
#Creating the bot with the attached API
API_KEY = ''
bot = telebot.TeleBot(API_KEY)
def obtain_price():
ssl._create_default_https_context = ssl._create_unverified_context
url = ''
data = urllib.request.urlopen(url).read()
jsonn = json.loads(data)
price_token = jsonn[-1][1]
return price_token
@bot.message_handler(commands=['price'])
def pricetoken(message):
price_token = obtain_price()
bot.send_message(message.chat.id,price_token)
bot.polling(none_stop=True,timeout=200)