I am trying to use the bing-search-java-api's NewsSample.java to return top news results for a certain search term.
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 开发者_如何学JAVAclient, 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? Thanks.
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).
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 does. Google has a really good set of tools available to devs as well.
This is a link to googles search engine api (if you were interested).
精彩评论