Попытка использовать Google Index API на моем сайте приводит к ошибке 404, как это исправить? - PullRequest
0 голосов
/ 17 апреля 2019

Для голландского агентства по трудоустройству я пытаюсь написать небольшой код, который будет использовать API индекса Google для обновления информации о Google, когда новая вакансия будет опубликована или удалена.Для начала я пытаюсь получить статус уведомления, но ответ 404, несмотря на то, что веб-сайт, очевидно, доступен.

Как начинающий программист, я пришел к выводу, что, скорее всего, я допустил ошибку в каком-либо коде или что выполняемая задача просто невозможна, поскольку API официально не доступен в моей стране (Нидерланды)

У меня, к сожалению, нет прав на подобные сайты, расположенные в поддерживаемых странах, чтобы гарантировать, что мой код является проблемой здесь.

Поиск тем об этой ошибке возвращает огромное количество информации, но пока что ни одна из них, к сожалению, не решает мою проблему.

Ошибка появляется в строке using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

Ниже мой код:

using Google.Apis.Auth.OAuth2;
using System.IO;
using System.Threading.Tasks;

    class AccessTokenGenerate
    {
        public static async Task<string> GetAccessTokenFromJSONKeyAsync(string jsonKeyFilePath, params string[] scopes)
        {
            using (var stream = new FileStream(jsonKeyFilePath, FileMode.Open, FileAccess.Read))
            {
                return await GoogleCredential
                    .FromStream(stream) // Loads key file
                    .CreateScoped(scopes) // Gathers scopes requested
                    .UnderlyingCredential // Gets the credentials
                    .GetAccessTokenForRequestAsync(); // Gets the Access Token
            }
        }

        public static string GetAccessTokenFromJSONKey(string jsonKeyFilePath, params string[] scopes)
        {
            return GetAccessTokenFromJSONKeyAsync(jsonKeyFilePath, scopes).Result;
        }

        public static async Task<string> GetTokenAndCall()
        {
            var keyFilePath = @"E:\LocationOnDisk\KeyFilename.json";
            var scopes = new[] { "https://www.googleapis.com/auth/indexing" };
            GoogleCredential credential;
            using (var stream = new FileStream(keyFilePath, FileMode.Open, FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream)
                .CreateScoped(scopes);
            }

            var token = await credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
            return token;
        }

        public static string GetToken()
        {
            var task = GetTokenAndCall();
            task.Wait();
            var result = task.Result;
            return result;
        }

    }

using System;
using System.IO;
using System.Net;

    class Program
    {
        static void Main(string[] args)
        {
            var token = AccessTokenGenerate.GetToken();
            string responseString = "";
            string uri = "https://indexing.googleapis.com/v3/urlNotifications/metadata?url=https%3A%2F%2Fwww.WEBSITEHERE.nl%2F";

            WebRequest request = WebRequest.Create(uri);
            request.PreAuthenticate = true;

            request.ContentType = "application/json";
            request.Headers.Add("Authorization", "Bearer " + token);
            request.Method = "GET";
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                responseString = reader.ReadToEnd();
            }

            Console.WriteLine(responseString);
            Console.ReadKey();
        }
    }

1 Ответ

0 голосов
/ 25 апреля 2019

Ошибка 404 указала, что никакой информации относительно URL не найдено.После запроса URL для индексации ошибка 404 также исчезла.

До сих пор есть код, чтобы поймать "ошибку", но помимо этого она работает сейчас!

...