質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

680閲覧

GAS上でgit apiをたたいてjsonを書き換えたい。

ReikaHirahara

総合スコア17

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/07/23 11:27

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の書き換えができるのでしょうか…?

gitリポジトリ

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);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問