微博关机的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

posted on 2013-09-15 21:00  奥特曼  阅读(280)  评论(0编辑  收藏  举报

导航