通过Apps脚本或下载获取绑定到容器的Google Apps脚本的JSON

通过Apps脚本或下载获取绑定到容器的Google Apps脚本的JSON,json,google-apps-script,google-drive-api,google-docs,Json,Google Apps Script,Google Drive Api,Google Docs,如果您创建了一个非容器绑定的g-apps脚本(即不作为gDoc或gSheet的一部分),您可以从gDrive以.json的形式下载它(但不能从链接直接在浏览器中以.json的形式查看)。如果下载gDoc或gSheet,它将转换为xlsx或docx,并使用zip查看器打开这些文件,会显示许多文件(许多类型为xml),但没有一个文件包含Google版本的附加脚本 有没有一种方法可以从其他Google应用程序中读取.json格式的脚本文件 剧本可能使用驱动器API或g-a-s。DriveApp类 有没

如果您创建了一个非容器绑定的g-apps脚本(即不作为gDoc或gSheet的一部分),您可以从gDrive以.json的形式下载它(但不能从链接直接在浏览器中以.json的形式查看)。如果下载gDoc或gSheet,它将转换为xlsx或docx,并使用zip查看器打开这些文件,会显示许多文件(许多类型为xml),但没有一个文件包含Google版本的附加脚本

  • 有没有一种方法可以从其他Google应用程序中读取.json格式的脚本文件 剧本可能使用驱动器API或g-a-s。DriveApp类

  • 有没有办法下载或阅读DriveApp的.jsons 绑定到容器的脚本(除了原始gFile中的脚本外,其他脚本通常不可见)
  • 更新

    基于Kriggs,添加了一个
    Logger.log(link)
    ,这对于独立脚本非常有用

    集装箱运输怎么样

    对于独立脚本文件:

       exportLinks={
    application/vnd.google-apps.script+json=
    script.google.com/feeds/download/export?id=[scriptId]&format=json
    }
    
    对于绑定到容器的脚本文件,有指向csv、sheet和pdf的链接,但没有脚本json

     exportLinks= { 
        text/csv=docs.google.com/spreadsheets/export?id=[sheetId]&exportFormat=csv, 
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=
        docs.google.com/spreadsheets/export?id=[sheetId]exportFormat=xlsx, 
    
        application/pdf=
        docs.google.com/spreadsheets/export?id=[sheetId]&exportFormat=pdf 
        }
    
    更新

    在Google工作表中,转到工具->脚本编辑器-> 地址栏中的URL如下所示:

        https://script.google.com/macros/d/
    [ProjectKey]/edit?uiv=2&mid=[aVeryLongAlphaNum]
    
    这是下载的json:

    https://script.google.com/feeds/download/export?id=[ProjectKey]
    
    问题是,我们可以使用驱动器API查找
    [ProjectKey]

    是否有任何针对DriveApp/Drive API方法的功能请求,以在您的帐户中查找项目密钥

    有没有办法测试文件是否有绑定到容器的脚本?然后问题是,脚本是否包含在文件大小中(这很容易测试,但是询问者目前不知道)

    类似的方法可能会起作用,尽管它看起来在计算上很昂贵:

    var SizeOfFile = yourFile.getSize();//
    var charsInFile = yourFile.getAsString();
    var unicodeSizeReference = [];//get bytes per character array
    charsInFile.sort()
    //find frequency of characters then multiply from unicoseSizeReference.
    //there could be other gotchas as well, however this is just testing for feasibility
    var SizeOfTextInFile = [/*#of chars in file name and sheetname*/]+[/*#of chars in all sheets*/];
    SizeOfTextInFile *= unicodeBytesPerCharacter;//ranges from 1 to 4
    
    var someThreshold = 10;//bytes
    var hasScript=0;
    if ([SizeOfFile - SizeOfTextInFile] > someThreshold) hasScript=1
    

    是的,您必须通过OAuth2的驱动器API获得它,我使用DriveApp获得文件ID,但是您也可以修改以使用驱动器API。要启用驱动器API,请转到资源->高级Google服务,找到驱动器API并打开

    当您使用驱动器发送get时,您将返回包含属性
    exportLinks
    的文件对象,并使用它获取带有OAuth2身份验证的URL(脚本app.getOAuthToken()),获取的字符串将是一个JSON,其中包含带有脚本集合的数组
    文件

    function getAppsScriptAsJson( fileName ) {
      var fileDrive = Drive.Files.get( DriveApp.getFilesByName( fileName ).next().getId() );
      var link = JSON.parse(fileDrive)[ 'exportLinks' ][ 'application/vnd.google-apps.script+json' ];
      var fetched = UrlFetchApp.fetch(link, {headers:{'Accept':'application/vnd.google-apps.script+json', "Authorization":'Bearer '+ScriptApp.getOAuthToken()}, method:'get'});
      return JSON.parse(fetched.getContentText());
    }
    
    至于集装箱运输:

  • DriveApp无法按名称获取它
  • 它不会在任何地方显示ID,只显示项目键
  • 驱动器API无法按项目id查找,也无法按DriveApp查找
  • 按名称找不到驱动器API
  • 没有来自Drive API或DriveApp返回对象的脚本引用
  • 我猜这是很隐姓埋名的,怀疑有什么办法


    您始终可以制作一个独立的应用程序,并将其设置为电子表格库…

    谢谢!容器绑定脚本怎么样?(我把结果作为更新放在问题中)。看第二次更新(在原始问题中)。。。您可以下载绑定到容器的脚本的JSON,必须有一个查找scriptId的解决方案(我称之为[ProbablyScriptID]。我假设您上面提到的projectKey是[ProbablyScriptID]问题末尾提到?@Michael,这不是脚本ID,而是脚本键,它们是两个不同的东西。如果你转到单机版,你会看到两个不同的集合,一个项目键出现在项目属性中,一个脚本ID出现在URL中,而容器绑定只有一个,脚本键,这两个都在脚本属性中和URL。感谢您识别这些…您称之为脚本键的内容实际上被称为“项目键”(如脚本的项目属性中所示)。您的答案是否仍然与“脚本密钥”有关,即它对DriveApp.和DriveAPI都不可见?是的,DriveAPI和DriveApp只关心ID,而项目密钥用于库。