GAS初心者です。
こちらのサイトを参考にgitレポジトリ上のjsonを書き換えるGASを作成しようとしています。
mdファイルを書き換えることはできるのですがjsonを書き換えようとしても以下のエラーがでます。
https://api.github.com/repos/reika0717/GAS_TEST/git/blobs のリクエストに失敗しました(エラー: 422)。サーバー応答の一部: {"message":"content must be a string","errors":[{"resource":"Blob","field":"content","code":"invalid"}],"documentation_url":"https://developer.gith...(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 69、ファイル「コード」)
json部分をJSON.stringify(content)
とするとエラーは出なくなるのですがコミットを確認すると何も変更できておりません。
どこを書き換えればGAS上でjsonの書き換えができるのでしょうか…?
GoogleAppsScript
1function editJson() { 2 var prop = PropertiesService.getScriptProperties().getProperties(); 3 const date = new Date(); 4 5 var option = { name: prop.NAME, email: prop.EMAIL }; 6 var github = new GitHubAPI(prop.GITHUB_USERNAME, prop.GITHUB_REPO, prop.GITHUB_TOKEN, option); 7 var content = ['a', 'b', 'c'] 8 var branch = github.getBranch(prop.GITHUB_BRANCH); 9 var pTree = github.getTree(branch['commit']['commit']['tree']['sha']); 10 var blob = github.createBlob(JSON.stringify(content)); 11 var data = { 12 'tree': pTree['tree'].concat([{ 13 'path': 'json/test.json', 14 'mode': '100644', 15 'type': 'blob', 16 'sha': blob['sha'] 17 }]) 18 }; 19 var tree = github.createTree(data); 20 var commit = github.createCommit('commit!!', tree['sha'], branch['commit']['sha']); 21 var result = github.updateReference(prop.GITHUB_BRANCH, commit['sha']); 22 Logger.log(result); 23} 24 25 26(function(exports) { 27 var GitHubAPI; 28 GitHubAPI = (function(){ 29 GitHubAPI.name = 'GitHubAPI'; 30 31 function GitHubAPI(userid, repo, token, option) { 32 this.userid = userid; 33 this.repo = repo; 34 this.token = token; 35 this.option = option != null ? option : {}; 36 37 if(!this.option.tz) this.option.tz = Session.getScriptTimeZone(); 38 39 this.BASE_URL = 'https://api.github.com/repos/'; 40 this.API_ENDPOINT = "" + this.BASE_URL + this.userid + '/' + this.repo; 41 } 42 GitHubAPI.prototype.runREST = function(method, endpoint, data) { 43 var params; 44 switch (method) { 45 case 'GET': 46 params = { headers : { Authorization: 'token ' + this.token } }; 47 break; 48 case 'POST': 49 case 'PATCH': 50 params = { 51 headers: { 52 Authorization: 'token ' + this.token 53 }, 54 method: method, 55 contentType: 'application/json', 56 payload: JSON.stringify(data) 57 }; 58 break; 59 default: 60 throw 'undefined HTTP method: ' + method; 61 } 62 var response = UrlFetchApp.fetch(this.API_ENDPOINT + endpoint, params); 63 return JSON.parse(response); 64 }; 65 66 GitHubAPI.prototype.get = function(endpoint){ return this.runREST('GET', endpoint, null); }; 67 GitHubAPI.prototype.post = function(endpoint, data){ return this.runREST('POST', endpoint, data); }; 68 GitHubAPI.prototype.patch = function(endpoint, data){ return this.runREST('PATCH', endpoint, data); }; 69 70 GitHubAPI.prototype.toISOFormat = function(date, tz) { 71 return Utilities.formatDate(date, tz, "yyyy-MM-dd'T'HH:mm:ssXXX"); 72 }; 73 74 GitHubAPI.prototype.getBranch = function(branchName) { 75 return this.get('/branches/' + branchName); 76 }; 77 GitHubAPI.prototype.createBlob = function(content) { 78 return this.post('/git/blobs', { 'content': content, 'encoding': 'utf-8' }); 79 }; 80 GitHubAPI.prototype.createCommit = function(message, treeSha, parentSha) { 81 var data = { 82 'message': message, 83 'author': { 84 'name': this.option.name, 85 'email': this.option.email, 86 'date': this.toISOFormat(new Date(), this.option.tz) 87 }, 88 'parents': [parentSha], 89 'tree': treeSha 90 } 91 return this.post('/git/commits', data); 92 }; 93 GitHubAPI.prototype.updateReference = function(branchName, commitSha) { 94 return this.patch('/git/refs/heads/' + branchName, { 'sha': commitSha }); 95 }; 96 GitHubAPI.prototype.getTree = function(treeSha) { 97 return this.get('/git/trees/' + treeSha); 98 }; 99 GitHubAPI.prototype.createTree = function(data) { 100 return this.post('/git/trees', data); 101 }; 102 return GitHubAPI; 103 })(); 104 105 return exports.GitHubAPI = GitHubAPI; 106})(this);
あなたの回答
tips
プレビュー