はじめに
今回はラインで送られた画像をGoogleDriveに保存する記事になります!
実際のやり取りはこんな感じ。
この画像は後でラズパイの記事に使おうかなと思っている画像です。割とスマホで写真を撮ったものをそのままラインにあげることで保存できるのはありがたいですね。
こちらも思ったよりも簡単にできるので、早速やっていきましょう!
ラインからの画像の取得
LINEでBotに向かって画像を投稿すると、こののようなjsonがWebhookにPOSTされます。
{ "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": "text", "text": "Hello, world!" } }
これら二つを見比べると、message.type
にてどんな種類のメッセージが送られてきたかを判断することができます。
余談ですが、動画はvideo
,音声はaudio
,ファイルはfile
,位置情報はlocation
,スタンプはsticker
になります。
これを考慮しながらコードをかいてみましょう。
var ACCESS_TOKEN = 'LINE Developer画面に表示されているアクセストークン'; function doPost(e) { var json = JSON.parse(e.postData.contents); if (json.event[0].message.type !== 'image') return; var url = 'https://api.line.me/v2/bot/message/' + json.events[0].message.id + '/content/'; var image = getImage(url); } function getImage(url) { return UrlFetchApp.fetch(url, { "method": "get", 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + ACCESS_TOKEN } }); }
GoogleDriveに保存する
GoogleDriveに保存する方法はこれだけでOKです。
var dir = DriveApp.getFolderById("画像を中に入れたいフォルダのID"); dir.createFile(image);
フォルダのIDは、実際にGoogle Driveのフォルダを開いたときのURLから確認することができます。
コード
この二つを組み合わせるとこんな感じ。
var ACCESS_TOKEN = 'LINE Developer画面に表示されているアクセストークン'; function doPost(e) { var json = JSON.parse(e.postData.contents); if (json.event[0].message.type !== 'image') return; var url = 'https://api.line.me/v2/bot/message/' + json.events[0].message.id + '/content/'; var image = getImage(url); var dir = DriveApp.getFileById("画像を中に入れたいフォルダのID"); dir.createFile(image); } function getImage(url) { return UrlFetchApp.fetch(url, { "method": "get", 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + ACCESS_TOKEN } }); }
さいごに
こんな短いコードでできるなんて本当にすごいですよね。
最近はUnityに関する記事が少なくなってきていますが、もう少しGASに飽きるまでお付き合いいただければ…。
また名前を付けた場合はこちらの記事を是非!