微博关机的MATLAB实现
差不多半个月前,在网上看到一篇文章,介绍了如何用MATLAB实现发一条微博来关机的功能。仔细一点说来,就是要实现这样一个功能:只要我的MATLAB的这个M文件正在运行,那么当我在自己微博上发布“关机”命令的时候,电脑便会关机。看了人家的思路之后,不由得赞叹他人的创意。下面我先把这段代码贴出来:
cmd="关机"; counter=0; r=[]; %登入微博后,在 http://app.weibo.com/tool/weiboshow 页面最下方找到src链接 src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2022255405&verifier=f0469716&dpc=1'; while 1 try s=urlread(src); r=regexp(s,cmd,'match'); catch disp('网络连接问题'); end if ~isempty(r) disp('呵呵!!!!!收到待机指令'); %%关机 !shutdown -s -t 0 break; else clc counter=counter+1; disp(['没有收到关闭指令+' num2str(counter)]); end pause(5); end
分析这段代码,我们可以很容易地知道作者的思路:
在运行M文件之后,程序便不断查询src这个字符串所代表的页面,将其上的HTML作为字符串传到s变量里面,然后我们利用regexp函数查看这段HTML代码里面有没有我们预定好的“关机指令”,也就是cmd所代表的字符串。如果有的话,调用DOS命令进行关机,如果没有就返回继续读取页面内容。可以说,思路是很简单的。
但是如果真的使用的时候,问题不可避免的来了。那就是如果我先前发送过“关机”指令,那么“关机”这两个字就会存在src页面HTML中,所以这段程序“只能用一次”。。。为了解决这个问题,我们只好在运行程序前,先删除自己微博中原来所有带有“关机”字眼的微博,这显然是不好的,所以我想到是不是可以给它加上关机时间的限制呢?
就像下面这样来实现关机:
这样做我们只需要给代码很小的改动,只需要添加判别“关机指令”是否为合法的格式,关机指令后的“时间”是否为未来的某一时间即可。到了这个时间,我们再调用DOS命令进行关机操作。所以,我补充了下面的代码:
cmd='关机'; counter=0; r=[]; %登入微博后,在 http://app.weibo.com/tool/weiboshow 页面最下方找到src链接 %src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550& %fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2022255405&verifier=f0469716&dpc=1'; src='http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=550&fansRow=2&ptype=1&speed=0&skin=1&isTitle=1&noborder=1&isWeibo=1&isFans=1&uid=2629935075&verifier=5970ebca&dpc=1'; while 1 try s=urlread(src); s r=regexp(s,cmd,'match'); catch disp('网络连接问题'); end if ~isempty(r) [startIndex,endIndex]=regexp(s,cmd); nowdate=datestr(now,26); nowhourmin=datestr(now,15); time=s(endIndex+1:endIndex+16); time nowhourmin date=time(1:10); hourmin=time(12:16); if strcmp(date,nowdate)&&strcmp(hourmin,nowhourmin) disp('呵呵!!!!!收到待机指令'); save; !shutdown -s -t 0 break; else counter=counter+1; disp(['时间不对+' num2str(counter)]); end %%关机 !shutdown -s -t 0 else counter=counter+1; disp(['没有收到关闭指令+' num2str(counter)]); end pause(0.5); end
这样就可以在给定的时间关闭计算机了~~~不过使用时候要注意指令格式一定要正确:关机2013/09/12 09:34