5

Google サービス アカウントを使用して Google アナリティクス データにアクセスするためのオンライン アプリケーションを作成しようとしています。これが私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace GA_server2server_POC.Models
{
    using System.Security.Cryptography.X509Certificates;
    using Google.Apis.Analytics.v3;
    using Google.Apis.Analytics.v3.Data;
    using Google.Apis.Authentication.OAuth2;
    using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
    using Google.Apis.Util;
    using Google.Apis.Services;
    using Google.Apis.Requests;

    public class Oauth_With_API
    {
        public static void ApiTest()
        {
            log4net.Config.XmlConfigurator.Configure();
            const string ServiceAccountId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com";
            const string ServiceAccountUser = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdeveloper.gserviceaccount.com";
            AssertionFlowClient client = new AssertionFlowClient(
                GoogleAuthenticationServer.Description, new X509Certificate2("C:\\Users\\rcarter\\Downloads\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-privatekey.p12", "notasecret", X509KeyStorageFlags.Exportable))
            {
                Scope = "https://www.googleapis.com/auth/analytics.readonly",
                ServiceAccountId = ServiceAccountUser
            };



            OAuth2Authenticator<AssertionFlowClient> authenticator = new OAuth2Authenticator<AssertionFlowClient>(client, AssertionFlowClient.GetState);

            AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer()
            {
                Authenticator = authenticator
            });

            string profileId = "ga:xxxxxxxx";
            string startDate = "2013-07-01";
            string endDate = "2013-07-15";
            string metrics = "ga:visits";
            DataResource.GaResource.GetRequest request = service.Data.Ga.Get(profileId, startDate, endDate, metrics);
            request.Dimensions = "ga:date";
            GaData data = request.Execute(); //error occurs here. After this, thread exits.

            Console.WriteLine(data.TotalResults);

        }
    }
}

これまでのところ私のコードは実行されますが、次の出力が得られます。

WebDev.WebServer40.exe Information: 0 : DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 (official)
WebDev.WebServer40.exe Information: 0 : Preparing to send AssertionFlowMessage (2.0) message.
WebDev.WebServer40.exe Information: 0 : Sending AssertionFlowMessage request.
WebDev.WebServer40.exe Information: 0 : HTTP POST https://accounts.google.com/o/oauth2/token
WebDev.WebServer40.exe Information: 0 : The following required parameters were missing from the DotNetOpenAuth.OAuth2.Messages.AccessTokenFailedResponse message: {error,
}
WebDev.WebServer40.exe Information: 0 : Received UnauthorizedResponse response.

この後、スレッドは終了し、プログラムはデータの出力を拒否します。でトラブルが発生したようrequest.Execute();です。特にややこしいのは、 にブレークポイントを設定するとConsole.WriteLine(data.TotalResults);、必要なデータがローカル変数に表示されることですdata。印刷したいものがすべて含まれていますが、エラーの原因を特定できず、request.Execute();. よく検索した結果、上記のエラーについてはまったく見つかりませんでした。

私が使用しているコードは、この質問hereに対する回答に基づいています。その質問に回答してから、Google アナリティクス ライブラリでいくつかの変更がありましたが、私のコードの多くは同じです。

アカウント固有の変数をすべてチェックして再チェックしました。これをテストするために、ローカル コンピューターで ASP.NET MVC 4 Web アプリとして実行しています。

この問題のトラブルシューティング方法に関するヘルプやアドバイスをいただければ幸いです。役立つ情報をさらに提供できるかどうかをお知らせください。読んでくれてありがとう。

4

1 に答える 1