使用炼金术实体提取检索 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