Retrouver mon article sur l’utilisation de BrickPi dans Hackable Série 29:

Retrouver mon article sur l’utilisation de BrickPi dans Hackable Série 29:

Souvent lorsque l’on télécharge un fichier JSON celui-ci s’affiche sur une ligne.
On peut faire un affichage plus sympa à l’aide de python.
Voici ce que l’on trouve dans la documentation python
$ echo '{"json":"obj"}' | python -mjson.tool
{
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -mjson.tool
Expecting property name: line 1 column 2 (char 2)
On pourra bien sur combiner cette commande avec du wget ou du curl.
$ wget -q -O - http://colas.sebastien.free.fr/projets/infos.json | python3 -m json.tool
{
"site": "http://colas.sebastien.free.fr",
"Author": "Sebastien Colas",
"articles": [
{
"title": "UNIX and Linux Essentials Ed 2",
"url": "http://colas.sebastien.free.fr/index.php/unix-and-linux-essentials-ed-2/"
},
{
"title": "Petit utilitaire en JavaScript",
"url": "http://colas.sebastien.free.fr/index.php/petit-utilitaire-en-javascript/"
}
]
}
Voici un exemple de code permettant une diffusion de message avec les WebSocket.
La démonstration est composé de 3 programmes:
Les clients se connectent sur les différentes URL:
Le serveur:
#!/usr/bin/env python3
import asyncio
import datetime
import random
import websockets
connected = set()
async def pub_sub(websocket, path):
global connected
if path == '/broadcast/read' :
connected.add(websocket)
print("READER "+str(websocket.remote_address)+" connected")
while True:
await asyncio.sleep(100)
elif path == '/broadcast/write' :
print("WRITER "+str(websocket.remote_address)+" connected")
try :
while True:
data = await websocket.recv()
print("MULTICAST: "+data)
still_connected = set()
for ws in connected :
if ws.open:
still_connected.add(ws)
await asyncio.wait([ws.send(data)])
else:
print("READER "+str(ws.remote_address)+" disconnected")
connected=still_connected
except:
print("WRITER "+str(websocket.remote_address)+" disconnected")
start_server = websockets.serve(pub_sub, '127.0.0.1', 5678)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Le client python qui emet des messages
#!/usr/bin/env python3
import asyncio
import websockets
async def hello():
async with websockets.connect('ws://localhost:5678/broadcast/write') as websocket:
while True:
name = input("Message ? ")
await websocket.send(name)
asyncio.get_event_loop().run_until_complete(hello())
La ou les pages html qui recoivent les messages:
<!DOCTYPE html>
<html>
<head>
<title>WebSocket demo</title>
</head>
<body>
<script>
var ws = new WebSocket("ws://127.0.0.1:5678/broadcast/read"),
messages = document.createElement('ul');
ws.onmessage = function (event) {
var messages = document.getElementsByTagName('ul')[0],
message = document.createElement('li'),
content = document.createTextNode(event.data);
message.appendChild(content);
messages.appendChild(message);
};
document.body.appendChild(messages);
</script>
</body>
</html>