Google 自定义搜索 API - 引擎检索引擎数据失败

2024-04-21

我需要在自定义搜索引擎上进行 CRUD。从文档 https://developers.google.com/custom-search/docs/api,它看起来非常简单。但我不断收到 401 回复。

我正在使用 Google.Apis.Oauth2.v2 来获取令牌:

String serviceAccountEmail = "[email protected] /cdn-cgi/l/email-protection";

var certificate = new X509Certificate2(@"key.p12", "blah", X509KeyStorageFlags.Exportable);

var credential = new ServiceAccountCredential(
   new ServiceAccountCredential.Initializer(serviceAccountEmail)
   {
      Scopes = new[] { "https://www.googleapis.com/auth/cse" }
   }.FromCertificate(certificate));

bool result = credential.RequestAccessTokenAsync(CancellationToken.None).Result;
TokenResponse token = credential.Token;

然后,我将令牌添加到以下请求(授权:Bearer mytoken):

GET http://cse.google.com/api/<USER_ID>/cse/<CSE_ID>

有几件事让我很震惊。

  1. 文档的准确引用:

虽然您可以将 HTTP 请求设置为 URLhttp://cse.google.com/api/[USER_ID]/cse/[CSE_ID] http://cse.google.com/api/%5BUSER_ID%5D/cse/%5BCSE_ID%5D,我们建议使用 改为以下 URL:

http://cse.google.com/api/[USER_ID]/cse/[CSE_ID] http://cse.google.com/api/%5BUSER_ID%5D/cse/%5BCSE_ID%5D

请注意,两个 URL 完全相同。

  1. 在身份验证部分,示例使用 ClientLogin,但已弃用。没有 OAuth 2.0 的示例。

  2. 在文档的示例中,它说:

每个自定义搜索引擎均由创建的唯一 ID 标识 将用户 ID 与自定义搜索引擎 ID 组合,并用 分隔 冒号,像这样:

011737558837375720776:mbfrjmyam1g 在本例中,用户 ID 为 011737558837375720776,搜索引擎ID为mbfrjmyam。

您可能已经注意到,搜索引擎 ID 比应有的值少了 2 个字符。

  1. 我在任何地方都没有看到范围为“https://www.googleapis.com/auth/cse https://www.googleapis.com/auth/cse“。我刚刚从 stackoverflow 的帖子中复制了它。

我知道这是一个很长的问题,但我希望这将帮助下一个人看这个并考虑这些要点。

有人知道为什么是401吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 自定义搜索 API - 引擎检索引擎数据失败 的相关文章

随机推荐