Linux上skype的API使用
(1) 在linux系统下利用skype的API可以通过D-BUS或者x11-messaging。
(2) 为了减小非D-BUS开发的程序的运行效率,D-BUS的缺省状态是关闭的,在早期版本的API中,启动skype时需要添加以下选项: --enable-dbus –use-system-dbus,其中第二个选项是必须的。
(3) 在/etc/dbus-1/system.d下添加配置文件skype.conf,内容:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//
DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy context="default">
<allow own="com.Skype.API"/>
<allow send_destination="com.Skype.API"/>
<allow receive_sender="com.Skype.API"/>
<allow send_path="/com/Skype"/>
</policy>
</busconfig>
(4) 根据上面提供的参数编写程序,并编译运行。
(5) 开始通过程序来控制Skype:
输入:NAME <应用程序名> ->Skype端弹出对话框,提示是否连接,点击“是”
返回:OK
输入:PROTOCOL 7
返回:PROTOCOL 7
输入:根据Skype API说明文档中的命令来控制Skype
例:呼叫 CALL ***
挂断电话 SET CALL <ID> FINISHED
接听电话 SET CALL <ID> INPROGRESS
(6) 使用API过程中D-BUS的相关参数:
服务为:com.Skype.API
传输路径:client-to-Skype /com/Skype
Skype-to-client /com/Skype/Client
方法调用:用Invoke方法向Skype方发命令
用Notify方法Skype向应用程序发回消息
D-BUS的缺省状态为关闭。
2.程序中主要函数:
conn = dbus_bus_get(DBUS_BUS_SESSION, &err) 在D-BUS上创建一个连接
ret=dbus_bus_request_name(conn,"com.litao.controlskype",DBUS_NAME_FLAG_REPLACE_EXISTING, &err) 在D-BUS上申请一个连接名
msg=dbus_message_new_method_call("com.Skype.API", "/com/Skype", NULL, "Invoke"); 创建一个方法调用
dbus_message_iter_init_append(msg, &args); 向消息中添加参数(命令)
dbus_connection_flush(conn); 连接
dbus_pending_call_block(pending); 程序阻塞直到有消息返回
msg = dbus_pending_call_steal_reply(pending); 提取返回的消息
dbus_message_get_args(msg,0,DBUS_TYPE_STRING,&ack,DBUS_TYPE_
INVALID) 从返回消息中提取返回字符串
参考: