Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用应用程序脚本创建新的GitHub存储库(repo)-错误-404-{“消息”:“未找到”,“文档url”:;https://developer.github.com/v3"}_Google Apps Script_Github Api - Fatal编程技术网

Google apps script 使用应用程序脚本创建新的GitHub存储库(repo)-错误-404-{“消息”:“未找到”,“文档url”:;https://developer.github.com/v3"}

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

使用GitHub API with Apps脚本创建新的回购协议时,我得到的响应代码为404,错误如下:

{“消息”:“未找到”,“文档\ url”:“”}

我使用的令牌ID用于创建新文件,因此我知道令牌ID是有效的。 此外,我使用的用户ID用于使用其他一些应用程序脚本代码创建新文件

文档中给出了以下url结尾:

邮政/用户/回购

我假设“user”需要替换为用户名,“repos”需要替换为新的repo名称

我正在尝试的url是:

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库添加到项目中:

  • 单击菜单项“资源>库…”
  • 在“查找库”文本框中
  • 输入脚本ID
    1B7FSRK5ZI6LRSXXTDGDEUSPZLUKDSI4KUTGMORSTQHGBZBKMUN4IDF
    ,然后单击“选择”按钮
  • 在下拉框中选择一个版本(通常为 最好选择最新版本)
  • 单击“保存”按钮
  • 现在,您需要将您的密钥添加到上述代码中。

    现在你准备好了: -运行
    OauthGitHub()
    函数 -检查日志,您将找到一个url登录Github,将其粘贴到浏览器并登录 -您的凭据将存储在AppScript项目中,因此您不必重复此过程

    现在,您可以运行
    createNewRepo()
    ,像恶魔一样开始创建Github repo,或者使用Github API的任何其他端点构建新的应用程序脚本函数


    祝你好运。

    你试过只发布
    /user/repos
    ?(没有替换)。另外,展示你是如何获得访问令牌的。我认为@TheMaster的评论是正确的。使用上述
    选项的示例脚本时,请使用
    UrlFetchApp.fetch(“https://api.github.com/user/repos“,选项)
    。在这种情况下,请添加<