Google自定义搜索Api的身份验证

时间:2015-07-30 13:09:20

标签: google-api google-custom-search google-search-api google-oauth2

简短问题:

2015年4月20日发布后,是否有人使用Google Custom Search Api进行身份验证的工作解决方案?

更长的版本:

我正在尝试使用Google Custom Search Api来请求按需索引。 在我开始之前,我遇到了身份验证问题。 根据{{​​3}},您应该使用ClientLogin Api进行身份验证。 这个Api于2015年4月20日关闭,当你尝试从中获取令牌时它现在返回404.

ClientLogin documentation上的弃用通知声明使用Oauth。

因此,我试图验证与Hossein documentation几乎相同的身份验证 我收到了来自Google的持票人令牌,但是当我尝试提出请求时,我收到了一封带有以下消息的401

<Error>You are not authorized to access this resource.  If you feel this is an error, try re-logging into your Google Account.</Error>

这并不奇怪,因为没有最新的文档,我一直在试图寻找正确的解决方案。[/ p>

我目前在C#中的代码:

private static async Task Run()
{
    var credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer("blablabla@developer.gserviceaccount.com")
    {
        Scopes = new[] { "https://www.googleapis.com/auth/cse" }
    }.FromPrivateKey("-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n"));
    await credential.RequestAccessTokenAsync(CancellationToken.None);
    var token = credential.Token;
    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
    var content =
        new StringContent(
            @"<?xml version=""1.0"" encoding=""UTF-8""?><OnDemandIndex><Pages><Page url=""http://url.com/to/be/indexed"" /></Pages></OnDemandIndex>");
    content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
    var result = await client.PostAsync("http://www.google.com/cse/api/{user_id}/index/{CSE_Id}", content);
    var resultContent = await result.Content.ReadAsStringAsync();
    Console.WriteLine(resultContent);
}

是否有人运行的解决方案可以解决www.google.com/cse/api/...端点问题?

任何语言都会有用,只是为了知道它确实有效。

0 个答案:

没有答案