はじめに
先日このような記事を書かせていただきました。
ここでは画像のみをGoogleDriveに保存していましたが、動画・音声も同じ手法でできることが分かりました。
では早速行きましょう。
コード
いきなりコードを書いちゃいます。
var ACCESS_TOKEN = 'LINE Developer画面に表示されているアクセストークン'; function doPost(e) { var json = JSON.parse(e.postData.contents); if (json.event[0].message.type !== 'image' && json.event[0].message.type !== 'video' && json.event[0].message.type !== 'audio') return; var url = 'https://api.line.me/v2/bot/message/' + json.events[0].message.id + '/content/'; var content = getContent(url); // 画像・動画・音声の名前を今日の日本時間にする var today = new Date(Date.now() + ((new Date().getTimezoneOffset() + (9 * 60)) * 60 * 1000)); var fileBlob = response.getBlob().setName(today); var dir = DriveApp.getFileById("画像・動画・音声を中に入れたいフォルダのID"); dir.createFile(fileBlob); } function getContent(url) { return UrlFetchApp.fetch(url, { "method": "get", 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + ACCESS_TOKEN } }); }
説明
ユーザーが送信した画像、動画、音声、およびファイルを取得するには、以下のエンドポイントにリスエストを送ります。
GET https://api-data.line.me/v2/bot/message/{messageId}/content
ここのmessageId
はWebhookにPOSTされたJSONに載っているものです。
・画像
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "message", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U4af4980629..." }, "message": { "id": "325708", "type": "image", "contentProvider": { "type": "line" } } }
・動画
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "message", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U4af4980629..." }, "message": { "id": "325708", "type": "video", "duration": 60000, "contentProvider": { "type": "external", "originalContentUrl": "https://example.com/original.mp4", "previewImageUrl": "https://example.com/preview.jpg" } } }
・音声
{ "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", "type": "message", "timestamp": 1462629479859, "source": { "type": "user", "userId": "U4af4980629..." }, "message": { "id": "325708", "type": "audio", "duration": 60000, "contentProvider": { "type": "line" } } }
message.id
にあるやつがそれですね。
レスポンスはステータスコード200とコンテンツのバイナリデータを返します。
またメッセージが送信されてから一定期間後に、コンテンツは自動的に削除されるそうなのでご注意を。
さいごに
あとzip
などのファイルはBOTだと投稿できない?みたいなので、そちらは無理そうでした。
もしできる方法を知っている方がいらっしゃいましたら教えていただけると嬉しいです!