Skype API的Python包装器。
项目描述
简介
Skype4Py 是一个Python库,允许您控制Skype客户端应用程序。
它在Windows、OSX和Linux平台上与Python 2.x版本一起工作。
社区
在Github上的支持和问题。Skype4Py不是Skype™,也不与微软或Skype相关。对于问题,您也可以使用 带有skype4py标签的stackoverflow.com。请不要前往 developer.skype.com 寻求支持。
原作者: Arkadiusz Wahlig
维护者: Mikko Ohtamaa
使用方法
您所需的一切都可以在 Skype4Py 软件包中以别名形式使用。使用标准的 import 语句导入它
import Skype4Py
使用 from Skype4Py import * 将整个软件包导入到脚本命名空间中通常是不推荐的。您也不应直接访问软件包中的模块,因为它们被视为实现细节,并且可能会在未来版本中未经通知而更改。
该软件包提供以下功能
类
Skype4Py.Skype,是 Skype4Py.skype.Skype 的别名
Skype4Py.CallChannelManager,是 Skype4Py.callchannel.CallChannelManager 的别名
常量
来自 Skype4Py.enums 模块的所有内容。
platform,取决于当前平台(Windows、Linux、Mac OS X),可以是'windows'、'posix'或'darwin'。
错误
Skype4Py.SkypeError,是 Skype4Py.errors.SkypeError 的别名
Skype4Py.SkypeAPIError,是 Skype4Py.errors.SkypeAPIError 的别名
由 Skype4Py 包公开的两个类是唯一可以直接实例化的。它们反过来提供了实例化其他类的手段。它们也是唯一提供事件处理程序的类(有关事件及其使用方法的信息,请参阅 EventHandlingBase 类)。
每个 Skype4Py 脚本至少都会实例化 Skype4Py.Skype 类,它提供了访问当前系统中运行的 Skype 客户端的权限。参考 Skype4Py.skype.Skype 了解您可以用它做什么。
注意! 在阅读本文档时,请注意,所有需要的内容都在顶层包级别,因为文档引用的对象实际上就在这些地方。
快速示例
以下是一个简短的示例,该示例连接到 Skype 客户端并打印用户的完整姓名以及联系人列表中所有联系人的姓名
import Skype4Py # Create an instance of the Skype class. skype = Skype4Py.Skype() # Connect the Skype object to the Skype client. skype.Attach() # Obtain some information from the client and print it out. print 'Your full name:', skype.CurrentUser.FullName print 'Your contacts:' for user in skype.Friends: print ' ', user.FullName
关于命名约定的说明
Skype4Py 使用两种不同的命名约定。第一种适用于从 Skype4COM 衍生的接口,Skype4COM 是 Skype4Py 的灵感来源之一。这种约定使用 CapCase 方案为类名、属性、方法及其参数命名。常量使用 mixedCase 方案。
第二种命名约定更“Pythonic”,并且被包的所有其他部分以及内部对象使用。它主要使用相同的 CapCase 方案为类名(包括异常名称)命名,略有区别。第一个约定会使用 SkypeApiError 名称,而第二个约定使用 SkypeAPIError。其他名称(包括属性、方法、参数、变量和模块名称)使用小写字母和下划线。
使用Skype4Py的项目
故障排除
段错误
如果您在 OS X 上遇到段错误,请确保您正在使用 32 位 Python。
相关的 gdb 转储
Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x0000000001243b68 0x00007fff8c12d878 in CFRetain () (gdb) bt #0 0x00007fff8c12d878 in CFRetain () #1 0x00000001007e07ec in ffi_call_unix64 () #2 0x00007fff5fbfbb50 in ?? () (gdb) c Continuing. Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x0000000001243b68 0x00007fff8c12d878 in CFRetain ()
Skype4Py在OSX 64位(所有新的OSX版本)上
目前,Skype4Py 必须使用 arch 命令安装和运行,以强制与 32 位 Skype 客户端应用程序兼容。
要安装
arch -i386 pip install Skype4Py
当您使用 Skype4Py 运行应用程序时,请在运行命令前加上
arch -i386
在Ubuntu服务器启动时崩溃
在启动机器人时出现段错误
File "build/bdist.linux-i686/egg/Skype4Py/skype.py", line 250, in __init__ File "build/bdist.linux-i686/egg/Skype4Py/api/posix.py", line 40, in SkypeAPI File "build/bdist.linux-i686/egg/Skype4Py/api/posix_x11.py", line 254, in __in it__ Skype4Py.errors.SkypeAPIError: Could not open XDisplay Segmentation fault (core dumped)
这通常意味着您的 DISPLAY 环境变量不正确。
尝试
export DISPLAY=:1
或
export DISPLAY=:0
根据您的配置,在运行 Sevabot 之前。
运行单元测试
以下是一个示例
virtualenv-2.7 venv # Create venv source venv/bin/activate python setup.py develop # Install Skype4Py in development mode cd unittests python skype4pytest.py # Execute tests
制作发行版
示例
virtualenv-2.7 venv # Create venv source venv/bin/activate # Bump version in setup.py python setup.py develop # Install Skype4Py in development mode pip install collective.checkdocs pthon setup.py checkdocs # Check .rst syntax easy_install zest.releaser fullrelease
商标通知
Skype™、相关商标和徽标以及“S”徽标是 Skype 的商标。Skype4Py Python 项目不是 Skype 或微软公司的关联方。
变更日志
1.0.35 (2013-05-25)
修复了 Issue #16 [prajna-pranab]
Skype API 通常通过回显命令来响应 ALTER 命令,包括任何与命令关联的 id,例如。
-> ALTER VOICEMAIL <id> action <- ALTER VOICEMAIL <id> action
由于某种原因,API 在响应时从 ALTER CHAT 命令中删除了聊天 id,但 chat.py 中 _Alter() 方法中的代码期望命令被回显回送,就像它发送的那样。
更新了 Windows 下 Skype 版本 5 及更高版本的 Skype 主窗口类名,以检测 Skype 是否正在运行 [suurjaak]
1.0.34 (2013-01-30)
重构了发布系统和 egg 结构,以遵循最佳实践 [miohtama]
已合并分支 https://github.com/stigkj/Skype4Py 中的所有已完成的固定问题 [miohtama]
使用标准的 pkg_distribution 机制来公开版本号 [miohtama]
Skype4Py.platform
轻松检测 Skype4Py 当前正在使用的平台代码。可能是“posix”、“windows”或“darwin”之一。
DBus 现在是默认的 Linux (posix) 平台
DBus 和 X11 传输都已改进,以便在 GUI 环境中更好地工作。这表明,如果将 X11 传输与 PyGTK GUI 框架以及可能的其他类似库结合使用,则必须执行特殊的初始化代码。另一方面,DBus 传输只需要启用单个选项。DBus 是一种较新的技术,旨在取代像 X11 消息这样的旧 IPC 技术,这迫使我将其设为默认传输。
DBus 传输和 Mac OS X (darwin) 平台上的 RunMainLoop 选项
修复了 CHANGES 语法,使其 zest.releaser 可以理解它 [miohtama]
1.0.33 (2013-01-30)
已被移除,并替换为单个“RunMainLoop”选项。该选项已添加到 Mac OS X 平台传输中。
默认值(如果未指定选项)为 True,这意味着传输将在单独的线程上运行事件循环,以便能够接收并处理来自 Skype 的消息(这些消息会导致 Skype4Py 事件处理器被触发)。
如果事件循环将在其他地方运行,则必须将此选项设置为 False - 主要示例是使用事件循环来处理用户界面消息的 GUI 应用程序。
尝试运行两个循环(一个由 GUI 框架运行,另一个由 Skype4Py 运行)会导致许多问题和意外行为。当设置为 False 时,此选项将告诉 Skype4Py 重新使用已运行的循环。
请注意,如果没有其他循环正在运行并且此选项为 False,则 Skype4Py 将继续运行(可以发送命令到 Skype,并返回回复)但它不会收到来自客户端的通知,并且相应的事件永远不会被触发。
公共部分的单元测试
为 Skype4Py 代码共享的所有平台和传输的部分编写了单元测试。这大约是代码库的 80%,包括所有类以及将对象方法/属性调用转换为 Skype API 命令的代码。
调用和语音邮件设备方法正确支持同时设备
调用和语音邮件对象的 CaptureMicDevice()、InputDevice() 和 OutputDevice() 方法三组支持同时启用多个设备。以前,启用一个设备会禁用所有其他设备。
集合
Skype4COM 所使用的几乎所有集合类型现在都由 Skype4Py 支持。集合类型最初被跳过,因为 Python 提供了一套全面的容器类型。然而,由于大多数对象都表示为句柄或 ID,因此创建一个仅包含句柄的定制容器类型并在访问时动态创建对象非常有意义。这是引入集合类型的主要原因。它们还支持 Skype4COM 世界中对应者的方法。
代码清理和命名约定
整个代码库已进行审查和清理。已定义并实施了所有对象(模块、类等)的命名约定。它仍然是一个混合的约定(应用于不同对象的不同约定),但至少现在有一个标准。
字符串类型策略
Skype4Py 现在仅在需要时返回 unicode。例如,Skypenames 现在是普通字符串,而聊天消息(它们的正文)仍然是 unicode。
此外,如果 Skype4Py 期望用户从用户那里获取 unicode 字符串,但传递了普通字符串,则它尝试使用 UTF-8 编码器对其进行解码(与之前使用的 ASCII 编码器相反)。