整合twitese+twip+itap+rabr signup实现全功能免翻墙twitter

2010-09-05 12:49 by hackerzhou

勘误:第五步中应该修改twitteroauth.php文件,而不是twitter.php。

	function update($status, $replying_to = false , $lat = false , $long = false){
		try{
			if (mb_strlen($status,"UTF-8") >  140){
					$status = mb_substr($status, 0, 136,"UTF-8")."...";
    	                }
			$url = '/statuses/update';
			$args = array();
			$args['status'] = stripslashes($status);
			if($replying_to)
				$args['in_reply_to_status_id'] = $replying_to;
			if($lat)
				$args['lat'] = $lat;
			if($long)
				$args['long'] = $long;
			return $this->post($url, $args);
		}catch(Exception $ex){
			echo $ex->getLine." : ".$ex->getMessage();
		}
	}

8月31日twitter彻底关闭了原来的basic auth方式,采用了安全性高的oauth方式进行验证。当天,google code上若干project都更新了新版本以应对这一改变。但是各个项目功能都比较割裂,比如twitese不能提供客户端用的api,也不能注册;twip不能提供oauth proxy,必须连到twitter进行oauth验证,等等。因此,这个周末抽空整合了一个全功能(覆盖注册,客户端api,网页版,免翻墙oauth)的twitter应用,在此提供方法,供大家以后架设时参考。

1.下载各个项目最新版的代码

1)twitese是我一直在用的第三方免翻墙twitter平台,最新版v1.4.3支持oauth代理方式登录,很方便。由于原项目主页被墙,因此作者新开了另一个project,1.4.3版在这两个地方都有,没有验证内容是不是一样。

原项目主页:http://code.google.com/p/twitese/

新项目主页:http://code.google.com/p/tuite/

2)twip,用来给手机等客户端提供api支持,最新版3.1.2能支持oauth

项目主页:http://code.google.com/p/twip/

3)itap,用来提供第三方的oauth,这样就oauth就不用翻墙了,最新版是r9

项目主页:http://code.google.com/p/itap/

4)rabr,我用了其中的signup目录来进行twitter注册,原本使用的是开源项目twreg,感觉有些累赘,没有rabr的这个清爽。

项目主页:http://code.google.com/p/rabr/

2.修改代码以连接各个组件

0)修改apache或者nginx的url rewrite规则

1)将twip文件夹命名为api放入twitese的文件夹

2)将itap文件夹命名为itap放入twitese文件夹

3)将signup文件夹从rabr中解压出来放入twitese文件夹

4)修改twitese的login.php,移除原本的basic auth的代码,增加到/signup/的注册链接

5)修改twitese/lib/目录下的twitter.php,支持140字以上推文的自动截取 见文章头部新加的勘误段,此处有误。

	function update( $status, $replying_to = false )
	{
	    $args = array();
	    if( $status ){
                if (mb_strlen($status,'utf-8') >  140){
    			$status = mb_substr($status, 0, 136,  'utf-8')." ...";
    		}
               $args['status'] = stripslashes($status);
            }
	    if( $replying_to )
	       $args['in_reply_to_status_id'] = $replying_to;
	    $args['source'] = 'twitese';

	    $qs = $this->_glue($args);
            $request = $this->getAPI() . '/statuses/update.' . $this->type ;
	    return $this->objectify( $this->process($request, $args) );
	}

6.在/twitese/lib/config.php中定义自己的CONSUMER_KEY以及CONSUMER_SECRET和SITE_NAME之类的其他自定义项
如果没有CONSUMER_KEY,需要到http://twitter.com/apps/new申请一个。

7.修改/twitese/api/oauth_config.php

OAUTH_DIR是用来放oauth验证信息的目录,不要放在web能访问到的目录下,记得要chmod 777和chown
CONSUMER_KEY和CONSUMER_SECRET最好再去申请一个
OAUTH_CALLBACK是能够访问到/twitese/api/callback.php的绝对路径
SECURE_KEY是oauth验证文件的加密密钥,可以不修改

8.修改/twitese/api/index.php

$options['webroot'] = '/api';
//因为我的twitese目录是web根目录,所以api目录的路径就应该是/api
$options['enable_oauth'] = true;

9.修改/twitese/api/include/twitteroauth.php来使用我们自己的itap进行oauth验证

function authenticateURL() { return 'http://你的域名/itap/authenticate'; }
//这个url是能访问到你/twitese/itap/index.php的url然后把最后的index.php修改成authenticate,因为是通过url rewrite到index.php进行功能转发
function authorizeURL() { return 'http://你的域名/itap/authorize'; }
//同上

10.最trick的地方到了,调试了半个多小时发现的问题,如果不做这一步会发现当callback的时候会直接重定向到/twitese/twip/index.php而跳过了oauth的验证文件。修改/twitese/twip/redirect.php

if (isset($_GET['oauth_token']) && $_SESSION['oauth_token'] !== $_GET['oauth_token']) {
$_SESSION['oauth_status'] = 'oldtoken';
header('Location: ./clearsessions.php');
}

原来是$_REQUEST[‘oauth_token’],修改成$_GET[‘oauth_token’]就可以了,不知道原作者为什么这么些,否则通过$_REQUEST[‘oauth_token’]访问到的东西不是通过url传过来的oauth_token,自然就被重定向到./clearsessions.php去了。

好了,大功告成。

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

本文有 3 条评论

  1. hackerzhou
    2010-09-09 14:18


    hackerzhou:


    i:

    你那个资源仓储是怎么实现的?

    php+flexigrid修改出来的
    晚上回去我把源代码放出来

    所有代码都放到 http://code.google.com/p/hackerzhou/downloads/list 上去了

  2. hackerzhou
    2010-09-08 09:30


    i:

    你那个资源仓储是怎么实现的?

    php+flexigrid修改出来的
    晚上回去我把源代码放出来

  3. i
    2010-09-08 08:26

    你那个资源仓储是怎么实现的?

发表评论