使用我的应用程序控制Dropbox,Google Drive和/或SugarSync。

时间:2013-01-06 13:54:40

标签: c++ python sdk dropbox

如何控制我想让程序暂停并同步一个程序的实例,这样它们就不会相互干扰,但如何暂停,恢复或检查状态。

我浏览了dropbox api,看起来你主要做的就是上传,下载等等但是我怎样才能真正控制dropbox实例或让程序自己同步呢?

我可以用Python或C ++做到这一点

1 个答案:

答案 0 :(得分:2)

Dropbox API是您与自己的客户端交互服务的方式,而不是您自动化他们的桌面客户端应用程序的方式(集成到Finder /中的东西)浏览器/等)。

编写自己的客户端来替换他们的客户端,或者甚至编写一个与他们共存的客户端(你将他们的永久设置为“暂停同步”)并不是不可能的,而你的客户端只会处理同步事情的一面......虽然每当本地商店发生变化时你都会失去自动触发同步的好处,而是必须轮询更改或设置并行文件系统监视)。由于API是围绕Web服务构建的,因此C ++对于该语言来说是一个非常糟糕的选择,特别是因为有预先构建的Python包装器。

但无论如何,我很确定这不是你想做的。你想要的只是控制普通桌面客户端,并告诉它何时暂停或恢复同步,对吧?

Web API(以及包装它的SDK)无法帮助您。您必须使用适用于您平台的相应工具自动化客户端应用程序。而且,由于客户端没有自动化控制界面,您必须通过自动化GUI来实现。

Mac OS X有一个高级方法可以通过系统事件UI脚本执行此操作,您可以通过ScriptingBridgeappscript或C ++通过Python访问它...嗯,只是不要。通过手动合成WM_*消息,Windows可以通过pywin32或通过本机Win32 API从C ++中完成,从而只有较低级别的方法来执行此操作。

然而,不管怎样,这将是一个痛苦。例如,最简单的Python appscript解决方案可能看起来像这样(未经测试):

sysev = appscript.app('System Events')
dropbox = sysev.application_processes['Dropbox']
menu = dropbox.menu_bars[1].menu_bar_items[-1].menus[1]
item = menu.items['Pause Syncing']
item.click()

Windows等价物甚至更加混乱,包括发送WM_*消息以获取菜单,拆分结构等。

使用更高级别的GUI自动化工具要容易得多。 Mac OS X内置Automator。创建工作流程,单击Record,下拉Dropbox菜单,单击“Pause Syncing”项,单击Stop,然后就完成了。 Actions可能是Windows上最相似的工具,但还有许多其他选项,例如AutoIt,可能会更好。

因此,创建Automator操作或AutoIt脚本后,如何触发,而不是Python或C ++?好吧,你可能不需要。你已经有了可以双击或从shell运行的东西。如果你想用Python包装它,你可以,例如,通过subprocess模块(在Mac上使用open命令,在Windows上使用shell=True

与此同时,请记住,OS X和Windows的现代版本不会让应用程序无所畏惧地相互控制。在OS X上,您必须在“系统偏好设置”的“辅助功能”面板中“启用对辅助设备的访问”;在Windows上......它随着每个新版本的变化而变化,而且我没有跟上。