1

我正在运行EntityTest.java来自 Alchemy API Java SDK 的文件,该文件可在此处找到。这些程序运行良好,但似乎无法将输出格式更改为 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)

此外,这是setOutputCodeAlchemyAPI_Params.java 文件中的方法 -

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 格式获取输出?

有人可以帮我解决这个问题吗?

4

2 回答 2

0

您需要在 AlchemyAPI_Params 中添加新常量:OUTPUT_JSON 并修改 setOutputMode 方法以接受它。

之后在 AlchemyAPI 中:

您将需要使用新的 OUTPUT_JSON 案例修改 doRequest 方法。

您可以使用: http ://www.oracle.com/technetwork/articles/java/json-1973242.html

创建新内容。

希望有帮助

于 2015-04-08T17:22:59.473 回答
0

我通过采用完全不同的方法解决了这个问题。我没有使用已经可用的 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 也可以使用类似的端点,可以在此处找到。

于 2015-04-09T11:38:02.720 回答