在没有 ajax 的情况下以编程方式搜索 google
Searching google programmatically without ajax
显然 google 淘汰了我在 java 中为 android 使用的 ajax api,我挖掘了他们的新 API 页面,但我找不到任何似乎可以在 java 或任何非网络语言中使用的内容。
这是我之前的:
@Override
protected String doInBackground(String... query) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=" + URLEncoder.encode(query[0], "UTF-8")).openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
catch(Exception e){e.printStackTrace();
return "failed to do anything";
}
}
简而言之,提供了一个字符串,并将其附加到 ajax 搜索中。结果以 JSON 形式处理到字符串生成器中,然后作为整个字符串返回。
如果您现在尝试这样做,returns结果如下:
{"responseData": null, "responseDetails": "The Google Web Search API is no longer available. Please migrate to the Google Custom Search API (https://developers.google.com/custom-search/)", "responseStatus": 403}
同样,我已经阅读了自定义搜索 API 但没有找到任何可以在 java 脚本之外工作的内容。
我更喜欢 JSON 解决方案,因为这是我已经在使用的解决方案,但我可以使用我得到的任何东西。
那么,有没有其他方法可以让我使用类似的方法?还是我会被迫进入另一个搜索引擎?
//编辑
好的,我现在有了固定的代码。但是它需要一个 API 密钥,我不能在我的开源项目中发布它,而且除非我付费,否则它的搜索量有限,所以我将被迫去找竞争对手。
这是任何感兴趣的人的固定代码:
@Override
protected String doInBackground(String... query) {
try {
String APIKey = "INSERT_YOUR_API_KEY";
String customSearchEngine = "INSERT_YOUR_CUSTOM_SEARCH_KEY";
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("https://www.googleapis.com/customsearch/v1?key=" + APIKey + "&cx=" + customSearchEngine + "&q=" + URLEncoder.encode(query[0], "UTF-8")).openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
catch(Exception e){e.printStackTrace();
return "failed to do anything";
}
}
他们在那个网站上提到 JSON API here
它是一个 REST api。 Google for "Java REST client" 从 Java
获取一些关于如何使用它的示例
显然 google 淘汰了我在 java 中为 android 使用的 ajax api,我挖掘了他们的新 API 页面,但我找不到任何似乎可以在 java 或任何非网络语言中使用的内容。
这是我之前的:
@Override
protected String doInBackground(String... query) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=" + URLEncoder.encode(query[0], "UTF-8")).openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
catch(Exception e){e.printStackTrace();
return "failed to do anything";
}
}
简而言之,提供了一个字符串,并将其附加到 ajax 搜索中。结果以 JSON 形式处理到字符串生成器中,然后作为整个字符串返回。
如果您现在尝试这样做,returns结果如下:
{"responseData": null, "responseDetails": "The Google Web Search API is no longer available. Please migrate to the Google Custom Search API (https://developers.google.com/custom-search/)", "responseStatus": 403}
同样,我已经阅读了自定义搜索 API 但没有找到任何可以在 java 脚本之外工作的内容。
我更喜欢 JSON 解决方案,因为这是我已经在使用的解决方案,但我可以使用我得到的任何东西。
那么,有没有其他方法可以让我使用类似的方法?还是我会被迫进入另一个搜索引擎?
//编辑
好的,我现在有了固定的代码。但是它需要一个 API 密钥,我不能在我的开源项目中发布它,而且除非我付费,否则它的搜索量有限,所以我将被迫去找竞争对手。 这是任何感兴趣的人的固定代码:
@Override
protected String doInBackground(String... query) {
try {
String APIKey = "INSERT_YOUR_API_KEY";
String customSearchEngine = "INSERT_YOUR_CUSTOM_SEARCH_KEY";
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("https://www.googleapis.com/customsearch/v1?key=" + APIKey + "&cx=" + customSearchEngine + "&q=" + URLEncoder.encode(query[0], "UTF-8")).openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
return sb.toString();
}
catch(Exception e){e.printStackTrace();
return "failed to do anything";
}
}
他们在那个网站上提到 JSON API here
它是一个 REST api。 Google for "Java REST client" 从 Java
获取一些关于如何使用它的示例