2

私はちょうどGoogle Drive APIに取り組んでいます。1 つ問題があります。速度が遅すぎます。ドキュメントのような方法を使用します。例えば:

List<File> getFilesByParrentId(String Id, Drive service) throws IOException {

    Children.List request = service.children().list(Id);
    ChildList children = request.execute();

    List<ChildReference> childList = children.getItems();
    File file;

    List<File> files = new ArrayList<File>();
    for (ChildReference child : childList) {
        file = getFilebyId(child.getId(), service);

        if (file == null) {
            continue;
        } else if (file.getMimeType().equals(FOLDER_IDENTIFIER)) {
            System.out.println(file.getTitle() + " AND "
                    + file.getMimeType());
            files.add(file);
        }
    }

    return files;
}

private File getFilebyId(String fileId, Drive service) throws IOException {
    File file = service.files().get(fileId).execute();
    if (file.getExplicitlyTrashed() == null) {
        return file;
    }
    return null;
}

質問: この方法は機能しますが、遅すぎて 30 秒ほどかかります。

これを最適化するにはどうすればよいですか?たとえば、すべてのファイルを取得しないようにします (フォルダーのみ、またはファイルのみ)。またはそのようなもの。

4

2 に答える 2

6

qパラメータと次のようなものを使用できます。

service.files().list().setQ(mimeType != 'application/vnd.google-apps.folder and 'Id' in parents and trashed=false").execute();

これにより、フォルダーではなく、ゴミ箱に入れられておらず、親が ID Id を持つすべてのファイルが取得されます。1 つの要求ですべて。

ところで、API は遅くありません。あまりにも多くのリクエストを行うあなたのアルゴリズムは.

于 2013-10-03T12:41:27.593 に答える
-1
public   void getAllFiles(String id, Drive service) throws IOException{

    String query="'"+id + "'"+ " in parents and trashed=false and mimeType!='application/vnd.google-apps.folder'";
    FileList files = service.files().list().setQ(query).execute();

    List<File> result = new ArrayList<File>();
    Files.List request = service.files().list();

    do {
        result.addAll(files.getItems());
        request.setPageToken(files.getNextPageToken());
    } while (request.getPageToken() != null && request.getPageToken().length() > 0);

}
于 2013-10-04T07:07:37.323 に答える