如何使用API(针对MCN)从YouTube CMS帐户获取收入报告?

如何使用API(针对MCN)从YouTube CMS帐户获取收入报告?,youtube,youtube-api,Youtube,Youtube Api,我有权访问YouTube CMS帐户(用于MCN)。在YouTube上,我可以用它做很多事情,这还包括下载CSV报告,其中包含关于收入的详细信息 但是,我想对数据进行一些自动处理,从而使用API而不是手动CSV下载来访问数据。它看起来应该也包含这些数据,因此我尝试从这个API获取一些数据(目前仅使用),但我唯一能够得到的是一个“禁止”响应 API资源管理器告诉我,对于CMS帐户,我需要指定contentOwner==OWNER\u名称,但没有解释该所有者的名称是什么。我尝试只插入我的CMS帐户的

我有权访问YouTube CMS帐户(用于MCN)。在YouTube上,我可以用它做很多事情,这还包括下载CSV报告,其中包含关于收入的详细信息

但是,我想对数据进行一些自动处理,从而使用API而不是手动CSV下载来访问数据。它看起来应该也包含这些数据,因此我尝试从这个API获取一些数据(目前仅使用),但我唯一能够得到的是一个“禁止”响应

API资源管理器告诉我,对于CMS帐户,我需要指定contentOwner==OWNER\u名称,但没有解释该所有者的名称是什么。我尝试只插入我的CMS帐户的显示名称,用下划线替换空格,但没有成功。我怎样才能知道我的主人叫什么名字

此外,当我使用OAuth进行身份验证时,我会像往常一样收到帐户列表,在其中我可以选择使用哪一个(例如,我所管理的所有YouTube频道),但CMS帐户没有列出。然而,如果我去YouTube,我可以点击右上角,然后切换到CMS。不知道这是否重要


再说一次,也许我完全走错了方向,因为我想获得连接到我的MCN的所有频道的报告,但这并不意味着我拥有这些内容。也许我不是内容所有者?在这种情况下:从API请求报告的正确方式是什么?

首先,CMS帐户不是一个单独的帐户,您可以通过誓言登录。这更像是一种特权,它连接到你的一个谷歌/youtube账户。这与youtube的常规频道管理不同,youtube的每个频道都有自己的登录凭证

我附上了我的youtube帐户选择器视图的屏幕截图,其中CMS属于该帐户name@email.com,这也是您必须用于oauth授权才能访问CMS报告的帐户

此外,您可以看到CMS的名称,在本例中是“CMSName”。因此,通常这是您将用于contentOwner==CMSName的名称。但是,您的CMS名称似乎包含空格。不幸的是,由于缺少管理权限,我无法重新构建此案例,但我建议您也使用u表示空白,因为“”和“%20”没有映射有效参数的正则表达式

但是你说,你尝试它没有成功。但也有太多的错误场景:

  • 403禁止:CMS的名称可能错误,或者所选的宣誓帐户没有所需的权限。您是否拥有所有必需的作用域并选择了正确的帐户

  • 400错误请求:当请求本身无效时会发生这种情况。因此,如果选择contentOwner==CMSName作为ids参数,则始终需要一个筛选器参数,例如channel==[channelidforwhichichhavecmsrights]。因此,通常可以工作的API请求如下所示:

  • 如果这两种情况对您都不起作用,并且您仍然收到403个错误,那么让我们进行一些调试,并尝试获取内容所有者Id。我现在将介绍YouTube内容Id API

    提前说几句话:你必须在开发者控制台中激活API,就像你想为你的应用程序使用的任何其他API一样。但是:

    Note: The YouTube Content ID API is intended for use by YouTube content partners and is not accessible to all developers or to all YouTube users. If you do not see the YouTube Content ID API as one of the services listed in the Google Developers Console, see www.youtube.com/partner to learn more about the YouTube Partner Program.
    
    你不会在可用API列表中看到它,除非你的帐户连接到CMS并且已经过了一段时间。。。除非您的帐户可以使用Content ID API,否则需要7-14天。这是我从支持部门得到的信息,但他们告诉我,这是一个自动步骤

    因此,现在让我们假设您已经可以访问contentidapi

    您可以获取属于某个帐户的contentOwnerShips列表。您可以使用API资源管理器,只需将其用作param fetchMine=true并使用范围进行授权。响应如下所示:

    {
    “种类”:“YouTuPartner#内容所有者列表”,
    “项目”:[
    {
    “种类”:“youtubertner#contentOwner”,
    “id”:“[CMS_id]”,
    “displayName”:“[displayName]”,
    “主要通知电子邮件”:[
    "mail@random.xx"
    ],
    “冲突通知电子邮件”:mail@random.xx",
    “分派邮件”:[
    "mail@random.xx"
    ],
    “指纹报告通知电子邮件”:[
    "mail@random.xx"
    ]
    }
    ]
    }

    这是您从中获取CMS_ID的地方,您还可以将其作为OnBehalfOfContentTowner用于任何API请求

    要获取属于所有权的所有频道的列表,只需发出此请求

            "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&managedByMe=true&onBehalfOfContentOwner=[CONTENTOWNER]&access_token=[ACCESS_TOKEN]"
    
    但此请求需要授予的“”范围


    这可能会对您有所帮助,请随时提出进一步的问题。

    谢谢您的详细回答(也感谢您在API explorer中提供了指向youtube contentOwners/list资源的链接)。我发现我的CMS_ID看起来非常像一个随机生成的字符串,这是我从未猜到的。还感谢您提到,我必须在请求中包含一个过滤器,如果您没有提到:-),这可能会导致接下来几个小时的挫折。