ich würde gerne über websocket mit einer API kommunizieren. Dies würde ich möglichst unkompliziert und leicht haben, damit es auch wirklich fehlerfrei funktioniert und ich nicht irgendwas falsch mache/vergesse.
Für normale REST APIs gibt es ja das tolle Modul "requests" womit man viele vergleichsweise komplizierte Schritte sparen kann und es daher recht leicht ist, API calls zu machen.
Nun ist meine Frage, ob es so ein Allrounder Modul auch für websockets bzw socket.io gibt?
Habe mittlerweile schon hören müssen, dass websocket nicht gleich websocket ist. Da gibt es wohl welche wo ein einfacher pusherclient ausreicht, dann etwas fortgeschrittenere die mit socket.io arbeiten und dann noch deutlich kompliziertere. Mir wurde schon von einem Nicht-Python-Programmierer gesagt, dass es da vermutlich nichts ähnliches wie requests für geben wird.
Damit es einfacher wird, nehmen wir mal ein Beispiel.
Die Dokumentation ist nur im eingeloggten Zustand einsehbar, deswegen hier 2 screenshots der sehr kurzen Dokumentation:
http://www2.pic-upload.de/img/29897251/ ... e_ws_1.jpg
http://www2.pic-upload.de/img/29897255/ ... e_ws_2.jpg
Alle Angaben die ich bekomme sind also Socket.io, Host, Port und event. Was muss ich nun tun?
Ist das hier vllt genau das Modul was ich suche? https://pypi.python.org/pypi/socketIO-client
Leider ist die Dokumentation ziemlich sparsam, oder gibts da noch eine bessere?
Soweit ich verstanden habe, heißt Port 443 nichts anderes, als dass es eine https, also SSL Verbindung ist.
Also habe ich mal versucht das Beispiel für ein Event und das für die SSL Verbindung zu kombinieren und gucken was passiert:
Code: Alles auswählen
from socketIO_client import SocketIO
def on_remove_order_response(*args):
print('on_remove_order_response', args)
if __name__ == '__main__':
socketIO = SocketIO('https://ws.bitcoin.de',verify=False)
socketIO.on('remove_order_response', on_remove_order_response)
socketIO.emit('remove_order')
socketIO.wait(seconds=1)
Code: Alles auswählen
C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py:791: InsecureRequestWarning: Unverified HTTPS
request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
InsecureRequestWarning)
Traceback (most recent call last):
File "bitcoinde_ws.py", line 16, in <module>
socketIO = SocketIO('https://ws.bitcoin.de'verify=False)
File "C:\Python34\lib\site-packages\socketIO_client\__init__.py", line 331, in __init__
resource, hurry_interval_in_seconds, **kw)
File "C:\Python34\lib\site-packages\socketIO_client\__init__.py", line 51, in __init__
self._transport
File "C:\Python34\lib\site-packages\socketIO_client\__init__.py", line 59, in _transport
self._engineIO_session = self._get_engineIO_session()
File "C:\Python34\lib\site-packages\socketIO_client\__init__.py", line 73, in _get_engineIO_session
transport.recv_packet())
StopIteration
Also meine Fragen nun an euch:
Bin ich zumindest auf dem richtigen Weg? Oder ist das Modul eh nutzlos für meinen Zweck?
Übernimmt das Modul dann alle wichtigen Aufgaben wie Heartbeat, reconnect und was es da sonst noch alles zu beachten gibt?
edit:
wenn ich dem Link https://urllib3.readthedocs.org/en/latest/security.html folge, wird mir da erklärt, dass SSL out of the box nicht geht und ich noch was tun muss. Aber danach werden soviele unterscheidliche Dinge aufgelistet, dass ich nicht weiß, was ich davon nun genau tun muss. Aktuell teste ich das skirpt auf meinem windows 8 pc. Aber letzlich laufen soll es auf Debian 8.1 x64 .