`

【原创】手机通过微博远程控制电脑

    博客分类:
  • java
阅读更多
现在微博用户越来越多啦,今天晚上看了一下新浪微博的开放API,写了一个小程序玩玩,主要是想通过手机发微博信息,反正现在大家都有流量包月,然后电脑的程序不断的获取微博列表,然后根据微博的内容进行相应的操作。如果俺的的手机是智能机,就直接写个客户端了。

要想获取微博的内容,就需要先登录。身份认证一般就分为两种1、传统的用户名密码方式,2、使用开放授权OAuth 模式。
用户名密码的方式是比较简单的,但是缺点也显而易见,就是需要告诉第三方应用程序你的用户名和密码。这样安全性就降低了。因此OAuth 认证方式应运而生。
OAuth 就相对安全多了,第三方应用程序不会获得你的用户名和密码信息,只需你对其进行授权,授权通过返后回给第三方App一个标识(token),app拿到这个token以后会到服务商那里换取一个Access Token (访问标识),这个其实就是相当于我们用户名和密码(但是不是),在以后的操作过程中,遇到需要身份认证的地方,App 就通过这个Access Token 进行身份认证。记得以前安装人人网的第三方应用的时候会有个授权的过程,现在明白了,原来是OAuth 方式获得我个人信息的授权。


下面的代码只是实现了简单的内容,基于新浪微博JAVA SDK。

/**
 * 通过新浪微博信息对电脑进行相关的操作(关机,重启,打开部分应用程序如QQ,音乐播放软件等)
 * @author mayonghua
 *
 */
public class ComputerOperation implements Runnable{

	private  String[] userInfo = {"username","password"};
	private String dateString = "";
	
	public String start() throws Exception{
//		设置应用的ID和对该ID的签名,每个应用都有个唯一的Id,该ID和签名会在应用程序注册的时候由新浪的认证中心自动生成
		System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
    	System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);
//		登录成功会返回该用户的相关信息
		User user = getWeibo(false,userInfo).verifyCredentials();
//		获得该用户最新发表的微博
		Status status = getWeiboStatus(user);
		System.out.println(status.getText());
		if(status==null){
			System.out.println("没有微博信息,请先发布微博……");
			return "";
		}
//		从本地文件读取最后一条微博的发布时间
		String createTime = readWeiboCreateTime();
//		如果createTime和刚刚获得的最新微博的时间不相等,就说明该微博是最新发布的,不是以前的,所以可以进行相关的操作
		if(dateComparison(createTime,status.getCreatedAt())){
//		首先将该微博的发布时间更新到本地文件
			saveWeiboCreateTime(status);
//		执行相关的操作
			execWeiboTask(status);
		}else {
			System.out.println("正在巡视,没有发现新指令…………");
		}
		return "";
	}
	
	/**
	 * 判断两个日期大小
	 * @param oldDate
	 * @param newDate
	 * @return
	 */
	public boolean dateComparison(String oldDate,Date newDate){
		System.out.println("系统正在比较两个日期大小");
		boolean flag = false;
//		如果为空说明是程序初始化
		if(oldDate==""){
			return true;
		}
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
		String date = sdf.format(newDate);
		if(Double.parseDouble(oldDate)<Double.parseDouble(date)){
			flag = true;
		}
		return flag;
	}

	/**
	 * 执行相应的微博任务
	 * @param status
	 * @return
	 */
	public  String execWeiboTask(Status status) throws Exception{
			String stat= status.getText();
			System.out.println("发现新指令,正在进行执行初始化");
			if("关机".equals(stat)){
				System.out.println("系统正在进行【"+stat+"】任务");
				ComputerUtils.shutdown();
			}else if("重启".equals(stat)){
				System.out.println("系统正在进行【"+stat+"】任务");
				ComputerUtils.restart();
			}else if("上QQ".equals(stat)){
				System.out.println("系统正在进行【"+stat+"】任务");
				ComputerUtils.startApp(ComputerUtils.QQ);
			}else if("听音乐".equals(stat)){
				System.out.println("系统正在进行【"+stat+"】任务");
				ComputerUtils.startApp(ComputerUtils.TTPLAYER);
			}else if("关闭QQ".equals(stat)){
				System.out.println("系统正在进行【"+stat+"】任务");
				ComputerUtils.stopApp(ComputerUtils.killQQ);
			}else {
				System.out.println("错误指令,不进行任何操作……");
			}
		return "";
	}
	
	/**
	 * 从本地读取最近一条微博的创建时间
	 * @return
	 */
	public String readWeiboCreateTime() throws Exception{
		System.out.println("正在读取本地文件……");
//		读取本地保存的最新一条微博信息的发表时间
		File file = new File("c:/weibo.txt");
		if(!file.exists()){
			file.createNewFile();
		}
		BufferedReader br = new BufferedReader(new FileReader(file));
		dateString = br.readLine();
		return dateString == null ? "" : dateString;
	}
	
	/**
	 * 将新的微博信息发布的时间更新到本地文件
	 */
	public void saveWeiboCreateTime(Status status) throws Exception{
		File file = new File("c:/weibo.txt");
		BufferedWriter bw = new BufferedWriter(new FileWriter(file));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
		String date = sdf.format(status.getCreatedAt());
		bw.write(date, 0,date.length());
		bw.close();
		System.out.println("正在更新本地文件……");
	}
	
	
	/**
	 * 获得用户的微博列表
	 * @param user
	 * @return
	 * @throws Exception
	 */
	public  Status getWeiboStatus(User user) throws Exception{
		
//  	返回用户的微博列表,Paging的两个参数为:第几页,每次取几条数据
		List<Status> statuses = getWeibo(false,userInfo).getUserTimeline(user.getId()+"",new Paging(1,1));
//		返回的微博信息列表是按照发布时间正序排列,所以第0条既是最新发布的
		if(statuses!=null&&statuses.size()>0){
			return statuses.get(0);
		}else {
			return null;
		}
	}
	
	/**
	 * 登录微博
	 * @param isOauth
	 * @param args
	 * @return
	 */
	private  Weibo getWeibo(boolean isOauth,String[] args) {
		Weibo weibo = new Weibo();
		if(isOauth) {//oauth验证方式 args[0]:访问的token;args[1]:访问的密匙
			weibo.setToken(args[0],args[1]);
		}else {//用户登录方式
    		weibo.setUserId(args[0]);//用户名/ID
    		weibo.setPassword(args[1]);//密码
		}
		return weibo;
	}

	public void run(){
		try {
			while(true){
			start();
//			每隔一分钟请求一次
			Thread.sleep(60*1000);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}




/**
 * 和电脑相关的操作
 * @author mayonghua
 *
 */
public class ComputerUtils {

	public static final String QQ = "D:\\Program Files\\QQ\\Bin\\QQ.exe";
	public static final String TTPLAYER = "";
	public static final String killQQ = "taskkill /im QQ.exe /f";
	
//	关机
	public static void shutdown() throws Exception{
		//Runtime.getRuntime().exec("cmd /c Shutdown -s -t 300");
	}
//	重启
	public static void restart() throws Exception{
//		Runtime.getRuntime().exec("cmd /c Shutdown -r -t 300");
	}
//	打开相应的应用程序
	public static void startApp(String path) throws Exception{
//		根据路径打开应用程序
		Runtime.getRuntime().exec(path);
	}
//	关闭相应的应用程序
	public static void stopApp(String processId) throws Exception{
//		根据进程Id 结束进程
		Runtime.getRuntime().exec(processId);
	}


测试代码

/**
 * 
 * @author mayonghua
 *
 */
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ComputerOperation co = new ComputerOperation();
    	co.run();
	}

}


ps: 为什么googlecode不让我创建新项目了呢

You have performed the requested action too many times in a 24-hour time period. Or, you have performed the requested action too many times since the creation of your account.

分享到:
评论

相关推荐

    手机远程控制电脑

    教你如何用手机远程控制你的电脑(安卓智能手机)

    android手机可视化远程控制电脑的设计

    可以作为PPT助手使用,也可以直接控制操作电脑,类似的功能应用商店都有APP下载,此设计采用客户服务器的通信方式,客户端(手机)输入服务器端(电脑)的IP地址和端口号即可建立手机与电脑的通信,电脑将屏幕截图和...

    新浪微博远程监控(无需虚拟机)

    新浪微博监控类开发软件,可单独使用,无需加虚拟机。附带有虚拟机

    远程控制软件可以远程控制电脑的软件

    可以远程控制电脑的软件 可以远程控制电脑的软件 可以远程控制电脑的软件 可以远程控制电脑的软件 可以远程控制电脑的软件 可以远程控制电脑的软件 可以远程控制电脑的软件

    通过发微博控制电脑的程序源码

    2.通过微博的内容控制电脑做相关操作 如:关机,取消关机,重启,摄像头截图,屏幕截图等 使用方法 1.运行QAPITool.exe后点确定(里面的appkey appsecret最好是自己在腾讯微博应用开发页面自己申请) 2.在...

    Android手机远程控制电脑+手机显示器

    远程控制电脑操作步骤: 1. 运行附件中的 RemoteControlServer.exe,控制台会出现: Listening... 表示电脑正在受控中... 2. 打开 手机端 程序, 在输入框内输入电脑的(局域网)IP,然后点击 connect... 3. 如果一切正确...

    手机控制电脑关机工具3.0_依靠手机QQ状态远程关闭电脑

    手机控制电脑关机,是利用手机登录QQ的在线状态来控制的。开启此软件后,软件会自动监控你设置的QQ号码是否在线,如果你设置的QQ号码在线的话,那么软件会在你设置的在线后多久关机&gt;的时间关闭你的电脑!

    基于手机远程控制电脑应用

    1.手机远程控制电脑软件分手机控制端与电脑客户端 2.使用软件必须在手机控制端申请用户与客户端编号才能使用 3.服务端需使用在控制端注册时生成的客户端编号与用户密码配置保存后,重新启动客户端方能建立通信. 4....

    智能手机远程控制连接内网电脑桌面

    利用苹果茶服务实现IPHONE智能手机远程控制连接内网电脑桌面

    远程控制电脑开关机(ReShutDown)v1.0绿色免费版

    远程控制电脑开关机(ReShutDown) ,可以帮助你去上班时电脑忘记关了,在公司用电脑下载这款软件关掉家里的电脑,有需要的赶紧来东坡下载使用吧。 远程控制电脑开关机(ReShutDown)介绍 软件分为两个部分,exe执行文件...

    远程控制打印任务,远程控制电脑

    远程控制打印任务,远程控制电脑,批量执行SQL,网络检测,数据库连接检测.VS2003开发

    远程控制电脑远程控制电脑

    远程控制电脑 远程控制电脑 远程控制电脑,本人对您恶意使用本方法带来后果不负有任何责任,本文重在技术交流使用

    QQ远程控制电脑

    原理: ... QQ2收到命令以后确认是主控端发送的命令以后加以识别 然后QQ2根据命令执行相应的操作. 不管你的消息是从哪种QQ平台上发送给QQ2的 只要你确保QQ2能...支持 手机QQ,WebQQ,QQ2000-QQ2011,安卓QQ,IPQQ,等众多QQ.

    远程控制电脑调试工具(工具+操作手册)-kaic.rar

    远程控制电脑调试工具(工具+操作手册)_kaic.rar 远程控制电脑调试工具(工具+操作手册)_kaic.rar 远程控制电脑调试工具(工具+操作手册)_kaic.rar 远程控制电脑调试工具(工具+操作手册)_kaic.rar 远程控制电脑调试工具...

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码) 手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码) 手机APP远程控制,智能家居监测、智能控制系统(STM32L4、...

    手机远程控制电脑程序源码

    这是一个大神制作的的手机远程控制电脑的程序源代码 现在分享给大家

    电脑远程控制,电脑远程控制

    电脑远程控制,电脑远程控制电脑远程控电脑远程控制电脑远程控制

Global site tag (gtag.js) - Google Analytics