I am using google webmasters java client to get the impressions and clicks data over a period of time. However, while executing search analytics query, I get the following exception:
java.lang.IllegalArgumentException: key ctr
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:871)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:374)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:347)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
...
Caused by: java.lang.IllegalArgumentException: key ctr, field private java.util.List com.google.api.services.webmasters.model.SearchAnalyticsQueryResponse.rows
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:871)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:462)
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:771)
... 8 more
Caused by: java.lang.IllegalArgumentException: key ctr, field private java.util.List com.google.api.services.webmasters.model.SearchAnalyticsQueryResponse.rows
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:871)
at com.google.api.client.json.JsonParser.parseArray(JsonParser.java:638)
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:730)
... 10 more
Caused by: java.lang.IllegalArgumentException: key ctr, field private java.lang.Double com.google.api.services.webmasters.model.ApiDataRow.ctr
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:871)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:462)
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:771)
... 12 more
Caused by: java.lang.IllegalArgumentException: number field formatted as a JSON string must use the @JsonString annotation
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:92)
at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:49)
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:836)
... 14 more
Below is the code that I am using to query:
public void testWebmasters(String token){
try{
Credential credential = getCredential(token);
Webmasters service = new Webmasters.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("WebmastersCommandLine")
.build();
com.google.api.services.webmasters.Webmasters.Sites.List list = service.sites().list();
SitesListResponse execute = list.execute();
List<WmxSite> siteEntry = execute.getSiteEntry();
for(WmxSite site : siteEntry){
System.out.println(site.getSiteUrl());
System.out.println(site.getPermissionLevel());
SearchAnalyticsQueryRequest request = new SearchAnalyticsQueryRequest();
request.setStartDate("2015-08-01");
request.setEndDate("2015-08-05");
request.setDimensions(new ArrayList<String>(){{add("date");}});
SearchAnalyticsQueryResponse response = service.searchanalytics().query(site.getSiteUrl(), request).execute();
for(ApiDataRow row : response.getRows()){
System.out.println(row.getClicks());
System.out.println(row.getImpressions());
System.out.println(row.getCtr());
row.getPosition();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
Below line in the code throws exception:
SearchAnalyticsQueryResponse response = service.searchanalytics().query(site.getSiteUrl(), request).execute();
Going through exception stack trace and code of google java library, it seems this can be resolved by adding @JSONString annotation for 'ctr' property of 'ApiDataRow' class. However, this being a third party library, I don't want to change the code. Also, may be it would fail on another field if I change the code for this.
Any suggestions how to resolve this?
Thanks in advance.