使用Java中的Customsearch搜索完全包含两个给定字符串的页面

时间:2016-01-11 14:05:19

标签: java google-custom-search

我在我的Java应用程序中使用google-api-services-customsearch v1-rev46-1.21.0来查找包含两个完全字符串的页面。

假设我有两个名字Bill GatesSteve Jobs,我希望找到所有提到这两个名字的网页。如果我使用Google搜索页面,我会运行以下查询:

"Bill Gates" "Steve Jobs"

(注意我没有使用+符号,因为它不再是有效的操作符。)

我想通过Java进行相同的搜索,但我找不到让它工作的方法。有什么建议吗?请在下面找到最小工作示例API_KEYSEARCH_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 GatesSteve Jobs这样的大品牌完美配合,但它不适用于其他知名人士的名字。这是否意味着当前的customsearch引擎在找不到结果时返回null?如果是这样,如果我在Google网站上运行查询,为什么会收到很多结果?

1 个答案:

答案 0 :(得分:0)

我发布为最小工作示例的代码是正确的。 我没有得到任何结果的原因是我对谷歌控制面板中的Customsearch引擎施加了许多限制(即:没有来自LinkedIn,Facebook,Twitter等的结果)。当我放松约束时,我得到了预期的结果。