LoginSignup
32
31

More than 3 years have passed since last update.

Google Formの回答からGitHubのissueを作る

Posted at

Google Formの回答からGitHubのissueを立てたい需要があったので、それまでの流れを順番に説明していきます。
とり急ぎコードが必要な方は、最初に設定 -> 一番下のコードをコピペで良いと思います。

1. googleフォームからGASを起動する

とりあえずメールを送らせて、フォームからGASが起動したことを確認します

 function onFormSubmit(e) {
   MailApp.sendEmail({
     to: "メール送っても怒られないアドレス",
     subject: "適当な件名",
     body: "適当な本文"
   });
 }

GUI上での設定やスクリプトは下記を参考にしました
https://valmore.work/auto-response-from-google-form/

2. googleフォームから値を取得する

googleフォームの回答がメールに送られるようにします
e.namedValuesに 質問: 回答 のobjectの形で記録されているので、それを取得してメールで送ります
あとでgithubのissueを作る時にmarkdownを文字列の形式で送る必要があるので、それを見越してマークダウンっぽい形でメールを送るようにしておきます

 function onFormSubmit(e) {
   keys = Object.keys(e.namedValues).sort()
   qa_list = keys.map( key => "### " + key + "\n" + e.namedValues[key] + "\n")

   MailApp.sendEmail({
     to: "メール送っても怒られないアドレス",
     subject: "適当な件名",
     body: qa_list.join("\n")
   });
 }

eの中身が気になる場合はこちらに公式の説明があります
https://developers.google.com/apps-script/guides/triggers/events

3. githubにissueを作る

前提として、アクセストークンを取得しておく必要があります。
生成時にしか中身が見れないようなので、保存しておくことを忘れずに。
https://github.com/settings/tokens

アクセス権限としてはrepoを全て有効にしたところうまくいきました。
その上で、下記を実行します

 function onFormSubmit(e) {
   keys = Object.keys(e.namedValues).sort()
   qa_list = keys.map( key => "### " + key + "\n" + e.namedValues[key] + "\n")

   url = "https://api.github.com/repos/オーナー/リポジトリ名/issues"
   token = "GitHubのトークン"
   options = {
     "method": "post",
     "headers" : {
       "Authorization": "token " + token, 
       "Accept": "application/vnd.github.v3+json"
     },
     "payload" : JSON.stringify({
       "title": "title",
       "body": qa_list.join("\n")
     })
   }
   UrlFetchApp.fetch(url, options)  
 }

基本的には公式ドキュメント通りにパラメータを設定すればよいです
https://docs.github.com/en/rest/reference/issues#create-an-issue

最初tokenの使いどころが分からず、404が帰ってきていたのですが下記を参考にAuthorizationを書いたら行けました
https://stackoverflow.com/questions/28936959/github-api-create-issues-return-404-not-found

UrlFetchAppのパラメータに関してはgasの方のドキュメントも参考にしてください
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

32
31
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
32
31