虽然新浪微博最近也没什么人气了,不过做网站运营还是必须在他上面做一些功夫。
下面是一个比较实用的需求
需求:在自己网站上发布评论的同时,也把信息同步到微博
花了1天时间来处理这个。一开始去查官网的api文档,他的demo都是要弹出他自己的登陆框,然后输入发布。和我的需求不同,我的需求是在我站内的输入框点击发布的时候,同时发布到站内和新浪微博。效果如下图。没有办法了,只能去看它的javascript的SDK源码,看一下的流程是怎么走了。两个文件大概5千行代码吧。现在抽离出核心的逻辑分享一下。
如下图
实现步骤:
1. 申请appkey ,在http://open.weibo.com/这里申请,和自己的域名绑定,因为发布消息的时候,会把appkey和http的referer做匹配,匹配正确了才会发布成功
2. 我采用的是JS方式,在头部引用js
<script src='http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=3196502474' charset="utf-8"></script>
3.执行逻辑
(1). 点击checkbox,执行WB2.checkLogin(), 如果没有登陆或者授权,就会执行WB2.login(), 接口会检验现在用的appkey是不是页面的Referer已经注册绑定了
(2). 点击发布按钮,执行WB2.Cookie.load(),在form中填入所有的值,用form表单进行跨域post传输。
4. 详细代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="jquery-1.10.2.js"></script>
<script src='http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=3196502474' charset="utf-8"></script>
</head>
<body>
<fieldset>
逻辑过程:<br><br>
1. 点击checkbox,执行WB2.checkLogin(), 如果没有登陆或者授权,就会执行WB2.login(), 接口会检验现在用的appkey是不是页面的Referer已经注册绑定了<br><br>
2. 点击发布按钮,执行WB2.Cookie.load(),在form中填入所有的值,用form表单进行跨域post传输。<br><br>
WB2.Cookie.load()<br>
Object {access_token: "2.00nCtGDCuKRwQB7d69ad7e330xX2vl", refresh_token: "", expires_in: "583292", uid: "1878236233", status: "1"}<br><br>
</fieldset>
<br>
<textarea name="" id="content" cols="30" rows="10"></textarea>
<br>
同时发布到微博:<input type="checkbox" id="publishToweibo"> <button id="publish">发布</button>
<!-- 隐藏的方式发送跨域请求 start -->
<iframe src="" frameborder="0" id="myIframe" height="0"></iframe>
<form method="post" action="http://service.t.sina.com.cn/widget/jssdk/aj_addmblog.php" target="myIframe" id="weiboForm">
<input type="hidden" name="pic_id" value="">
<input type="hidden" name="content" value="">
<input type="hidden" name="uid" value="">
<input type="hidden" name="appkey" value="3196502474">
<input type="hidden" name="access_token" value="">
<input type="hidden" name="cbkIndex" value="cbk_1">
</form>
<!-- 隐藏的方式发送跨域请求 end -->
<script>
// 如果有登陆了,就把checkbox勾上
if(WB2.checkLogin()){
$('#publishToweibo').prop('checked',true)
}
// 勾上checkbox,检查是否登陆,如果没有登陆,就走登陆
$('#publishToweibo').click(function(){
if($(this).prop('checked') && !WB2.checkLogin()){
WB2.login()
}
})
// 发布的时候,也是检测是否登陆和checkbox是否勾上
// 如果前置条件成立,就发布到微博
//
$('#publish').click(function(){
if($('#publishToweibo').prop('checked') && WB2.checkLogin()){
var obj = WB2.Cookie.load();
$('#weiboForm input[name=content]').val($('#content').val());
$('#weiboForm input[name=uid]').val(obj.uid);
$('#weiboForm input[name=access_token]').val(obj.access_token);
$('#weiboForm').submit();
}
//发站内消息的代码
})
</script>
</body>
</html>