微博/SNS同步状态发送工具

2010-12-06 11:09 by hackerzhou

写过几篇关于使用php的curl将状态发送到一些SNS以及微博系统的文章,有兴趣的朋友可以翻阅文章末尾的链接。这几天就想把这些函数级别的东西通过一个应用的形式整合起来,使得更加实用且模块化程度更加高。使用了php中function_exists以及runtime call函数的功能来简化了一些函数调用,使得自动绑定handler成为可能。目前有五个服务没有提供,等有时间我会出第二版来实现新功能,大家提的关于UI的修改意见也会在第二版中得到体现。

源代码已放到SVN上:http://hackerzhou.googlecode.com/svn/trunk/PHP/StatusPublishTools/ 主要分php和flex两部分,大家可以下载下来自定义或者直接拿来用。

2010-12-5 20-38-302010-12-5 21-03-02

注意:由于腾讯微博的加密方法比较诡异,为了简化代码,直接使用了腾讯js的加密脚本,修改qq_weibo_password下的index.html中的document.write(md5_3(‘##your password##’));,将你的密码填进去,随后打开改网页生成加密了的密码。在页面配置的时候输入这个加密的密码。

一段比较关键的分派发状态任务的Code如下:

function send($method,$title,$message,&$settings,$disable){
	foreach($settings as $key => $value){
		if((strstr($key,"_Enable") !== false) && ($value == "true")){
			$serviceName = str_replace("_Enable","",$key);
			if(strstr($disable,$serviceName) === false){
				callFunctionWrapper($serviceName, $settings,$message);
			}
		}
	}
}

function callFunctionWrapper($serviceName,&$settings,$message){
	callFunction("update".$serviceName,$message,$settings[$serviceName."_Username"]
		,base64_decode($settings[$serviceName."_Password"]),0);
}

function callFunction($foo,$arg0,$arg1,$arg3,$arg4){
	if(function_exists($foo)){
		$foo($arg0,$arg1,$arg3,$arg4);
	}
}

$settings是一个Array,里面储存了每个服务对应的XXX_Enable,XXX_Username,XXX_Password等属性,则每次只需要遍历这个Array,然后寻找XXX_Enable是true的项,随后调用updateXXX函数来发布对应的状态。php这种在runtime决定函数调用的功能类似于Java/.Net里的反射,能简化一些操作,不过过于依赖runtime决定也带来一定的性能问题,在这个应用中没有考虑性能这方面的影响。

Flex部分的话写的比较简单粗糙,也没有刻意做美化,控件都用的是默认的皮肤,Flex 4跟Flex 3里面有些许不同,不过看看API很快就能找到新的实现方式。由于使用了两个DataGrid且有数据交换,因此没有用dataProvider绑定到HTTPService这种简单的方法来绑定数据源,用了ArrayCollection作为数据源,在HTTPService call返回的时候解析返回的数据,添加到ArrayCollection中。这中间碰到一个小问题,就是HTTPService的lastResult中的元素只有一个的时候并没有作为ArrayCollection,而是作为一个Object的属性来储存,因此,我判断了下Amount,如果为1则当作属性来读取,如果大于1则当作ArrayCollection来读取。代码表述如下:
					if(length > 1){
						for(var i:int=0;i<length;i++){
							var o:Object=new Object();
							o.Name=a.Item[i].Name;
							enableServiceDataArray.addItem(o);
						}
					}else if(length == 1){
						var o1:Object=new Object();
						o1.Name=a.Item.Name;
						enableServiceDataArray.addItem(o1);
					}
该应用也能很好的和Ping.fm和Hellotxt的Custom URL进行绑定,postStatus.php的url即为Custom URL。这样的话就可以用Ping.fm将状态同步发送到国内的SNS/微博系统,弥补了Ping.fm对于国内平台支持性不好的弱点。
相关文章:

https://www.hackerzhou.me/2010/08/douban-renren-bbs-kaixin001-digu-163-sina-microblog-status-update-final-version.html

https://www.hackerzhou.me/2010/08/how-to-use-ping-fm-custom-url-to-pub-kaixin001-and-douban-status.html

https://www.hackerzhou.me/2010/07/php-curl-under-to-do-with-an-updated-code-for-all-network-states.html

本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 hackerzhou 并包含 原文链接
发表评论

本文有 6 条评论

  1. Zuckonit
    2013-03-25 10:43

    你这个不是用的oauth2, 如果想发图片怎么办?

    • hackerzhou
      2013-03-25 17:24

      当时做的就是一个简单的版本就没有用oauth,而且那时候并不是每个都支持oauth认证的啊

  2. zz
    2011-08-26 16:06

    现在怎么下载不了了啊?

    • hackerzhou
      2011-09-01 08:08

      之前SVN server清理过一次,我重新把项目放进来了,现在可以访问了。

  3. kenn
    2011-01-28 14:55

    最近在弄这方面的东西,沙发围观。。。。。

    • hackerzhou
      2011-01-28 16:49

      挺简单的,都是一堆curl,等有空了写一个java版的,在GAE上跑

发表评论