我在运行 c# 谷歌 API 时收到 400 错误请求错误。 我知道它最终是因为 API 构建了一个查询字符串,并且查询字符串的长度很长。 如何强制 API 开机自检而不是 GET?
我的代码:
string username = "SAMPLE@SAMPLE.COM";
string pass = "PASS";
string gkey = "?key=XXXXXXXXXXXXXXXXXXXXXXXXXXX";
string dataFeedUrl = "https://www.google.com/analytics/feeds/data" + gkey;
string accountFeedUrl = "https://www.googleapis.com/analytics/v2.4/management/accounts" + gkey;
AnalyticsService service = new AnalyticsService("API Sample");
service.setUserCredentials(username, pass);
DataQuery query1 = new DataQuery(dataFeedUrl);
query1.Ids = "ga:34197921";
query1.Dimensions = "ga:medium,ga:campaign,ga:date,ga:isMobile,ga:isTablet,ga:searchKeyword,ga:hostname";
query1.Metrics = "ga:visits,ga:visitors,ga:visitBounceRate,ga:goalStartsAll,ga:goalCompletionsAll,ga:goal1Starts,ga:goal1Completions,ga:goal2Starts,ga:goal2Completions,ga:goal3Starts,ga:goal3Completions,ga:goal4Starts,ga:goal4Completions,ga:adCost,ga:totalValue";
query1.Sort = "ga:date,ga:hour";
query1.NumberToRetrieve = 50;
query1.GAStartDate = new DateTime(2012, 1, 2).ToString("yyyy-MM-dd");
query1.GAEndDate = DateTime.Now.ToString("yyyy-MM-dd");
query1.StartIndex = 1;
我的例外:
Google.GData.Client.GDataRequestException: 请求执行失败: https://www.google.com/analytics/feeds/data?key=XXXXXXXX&start-index=1&max-results=10000&dimensions=ga:medium,ga:campaign,ga:date,ga:isMobile,ga:isTablet,ga:searchKeyword,ga:hostname&end-date=2013-11-15&ids=ga:34892951&metrics=ga:visits,ga:visitors,ga:visitBounceRate,ga:goalStartsAll,ga:goalCompletionsAll,ga:goal1Starts,ga:goal1Completions,ga:goal2Starts,ga:goal2Completions,ga:goal3Starts,ga:goal3Completions,ga:goal4Starts,ga:goal4Completions,ga:adCost,ga:totalValue&start-date=2012-01-02---> System.Net.WebException: 远程服务器返回错误: (400) 错误请求。 at System.Net.HttpWebRequest.GetResponse() at Google.GData.Client.GDataRequest.Execute() --- End of inner exception stack trace --- at Google.GData.Client.GDataRequest.Execute() at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter) at Google.GData.Client.GDataGAuthRequest.Execute() at Google.GData.Client.Service.Query(Uri queryUri, DateTime ifModifiedSince,String etag, Int64& contentLength) at Google.GData.Client.Service.Query(Uri queryUri, DateTimeifModifiedSince) at Google.GData.Client.Service.Query(FeedQuery feedQuery) at Google.GData.Analytics.AnalyticsService.Query(DataQuery feedQuery)
没有可用于核心报告 API 的 POST。但是这不是问题,您还有其他一些问题。
- 您应该转向使用核心报告 API v2.4,因为 dataFeedUrl 指向较旧的 v2.3,该版本无论如何都会重定向并返回 v2.4 响应。因此,您不妨只使用 v2.4 端点作为 dataFeedurl。https://www.googleapis.com/analytics/v2.4/data
- 单个查询最多可以有 7 个维度和 10 个指标。您有超过 10 个指标,因此您将收到 400 个错误请求。400应该有一条伴随的错误消息来告诉您问题所在。您的回复中似乎没有暴露这一点,但它可能会告诉您太多指标。
- 最后,只是一个建议:迁移到返回 JSON 并具有一些新功能的 v3(v2.4 不再更新)。客户端登录已弃用,因此您可能应该在某个时候移动到服务帐户 (OAuth 2.0)。