and*_*ing 19 application-development online-accounts
随着新的朋友应用程序登陆 Ubuntu,我突然想到在时间线中添加对 Instagram 的支持会很酷。我还以为我自己可能会尝试一下,但是我很难找到任何文档。
是否有描述每个协议需要什么的规范?身份验证如何工作?是否需要先将支持添加到 ubuntu-online-accounts 或者有没有办法让朋友注册新协议?
它是非常新的,而且 Google 的名字很难,所以任何指向正确方向的指针都将不胜感激。
rob*_*bru 34
朋友作者在这里。
确实,正如您所怀疑的那样,在将支持添加到 Friends 之前,需要在 Ubuntu Online Accounts 中获得支持。Friends 架构在很大程度上依赖于 UOA,以便为我们完成所有授权和管理所有 API 密钥。我最喜欢的例子是 LinkedIn,因为它是迄今为止社区贡献的唯一协议。UOA 插件大多只是两个 XML 文件,加上一点 autoconf 技巧,看起来像这样。(向下滚动一点查看差异,它清楚地显示了为使 LinkedIn 工作而需要添加的每一件事)。
对协议完成相同操作后,您需要针对 lp:account-plugins 提出合并建议,并让 Mardy 审查、批准和合并它们。一旦到位,您就可以开始编写朋友插件,该插件将使用 Python 3 编写。
现在,Friends 对 Gwibber 引入的主要改进之一是子类的使用。在最初的 Gwibber 代码中,子类完全没有做任何事情,所以每个新的协议插件都是各种低级功能的巨大复制和粘贴黑客工作。在实现 Friends 时,我非常小心地将通用功能提取到一个超类中,该超类可以轻松地进行子类化和修改。超类也有相当多的文档字符串,你应该在开始时参考。不幸的是,我们还没有设置 sphinx 来在任何地方发布它们,所以你现在只需要阅读代码。
需要记住的一些重要事项是您的类名必须与使用的“providername”相匹配,不区分大小写。因此,如果您将 providername 定义为instagram,那么您应该创建该文件protocols/instagram.py,并命名您的 Python 类Instagram。
为了让插件真正执行任何操作,您绝对必须实现的两个最重要的方法是_whoami和receive。这些在 base.py 中有详细记录(上面链接),但基本上该_whoami方法将被自动调用,并传入一个 dict,该 dict 代表一个已经解析的 JSON blob,该 blob 在身份验证发生时由服务提供给我们。如果幸运的话,该 dict 将包含您的 Instagram 用户名、用户 ID 和显示名称,但如果不是,您将需要进行辅助 API 调用以收集该信息。请参阅Facebook._whoami未预先提供信息并需要从方法内进行额外 API 调用的协议示例,并参阅Twitter._whoami 例如一个协议,它为我们提供了我们需要的所有细节。
之后,该receive方法负责进行 API 调用以轮询服务以获取新消息。这个更自由一点,因为每个 REST API 都略有不同,所以你应该参考网站的 API 文档,以确定这里到底需要做什么。在http.py我们提供Uploader和Downloader类,可以很容易地使REST API调用,并且甚至可以通过分析JSON服务器响应。使用这些便利类很重要,因为它们 wrap libsoup,它被配置为尊重 GNOME 代理设置(您可能还记得 Gwibber 的代理支持一直是多么糟糕,我们现在已经修复了所有这些)。
从服务器获得 API 响应后,您需要将其存储在我们的 DeeModel 中(其中 Gwibber 使用转储到 sqlite db 的 JSON blob 来存储您的消息,我们使用的是 DeeModel,它基本上只是一个数据库跨 DBus 共享状态,使多个客户端可以轻松地轻松显示消息数据)。我们将存储新消息的行为称为“发布”,并在 处为它提供了一个方便的方法Base._publish。基本上,您所要做的就是填写此处的空白,确保将尽可能多的信息填入尽可能多的列中。_publish 的可能参数在 schema 中定义,您可以再次参考现有插件以查看它们是如何执行的。
一旦你做到了这一点,你应该有足够的能力来测试它。我们在tools目录中提供了一些工具,以便在源代码树中轻松运行您的代码,因此您不必每次要进行更改时都将其安装到系统中。你应该做的是打开一个终端,cd 到源代码树的根目录,然后运行./tools/debug_slave.py. 它所做的是连接到 DeeModel,并只显示发生在它身上的所有事情,因此您可以看到消息在它们进来时实时显示。然后,在第二个终端中,再次 cd 到源树的根目录,然后运行./tools/debug_live.py instagram receive并这将手动触发 Instagram.receive 方法并显示一堆调试输出来告诉你它运行时发生了什么(你可以在代码中调用log.debug("hi") 如果您想查看有关所发生情况的更多详细信息)。
哦,如果你还在阅读,linkedin插件还没有登陆trunk,但你仍然可以在这里看看。
如果您有任何其他问题,我总是在 freenode 上的 #gwibber,而且我非常强烈地感到新的代码库比 Gwibber 曾经拥有的任何代码库都更具可读性和更好的文档记录,所以请阅读那里的代码,它应该'通过实例学习太难了。Facebook 和 Twitter 是最完整的。
感谢您对好友的关注!
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |