热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python调用短信猫

python代码#-*-encoding:gbk-*-importsysimportlocaleimportstringimportmysql.connectorimporttrace

python代码

#-*- encoding: gbk -*-
import sys
import locale
import string
import mysql.connector
import traceback
import datetime
from mysql.connector import errorcode
from ctypes import *
import time

reload(sys);
sys.setdefaultencoding('gbk');

def getMailIndex():
file = open('messageindex.txt',"r");
lines = file.readlines();
file.close();
return time.strptime(lines[0], "%y-%m-%d %H:%M:%S");
#

def setMailIndex(timestr):
f = open('messageindex.txt', 'w');
f.write(timestr);
f.close();
#


#是否有新邮件
global hasNewMail;
hasNewMail=True;
#全局已读的邮件数量
global globalMailReaded;
globalMailReaded=getMailIndex();
#全局dll api
global api;
api = WinDLL('sms.dll');
array_type = c_char_p * 1
strType = array_type();
strCopyRight=array_type();
if (0==api.Sms_Connection("//上海迅赛信息技术有限公司,网址www.xunsai.com//",3,9600,strType,strCopyRight)):
print('connect to modem fail!');
exit(0);
#end if
print "connect to %s"%strType[0];
print strCopyRight[0];
#获取新短信
def getNewMessage():
try:
global hasNewMail;
global globalMailReaded;
global api;
messagelist=[];
if(hasNewMail):
print('read messageindex.txt')
globalMailReaded=getMailIndex();
#end if
#如果来了新短信就接收
array_type = c_char_p * 1;
ReceiveSmsStr = array_type();
result=api.Sms_Receive("4", ReceiveSmsStr);
strList=ReceiveSmsStr[0].split('|');
#最新的一个信息
message=strList[len(strList)-1];
myfields=message.split('#');
Sms_TelNum=myfields[2];
Sms_Text=myfields[3];
Sms_Time=time.strptime(myfields[4], "%y-%m-%d %H:%M:%S");
if(Sms_Time<=globalMailReaded):
hasNewMail=False;
return None;#没新短信,直接返回
#end if
print('get new message');
messagelist.append((Sms_TelNum,Sms_Text));
setMailIndex(myfields[4]);
hasNewMail=True;
return messagelist;
except:
print(traceback.format_exc());
print("search modem fail,try again");
return None;
finally:
pass;
#end try
#end def

#只要收到短信,就把这个事件记录在事件库中
#现在就是循环查询未看短信,如果有新短信就读取,并查询关键词库
while(True):
messagelist=getNewMessage();
if(messagelist==None):
time.sleep(5);
continue;
#end if
for messagetuple in messagelist:
article=messagetuple[1];
origin=messagetuple[0];

#end for
#end while


下面是我在开发过程中用到的短信猫的AT指令:

AT+CPMS?返回
+CPMS: "ME",1,25,"SM",1,50,"SM",1,50


AT+CNMI?返回
+CNMI: 1,1,0,2,1(我重新设置了,我这里的设置是把收到的短信存储在短息猫设备中,不存储在SIM中,此前短信猫把短信存在SIM卡里了,上面蓝色内容的就是sim卡中存储了1条短信,sim卡读写次数有限,很脆弱,所以我把短信存在ME中了,如果短信满了,就删除。我想工业级的短信猫ME应该经得起反复折腾。)


AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031


再向短信猫发短信:
AT+CPMS?返回
+CPMS: "ME",2,25,"SM",1,50,"SM",1,50
此时说明ME中有两条短信了,原先是1条


AT+CNMI?返回
+CNMI: 1,1,0,2,1


AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031
+CMGL: 2,1,,24
0891683108200005F0040D91683166607056F7000851400112754323045F3A7A3B

这就说明ME中确实存储了两条短信


我们再删除一条短信试试:
AT+CPMS?返回
+CPMS: "ME",1,25,"SM",1,50,"SM",1,50
这里确实少了一条短信
AT+CNMI?返回
+CNMI: 1,1,0,2,1
AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031

这里少了一条短信,说明这条短信确实是被删除了



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 在MFC框架中,存在多个全局函数,用于在不同对象间获取信息或创建新对象。其中,`afxGetApp`函数尤为关键,它能够帮助开发者轻松获取当前应用程序的实例指针。本文将详细解析`afxGetApp`函数的内部机制及其在MFC应用程序中的具体应用场景,探讨其在提升代码可维护性和灵活性方面的优势。此外,还将介绍其他常用全局函数如`AfxWinInit()`和`AfxBeginThread()`的功能和使用方法,为开发者提供全面的参考。 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
author-avatar
2364118915_86406b_479
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有