Google 驱动器 API 识别文件的变化

Google Drive API to identify the changes in files

我有一份文件和文件夹列表存储在 google 驱动器文件夹中。我的 objective 用于识别与特定 google 驱动器文件夹中任何 file/folder 相关的任何更改(modify/create/delete),即获取这些文件名及其驱动器路径的列表。

我没有注册任何域,因为我们的 spring 启动应用程序部署在 K8 的 pod 上,我不希望在任何域或任何 webhook 地址上收到任何通知。当我调用下面的 method/api

时,我只希望文件列表为 modified/deleted

下面是 spring 引导应用程序的代码片段。

            @Component
            public class DriveServiceProvider {

                @Autowired
                private DriveConfig dc;

                public Drive getDriveService() throws IOException, GeneralSecurityException {
                    
                        final GoogleCredentials credentials = GoogleCredentials
                                .fromStream(new ByteArrayInputStream(new JSONObject(dc.getCred()).toString().getBytes()))
                                .createScoped(Collections.singletonList("https://www.googleapis.com/auth/drive"));
                        HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);
                        return new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), requestInitializer)
                                .setApplicationName(ApplicationConstants.APPLICATION_NAME).build();
                }
            }

控制器:

            @RestController
            @RequestMapping("/admin/watch")
            public class TestGoogleWatchController {

                @Autowired
                private DriveServiceProvider driveServiceProvider;

                @PostMapping(value = "/googleWatchNotification")
                @ResponseStatus(HttpStatus.OK)
                public Channel getNotification() throws IOException, GeneralSecurityException {
                    try {
                        StartPageToken pageToken = driveServiceProvider.getDriveService().changes().getStartPageToken().execute();

                        String savedStartPageToken = pageToken.getStartPageToken();
                        System.err.println(" savedStartPageToken "+savedStartPageToken );

                        while (savedStartPageToken != null) {
                            ChangeList changes = driveServiceProvider.getDriveService().changes().list(savedStartPageToken).execute();
                            System.err.println("======= changes " + changes.toPrettyString());
                            System.err.println("============ size ::" + changes.getChanges().size());
                            System.err.println("============ ChangeList ::" + changes.getChanges());

                            for (Change changeObj : changes.getChanges()) {
                                System.err.println(" files "+changeObj.getFileId() + " Kind "+changeObj.getKind() + ", Team Drive ID "+changeObj.getTeamDriveId() + ", Type::"+changeObj.getType()+ ",File ::"+changeObj.getFile()+ ", Is Removed::"+changeObj.getRemoved()+ ",Time ::"+changeObj.getTime());
                            }

                        }
                    }catch(Exception ex) {

                    }
                    return null;
                }
            }

*下面是执行后的输出:

保存的起始页面令牌 165

======= 更改 { “变化” : [ ], “种类”:“驱动器#changeList”, “newStartPageToken”:“165” }

============大小::0

============变更列表::[]*

在我们更改驱动器中的任何内容后,savedStartPageToken 正在打印递增的数值,但是 ChangeList 始终为空白。

很高兴我回答了我自己的问题。问题是我在 changeList api.

中传递了当前令牌

实际上,解决方案是使用循环查找从上一个标记到当前标记的变化。