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