トーク bot に送信した画像をダウンロードする
普段使わない API シリーズ第二弾。
トーク BOT の コンテンツダウンロード API です。
前回の記事「LINEWORKS のコンテンツアップロード API を使う」と合わせると、別テナント同士でトーク bot を介して画像をやりとりすることができます。
お客様サポート用の bot とかだと、この機能は必要ですよね。
でもこれ、実はすんごい苦戦しました。
「わっかんないよっ!( ノД`)」と投げ出しかけましたが、先輩方の温かいアドバイスと、
前回「次はダウンロード API にするぞ!」と言ったことによるセルフ叱咤激励により、
ようやく完成しました!ヾ(´∀`)ノ
完成したコード
事前に fs
モジュールと request
モジュールはインストールしておきます。
> npm install fs
> npm install request
こちらが実際のコードです。
const fs = require('fs');
const request = require('request');
const options = {
method: "GET",
uri: "http://storage.worksmobile.com/openapi/message/download.api",
encoding: null,
headers: {
"consumerKey": consumer_key,
"Authorization": "Bearer " + token,
"x-works-apiid": api_id,
"x-works-resource-id": resourceId
}
};
request(options, function (error, response, body) {
if (error){
console.log(error);
return;
}
fs.writeFileSync('image.png', body, 'binary');
});
それでは、今回のハイライトをば。
request 時の encoding
これ、突き止めるのに苦労しました。。。みんな、当たり前に知ってることなのかな?
6行目の encoding: null
こうしておかないと、response で送られてくる画像データがわけのわからない文字化けデータになります。
encoding: null
指定しておくと binary データで送られてきます。
これは、通常 request モジュールは response
の body
データを toString()
に渡しているからです。
この時点でテキストデータとなり、utf-8
でエンコードされます。
画像は binary データで処理しますので encoding: null
の設定をしておく必要があります。
request モジュールで画像を扱うときには必要な知識ですね!大変勉強になりました(´▽`)
writeFileSync 時に拡張子と binary の指定
ローカルのフォルダに保存する際には fs.writeFileSync
を使いました。
ファイル名には拡張子をつけて明確に「PNG ファイルだよ!」と強調しておきます。
こちらも、encoding
の指定をしておかないと既定値の utf-8
になるので binary
を指定しておきます。
これで、トーク bot に送信した画像データを、あれやこれやすることができますよ!
やったね!(^^)/
おわりに
ここまでお付き合いいただきありがとうございました。
これ、本当に苦戦しました( ノД`)シクシク…
request での画像データの扱い方とか、binary の知識とか、色々と足らないものがわかった一件でした。
ここ一年近く GoogleAppsScript と node.js 使って、少しは慣れたかな?と思っていましたが、まだまだ知識不足ですね。もっと勉強しないと。
ではまた!(^^)/
参考にさせていただきましたm(_ _)m
Author And Source
この問題について(トーク bot に送信した画像をダウンロードする), 我々は、より多くの情報をここで見つけました https://qiita.com/kunihiros/items/4ac5488a7d0794976df4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .