1

我正在尝试使用 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?谢谢。

4

2 回答 2

3

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

        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 感到不安。

于 2011-08-27T21:08:25.713 回答
1

我不知道您是否对使用 Bing 有特定要求,但您可以去掉中间人并使用 google。必应。 谷歌也有一套非常好的工具可供开发人员使用。

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

于 2011-04-21T18:22:15.483 回答