使用Web API的Python桌面程序

2 投票
1 回答
3219 浏览
提问于 2025-04-16 15:42

我有一个客户提出了一个很随机的请求,他们想要一个桌面程序,可以从一些网络API获取信息,比如Google Analytics、SEOMoz和其他类似的服务。然后,他们希望将这些结果的部分或全部存储在一个中心位置。他们明确表示不想要一个网页应用程序,但希望能够将数据存储在他们局域网中的一个“服务器”(也就是桌面客户端的服务器版本)上。这个程序应该能够在Windows上运行,如果能支持Linux和OS X那就更好了。

我有一些编程经验,对Python也有点了解,所以我在考虑用它来实现。我的问题是,我不太确定在局域网中客户端和服务器之间的通信,以及客户端和网络API之间的通信该怎么处理。

1) 这真的可行吗?如果可以的话,有哪些好的地方可以查找关于API集成和网络通信的资源/有没有好的例子?

2) 有什么建议或提示吗?比如需要注意的地方(例如常见错误、主要的安全问题)?

3) 有没有比我上面提到的更好的方法?

4) 数据库方面,有什么好的选择?我希望这个程序尽可能独立,尽量自给自足(依赖最少量的已安装软件)。

谢谢大家的任何建议!

1 个回答

3
  1. 没错,urllib、urllib2和urlparse是Python中用来读取和写入网址的核心库。我建议你使用PyQt作为图形界面框架(pyGTK、wxWidgets和tkinter也可以,它们在你提到的三个操作系统上都能正常运行)。PyQt包含了你所需的一切,不需要再去找其他库。它包括网络访问控制、用于网址解析和构建的QUrl,还有很多用于显示数据的图形界面工具。

  2. 没有什么特别的,除了在第4点中查看[1]。

  3. 关于PyQt可以参考第1点。但你最终要做的就是构建你想要访问的网址(包括所有的get/post参数),发送数据,监听数据,解析数据,然后存入数据库。客户端只需查询数据库,获取结果,过滤、排序和管理的工作都在图形界面代码中完成。QtDeclarative可能是一个不错的选择,可以让用户自己构建查询(虽然这个想法有,但还没实现),你也可以执行这些查询。

  4. 我建议使用Postgres、MySQL或任何数据库,无论是关系型的还是非关系型的(比如MongoDB,但别想PyQt现在支持它,不过你可以用任何Python库和PyQt很好地配合)。这样你就可以把数据存储在那儿,让客户端查询数据,并且可以在服务器上有一个客户端,具备额外的功能来查询网站并插入数据。不过,这可能更适合做成一个命令行工具,获取数据并插入数据库(这样你可以在定时任务中运行它)。

你只需要开发客户端代码和数据库结构。[1] 记住,数据库可以有多个客户端,用户可以直接连接到数据库服务器。唯一需要注意的是配置服务器只在局域网内监听以接收客户端,并且用户权限设置正确。这和将网页应用连接到数据库在形式上只是有些不同。你只是给更多的用户和客户端提供了访问权限。

你最大的挑战应该是如何应对图形界面编程的繁琐性 :P

撰写回答