使用炼金术实体提取检索 JSON 输出
Using Alchemy Entity Extraction to retrieve JSON output
我是 运行 来自 Alchemy API Java SDK 的 EntityTest.java
文件,可以找到 here。这些程序工作正常,但似乎无法将输出格式更改为 JSON。
我试过执行这段代码-
// Create an AlchemyAPI object.
AlchemyAPI alchemyObj = AlchemyAPI.GetInstanceFromFile("api_key.txt");
// Force the output type to be JSON
AlchemyAPI_NamedEntityParams params = new AlchemyAPI_NamedEntityParams();
params.setOutputMode("json");
// Extract a ranked list of named entities for a web URL.
Document doc = alchemyObj.URLGetRankedNamedEntities("http://www.techcrunch.com/", params);
System.out.println(getStringFromDocument(doc));
但代码抛出 RunTimeException,并在控制台打印以下内容-
Exception in thread "main" java.lang.RuntimeException: Invalid setting json for parameter outputMode
at com.alchemyapi.api.AlchemyAPI_Params.setOutputMode(AlchemyAPI_Params.java:42)
at com.alchemyapi.test.EntityTest.main(EntityTest.java:29)
此外,这是 AlchemyAPI_Params.java 文件中的 setOutputCode
方法-
public void setOutputMode(String outputMode) {
if( !outputMode.equals(AlchemyAPI_Params.OUTPUT_XML) && !outputMode.equals(OUTPUT_RDF) )
{
throw new RuntimeException("Invalid setting " + outputMode + " for parameter outputMode");
}
this.outputMode = outputMode;
}
从代码中可以明显看出,似乎只有两种可接受的输出格式是 XML 和 RDF。 是这样吗?有没有办法在 JSON 中获取输出?
有人可以帮我解决这个问题吗?
您需要在 AlchemyAPI_Params 中添加新常量:OUTPUT_JSON 并修改 setOutputMode 方法以接受它。
之后在 AlchemyAPI 中:
您需要使用新的 OUTPUT_JSON 案例修改 doRequest 方法。
您可以使用:
http://www.oracle.com/technetwork/articles/java/json-1973242.html
创建新内容。
希望对您有所帮助
我通过采用完全不同的方法解决了这个问题。我没有使用已经可用的 Java SDK,而是与 URLGetRankedNamedEntities API 的端点建立了 HTTP 连接,并检索了响应。
这是一个演示如何执行此操作的代码示例-
URL urlObj = new URL("http://access.alchemyapi.com/calls/url/URLGetRankedNamedEntities?apikey=" + API_KEY_HERE + "&url=http://www.smashingmagazine.com/2015/04/08/web-scraping-with-nodejs/&outputMode=json");
System.out.println(urlObj.toString() + "\n");
URLConnection connection = urlObj.openConnection();
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
System.out.println(builder);
类似的端点也适用于其他 API,可以找到 here。
我是 运行 来自 Alchemy API Java SDK 的 EntityTest.java
文件,可以找到 here。这些程序工作正常,但似乎无法将输出格式更改为 JSON。
我试过执行这段代码-
// Create an AlchemyAPI object.
AlchemyAPI alchemyObj = AlchemyAPI.GetInstanceFromFile("api_key.txt");
// Force the output type to be JSON
AlchemyAPI_NamedEntityParams params = new AlchemyAPI_NamedEntityParams();
params.setOutputMode("json");
// Extract a ranked list of named entities for a web URL.
Document doc = alchemyObj.URLGetRankedNamedEntities("http://www.techcrunch.com/", params);
System.out.println(getStringFromDocument(doc));
但代码抛出 RunTimeException,并在控制台打印以下内容-
Exception in thread "main" java.lang.RuntimeException: Invalid setting json for parameter outputMode
at com.alchemyapi.api.AlchemyAPI_Params.setOutputMode(AlchemyAPI_Params.java:42)
at com.alchemyapi.test.EntityTest.main(EntityTest.java:29)
此外,这是 AlchemyAPI_Params.java 文件中的 setOutputCode
方法-
public void setOutputMode(String outputMode) {
if( !outputMode.equals(AlchemyAPI_Params.OUTPUT_XML) && !outputMode.equals(OUTPUT_RDF) )
{
throw new RuntimeException("Invalid setting " + outputMode + " for parameter outputMode");
}
this.outputMode = outputMode;
}
从代码中可以明显看出,似乎只有两种可接受的输出格式是 XML 和 RDF。 是这样吗?有没有办法在 JSON 中获取输出?
有人可以帮我解决这个问题吗?
您需要在 AlchemyAPI_Params 中添加新常量:OUTPUT_JSON 并修改 setOutputMode 方法以接受它。
之后在 AlchemyAPI 中:
您需要使用新的 OUTPUT_JSON 案例修改 doRequest 方法。
您可以使用: http://www.oracle.com/technetwork/articles/java/json-1973242.html
创建新内容。
希望对您有所帮助
我通过采用完全不同的方法解决了这个问题。我没有使用已经可用的 Java SDK,而是与 URLGetRankedNamedEntities API 的端点建立了 HTTP 连接,并检索了响应。
这是一个演示如何执行此操作的代码示例-
URL urlObj = new URL("http://access.alchemyapi.com/calls/url/URLGetRankedNamedEntities?apikey=" + API_KEY_HERE + "&url=http://www.smashingmagazine.com/2015/04/08/web-scraping-with-nodejs/&outputMode=json");
System.out.println(urlObj.toString() + "\n");
URLConnection connection = urlObj.openConnection();
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line + "\n");
}
System.out.println(builder);
类似的端点也适用于其他 API,可以找到 here。