自製Scratch2擴充功能--傳送資料到Mysql‎

透過Scratch 2.0 Offline Editor的「實驗性HTTP 擴充功能」匯入擴充功能,自製Scratch擴充功能可以傳送資料,也可以接收資料。

本程式碼參考s2aio(https://github.com/MrYsLab/s2aio)進行修改,完整程式碼放置於https://github.com/jang0820/Scratch-Extension-Data ,需要事先安裝Scratch2.0 Offline Editor,Python3與Python3模組(aiohttp、asyncio與pymysql),若s2aio可以執行,本程式應該也可以執行。

Step1)建立Scratch 2.0的擴充檔。

第5到11行:傳送資料到資料庫區塊,第6行為"",表示為傳送指令的程式區塊,第7行顯示名稱「 "資料輸出:%s 給 %m.database"」,第8行使用database傳送資料給網頁伺服器,傳送給網址http://127.0.0.1:50209/database/{data}/{database},其中%s對應到{data},而%m.database對應到{database},%s的預設值為「回傳的資料」,%m.database的預設值為「資料庫」,%m.database對應到下方第23到29行的menus。

第12到21行:請參考前一個單元自製Scratch2擴充功能--傳送指令與接收資料

以下檔案命名為s2aio_zh_TW.s2e。

Step2)使用Scratch 2.0 Offline Editor匯入s2aio_zh_TW.s2e轉換成s2aio_base_zh_TW.sb2

在Scratch 2.0 Offline Editor,按著Shift鍵,點選「檔案->匯入實驗性HTTP 擴充功能」,將擴充設定檔s2aio_zh_TW.s2e匯入,在「更多積木」會多出以下積木,「資料輸出」由s2aio_zh_TW.s2e的第5到11行產生,接著點選「檔案->另存」,指定儲存的檔名「s2aio_base_zh_TW.sb2」。

結果如下圖

Step3)使用Python建立web server與Scratch互動

Scratch2的實驗性HTTP 擴充功能使用web server進行互動,本機需要建立一個web server才能與Scratch2的實驗性HTTP 擴充功能互動。

(A) Scratch2傳送指令到電腦

點選「資料輸出...」Scratch2會去瀏覽http://127.0.0.1:50209/database/{data}/{database},data為「回傳的資料」,database為指定的資料庫,所以要建立一個web server連接埠設定為50209,將對應程式寫在database網址,這就是擴充檔s2aio_zh_TW.s2e的第5到11行所產生「資料輸出...」積木的運作方式。

(B)使用Python建立web server

(B-1)從configuration/configuration.cfg讀取mysql的IP、使用者名稱、密碼、資料庫與資料表(第18到22行)。

(B-2)檔案configuration/configuration.cfg的Mysql設定如下。

(B-3)函式kick_off使用aiohttp建立web server,連接埠為50209(第13行),連結網址poll時呼叫函式poll(第8行),連結網址send_hi時呼叫函式send_hi(第9行),連結網址database呼叫函式store_to_database(第10行),啟動本機的Scratch2(第16與18行)。

(B-4)函式store_to_database,使用模組pymysql連線Mysql資料庫,資料庫相關設定在設定檔configuration/configuration.cfg,使用request.match_info['data']讀取Scratch回傳的資料,使用request.match_info['database']讀取Scratch指定的資料庫種類,函式kick_off的第10行「/database/{data}/{database}」的{data}使用match_info['data']讀取,{database}使用match_info['database']讀取。

函式poll與函式send_hi的作用,請參閱自製Scratch2擴充功能--傳送指令與接收資料

完整程式碼(檔案命名為data.py)

Step4)執行Python程式

在命令提示字元,使用「python data.py」執行程式,會自動啟用web server接著自動Scratch2,就可以開始撰寫Scratch程式,如下。

點選開始執行就會將資料放入Mysql,如下圖。