2014-02-11 3 views
0

Я новичок в Google Analytics и попытался получить доступ к данным аналитики с примером, который я нашел в Интернете.Исключение API API Google Analytics в C#

Он бросает исключение ниже:

Google.GData.Client.ClientFeedException: Parsing failed ---> System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1. 
    at System.Xml.XmlTextReaderImpl.Throw(String res, String arg) 
    at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() 
    at System.Xml.XmlTextReaderImpl.ParseDocumentContent() 
    at Google.GData.Client.BaseFeedParser.MoveToStartElement(XmlReader reader) 
    at Google.GData.Client.AtomFeedParser.Parse(Stream streamInput, AtomFeed feed) 
    --- End of inner exception stack trace --- 
    at Google.GData.Client.AtomFeedParser.Parse(Stream streamInput, AtomFeed feed) 
    at Google.GData.Client.AtomFeed.Parse(Stream stream, AlternativeFormat format) 
    at Google.GData.Client.Service.CreateAndParseFeed(Stream inputStream, Uri uriToUse) 
    at Google.GData.Client.Service.Query(FeedQuery feedQuery) 
    at Google.GData.Analytics.AnalyticsService.Query(DataQuery feedQuery) 
    at GoogleAnalytics.Program.Main(String[] args) in e:\\Code\\GoogleAnalytics\\GoogleAnalytics\\Program.cs:line 40 

Ниже приведен код. Может ли кто-нибудь помочь мне, если это возможно? Я не мог найти правильную документацию о том, как это сделать. Заранее благодарю вашу помощь.

string username = "[email protected]"; 
string pass = "Password"; 
string gkey = "?key=<<key>>"; 

string dataFeedUrl = "https://www.googleapis.com/auth/analytics.readonly/" + gkey; 


AnalyticsService service = new AnalyticsService("WebApp"); 
service.setUserCredentials(username, pass); 

DataQuery query1 = new DataQuery(dataFeedUrl); 

query1.Ids = "ga:1235466"; 
query1.Metrics = "ga:visits"; 
query1.Sort = "ga:visits"; 
query1.Dimensions = "ga:dimension1"; 

query1.GAStartDate = new DateTime(2012, 1, 2).ToString("yyyy-MM-dd"); 
query1.GAEndDate = DateTime.Now.ToString("yyyy-MM-dd"); 
query1.StartIndex = 1; 

DataFeed dataFeedVisits = service.Query(query1); 

foreach (DataEntry entry in dataFeedVisits.Entries) 
{ 
    string st = entry.Title.Text; 
    string ss = entry.Metrics[0].Value;     
} 

ответ

0

Чтобы начать, я хотел бы рекомендовать использовать библиотеки Google.Apis.v3. Они делают вашу жизнь намного легче.

Вы должны использовать Oauth2 для аутентификации доступа без имени пользователя и пароля. После того, как вы создали свое приложение в Google Apis Console, вы получаете клиентский и клиентский секрет, которые идентифицируют ваше приложение в Google. Oauth2 code выглядит примерно так.

UserCredential credential; 
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
      new ClientSecrets { ClientId = "YourClientId", ClientSecret = "YourClientSecret" }, 
      new[] { AnalyticsService.Scope.AnalyticsReadonly }, 
      "user", 
      CancellationToken.None, 
      new FileDataStore("Drive.Auth.Store")).Result; } 

Код, указанный выше, будет запрашивать у пользователя, если он хочет разрешить вам доступ к данным Google Analtyics Data.

После того, как у вас есть UserCredential, вы можете создать службу, которую будете использовать для всех ваших запросов в API.

AnalyticsService service = new AnalyticsService(
          new BaseClientService.Initializer() { 
          HttpClientInitializer = credential, 
          ApplicationName = "Analytics API sample", }); 

Вы можете найти учебник по большинству звонков в Google Analtyics апите here


Примечания: Если ваш единственный доступ к вашим собственным данным, которые вы должны проверить Service Accounts.

+0

Спасибо DalmTo :) В соответствии с вашей рекомендацией я попытался использовать API Google API V3, который был действительно хорош по сравнению с тем, который я использовал. В очередной раз благодарим за помощь. –

Смежные вопросы