2012-03-13 13 views
3

私はGoogleカレンダーAPIの使用方法を学習しています.DotNetOpenAuthを使用してGoogleアカウントにアクセスする方法を学習する必要があります。提供されたサンプルを動作させ、カレンダーにアクセスして操作するためのコンソールプログラムに作業コードを書きました。DotNetOpenAuthのVBまたはC#GUIクライアントを作成するにはどうすればよいですか?

同じことをするために、Windowsフォームアプリを(C#またはVBのどちらでも)書きたいと思っています。 GUIアプリケーションでOAuth2プロセスを動作させることはできません。それはコンパイルされ実行されますが、動作しません。これまで見たことに基づいて、私はGetAuthorization()関数が呼び出されていないと結論づけました。

私は、ボタンのクリックから、コンストラクタから、そしてフォームLoaderメソッドからプロセスを開始しようとしました。私はC#とVBの両方で試しました。

public GoogleCal() 
{ 
    InitializeComponent(); 

    var provider = new NativeApplicationClient(
          GoogleAuthenticationServer.Description); 
    provider.ClientIdentifier = "xxxxx.apps.googleusercontent.com"; 
    provider.ClientSecret = "yyyyy"; 

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

private IAuthorizationState GetAuthorization(NativeApplicationClient arg) 
{ 
    // Get the auth URL: 
    IAuthorizationState state = new AuthorizationState(new[] { 
           CalendarService.Scopes.Calendar.GetStringValue() }); 

    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()); 
    authCodeText = Microsoft.VisualBasic.Interaction.InputBox(
                "Paste code:", "title", ""); 

    // Retrieve the access token by using the authorization code: 
    return arg.ProcessUserAuthorization(authCodeText, state); 
} 

明らかに何か間違っていますが、私はそれが何であるか把握できません。何か案は?

+0

これは似たような質問ですが、私が求めていたものではありません。 (一方で、私は得ることができるほど近いかもしれません...)そこで解説されている解決策は、.aspのみであるように見えます。私はC#またはVBだけのものを探しています。 – Brian

+0

ASPはvbまたはC#です。あなたは何かを探していません.netだけvb6?またはおそらくwinformsまたはwpf?あなたが探しているものを得るのに十分な情報がありません –

+0

WindowsフォームアプリケーションVS 2010を作成しようとしています。 – Brian

答えて

0

whelkaholism.blogspotのチュートリアルを使用して、私がしたいことをすることができました。私は幾分違ったアプローチを取っていました(一部は最近のOAuth2を使用しています)。

私のC#フォームプログラムコードは以下の通りです。

// Add references: 
//  DotNetOpenAuth.dll 
//  Google.Apis.dll 
//  Google.Apis.Authentication.OAth2.dll 
//  Newtonsoft.Json.Net35.dll 
// plus, add references for whichever Google App(s) you want 
//  Google.Apis.Calendar.v3.dll 

// form contains at least the following: 
//  button1: Button, start the authentication process 
//  authCode: TextBox, to recive the auth code from Google 
//  button2: Button, complete the authentication prop 
//  textBox2: TextBox, multi-line, to display status message and output 

// in addition to the libraries required for any forms program, use: 
using System.Diagnostics; 
using DotNetOpenAuth.OAuth2; 
using Google.Apis.Authentication.OAuth2; 
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; 
using Google.Apis.Calendar.v3; 
using Google.Apis.Calendar.v3.Data; 
using Google.Apis.Util; 


// methods not related to authentication deleted for space 

namespace GoogleCal 
{ 
    public partial class GoogleCal : Form 
    { 
     private static String NL = Environment.NewLine; 
     private static IAuthorizationState state; 
     private static NativeApplicationClient provider; 
     private static OAuth2Authenticator<NativeApplicationClient> auth; 
     private static CalendarService calService; 

     private void button1_Click(object sender, EventArgs e) 
     { 
      // clicked to initiate authentication process 

      // provider and state are declared above as private static 

      provider = new NativeApplicationClient(GoogleAuthenticationServer.Description); 
      provider.ClientIdentifier = "<my id>.apps.googleusercontent.com"; 
      provider.ClientSecret = "<my secret>"; 

      // next line changes if you want to access something other than Calendar 
      state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() }); 
      state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); 
      Uri authUri = provider.RequestUserAuthorization(state); 

      Process.Start(authUri.ToString()); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      // clicked after Google code is pasted into TextBox to complete authentication process 

      // auth and calService are declared above as private static 

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

      // create the service object to use in other methods 
      calService = new CalendarService(auth); 

      textBox2.AppendText("Ready" + NL); 
      textBox2.Update(); 
     } 

     private IAuthorizationState GetAuthorization(NativeApplicationClient arg) 
     { 
      // state is declared above as private static 
      // authCode is a TextBox on the form 
      return arg.ProcessUserAuthorization(authCode.Text, state); 
     } 
    } 
} 
関連する問題