豆瓣/人人/BBS/开心/嘀咕/网易微博/新浪微博状态更新PHP代码终结版
2010-08-21 9:46 by hackerzhou最初是为了把博客自动同步到泉和人人所以研究了下php的curl,之后不断的更新支持的系统,昨天决定不再在这个东西上浪费时间了,毕竟重复的东西太多了,写多了没意思。于是就修复了些bug,增加了新浪微博/网易微博的支持后就不再开发了,接下去几天想把原来做过的一些小工具重构代码修复bug后出新版本。
之前写过的几篇:
开心网&豆瓣网发布状态PHP脚本(附Ping.fm的Custom URL使用方法)
PHP的日月光华/复旦泉BBS发文脚本
php下用curl做的一个更新人人网状态的代码
这次使用了页面返回值来判定是否状态发布成功,如果不成功的话最多会重试三次,尽量减少网络问题造成的影响。使用Ping.fm的CUSTOM URL功能的朋友可以修改一下直接放到自己的php空间中,在Ping.fm里面设置下Custom URL的地址就可以了。文中以及代码中的BBS对应的是复旦大学的日月光华BBS以及复旦泉BBS,不适用于别的学校。
感谢在博客评论的tang提醒了我开心网能够用wap页面来发状态,登录比html页面的方便许多,而且之前写的那个模拟http://s.kaixin001.com.cn/js/enlogin-7.js的加密函数在windows下跑结果是对的,在linux上跑居然结果不对,相当诡异,懒得去研究了,故索性使用wap页面登录&提交状态。要启用对应的服务,把enable_xxx修改为true,填写对应的登录用户名/密码即可。
比如:
"enable_douban"=>"true", "douban_username"=>"[email protected]", "douban_password"=>"123456",
终结版代码如下(点击展开):
<?php
$settings;
init($settings);
//Ping.fm的Custom URL通过POST传method,title,message过来
$method=$_POST["method"];
$title=$_POST["title"];
$message=$_POST["message"];
if($message!=""){
send($method,$title,$message,$settings);
}
function init(&$settings){
//要启用某个服务,请将对应的enable_xxx项设置为true,默认为false不启动
$settings=array(
"enable_douban"=>"false",
"douban_username"=>"##豆瓣用户名",
"douban_password"=>"##豆瓣密码",
"enable_renren"=>"false",
"renren_username"=>"##人人网用户名",
"renren_password"=>"##人人网密码",
"enable_bbs"=>"false",
"bbs_username"=>"##BBS用户名",
"bbs_password"=>"##BBS密码",
"bbs_board_id"=>"##BBS版面ID",
"bbs_night_api"=>"##晚间访问BBS的API",
"bbs_host"=>"##BBS地址",
"enable_kaixin001"=>"false",
"kaixin001_username"=>"##开心网用户名",
"kaixin001_password"=>"##开心网密码",
"enable_digu"=>"false",
"digu_username"=>"##嘀咕用户名",
"digu_password"=>"##嘀咕密码",
"enable_netease"=>"false",
"netease_username"=>"##网易微博用户名",
"netease_password"=>"##网易微博密码",
"enable_sina"=>"false",
"sina_username"=>"##新浪微博用户名",
"sina_password"=>"##新浪微博密码"
);
}
function send($method,$title,$message,&$settings){
if($settings["enable_renren"]==="true"){
updateRenren($message,$settings["renren_username"],$settings["renren_password"],0);
}
if($settings["enable_sina"]==="true"){
updateSina($message,$settings["sina_username"],$settings["sina_password"],0);
}
if($settings["enable_kaixin001"]==="true"){
updateKaixin001($message,$settings["kaixin001_username"],$settings["kaixin001_password"],0);
}
if($settings["enable_digu"]==="true"){
updateDigu($message,$settings["digu_username"],$settings["digu_password"],0);
}
if($settings["enable_netease"]==="true"){
updateNetEase($message,$settings["netease_username"],$settings["netease_password"],0);
}
if($settings["enable_douban"]==="true"){
updateDouban($message,$settings["douban_username"],$settings["douban_password"],0);
}
if($settings["enable_bbs"]==="true"){
if($method=="status"||$title==""){
$title="[Ping.fm状态]";
}
updateBBS($title,$message,$settings["bbs_board_id"],$settings["bbs_username"],$settings["bbs_password"],$settings["bbs_host"],$settings["bbs_night_api"],0);
}
}
function updateSina($status,$sina_username,$sina_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','sina');
$ch=&getCurl($cookie_jar,"POST","http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.9)");
curl_setopt($ch,CURLOPT_POSTFIELDS,"service=miniblog&client=ssologin.js%28v1.3.9%29&entry=miniblog&encoding=utf-8&gateway=1&savestate=7&from=&useticket=0&username=".urlencode($sina_username)."&password=".urlencode($sina_password)."&url=http%3A%2F%2Ft.sina.com.cn%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&returntype=META");
$str=&sendAndResult($ch);
$ch=&getCurl($cookie_jar,"POST","http://t.sina.com.cn/mblog/publish.php?rnd=0.10724102530252999");
curl_setopt($ch,CURLOPT_POSTFIELDS,"content=".urlencode($status)."&pic=&styleid=1&retcode=&imgType=");
curl_setopt($ch,CURLOPT_REFERER,"http://t.sina.com.cn/hackerzhou");
$str=&sendAndResult($ch);
if(strstr($str,"{\"code\":\"A00006\",")!==false){
echo "[Sina] succeed\n";
}else{
echo "[Sina] failed\n";
updateSina($status,$sina_username,$sina_password,$tried_times+1);
}
}
function updateNetEase($status,$netease_username,$netease_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','163');
$ch=&getCurl($cookie_jar,"POST","http://reg.163.com/logins.jsp");
curl_setopt($ch,CURLOPT_POSTFIELDS,'username='.urlencode($netease_username).'&password='.urlencode($netease_password).'&savelogin=1&url=http://t.163.com/session/first&product=t&type=1');
$str=&sendAndResult($ch);
$ch=&getCurl($cookie_jar,"POST","http://t.163.com/statuses/update.do");
curl_setopt($ch,CURLOPT_POSTFIELDS,'status='.urlencode($status).'&in_reply_to_status_id=sendinfo');
$ret=&sendAndResult($ch);
if(strstr($ret,"created_at")!==false){
echo "[t.163.com] succeed\n";
}else{
echo "[t.163.com] failed\n";
updateNetEase($status,$netease_username,$netease_password,$tried_times+1);
}
}
function updateBBS($title,$content,$boardId,$bbs_username,$bbs_password,$bbs_host,$night_api,$tried_times) {
if($tried_times>=3){
return false;
}
$newtitle=iconv("UTF-8","GB2312",$title);
$newcontent=iconv("UTF-8","GB2312",$content);
$hour=intval(date("H"));
if($hour==0||($hour>=16&&$hour<=23)){
$bbs_host=$night_api;
}
$cookie_jar=tempnam('./tmp','bbs');
$ch=&getCurl($cookie_jar,"POST",$bbs_host."/bbs/login");
curl_setopt($ch,CURLOPT_POSTFIELDS,'id='.urlencode($bbs_username).'&pw='.urlencode($bbs_password));
$str=&sendAndResult($ch);
$ch=&getCurl($cookie_jar,"POST",$bbs_host."/bbs/snd?bid=".$boardId."&f=&e=0");
curl_setopt($ch,CURLOPT_REFERER,$bbs_host.'/bbs/pst?bid='.$boardId);
curl_setopt($ch,CURLOPT_POSTFIELDS,'title='.rawurlencode($newtitle).'&sig=3&text='.urlencode($newcontent));
$str=&sendAndResult($ch);
$str=iconv("GB2312","UTF-8",$str);
$ch=&getCurl($cookie_jar,"GET",$bbs_host."/bbs/logout");
curl_setopt($ch,CURLOPT_REFERER,$bbs_host.'/bbs/');
$ret=&sendAndResult($ch);
if(strstr($str,"成功")!==false){
echo "[BBS] succeed\n";
}else{
echo "[BBS] failed\n";
updateBBS($title,$content,$boardId,$bbs_username,$bbs_password,$bbs_host,$night_api,$tried_times+1);
}
}
function updateRenren($status,$renren_username,$renren_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','renren');
$ch=&getCurl($cookie_jar,"POST","http://passport.renren.com/PLogin.do");
curl_setopt($ch,CURLOPT_POSTFIELDS,'email='.urlencode($renren_username).'&password='.urlencode($renren_password).'&autoLogin=true&origURL=http%3A%2F%2Fwww.renren.com%2FHome.do&domain=renren.com');
$str=&sendAndResult($ch);
$pattern="/get_check:'([^']+)'/";
preg_match($pattern,$str,$matches);
$get_check=$matches[1];
$ch=&getCurl($cookie_jar,"POST","http://status.renren.com/doing/update.do");
curl_setopt($ch,CURLOPT_POSTFIELDS,'c='.urlencode($status).'&raw='.urlencode($status).'&isAtHome=1&publisher_form_ticket='.$get_check.'&requestToken='.$get_check);
curl_setopt($ch,CURLOPT_REFERER,'http://status.renren.com/ajaxproxy.htm');
$ret=&sendAndResult($ch);
if(strpos($ret,"{\"allMsg\":")===0){
echo "[Renren] succeed\n";
}else{
echo "[Renren] failed\n";
updateRenren($status,$renren_username,$renren_password,$tried_times+1);
}
}
function updateKaixin001($status,$kaixin001_username,$kaixin001_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','kaixin001');
$ch=&getCurl($cookie_jar,"POST","http://wap.kaixin001.com/home/?id=");
curl_setopt($ch,CURLOPT_POSTFIELDS,'email='.$kaixin001_username.'&password='.$kaixin001_password.'&remember=1&from=&refuid=0&refcode=&bind=&gotourl=&login=+%E7%99%BB+%E5%BD%95+');
$str=&sendAndResult($ch);
$pattern="/state.php\?verify=([^\"]+)\"/";
preg_match($pattern,$str,$matches);
$verify=$matches[1];
$ch=&getCurl($cookie_jar,"POST","http://wap.kaixin001.com/home/state_submit.php?verify=".$verify);
curl_setopt($ch,CURLOPT_POSTFIELDS,'state='.urlencode($status));
curl_setopt($ch,CURLOPT_REFERER,' http://wap.kaixin001.com/home/');
$ret=&sendAndResult($ch);
if(strstr($ret,"成功")!==false){
echo "[Kaixin001] succeed\n";
}else{
echo "[Kaixin001] failed\n";
updateKaixin001($status,$kaixin001_username,$kaixin001_password,$tried_times+1);
}
}
function updateDouban($status,$douban_username,$douban_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','douban');
$ch=&getCurl($cookie_jar,"POST","http://www.douban.com/accounts/login");
curl_setopt($ch,CURLOPT_POSTFIELDS,'form_email='.urlencode($douban_username).'&form_password='.urlencode($douban_password).'&remember=on&user_login=%E8%BF%9B%E5%85%A5');
$str=&sendAndResult($ch);
$pattern="/<input type=\"hidden\" name=\"ck\" value=\"([^\"]+)\"/";
preg_match($pattern,$str,$matches);
$ck=$matches[1];
$ch=&getCurl($cookie_jar,"POST","http://www.douban.com/");
curl_setopt($ch,CURLOPT_POSTFIELDS,'ck='.$ck.'&mb_text='.urlencode($status));
curl_setopt($ch,CURLOPT_REFERER,'http://www.douban.com/');
$ret=&sendAndResult($ch);
if(strstr(strip_tags($ret),strip_tags($status))!==false){
echo "[Douban] succeed\n";
}else{
echo "[Douban] failed\n";
updateDouban($status,$douban_username,$douban_password,$tried_times+1);
}
}
function updateDigu($status,$digu_username,$digu_password,$tried_times){
if($tried_times>=3){
return false;
}
$cookie_jar=tempnam('./tmp','digu');
$ch=&getCurl($cookie_jar,"POST","http://digu.com/login");
curl_setopt($ch,CURLOPT_POSTFIELDS,'remember=1&userName='.urlencode($digu_username).'&password='.$digu_password.'&action=1');
$str=&sendAndResult($ch);
$ch=&getCurl($cookie_jar,"POST","http://digu.com/login");
curl_setopt($ch,CURLOPT_POSTFIELDS,'remember=1&userName='.urlencode($digu_username).'&password='.$digu_password.'&action=1');
$str=&sendAndResult($ch);
$pattern="/',id:'([^']+)/";
preg_match($pattern,$str,$matches);
$cookiesId=$matches[1];
$ch=&getCurl($cookie_jar,"POST","http://digu.com/jump?aid=addLekuData");
curl_setopt($ch,CURLOPT_POSTFIELDS,"type=1&text=".urlencode($status)."&tw_userId=undefined&tId=0&cookieId=".$cookiesId."&id=0&groupId=&ladygg=undefined&songId=0&songTitle=&imageName=&addressId=0");
$ret=&sendAndResult($ch);
if(strstr($ret,"success")!==false){
echo "[Digu] succeed\n";
}else{
echo "[Digu] failed\n";
updateDigu($status,$digu_username,$digu_password,$tried_times+1);
}
}
function &getCurl($jar,$method,$url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_COOKIEJAR,$jar);
curl_setopt($ch,CURLOPT_COOKIEFILE,$jar);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8");
//curl_setopt($ch,CURLOPT_VERBOSE,true);
if($method=="POST"){
curl_setopt($ch,CURLOPT_POST,TRUE);
}else{
curl_setopt($ch,CURLOPT_POST,FALSE);
}
return $ch;
}
function &sendAndResult(&$ch){
$str=curl_exec($ch);
curl_close($ch);
unset($ch);
return $str;
}
?>
2011-04-22 21:23
以后还来看你写的文章。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2011-04-23 09:13
这。。。其实还好,写一些大家都能理解的东西,有些晦涩的就不怎么写了