1

ファイルハッシュを使用して字幕を取得するために www.opensubtitles.org API を使用しています。さて、私の問題は、その特定のファイルで利用可能なすべての字幕を返すことです。

例: 字幕をダウンロードするファイルを 1 つ選択すると、この結果が得られます。

http://i.stack.imgur.com/m2tZM.png

全体の結果はこちら: http://privatepaste.com/download/22bb756930

それらの唯一の違いは、字幕 ID と字幕ダウンロード リンクだけで、残りはすべて同じです。

今私の問題は、この結果が 1 つのファイルに対してのみであるということですが、複数のファイルを使用するため、最初の最も多くの結果を取得して使用することはできません。

結果を取得するコードを以下に示します

    Map<?, ?> result = (Map<?, ?>) rpcClient.execute("SearchSubtitles", params);
    Object[] data = (Object[]) result.get("data");
    Map<?, ?>[] results = new Map<?, ?>[data.length];
    int i = 0;
    for (Object element : data) {
        results[i] = (Map<?, ?>) element; //storing it in map
        i++;
    }

ここで私が望むのは、たとえば 12 個のファイルを選択すると、上記の場合では 3 つではなく、それぞれに 1 つの結果のみが保存されるようにすることです。

私はそれを機能させましたが、私のコードは明らかに良くありません。これを午前 3 時に書き、5 分かかりました。私の唯一の目標は、それを機能させることでした。

    Map<?, ?> result = (Map<?, ?>) rpcClient.execute("SearchSubtitles", params);
    Object[] data = (Object[]) result.get("data");
    Map<?, ?>[] results = new Map<?, ?>[data.length];
    int i = 0;
    for (Object element : data) {
        System.out.println(element);
        results[i] = (Map<?, ?>) element;
        i++;
    }
    List<String> idmbIDs = new ArrayList<String>();
    for (Map<?, ?> map : results) {
        String string = (String) map.get("IDMovieImdb");
        if (!idmbIDs.contains(string))
            idmbIDs.add(string); //stores distinct idmb ids.
    }
    List<String> removedIDMBids = new ArrayList<String>();
    for (String store : idmbIDs) {
        for (Map<?, ?> map : results) {
            if (store.contains((String) map.get("IDMovieImdb")) && !removedIDMBids.contains(store)) {
                removedIDMBids.add(store);
                fileDetails.add(map);
            }
        }
    }
    for (Map<?, ?> realResult : fileDetails) {
        System.out.println(realResult); <- this does what I want
    }

このようなことを行うためのより良い方法が欲しいです。を使用して、最もダウンロードされた字幕を取得できれば素晴らしいと思います(map.get("SubDownloadsCnt");

どんな助けでも大歓迎です。うまく説明できていない場合はご容赦ください。そして否定しないでください。

4

1 に答える 1