Bing新闻搜索API与Jav​​a

时间:2011-04-21 18:15:48

标签: java bing bing-api

我正在尝试使用bing-search-java-api的NewsSample.java返回特定搜索字词的热门新闻结果。

public class NewsSample {
private static final String APPLICATION_KEY_OPTION = "47662CD8468093923CEC71C4EFA8342775BC589G";

/** The Constant QUERY_OPTION. */
private static final String QUERY_OPTION = "google";

/** The Constant HELP_OPTION. */
private static final String HELP_OPTION = "help";

/**
 * The main method.
 * 
 * @param args the arguments
 */
public static void main(String[] args) {
    Options options = buildOptions();
    try {
        CommandLine line = new BasicParser().parse(options, args);
        processCommandLine(line, options);
    } catch(ParseException exp ) {
        System.err.println(exp.getMessage());
        printHelp(options);
    }
}

/**
 * Process command line.
 * 
 * @param line the line
 * @param options the options
 */
private static void processCommandLine(CommandLine line, Options options) {
    if(line.hasOption(HELP_OPTION)) {
        printHelp(options);            
    } else if(line.hasOption(APPLICATION_KEY_OPTION) && line.hasOption(QUERY_OPTION)) {
        BingSearchServiceClientFactory factory = BingSearchServiceClientFactory.newInstance();
        BingSearchClient client = factory.createBingSearchClient();
        SearchResponse response = client.search(createSearchRequest(client, line.getOptionValue(APPLICATION_KEY_OPTION), line.getOptionValue(QUERY_OPTION)));
        printResponse(response);
    } else {
        printHelp(options);
    }
}

/**
 * Builds the options.
 * 
 * @return the options
 */
private static Options buildOptions() {

    Options opts = new Options();

    String helpMsg = "Print this message.";
    Option help = new Option(HELP_OPTION, helpMsg);
    opts.addOption(help);

    String applicationKeyMsg = "You Application ID.";
    OptionBuilder.withArgName("appid");
    OptionBuilder.hasArg();
    OptionBuilder.withDescription(applicationKeyMsg);
    Option applicationKey = OptionBuilder.create(APPLICATION_KEY_OPTION);
    opts.addOption(applicationKey);

    String queryMsg = "Search Query.";
    OptionBuilder.withArgName("query");
    OptionBuilder.hasArg();
    OptionBuilder.withDescription(queryMsg);
    Option query = OptionBuilder.create(QUERY_OPTION);
    opts.addOption(query);

    return opts;
}

/**
 * Prints the help.
 * 
 * @param options the options
 */
private static void printHelp(Options options) {
    int width = 80;
    String syntax = NewsSample.class.getName() + " <options>";
    String header = MessageFormat.format("\nThe -{0} and -{1} options are required. All others are optional.", APPLICATION_KEY_OPTION, QUERY_OPTION);
    String footer = "";
    new HelpFormatter().printHelp(width, syntax, header, options, footer, false);
}

/**
 * Prints the response.
 * 
 * @param response the response
 */
private static void printResponse(SearchResponse response) {
    System.out.println("Bing API Version " + response.getVersion());
    System.out.println("News results for " + response.getQuery().getSearchTerms());

    for (NewsResult result : response.getNews().getResults()) {
        System.out.println(result.getTitle());
        System.out.println(result.getUrl());
        System.out.println(result.getSource());
        System.out.println(result.getDate());
        System.out.println(result.getSnippet());
        System.out.println();
    }
}

/**
 * Creates the search request.
 * 
 * @param client the client
 * @param applicationId the application id
 * @param query the query
 * 
 * @return the search request
 */
private static SearchRequest createSearchRequest(BingSearchClient client, String applicationId, String query) {
    SearchRequestBuilder builder = client.newSearchRequestBuilder();
    builder.withAppId(applicationId);
    builder.withQuery(query);
    builder.withSourceType(SourceType.NEWS);
    builder.withVersion("2.0");
    builder.withMarket("en-us");
    builder.withSearchOption(SearchOption.ENABLE_HIGHLIGHTING);

    builder.withNewsRequestOffset(0L);
    builder.withNewsRequestCategory("rt_Political");
    builder.withNewsRequestSortOption(NewsSortOption.RELEVANCE);
    return builder.getResult();
}

}

然而,我得到的唯一回应是......

        usage: com.Bing.WebSample <options>

The -47662CD8468093923CEC71C4EFA8342775BC589G and -google options are required.
All others are optional.
 -47662CD8468093923CEC71C4EFA8342775BC589G <appid>   You Application ID.
 -google <query>                                     Search Query.
 -help

有没有人曾使用知道如何获得实际响应的Bing Search API? 感谢。

2 个答案:

答案 0 :(得分:2)

Bing新闻搜索对我来说很好。为我运行的代码示例是:

        BingSearchServiceClientFactory factory = BingSearchServiceClientFactory.newInstance();
    BingSearchClient client = factory.createBingSearchClient();

    SearchRequestBuilder builder = client.newSearchRequestBuilder();
    builder.withAppId(appId);
    builder.withQuery(query);
    builder.withSourceType(SourceType.NEWS);
    builder.withVersion("2.0");
    builder.withMarket("en-us");
    builder.withAdultOption(AdultOption.STRICT);
    builder.withSearchOption(SearchOption.ENABLE_HIGHLIGHTING);

    builder.withNewsRequestOffset(0L);
    builder.withNewsRequestCount(10L);

    SearchResponse response = client.search(builder.getResult());

需要设置的两个属性是appId和query,这是要使用的查询字词。我认为问题必须来自您尝试从用户输入中收集这两个值的代码的命令行部分。

无论幕后发生什么,Bing搜索API确实运行良好。我对Bing或Google方法没有任何既得利益,但我仍对3个月前被弃用的Google翻译API感到不满(截至撰写本文时)。

答案 1 :(得分:1)

我不知道您是否有特定要求使用Bing,but you could just cut out the middle man and use google。 Bing确实如此。 Google 也为开发人员提供了一套非常好的工具。

This是googles搜索引擎api的链接(如果您有兴趣的话)。