Google API v3 для dotnet; используя календарь с ключом API

Я пытаюсь прочитать свой собственный календарь Google с помощью API версии 3 (http://code.google.com/p/google-api-dotnet-client/). В конечном итоге я хочу, чтобы мой собственный календарь из Календаря Google отображался на моем сайте с помощью настраиваемого элемента управления (а позже пусть люди назначают встречи). Каждый образец, который я читаю, основан на предпосылке, что я должен вручную предоставить доступ к своим данным. Еще в консоли API Google я создал приложение с ключом API. Я пытаюсь создать действительную IAuthentication для моего кода. Тем не менее, я не понимаю, какую аутентификацию я должен использовать. Ниже приведена жалкая попытка, кто может мне помочь с этим?

  public void TestMethod1()
    {
        // http://code.google.com/p/google-api-dotnet-client/wiki/OAuth2
        NativeApplicationClient provider = NativeApplicationClient(GoogleAuthenticationServer.Description);
        NativeApplicationClient(GoogleAuthenticationServer.Description);

        provider.ClientIdentifier = "x";
        provider.ClientSecret = "x";

        var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);


        Google.Apis.Calendar.v3.CalendarService service = new Google.Apis.Calendar.v3.CalendarService(auth);
        var result = service.Events.List("primary").Fetch();

        Assert.IsTrue(result.Items.Count > 0);
    }

    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
    {
        IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() });

        return arg.ProcessUserAuthorization("", state);
    }

1 ответ

Привет для меня это работает:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.Apis.Calendar;
using Google.Apis.Calendar.v3;
using Google.Apis.Authentication;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using DotNetOpenAuth.OAuth2;
using System.Diagnostics;
using Google.Apis.Calendar.v3.Data;

namespace consoleGoogleResearch
{
    class Program
    {
        public static void Main(string[] args)
        {            
            // Register the authenticator. The Client ID and secret have to be copied from the API Access
            // tab on the Google APIs Console.
            var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description);
            provider.ClientIdentifier = "fill_in_yours";
            provider.ClientSecret = "fill_in_yours";           
            // Create the service. This will automatically call the authenticator.
            var service = new CalendarService(new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthentication));

            Google.Apis.Calendar.v3.CalendarListResource.ListRequest clrq = service.CalendarList.List();
            var result = clrq.Fetch();

            if (result.Error != null)
            {
                Console.WriteLine(result.Error.Message);
                Console.ReadKey();
                return;
            }

            Console.WriteLine("Calendars: ");           
            foreach (CalendarListEntry calendar in result.Items)
            {
                Console.WriteLine("{0}", calendar.Id);
                Console.WriteLine("\tAppointments:");
                Google.Apis.Calendar.v3.EventsResource.ListRequest elr = service.Events.List(calendar.Id);
                var events = elr.Fetch();
                foreach (Event e in events.Items)
                {
                    Console.WriteLine("\t From: {0} To: {1} Description: {2}, Location: {3}", e.Start, e.End, e.Description, e.Location);
                }
            }            
            Console.ReadKey();
        }        

        private static IAuthorizationState GetAuthentication(NativeApplicationClient arg)
        {            
            // Get the auth URL:
            //IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.ToString() });
            IAuthorizationState state = new AuthorizationState(new[] { "https://www.google.com/calendar/feeds" });
            state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
            Uri authUri = arg.RequestUserAuthorization(state);

            // Request authorization from the user (by opening a browser window):
            Process.Start(authUri.ToString());
            Console.Write("  Authorization Code: ");
            string authCode = Console.ReadLine();

            // Retrieve the access token by using the authorization code:
            return arg.ProcessUserAuthorization(authCode, state);
         }
    }
}
Другие вопросы по тегам