利用cliofetion和python实现一次登录发多条飞信
飞信的命令行程序cliofetion每次登录之后只能发一条短信,这里 有对它的简单改进,大致原理是登录成功之后,周期性的扫描一个文件,将文件的内容作为飞信信息发送。而我主要在python程序中使用飞信,将利用python的ctypes实现类似的功能。Ctypes可以很方便的调用动态连接库(Win下的dll或者*nix下的so文件)中的函数,并且能创建、访问和操作各种C数据类型。
观察cliofetion.c源程序的main函数,一次飞信发送的过程是这样的。先调用fx_login函数登录,然后调用send_message函数发送信息,最后调用fetion_user_free函数释放分配的资源,完成类似注销的功能。因为登录和发信息这两个功能已经有独立的函数了,只需要为注销也提供一个独立的函数。
void fx_logout(void){
	fetion_user_free(user);
}
将cliofetion.c编译为动态链接库
gcc --shared -fpic `pkg-config --cflags ofetion` cliofetion.c -o cliofetion.so -l ofetion
大功告成,然后通过ctypes就可以调用登陆、发信息和注销的API了
import ctypes
# 载入so文件
fetion = ctypes.CDLL('./cliofetion.so')
# 设置send_message的参数类型,这一步可选,基本类型无需设置也可以正常工作
fetion.send_message.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p]
# 设置send_message的返回值类型,同样也是可选的
fetion.send_message.restype = ctypes.c_int
fetion.fx_login.argtypes = [ctypes.c_char_p, ctypes.c_char_p]
fetion.fx_login.restype = ctypes.c_int
fetion.fx_login(fromno, password)
for message in messages:
    fetion.send_message(fromno, tono, message)
fetion.fx_logout()
本来打算用ctypes对libofetion进行简单的封装,直接在python中调用libofetion.so的API,但是后来发现openfetion使用了openssl库,其中而SSL的定义涉及了条件编译,不知道这样的struct该如何映射到ctypes中的Structure结构,所以只能暂时作罢。如果此路不通的话就研究一下python扩展好了。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号