下記の記事でNFTマーケットプレイスから情報を取得しました。
その後、様々なNFTのデータが取得できるサービス「NFT Port」を見つけたので、
こちらを使用してデータを取得し、せっかくなのでM5Stack core2に情報を表示してみます。
NFT Portとは?
こちらのページによると
NFTPortは、ワンストップでシンプルかつ開発者に優しいNFTインフラ&APIを開発者向けに提供しています(例:Stripe for NFTs)。同社は元NATOのAIとサイバーセキュリティの専門家によって設立され、Jaan Tallinn(Skypeの共同創業者、DeepMindの初期投資家)、Taavet Hinrikus(Wiseの共同創業者)、Jaynti Kanani(Polygonの共同創業者など世界的投資家から資金援助を受けています。)
とのことで、開発者向けのAPIを公開してくれているサービスのようです。
サインインすればAPI取得用の認証キーがすぐに作れました。
NFT Portからデータを呼び出す
今回は試しにSolana collectionsの最新売上ランキングの情報を取得してみます。
APIは下記を使用しました。
APIを呼び出すenebularのノードを作成する
まずはenebularからNFT PortのAPIを叩きます。
ノードはこんな感じです
取得したデータはJSONオブジェクトになっているので、
スプレッドシートに書き込むため、functionノードで整形しています。
その後、一番右のノードでスプレッドシートに書き込みを行っています。
スプレッドシートのデータを返すノードを作成する
今度はM5Stack Core2からスプレッドシートのデータを呼び出すためのノードを作成します。
こんどは配列で返ってくる値をJSON形式にしてレスポンスするようにしています。
M5Stack Core2から上のノードを呼び出すコードを書く
最後にM5Stack Core2からenebularのノードを呼び出し、画面に表示させるプログラムを作成します。
今回画面にはNFTコレクションの名前と、24時間以内の取引額を表示するようにしました。
#include <M5Core2.h>
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
WiFiMulti wifiMulti;
HTTPClient http;
const char* ssid = "SSIDが入る";
const char* pass = "パスワードが入る";
const String url = "URLが入る";
void setup() {
Serial.begin(9600);
M5.begin(); //Init M5Core.
M5.Lcd.setTextColor(
YELLOW); //Set the font color to yellow
M5.Lcd.setTextSize(2); //Set the font size.
M5.Lcd.setCursor(
65, 10); //Move the cursor position to (x, y).
M5.Lcd.setTextColor(RED);
wifiMulti.addAP(ssid, pass); //Storage wifi configuration information.
M5.Lcd.print("\nConnecting Wifi...\n"); //print format output string on lcd.
}
void loop() {
M5.update();
JSONVar myObject;
//Read the press state of the key.
if ((wifiMulti.run() == WL_CONNECTED)) { // wait for WiFi connection.
M5.Lcd.print("[HTTP] begin...\n");
http.begin(url + "gettrend/"); // configure traged server and url.
M5.Lcd.print("[HTTP] GET...\n");
int httpCode = http.GET(); // start connection and send HTTP header.
if (httpCode > 0) { // httpCode will be negative on error.
M5.Lcd.printf("[HTTP] GET... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK) { // file found at server.
M5.Lcd.clear();
M5.Lcd.setCursor(0, 0);
String payload = http.getString();
myObject = JSON.parse(payload);
Serial.println(myObject);
for (int i = 0; i < 10; i++) {
String name = myObject[i][2];
M5.Lcd.print(name);
M5.Lcd.print(":");
String str = myObject[i][8];
int strint = str.toInt();
M5.Lcd.print(strint);
M5.Lcd.println(" sol");
}
} else {
Serial.println("error");
}
} else {
M5.Lcd.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
M5.Lcd.print("connect failed");
}
delay(10000);
M5.Lcd.clear(); //clear the screen.
M5.Lcd.setCursor(0, 0);
}
これでM5Stack Core2で情報が表示できるようになりました。
まとめ
実はM5Stackに情報を表示するだけであればenbularを中継する必要はありません。
M5Stackから直接NFT PortのAPIを叩けば取得できます。
ただ、定期的にAPIから最新データを取得し、スプレッドシートに記入し、
今回の内容を少し変えて取得したデータを貯めれば、
統計を出したり、加工するのに便利なツールとなります。
また、スマホ以外の表示ディスプレイとして、机の上にあると色々と捗るのではないでしょうか。