2016-04-06 13 views
0

Ich versuche, einen Telegramm-Bot von Grund auf mit Python zu erstellen. Ich habe alle ersten Schritte gemacht und den Bot-Token bekommen, und nun möchte ich die Daten einfach manipulieren (wie ich die first_name der Person von getupdates Methode bekomme) Ich möchte die Daten übersichtlich geordnet haben in ein Python-Wörterbuch.Telegram Bot-Updates zu Python-Dict-Konvertierung

Wenn ich versuche, /getme, bekomme ich diese: b'{"ok":true,"result":{"id":999999999,"first_name":"telebotsrock","username":"sample_bot"}}' Da die b' am Anfang und ' am Ende einen Fehler verursacht, wenn ich json.loads(data) (Wo Daten sind die Sache in einen String oben umgewandelt gegeben).

So mache ich data[2:-1] die b' und ' und json.loads() funktioniert gut, zu entfernen, aber wenn ich die /getme-/getupdates ändern, Pop eine Menge neuer Fehler auf.

Alles in allem ist es ein Durcheinander. Kann mir jemand einen sauberen Weg geben, um Daten vom Bot zu bekommen und in ein Python-Wörterbuch zu sortieren? Bitte sagen Sie mir nicht, eine andere Sprache zu verwenden oder kopieren Sie einfach ein bestehendes Bot-Framework.

Mein aktueller Code:

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) 

Dieser Code korrekt coverts die Ausgabe von /getme zu einem Python-Wörterbuch, aber Fehler gibt, wenn ich /getupdates stattdessen versuchen.

Ausgabe von /getupdates bevor ich schneiden es ist:

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"}}]}'

Antwort

1

Dies sollte für Sie arbeiten. Sie können die .decode('utf-8') verwenden, um das Byte-Präfix loszuwerden.

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

Vielen Dank! Das hat funktioniert –

Verwandte Themen