Google apps script 使用应用程序脚本创建新的GitHub存储库(repo)-错误-404-{“消息”:“未找到”,“文档url”:;https://developer.github.com/v3"}
使用GitHub API with Apps脚本创建新的回购协议时,我得到的响应代码为404,错误如下: {“消息”:“未找到”,“文档\ url”:“”} 我使用的令牌ID用于创建新文件,因此我知道令牌ID是有效的。 此外,我使用的用户ID用于使用其他一些应用程序脚本代码创建新文件 文档中给出了以下url结尾: 邮政/用户/回购 我假设“user”需要替换为用户名,“repos”需要替换为新的repo名称 我正在尝试的url是:Google apps script 使用应用程序脚本创建新的GitHub存储库(repo)-错误-404-{“消息”:“未找到”,“文档url”:;https://developer.github.com/v3"},google-apps-script,github-api,Google Apps Script,Github Api,使用GitHub API with Apps脚本创建新的回购协议时,我得到的响应代码为404,错误如下: {“消息”:“未找到”,“文档\ url”:“”} 我使用的令牌ID用于创建新文件,因此我知道令牌ID是有效的。 此外,我使用的用户ID用于使用其他一些应用程序脚本代码创建新文件 文档中给出了以下url结尾: 邮政/用户/回购 我假设“user”需要替换为用户名,“repos”需要替换为新的repo名称 我正在尝试的url是: https://api.github.com/blueprint
https://api.github.com/blueprinter/AAA_NewRepo
我还尝试了url:
https://api.github.com/blueprinter/repos/AAA_NewRepo
我还尝试将名称
键添加到选项对象:
name:po.repoName
我还尝试向stringify payload对象添加带有名称
键的对象的有效负载:
data = {
name:po.repoName
}
payload = JSON.stringify(data);
options = {
method: 'post',
muteHttpExceptions: true,
contentType: "application/json",
headers: {
Authorization: "Bearer " + myToken
},
responseType: 'json',
payload:payload
}
守则:
function createNewRepo_(po) {
try{
var data,myToken,options,payload,rslt,rspnsCode,apiBaseUrl,url;
/*
https://developer.github.com/v3/repos/#create
POST /user/repos -
po.userName - The user name in the GitHub account
po.repoName - The name of the repository to put the file into
*/
//Logger.log('po: ' + JSON.stringify(po))
apiBaseUrl = 'https://api.github.com';//Every url must have this at the beginning
if (!po.userName) {
po.userName = getMyGitHubInfo_('userName');
}
url = apiBaseUrl + "/" + po.userName + "/" + po.repoName;
Logger.log('url 23: ' + url)
myToken = getGitHubToken();
payload = JSON.stringify(data);
options = {
method: 'post',
muteHttpExceptions: true,
contentType: "application/json",
headers: {
Authorization: "Bearer " + myToken
},
responseType: 'json'
}
//Logger.log('options 39: ' + JSON.stringify(options))
rslt = UrlFetchApp.fetch(url,options);
rspnsCode = rslt.getResponseCode();
Logger.log('rspnsCode 44: ' + rspnsCode)
if (rspnsCode !== 200 && rspnsCode !== 201) {
throw new Error('Response coming back from GitHub is: ' + rspnsCode + "\n\n" + rslt.getContentText());
}
Logger.log('rslt.getContentText(): ' + rslt.getContentText())
Logger.log('typeof rslt: ' + typeof rslt)
data = JSON.parse(rslt);//Even though the returned value is an object it must be parsed into JSON
Logger.log('data' + JSON.stringify(data))
}catch(e) {
Logger.log("Error: " + e.message + "\nStack: " + e.stack)
//errorHandling(e);//Run centralized error handling function
return false;
}
}
function getMyGitHubInfo_(k) {
var o;
o = {
userName:'git_hub_user_ID_Here',//Your user name
}
if (k) {
return o[k];
} else {
return o;
}
}
问题出在url端点上,应该总是
https://api.github.com/user/repos
用于
我构建了一个简化示例,演示如何使用AppsScript和Github API创建存储库:
函数createNewRepo(){
试一试{
apiBaseUrl=https://api.github.com/user/repos';
选项={
方法:“post”,
muteHttpExceptions:true,
contentType:“应用程序/json”,
标题:{
授权:“承载者”+getService().getAccessToken(),
},
responseType:'json',
有效负载:JSON.stringify({
“名称”:“Hellossssss世界”,
“描述”:“这是您的第一个存储库”,
“主页”:https://github.com",
“私人”:假,
“有问题”:没错,
“has_projects”:没错,
“has_wiki”:正确
})
}
var response=UrlFetchApp.fetch(apiBaseUrl,选项);
var responseCode=response.getResponseCode();
data=JSON.parse(response);//即使返回的值是对象,也必须将其解析为JSON
if(responseCode!==200&&responseCode!==201){
抛出新错误('从GitHub返回的响应为:'+responseCode+“\n\n”+Response.getContentText());
}
否则{
Logger.log('成功创建了新存储库');
Logger.log('Name:'+data.Name);
Logger.log('Url:'+data.Url);
}
}
捕获(e){
Logger.log(“错误:+e.message+”\n堆栈:+e.stack)
//errorHandling(e);//运行集中式错误处理功能
}
}
但要运行此函数,您必须经过身份验证,为此,我们可以使用AppsScript在Github上获得身份验证,同样,在AppsScript项目中使用以下代码:
var CLIENT_ID='YOUR_CLIENT_ID';
var CLIENT_SECRET='YOUR_CLIENT_SECRET_ID';
/**
*授权GitHub API并向其发出请求。
*/
函数OauthGitHub(){
var service=getService();
if(service.hasAccess()){
var url='1〕https://api.github.com/user/repos';
var response=UrlFetchApp.fetch(url{
标题:{
授权:“承载人”+服务.getAccessToken()
}
});
var result=JSON.parse(response.getContentText());
log(JSON.stringify(result,null,2));
}否则{
var authorizationUrl=service.getAuthorizationUrl();
Logger.log('打开以下URL并重新运行脚本:%s',
授权URL);
}
}
/**
*重置授权状态,以便可以重新测试。
*/
函数重置(){
getService().reset();
}
/**
*配置服务。
*/
函数getService(){
返回OAuth2.createService('GitHub')
//设置端点URL。
.setAuthorizationBaseUrl('https://github.com/login/oauth/authorize')
.setTokenUrl('https://github.com/login/oauth/access_token')
//设置客户端ID和密码。
.setClientId(客户端ID)
.setClientSecret(客户端密码)
//设置要调用的回调函数的名称
//完成OAuth流。
.setCallbackFunction('authCallback')
//设置应在其中保留授权令牌的属性存储。
.setPropertyStore(PropertiesService.getUserProperties())
.setScope(“回购”);
}
/**
*处理OAuth回调。
*/
函数authCallback(请求){
var service=getService();
var authorized=服务handleCallback(请求);
如果(授权){
返回HtmlService.createHtmlOutput('Success!');
}否则{
返回HtmlService.createHtmlOutput('Denied');
}
}
/**
*记录要注册的redict URI。
*/
函数logRedirectUri(){
Logger.log(OAuth2.getRedirectUri());
}
记住,必须将Oauth库添加到项目中:
1B7FSRK5ZI6LRSXXTDGDEUSPZLUKDSI4KUTGMORSTQHGBZBKMUN4IDF
,然后单击“选择”按钮李>
OauthGitHub()
函数
-检查日志,您将找到一个url登录Github,将其粘贴到浏览器并登录
-您的凭据将存储在AppScript项目中,因此您不必重复此过程
现在,您可以运行createNewRepo()
,像恶魔一样开始创建Github repo,或者使用Github API的任何其他端点构建新的应用程序脚本函数
祝你好运。你试过只发布
/user/repos
?(没有替换)。另外,展示你是如何获得访问令牌的。我认为@TheMaster的评论是正确的。使用上述选项的示例脚本时,请使用UrlFetchApp.fetch(“https://api.github.com/user/repos“,选项)
。在这种情况下,请添加<