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

The Bing News Search works fine for me. 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. 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. 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).

于 2011-08-27T21:08:25.713 に答える
1

Bing を使用するための特定の要件があるかどうかはわかりませんが、仲介者を切り取って google を使用することができます。ビングはそうします。 Googleには、開発者が利用できる非常に優れたツール セットもあります。

これは、Google 検索エンジン API へのリンクです (興味がある場合)。

于 2011-04-21T18:22:15.483 に答える