OpenSubtitles API 响应

Posted

技术标签:

【中文标题】OpenSubtitles API 响应【英文标题】:OpenSubtitles API Response 【发布时间】:2020-05-14 20:55:49 【问题描述】:

我可以交流,但我希望在对象中获得一个字幕列表。这是我的代码:

    public static void makerequest()


        Thread thread = new Thread() 
            @Override
            public void run() 
                try 
                    XMLRPCClient client = new XMLRPCClient(new URL("https://api.opensubtitles.org/xml-rpc"));
                    HashMap ed = (HashMap<Object,String>) client.call("LogIn",username,password,"en",useragent);
                    String Token = (String) ed.get("token");
                    Map<String, String> videoProperties = new HashMap<>();
                    videoProperties.put("sublanguageid", "en");
                    videoProperties.put("imdbid", "528809");
                    Object[] videoParams = videoProperties;
                    Object[] params = Token, videoParams;


                    HashMap test2 = (HashMap<Object,String>) client.call("SearchSubtitles",params);
                    Object[] d = (Object[]) test2.get("data");

                    Log.d("diditworkstring", String.valueOf(d));
                 catch (Exception ex) 
                // Any other exception
                    Log.d("diditworkexception", String.valueOf(ex));
                
            

        ;
        thread.start();
    

在我的日志中,我得到以下信息:

Log: seconds=0.188, data=[Ljava.lang.Object;@2ec1b40, status=200 OK

我以为我会看到一个字幕信息列表。我在这个响应中看到了这一点(data=Ljava.Object;@23c1b40)。那个对象里面有东西吗??

【问题讨论】:

请任何我需要帮助的人! 【参考方案1】:

以下是最终有效的代码。我不知道正确的术语,但这是我解释我做错了什么的最佳方式。我试图直接将对象视为字符串。使用 Arrays.asList() 查看后,我能够看到数据。然后我将列表中的每个项目都转换为 Map。在那之后,我能够得到/改变我内心想要的任何东西。

希望有一天这对某人有所帮助:)

        Thread thread = new Thread() 
            @Override
            public void run() 
                try 
                    // Setup XMLRPC Client
                    XMLRPCClient client = new XMLRPCClient(new URL("https://api.opensubtitles.org/xml-rpc"));
                    HashMap ed = (HashMap<Object,String>) client.call("LogIn",username,password,"en",useragent);
                    // separate my Token from the reply
                    String Token = (String) ed.get("token");
                    // setup Parameters for next call to search for subs
                    Map<String, String> videoProperties = new HashMap<>();
                    videoProperties.put("sublanguageid", "en");
                    videoProperties.put("query", "blade 2");
                    Object[] videoParams = videoProperties;
                    Object[] params = Token, videoParams;
                    // Make next call include method and Parameters
                    java.util.HashMap test2 = (HashMap<String,Array>) client.call("SearchSubtitles",params);
                    // select data key from test2
                    Object[] d = (Object[]) test2.get("data");
                    // change d Object to List
                    List ee = Arrays.asList(d);
                    // Grab Map from list
                    Map xx = (Map) ee.get(1);
                    Log.d("diditworkstring", String.valueOf(xx.get("ZipDownloadLink")));
                 catch (Exception ex) 
                // Any other exception
                    Log.d("diditworkexception", String.valueOf(ex));
                
            

        ;

【讨论】:

以上是关于OpenSubtitles API 响应的主要内容,如果未能解决你的问题,请参考以下文章

在代理后面使用 opensubtitles api Node.js/Python 包装器

Python:来自opensubtitles api的DownloadSubtitle方法返回空白数据

如何检查 Api 响应是不是存在

在 JavaScript 中拦截 fetch() API 请求和响应

将枚举名称和字符串值作为 api 响应返回

taobao.open.account.token.validate( open account token验证 )