带有网站 API 的 Python 电报价格机器人

问题描述

我正在尝试为我的电报群制作一个非常简单的价格机器人。

令牌的数据取自 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...