イベントで撮った画像を共有したい！！

# 知り合いじゃない人写真を共有したい

誰もがこんなことを思うことがあると思う
特に写真撮るイベントしたときありますよね！！
ちょっと特別な写真撮ってあげるイベント
ただ，知らないい人に特定の写真だけ共有する方法がない
ということで喜んでプログラミングをしてみることにしてみました

# 今回使ったもの
-Google Form　（撮った写真をクラウドに上げる用）
-Google App Script　（メイン）
-Google Charts API　（QRコード）
-line bot　（できたQRコードのリンクの送信）

#Google Form　（撮った写真をクラウドに上げる用）
これについては特にプログラミングしてないので書きません
質問事項としてはファイルのアップロードのみ
仲間内でしか使わないのでなんか遊んでもいいかもしれないね

#Google App Script　（メイン）
関数をformの回答時にトリガーするように設定
関数の引数として回答をもらいます

```js
var itemResponses = e.response.getItemResponses();
var imageID = itemResponses[0].getResponse()[0];
```

回答として受け取った画像はドライブに保存されます．
質問一個なので回答の0番目の画像の0枚目ってことらしいです
**imageID**にはその名の通り画像ファイルのIDが入ってるみたいでした

```js
var imageFile = DriveApp.getFileById(imageID);
 imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
var imageUrl = imageFile.getDownloadUrl();
```
前の画像のIDから画像ファイルをいじるためになんかを取得します（何取得してるんでしたっけ？）
画像の共有設定をいじらないとなので二行目です
ここについてはやりたいことに対してです
今回は不特定多数に送り，ログインの手間は省きたかったので
リンクを知ってる人がログインなしで見ることのみをできるようにしました
https://developers.google.com/apps-script/reference/drive/file#setsharingaccesstype,-permissiontype
詳細はこちらのリンクから
後は共有用のダウンロードリンクを生成するだけです
とりあえずこれを入れれば画像の共有が可能というわけです

#Google Charts API　（QRコード）
今回の肝
一番どうするか迷いました
まずは結論

```js
var outputUrl = "https://chart.apis.google.com/chart?cht=qr&chs=130x130&chl=" + imageUrl;
```
そんだけかいって
そうなんですよ
マジでつらい
これスプレッドシートで使ってる人多すぎでしょ
GASでやってる人なんかいなかった
そもそもいつ使えなくなるかわからないらしいからつかえなかったらごめんなさい
まあ，結局ブラウザで表示したいからURLの生成まですればいいんじゃんって気づいてこうなった
このURLをしりたいとこに送ってやればいいんだね

ちなみに，jsで頑張って作ろうとも思ったけどそんな気力はなかった
QRコードも奥が深い
そのうちやってみよ

#linebotについて
slackとかも考えたけどみんな入れてるlineで作ったQR表示用のURLを送ることにしました
このボットを追加する人は仲間内のみ予定なので全員に一斉送信でよきです
ただただ送るシステムが作りたかった
内容については完コピです
リンクは下記
https://qiita.com/tetrapod117/items/0e3a9caf846ea11b688a

#全容
```js
function myFunction(e) {
  FormApp.getActiveForm();
  
  var itemResponses = e.response.getItemResponses();
  var imageID = itemResponses[0].getResponse()[0];
     Logger.log(imageID);
  var imageFile = DriveApp.getFileById(imageID);
     imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  var imageUrl = imageFile.getDownloadUrl();
  var outputUrl = "https://chart.apis.google.com/chart?cht=qr&chs=130x130&chl=" + imageUrl;
  pushMessage(outputUrl);
  Logger.log(outputUrl);
  Logger.log('complete');
  
}

//CHANNEL_ACCESS_TOKENを設定
//LINE developerで登録をした、CHANNEL_ACCESS_TOKEN,USER_IDを入力する
var CHANNEL_ACCESS_TOKEN = "channel_access_token"; 
var USER_ID = 'user_id';

function pushMessage(message = 'おはよう') {
    //deleteTrigger();
  var postData = {
    "to": USER_ID,
    "messages": [{
      "type": "text",
      "text": message,
    }]
  };

  var url = "https://api.line.me/v2/bot/message/push";
  var headers = {
    "Content-Type": "application/json",
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
  };

  var options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(postData)
  };
  var response = UrlFetchApp.fetch(url, options);
}
```

##まとめ
思ったよりも短いプログラムになってしまった
便利な世の中ですね
linebot使ったことにより画像の送信もそっちでいいことに気づいてしまったので改良するとしたらそこかなって感じです
てか文章かくの疲れるな
誰かの助けになることを祈ってます

## リンクたち
####GoogleAppScript-Drive-File-setSharing
https://developers.google.com/apps-script/reference/drive/file#setsharingaccesstype,-permissiontype
####Google Charts Infographics QRcode
https://developers.google.com/chart/infographics/docs/qr_codes
####Google Apps ScriptでPushメッセージのLINE Botを作る。
https://qiita.com/tetrapod117/items/0e3a9caf846ea11b688a