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
我正在尝试使用 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