随着新的朋友应用登陆Ubuntu,我想到在时间线中添加对Instagram的支持将很酷。我也想尝试一下,但是我很难找到任何文档。
有没有描述每个协议所需内容的规范?认证是如何工作的?是否需要先向ubuntu-online-accounts添加支持,还是朋友们可以注册新的协议?
这是非常新的东西,它的名称很难通过谷歌搜索,所以任何指导方向的提示都将不胜感激。
随着新的朋友应用登陆Ubuntu,我想到在时间线中添加对Instagram的支持将很酷。我也想尝试一下,但是我很难找到任何文档。
有没有描述每个协议所需内容的规范?认证是如何工作的?是否需要先向ubuntu-online-accounts添加支持,还是朋友们可以注册新的协议?
这是非常新的东西,它的名称很难通过谷歌搜索,所以任何指导方向的提示都将不胜感激。
朋友们,作者在这里。
确实,正如你所怀疑的那样,在将支持添加到Friends之前,需要在Ubuntu在线账户中进行支持。Friends的架构非常依赖UOA,以便为我们执行所有的授权和管理所有的API密钥。我最喜欢的例子是LinkedIn,因为它是迄今为止唯一由社区贡献的协议。UOA插件主要只有两个XML文件,再加上一点autoconf的技巧,看起来就像这样。(向下滚动一点,可以清楚地显示出为使LinkedIn工作而需要添加的每一个细节)。
一旦你对自己的协议做了同样的事情,你需要提出合并请求,针对lp:account-plugins,并让Mardy进行审查、批准和合并。一旦完成这些步骤,你就可以开始编写Friends插件,该插件将使用Python 3编写。
现在,Friends相对于Gwibber的一个重大改进是引入了子类的使用。在原始的Gwibber代码中,几乎没有使用子类,因此每个新的协议插件都是一个庞大的复制粘贴工作,包含了各种低级功能的片段。在实现Friends时,我非常注意将通用功能提取到一个超类中,这样可以轻松地进行子类化和修改。超类还有很多文档字符串,在开始时您应该参考它们。不幸的是,我们还没有设置sphinx来发布这些文档,所以您现在只能阅读代码。instagram
,那么您应该创建文件protocols/instagram.py
,并将Python类命名为Instagram
。_whoami
和receive
。这些方法在base.py(上面链接)中都有详细说明,但基本上_whoami
方法将会自动调用,并传入一个代表已解析JSON块的字典,该块是在授权发生时由服务提供给我们的。如果你运气好,该字典将包含你的Instagram用户名、用户ID和显示名称,但如果没有,你需要在方法内进行第二次API调用来获取这些信息。请参考Facebook._whoami
,了解一个不提前提供信息并需要在方法内进行额外API调用的协议示例,以及请参考Twitter._whoami
,了解一个提供了我们所需详细信息的协议示例。receive
方法负责发起 API 调用以轮询服务获取新消息。这一部分稍微灵活一些,因为每个 REST API 略有不同,所以你应该参考网站的 API 文档以确定在这里需要做什么。在 http.py 中,我们提供了 Uploader
和 Downloader
类,使得调用 REST API 变得容易,并且甚至可以解析 JSON 服务器响应。使用这些方便的类非常重要,因为它们包装了 libsoup
,该库配置了遵守 GNOME 代理设置(也许你还记得 Gwibber 的代理支持曾经有多糟糕,现在我们已经修复了所有问题)。Base._publish
中提供了一个方便的方法。基本上,您只需在这里填写空白处,并确保尽可能多地填入尽可能多的列中的信息。_publish的可能参数在模式中定义,您可以参考现有插件来了解它们是如何实现的。感谢您对Friends的关注!