Java 谷歌和谷歌之间的不同答案';s网站和谷歌';s API

Java 谷歌和谷歌之间的不同答案';s网站和谷歌';s API,java,android,google-api,Java,Android,Google Api,我正在尝试编写JAVA代码,以便从google获得答案。 我写的代码只适用于英语,但当我尝试添加一些希伯来语字符时,得到的答案与我在谷歌网站上写的答案不同。 代码如下: String address = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q="; String charset = "UTF-8"; URL url; try { url = new URL(address + URLEncod

我正在尝试编写JAVA代码,以便从google获得答案。 我写的代码只适用于英语,但当我尝试添加一些希伯来语字符时,得到的答案与我在谷歌网站上写的答案不同。
代码如下:

String address = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String charset = "UTF-8";
URL url;

try 
{
    url = new URL(address + URLEncoder.encode(artistAndSong + site, charset));
          //The url seems right, and it's the same as the url that appear on the web
    Reader reader = new InputStreamReader(url.openStream(), charset);
    GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
    res =(results.getResponseData().getResults().get(0).getUrl());
          //This is the part where I see that the answers are not the same
}

class GoogleResults{

private ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }

static class ResponseData {
    private List<Result> results;
    public List<Result> getResults() { return results; }
    public void setResults(List<Result> results) { this.results = results; }
    public String toString() { return "Results[" + results + "]"; }
}

static class Result {
    private String url;
    private String title;
    public String getUrl() { return url; }
    public String getTitle() { return title; }
    public void setUrl(String url) { this.url = url; }
    public void setTitle(String title) { this.title = title; }
    public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
}
字符串地址=”https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
字符串charset=“UTF-8”;
网址;
尝试
{
url=新的url(地址+URLEncoder.encode(artistAndSong+站点,字符集));
//这个url看起来是正确的,它与web上显示的url相同
Reader Reader=新的InputStreamReader(url.openStream(),字符集);
GoogleResults=new Gson().fromJson(reader,GoogleResults.class);
res=(results.getResponseData().getResults().get(0.getUrl());
//这是我看到答案不一样的部分
}
GoogleResults类{
私人回应数据回应数据;
public ResponseData getResponseData(){return ResponseData;}
public void setResponseData(ResponseData ResponseData){this.ResponseData=ResponseData;}
公共字符串toString(){return“ResponseData[“+ResponseData+”]”;}
静态类响应数据{
私人名单结果;
public List getResults(){return results;}
public void setResults(列出结果){this.results=results;}
公共字符串toString(){return“Results[“+Results+”]”;}
}
静态类结果{
私有字符串url;
私有字符串标题;
公共字符串getUrl(){return url;}
公共字符串getTitle(){return title;}
public void setUrl(字符串url){this.url=url;}
public void setTitle(字符串标题){this.title=title;}
公共字符串toString(){return“Result[url:+url+,title:+title+”];}
}
}
有人有主意吗?我已经试着解决了好几天了。。。(另外,我尝试使用unicode,但似乎无法解决问题。)

谢谢

谷歌答案基于您以前的搜索进行个性化设置。当使用您的帐户登录时,以及当您未登录时,尝试搜索相同的内容(例如,如果您使用的是Chrome,请尝试隐姓埋名窗口),结果应该会有所不同

我想这就是发生在你身上的事


代码中没有明显的缺陷。

您可能会遇到以下一种或多种情况:

  • 正如@darijan所说:无论何时登录
  • 饼干是否已经存在
  • 也许是某种用户代理歧视
  • 随着谷歌逐步升级他们的算法,我们可以想象,搜索API使用的版本与网站的版本并不完全相同

谷歌Api获取的结果与谷歌网站检索的结果非常不同。这是众所周知的“搜索引擎优化世界”。这是非常可悲的,因为这是从事SEO工作的人们编写自己的爬虫程序的主要原因。这些程序对谷歌网站而不是谷歌Api进行查询。你有没有在谷歌搜索网站上看到过
captcha
?您是否曾被谷歌搜索网站拦截,并显示“我们检测到来自您网络的自动流量。请联系您的互联网服务提供商。”? 如果谷歌能在网站和api上获得相同的结果,那么搜索引擎优化公司就会停止欺骗他们的网站以获得正确的结果


所以答案是
你的代码中没有bug-这是谷歌的错。

是的,我考虑过,但我还是得到了同样的结果…:(