ファイルハッシュを使用して字幕を取得するために 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");
どんな助けでも大歓迎です。うまく説明できていない場合はご容赦ください。そして否定しないでください。