【问题标题】:How to use Jobs resource in google apps script?如何在谷歌应用脚​​本中使用 Jobs 资源?
【发布时间】:2021-01-03 04:10:44
【问题描述】:

如何在 Google Apps 脚本中使用 'Job' resource

我知道必须启用 YouTube Reporting API,但可以从哪个对象调用它?

我正在尝试访问 YouTube 报告 API。这是正确的称呼方式吗? 如果是这样,我的 Apps 脚本无法识别 youtubeReporting,为什么会这样?

youtubeReporting.jobs()

总而言之,我的目标是提取“内容所有者报告”批量/查询,几乎阅读了导致该结果的所有步骤,除了最开始的点,即对象名称。

【问题讨论】:

    标签: google-apps-script youtube-api youtube-analytics-api


    【解决方案1】:

    回答

    要访问 YouTube Reporting API,您必须添加 YouTube Analytics API 并可选择添加 YouTube Data API。从这一点开始,您可以像 Apps Script: YouTube Analytics 示例一样创建报告。

    记住:

    • 在导入 YouTube Analytics API 等服务时,请注意版本。

    • 您可以指定所需的指标数量。

    参考

    Apps Script: YouTube Analytics

    YouTube Data API: Channel list

    Analytics and Reporting APIs: Content Owner Reports

    【讨论】:

      【解决方案2】:

      注意:尽管此答案涉及 YouTube 报告 api,但所有 Google api 的流程应该相同,其中未提供高级 Google 服务包装器。

      AFAICT,YouTube 报告 API 不能直接用作高级 Google 服务。您也许可以使用YouTubeanalytics api, which is provided as a advanced Google service。要访问报告api,您需要directly connect to the api through HTTP calls

      必读:

      解决办法:

      • 可以使用 UrlFetchApp 从 Google 应用脚本访问 YouTube 报告 API
      • 可以使用ScriptApp 提供的 oauth 令牌绕过完整的 OAuth 流程
      • 在 appsscript.json 清单文件中包含范围。
      • 切换到标准 GCP 并为此项目启用 YouTube 报告 API。否则将返回 403。

      片段:

      /**
       * @description A wrapper for accessing Google apis from  apps script
       * @param {string} url Google URL endpoint
       * @param {string} method HTTP method
       * @param {object} requestBody Requestbody to send
       * @param {object} pathParameters Parameters to modify in the url
       * @param {object} queryParameters Queryparameters to append to the url
       * @return {object} response
       */
      function accessGoogleApiHTTP_(
        url,
        method,
        requestBody = {},
        pathParameters = {},
        queryParameters = {}
      ) {
        const modifiedUrl = Object.entries(pathParameters).reduce(
          (acc, [key, value]) => acc.replace(key, value),
          url
        );
        const queryUrl = Object.entries(queryParameters).reduce(
          (acc, param) => acc + param.map(e => encodeURIComponent(e)).join('='),
          '?'
        );
        const options = {
          method,
          contentType: 'application/json',
          headers: {
            Authorization: `Bearer ${ScriptApp.getOAuthToken()}` /*Need to set explicit scopes*/,
          },
          muteHttpExceptions: true,
          payload: JSON.stringify(requestBody),
        };
        const res = UrlFetchApp.fetch(
          modifiedUrl + queryUrl,
          options
        ).getContentText();
        console.log(res);
        return JSON.parse(res);
      }
      /**
       * @see https://developers.google.com/youtube/reporting/v1/reference/rest/v1/jobs/create
       * @description POST https://youtubereporting.googleapis.com/v1/jobs
       */
      function createYtReportingJob() {
        const reportTypeId = 'id',
          name = 'name';
        const jsonRes = accessGoogleApiHTTP_(
          'https://youtubereporting.googleapis.com/v1/jobs',
          'POST',
          { reportTypeId, name },
          undefined,
          { onBehalfOfContentOwner: 'contentOwnerId' }
        );
      }
      

      清单范围:

      "oauthScopes": [
        "https://www.googleapis.com/auth/yt-analytics",
        "https://www.googleapis.com/auth/script.external_request"
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多