简体   繁体   English

带有Java的Bing新闻搜索API

[英]Bing News Search API with Java

I am trying to use the bing-search-java-api's NewsSample.java to return top news results for a certain search term. 我正在尝试使用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();
}

} }

However the only response I get is... 但是,我得到的唯一答复是...

        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

Has anyone ever worked with the Bing Search API that knows how to get an actual response? 有没有人使用过Bing Search API,并且知道如何获得实际答复? Thanks. 谢谢。

The Bing News Search works fine for me. Bing新闻搜索对我来说很好。 The code example which runs for me is: 为我运行的代码示例是:

        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());

The two attributes needed setting are appId and query, which is query term to use. 需要设置的两个属性是appId和query,这是要使用的查询术语。 I think the problem must result from the command line part of the code in which you are trying to gather those two values from the user input. 我认为问题一定是由于您试图从用户输入中收集这两个值的代码的命令行部分引起的。

Regardless of what is going on behind the scenes, the Bing search API does work fairly well. 无论幕后发生什么,Bing搜索API都可以很好地运行。 I have no vested interest in either the Bing or the Google approach, but I am still upset over the translation API of Google being deprecated 3 months back (as of the time of writing). 我对Bing或Google的方法都没有既得利益,但是我对三个月前(截至撰写本文时)不推荐使用Google的翻译API感到不满。

I don't know if you have a specific requirement to use Bing, but you could just cut out the middle man and use google . 我不知道您是否有使用Bing的特定要求, 但是您可以删掉中间人并使用google Bing does. 必应 Google has a really good set of tools available to devs as well. Google也为开发人员提供了一套非常好的工具。

This is a link to googles search engine api (if you were interested). 是指向Google搜索引擎API的链接(如果您有兴趣)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM