与外部系统通信

既可以使用以下的 REST api, 也可以使用OSC(高速) 和 ZeroMQ(超高速)

外部系统 -> Adapter

接收外部的https请求, 消息最后流向 Scratch

https://codelab-adapter.codelab.club:12358/api/message/eim?message=hello

codelab-adapter.codelab.club 默认映射到本机(127.0.0.1), 如果想发给局域网里的Adapter,需要把codelab-adapter.codelab.club改成目标IP。

kano wand 和 calypso 都是案例

codelab_adapter_client

Python对象的连接器:EIM 插件

Python client

requests

import requests
requests.get("https://codelab-adapter.codelab.club:12358/api/message/eim?message=hello", verify=False)
# 将 codelab-adapter.codelab.club 改为局域网计算机的IP地址(运行着Adapter),就可以给对方的发送 EIM 消息

也可以使用 post

import requests
requests.post("https://codelab-adapter.codelab.club:12358/api/message/eim",json={"message":"hello"}, verify=False)

urllib.request

import urllib.parse
import urllib.request
import ssl
from socket import timeout

message = urllib.parse.quote("hello")
url = f'https://codelab-adapter.codelab.club:12358/api/message/eim?message={message}'
try:
    f = urllib.request.urlopen(url, context=ssl._create_unverified_context(), timeout=1)
except timeout:
    print("message to adapter timeout")

JavaScript client

fetch

fetch("https://codelab-adapter.codelab.club:12358/api/message/eim?message=hi")

XMLHttpRequest

// 浏览器可能会提醒 CORS(跨域) 依然可用
var xhr = new XMLHttpRequest();
var url = "https://codelab-adapter.codelab.club:12358/api/message/eim?message=hi"
xhr.open("GET", url, true);
xhr.send();

teachable machine插件基于这个原理。

Adapter -> 外部系统

由于 Adapter 允许自定义 Python 插件,所以根据外部系统接口自行实现即可。

也可采用 Python对象的连接器:EIM 插件