MachiKania

MachiKania type P ver 1.3 で、http クライアント

2023年9月29日

MachiKania type P の ver 1.3 では、Raspberry Pi Pico W を使って、WiFi 接続及びインターネット接続が出来るようになりました。この記事では、MachiKania を http クライアントとして利用する方法について述べます。

ver 1.3 では WiFi 機能の追加に伴って13種類の新たな命令・関数が追加されています。それらを使えば様々なインターネット接続(クライアント・サーバー)を行うことができますが、非常に複雑な手続きが必要です。そこで、インターネットの接続で最もよく使う、http プロトコルに関して、クラスライブラリーを用意しました。

ここでは、新規に追加されたクラスのうち、WGET クラスについて説明します。http クライアントを簡易に構築するためのクラスです。

最も簡単な使用方法

WGETクラスは、オブジェクトを作成せずに、スタティックメソッド呼び出しで使います(help.txtを参照)。多くの方が一番よく使うのは、おそらく「WGET::FORSTRING$()」です。以下の例は、もっとも簡単なサンプルプログラムです。

useclass WGET
t$=WGET::FORSTRING$("http://www.rad51.net/projects/typep/")
print t$

Webページにアクセスして、その内容を表示するものです。上のコードを実行すると、結果は以下の例のようになるはずです。
2023-09-24-wget.jpg
「<html>」から「</html>」が、指定のURLから取得した内容です。

多くの場合、「WGET::FORSTRING$()」を使うのが、確実で簡単な方法でしょう。得る情報がテキストなら(HTML, JSON, RSSなど)、この方法で簡単に得ることができます。

バイナリーファイルのダウンロード

「WGET::FORSTRING$()」では、ヌル文字(\0)を含むデーター、例えば画像ファイルの取り込みが出来ません。そういったデーターをインターネットからダウンロードしてくるには、「WGET::FORFILE()」もしくは「WGET::FORBUFFER()」を使います。下は、「WGET::FORFILE()」を使って、TIFFファイルをダウンロードしてファイルとして保存し、表示する例です(TIFFファイルは、16色もしくは256色の、圧縮無しのものに対応)。

useclass WGET,CSWTIF
WGET::FORFILE("temp.tif","http://www.rad51.net/projects/typep/image.tif")
i=new(CSWTIF,"temp.tif")
point 0,200
i.SHOW()

実行結果は、以下の例のようになるはずです。
2023-09-26-wget_forfile.jpg

「WGET::FORBUFFER()」を使う場合は、少し複雑ですが、以下のように書きます。実行結果は、上と同じです。下のコードの「b,4800」で、「b」はバッファーアドレス、「4800」はバッファーの有効バイト数です(ここで使用したTIFFファイルは、4770バイトです)。

useclass WGET,CSWTIF
dim b(1199)
s=WGET::FORBUFFER(b,4800,"http://www.rad51.net/projects/typep/image.tif")
fopen "temp.tif","w"
fput b,s
fclose
i=new(CSWTIF,"temp.tif")
point 0,200
i.SHOW()

セキュアーコネクション(https)も可能

httpプロトコルをセキュアーコネクションで行いたい場合(http ではなく、https)も、WGETを使えます。使い方は同じで、URLに"https://"と書くだけです。

ただし、ドキュメントの wifi.txt にも書きましたが、MachiKania で https サイトにアクセスした場合、通常のブラウザーによる https サイトへのアクセスに比べて、セキュリティーレベルが低いです。MachiKania から https サイトへのアクセスでは、パスワードや個人情報などを送付しないようにしてください。こちらから送付する情報なしでデーターを取得するだけなら、何も問題にする必要はありません。

WGETクラスの利用例

WGETクラスを利用して、天気予報をインターネットから得て知らせてくれる箱を作りました。詳しくは、別記事で説明します
2023-09-26-weatherBox.jpg

コメント

コメントはありません

コメント送信