2016-04-06 3 views
0

Я пытаюсь создать ботов Telegram с нуля с помощью python. Я сделал все начальные шаги и получил бот-токен, и теперь то, что я хочу сделать, это простое управление данными, которые он отправляет мне (например, получение first_name человека из метода getupdates). Я хочу, чтобы данные были аккуратно упорядочены в словарь python.Обновления Telegram bot для преобразования python dict

Когда я пытаюсь /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 в словарь питона, но дает ошибки при попытке /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"}}]}'

ответ

1

Это должно работать для вас. Вы можете использовать .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 
+0

Спасибо! Это сработало –

Смежные вопросы