0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

トーク bot に送信した画像をダウンロードする

Last updated at Posted at 2019-06-11

普段使わない API シリーズ第二弾。
トーク BOT の コンテンツダウンロード API です。

前回の記事「LINEWORKS のコンテンツアップロード API を使う」と合わせると、別テナント同士でトーク bot を介して画像をやりとりすることができます。
お客様サポート用の bot とかだと、この機能は必要ですよね。

でもこれ、実はすんごい苦戦しました。
「わっかんないよっ!( ノД`)」と投げ出しかけましたが、先輩方の温かいアドバイスと、
前回「次はダウンロード API にするぞ!」と言ったことによるセルフ叱咤激励により、
ようやく完成しました!ヾ(´∀`)ノ

完成したコード

事前に fs モジュールと request モジュールはインストールしておきます。

> npm install fs
> npm install request

こちらが実際のコードです。

download.js
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 で送られてくる画像データがわけのわからない文字化けデータになります。
1560219995.png

encoding: null 指定しておくと binary データで送られてきます。
1560220111.png

これは、通常 request モジュールは responsebody データを toString() に渡しているからです。
この時点でテキストデータとなり、utf-8 でエンコードされます。
画像は binary データで処理しますので encoding: null の設定をしておく必要があります。

request モジュールで画像を扱うときには必要な知識ですね!大変勉強になりました(´▽`)

writeFileSync 時に拡張子と binary の指定

ローカルのフォルダに保存する際には fs.writeFileSync を使いました。
ファイル名には拡張子をつけて明確に「PNG ファイルだよ!」と強調しておきます。
こちらも、encoding の指定をしておかないと既定値の utf-8 になるので binary を指定しておきます。

これで、トーク bot に送信した画像データを、あれやこれやすることができますよ!
やったね!(^^)/

おわりに

ここまでお付き合いいただきありがとうございました。

これ、本当に苦戦しました( ノД`)シクシク…
request での画像データの扱い方とか、binary の知識とか、色々と足らないものがわかった一件でした。
ここ一年近く GoogleAppsScript と node.js 使って、少しは慣れたかな?と思っていましたが、まだまだ知識不足ですね。もっと勉強しないと。

ではまた!(^^)/

参考にさせていただきましたm(_ _)m

LINEWORKS Developers
request (GitHub)
fs.writeFileSync (公式)

node.js でインターネット上の画像をダウンロード

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?