Telegram 机器人更新 python 字典转换

Telegram bot updates to python dict conversion

我正在尝试使用 python 从头开始​​创建 Telegram 机器人。我已经完成了所有初始步骤并获得了 bot 令牌,现在我想做的是,为了轻松处理它发送给我的数据(比如从 getupdates 获取人的 first_name方法)我想把数据整齐地排列成一个 python 字典。

当我尝试 /getme 时,我得到了这个: b'{"ok":true,"result":{"id":999999999,"first_name":"telebotsrock","username":"sample_bot"}}' 由于开头的 b' 和结尾的 ' 在我执行 json.loads(data) 时会导致错误(其中数据是上面给出的转换为字符串的内容)。

所以我 data[2:-1] 删除 b''json.loads() 工作正常,但是当我将 /getme 更改为 /getupdates,弹出一堆新的错误。

总而言之,一团糟。有人能给我一个从机器人获取数据并将其分类到 python 字典中的干净方法吗?请不要告诉我使用不同的语言或只是复制现有的机器人框架。

我当前的代码:

from urllib.request import urlopen
import json

token="999999999:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
site="https://api.telegram.org/bot"+token

content=str(urlopen(site+"/getme").read())
#content=str(urlopen(site+"/getupdates").read())
data=content[2:-1]
print(data)
info=json.loads(data)
print(info)

此代码正确地将 /getme 的输出转换为 python 字典,但在我尝试 /getupdates 时出错。

/getupdates 在我切片之前的输出是:

b'{"ok":true,"result":[{"update_id":66666666,\n"message":{"message_id":1,"from":{"id":777777777,"first_name":"Aswin","last_name":"G","username":"MatrixHunter"},"chat":{"id":777777777,"first_name":"Aswin","last_name":"G","username":"MatrixHunter","type":"private"},"date":1459932293,"text":"\/start"}},{"update_id":88888888,\n"message":{"message_id":2,"from":{"id":777777777,"first_name":"Aswin","last_name":"G","username":"MatrixHunter"},"chat":{"id":777777777,"first_name":"Aswin","last_name":"G","username":"MatrixHunter","type":"private"},"date":1459932298,"text":"Oy"}}]}'

这应该适合你。您可以使用 .decode('utf-8') 去掉字节前缀。

token = "999999999:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
url="https://api.telegram.org/bot" +token + "/getme"

req = Request(url)
response = urlopen(req)
data = response.read().decode('utf-8')
json_data = json.loads(data)

print(str(data['ok'])) #should print True