我在我的Java应用程序中使用google-api-services-customsearch
v1-rev46-1.21.0来查找包含两个完全字符串的页面。
假设我有两个名字Bill Gates
和Steve Jobs
,我希望找到所有提到这两个名字的网页。如果我使用Google搜索页面,我会运行以下查询:
"Bill Gates" "Steve Jobs"
(注意我没有使用+
符号,因为它不再是有效的操作符。)
我想通过Java进行相同的搜索,但我找不到让它工作的方法。有什么建议吗?请在下面找到最小工作示例(API_KEY
和SEARCH_ENGINE_ID
已经过测试并且是正确的):
public class Example {
private static String name1 = "Bill Gates";
private static String name2 = "Steve Jobs";
public static void main(String[] args) throws IOException {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
Customsearch customsearch = new Customsearch(httpTransport, jsonFactory, null);
Customsearch.Cse cse = customsearch.cse();
String format = String.format("\"%s\" \"%s\"", name1, name2);
Customsearch.Cse.List request = cse.list(format);
request.setKey(Consts.API_KEY);
request.setCx(Consts.SEARCH_ENGINE_ID);
Search search = request.execute();
List<Result> results = search.getItems();
if (null != results) {
for (Result result : results) {
System.out.println("* " + result.getLink());
System.out.println(result.getSnippet());
System.out.println();
}
}
}
}
获取某些结果(非空)的唯一方法是将查询更改为:
Bill Gates Steve Jobs
这意味着'以任何顺序查找包含上述一个或多个单词的任何页面,这不是我想要做的。非常感谢您提供的任何解决方案或有用的文档。
我刚刚意识到上面的代码与Bill Gates
和Steve Jobs
这样的大品牌完美配合,但它不适用于其他知名人士的名字。这是否意味着当前的customsearch引擎在找不到结果时返回null?如果是这样,如果我在Google网站上运行查询,为什么会收到很多结果?
答案 0 :(得分:0)
我发布为最小工作示例的代码是正确的。 我没有得到任何结果的原因是我对谷歌控制面板中的Customsearch引擎施加了许多限制(即:没有来自LinkedIn,Facebook,Twitter等的结果)。当我放松约束时,我得到了预期的结果。