こんにちは、のびすけです。
Gyazoは無料で画像のアップロードに使えて便利ですよね。
こんな記事を書いてる方もいますが、GyazoのAPIはさらに便利でハッカソンとかちょっとした何かを作るときにも役立ちます。
Node-REDで扱うときにちょうど良いカスタムノードが無かったので作ってみました。
node-red-contrib-gyazo-api
node-red-contrib-gyazo-apiでパレットから追加かnpm i node-red-contrib-gyazo-apiでインストールできるはず。
node-red-contrib-gyazoにするか悩みつつ誰か公式っぽい人が作ろうってなるかもしれないので-apiをつけて少しズラしておきました。
4つのノード
取り急ぎ4つのノードを作成しました。
Configノード
とりあえず最近のカスタムノード作成はグローバル設定ノードを作るのがたぶん主流なので入れてます。
Gyazoのアクセストークンを取得して設定します。
アクセストークンはGyazoのApplicationsページで作成できます。
Get Listノード
シンプルに直近の画像リストを取得します。
※細かい検索は今の所できないです。
Get Imageノード
画像のIDを指定してその画像の情報を取得するノードです。
msg.payload = {
image_id: '013e25d1fc15977c916bf665254ba31c'
};
return msg;
Uploadノード
バッファーを受け取って画像をアップロードします。
この例だとカメラ画像を受けてアップロードしています。
- カメラ利用:
node-red-contrib-triggerable-browser-utils - プレビュー(任意):
node-red-contrib-image-output
AboartController
先日 #JSFES で教えてもらったAboartController()を使ってタイムアウト処理も入れてみました。
APIアクセス時に指定しています。
//省略
const GYAZO_TOKEN = configNode.accessToken;
const UPLOAD_ENDPOINT = 'https://upload.gyazo.com/api/upload';
// payloadがBufferかどうかチェック
if (!Buffer.isBuffer(msg.payload)) {
node.error("Payload must be a Buffer (image data).");
done();
return;
}
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 15000); // アップロードは少し長めに
//省略
終わりに
Gyazoは結構便利だけどアップロード周りがそのままやろうとするとちょっと手間があったのでこんな感じでまとめてみました。
使った人いたら感想やコメントや要望など書いてくれるとありがたいです。



