`
XinTeng2012
  • 浏览: 94651 次
社区版块
存档分类
最新评论

基于新浪微博api的微博分享功能实现

 
阅读更多

首先应该拿到新浪微博开发的api,然后细读其中的一些文档规范,这样我们就能知道第三方应用要想实现分享内容到新浪微博平台,

1.第三方应用需要在新浪微博的开放平台通过审核,拿到

<span style="font-family:Microsoft YaHei;font-size:14px;">client_ID=*****
client_SERCRET=*****</span>

配置到config.properties,信息如下:

<span style="font-family:Microsoft YaHei;font-size:14px;">client_ID=*****
client_SERCRET=*****
redirect_URI=http://apps.weibo.com/ceshidemo
baseURL=https://api.weibo.com/2/
accessTokenURL=https://api.weibo.com/oauth2/access_token
authorizeURL=https://api.weibo.com/oauth2/authorize
rmURL=https://rm.api.weibo.com/2/
response_type=code</span>

2.拿着从新浪微博开放平台获取的client_ID、client_SERCRET去获取AccessToken,

3.然后拿着获取的AccessToken去访问新浪微博,发送一篇心得微博或者是获取当前用户信息等等

下面是代码:

<span style="font-family:Microsoft YaHei;font-size:14px;">public class WeiBoUtil2 extends WeiBoUtil {

public static final String POST_WEIBO_URL_WITH_CONTENT = "https://api.weibo.com/2/statuses/update.json?";

private static final Logger logger = Logger.getLogger(WeiBoUtil2.class);

public static Map<String, String> header = new HashMap<String, String>();

static {

header.put("Accept-Language", "zh-CN,zh;q=0.8");

header.put("User-Agent", "test sina api");

header.put("Accept-Charset", "utf-8;q=0.7,*;q=0.3");
}

/**
* 获取当前用户信息
* 
* @param uid
* 
*/
public static void showUser(String uid) {
Weibo weibo = new Weibo();
AccessToken accessToken = weibo.getAccessToken();// 通过code回去通行令类
Users um = new Users();
um.client.setToken(accessToken.getAccessToken());// 设置通行令然后发布微博
try {
User user = um.showUserById(uid);// 获取用户
Log.logInfo(user.toString());
} catch (WeiboException e) {
e.printStackTrace();
}
}

/**
* 获取用户的粉丝列表
* 
* @param name
* @throws WeiboException
*             when Weibo service or network is unavailable
*/
public static void findFriendsByScreenName(String name) {
Weibo weibo = new Weibo();
AccessToken accessToken = weibo.getAccessToken();
Friendships fm = new Friendships();
fm.client.setToken(accessToken.getAccessToken());
try {
UserWapper users = fm.getFollowersByName(name);
for (User u : users.getUsers()) {
Log.logInfo(u.toString());
}
} catch (WeiboException e) {
Log.logErr(null+ ":" + e.getMessage());
}
}

/**
* 获取通行令方法
* 
* @param userid
*            用户名
* @param password
*            密码
* @return AccessToken 通行令
* @throws WeiboException
*             when userId or password is not OAuth HttpException when Weibo
*             service or network is unavailable
* @author
*/
public static AccessToken refreshToken(String userid, String password) {
try {
String url = WeiboConfig.getValue("authorizeURL");// 微博认证授权地址
PostMethod postMethod = new PostMethod(url);

postMethod.addParameter("client_id", WeiboConfig
.getValue("client_ID"));// your client id
postMethod.addParameter("redirect_uri", WeiboConfig
.getValue("redirect_URI"));// your url
postMethod.addParameter("userId", userid);// 获取微薄的useid
postMethod.addParameter("passwd", password);
postMethod.addParameter("isLoginSina", "0");
postMethod.addParameter("action", "submit");
postMethod.addParameter("response_type", WeiboConfig
.getValue("response_type"));// code

// 获取post方法的参数
HttpMethodParams param = postMethod.getParams();
param.setContentCharset("UTF-8");// 进行编码转换

List<Header> headers = new ArrayList<Header>();
// 伪造请求头信头
headers.add(new Header(
"Referer",
"https://api.weibo.com/oauth2/authorize?client_id=your_client_id&redirect_uri=your_redirect_url&from=sina&response_type=code"));
headers.add(new Header("Host", "api.weibo.com"));
// headers
// .add(new Header("User-Agent",
// "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"));

headers.add(new Header("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)"));

ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory();
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));

//HttpClient客户端apache下面的api
HttpClient client = new HttpClient();
client.getHostConfiguration().getParams().setParameter("http.default-headers", headers);
client.executeMethod(postMethod);
//获得响应的状态码
int status = postMethod.getStatusCode();

if (status != 200 && status != 302) {
Log.logErr("请求Token返回的状态码:" + status);
}
// 获取响应的头信息中的 地址信息
Header location = postMethod.getResponseHeader("Location");
// 下面的方法是取出code
if (location != null) {
String retUrl = location.getValue();
int begin = retUrl.indexOf("code=");
if (begin != -1) {
int end = retUrl.indexOf("&", begin);
if (end == -1)
end = retUrl.length();
String code = retUrl.substring(begin + 5, end);
if (code != null) {
// 通过getAccessTokenByCode方法返回accessToken
Log.logInfo("location's code is :" + code);
return new Oauth().getAccessTokenByCode(code);
}
}
} else {
Log.logErr("location's code is :"+location);
}
} catch (WeiboException e) {
Log.logErr(e.getMessage());
} catch (HttpException e) {
Log.logErr(null);
} catch (IOException e) {
Log.logErr(e.getMessage());
}
Log.logErr("refresh token failed");
return null;
}


/**
* 发布一篇微博方法
* 
* @param str
*            发送的微博正文
* @param userid
*            用户ID
* @param password
*            用户密码
* @return String post请求返回的response内容
*/
public static String sendWeibo(String str, String userid, String password,
String accessToken) throws WeiboException {
Map<String, String> params = new HashMap<String, String>();

params.put("access_token", accessToken);
params.put("status", str);
params.put("lat", "39.920063467669495");
params.put("long", "116.46009815979004");

String respStr = postMethodRequestWithOutFile(POST_WEIBO_URL_WITH_CONTENT, params, header);
Log.logInfo("postMethodRequestWithOutFile responce-->" + respStr);
return respStr;
}


/**
* post请求发送方法
* 
* @param url
*            发布微博的地址
* @param params
*            请求消息头中的参数值
* @param header
*            请求头信息
* @return 服务器端的响应信息
* @throws WeiboException
*             when userId or password is not OAuth HttpException 
*         Exception when Weibo service or network is unavailable
*/
public static String postMethodRequestWithOutFile(String url,
Map<String, String> params, Map<String, String> header) {

Log.logInfo("post request is begin! url =" + url);

HttpClient hc = new HttpClient();

try {
PostMethod pm = new PostMethod(url);
if (header != null) {
for (String head_key : header.keySet()) {
if (head_key == null || header.get(head_key) == null)
continue;
pm.addRequestHeader(head_key, header.get(head_key));
}
}
if (params != null) {
for (String param_key : params.keySet()) {
if (param_key == null || params.get(param_key) == null)
continue;
pm.addParameter(param_key, params.get(param_key));
}
}
// 获取params,然后进行编码,编成utf8格式
pm.getParams().setContentCharset("utf8");
hc.executeMethod(pm);
String ret = pm.getResponseBodyAsString();// 获取响应体的字符串
Log.logInfo("post请求发出后返回的信息:" + ret);
return ret;
} catch (HttpException e) {
Log.logErr(null);
} catch (Exception e) {
Log.logErr(null);
} finally {
Log.logInfo("post request is end! url =" + url);
}
return null;
}</span>


如有兴趣获取更多资料:加下求:378437335

分享到:
评论

相关推荐

    基于新浪微博的移动电子商务系统

    本文介绍了移动电子商务、Android开发平台及微博开发平台相关技术,分析了电子商务、Android手机平台和微博系统在当前国内外应用情况,并设计了基于新浪微博的移动电子商务系统Android客户端软件,实现了登录注册...

    新浪微博API接口(JAVA版).doc

    微博开放平台是一个基于新浪微博客系统的开放的信息订阅、分享与交流平台。微博开放平台为您提供了海量的微博信息、粉丝关系、以及随时随地发生的信息裂变式传播渠道。 广大开发者或网站只要登录平台网站并创建应用...

    新浪微博开放平台API

    微博开放平台是一个基于新浪微博客系统的开放的信息订阅、分享与交流平台。微博开放平台为您提供了海量的微博信息、粉丝关系、以及随时随地发生的信息裂变式传播渠道。 广大开发者或网站只要登录平台网站并创建应用...

    Xweibo for Discuz!X1.5 2.1.5.zip

    Xweibo是由新浪微博团队开发的基于新浪微博API开发的免费开源的微博系统,拥有新浪微博的核心功能,具备微博发布、浏览、转发、评论、私信、收藏、话题、黑名单等核心功能以外,还满足更多运营需求:数据本地备份、...

    Xweibo_v2.1.zip

    Xweibo是基于新浪微博开放API开发免费开源的微博程序。网站运营方只需要下载Xweibo安装文件,按照安装向导在服务器完成安装即可获得一个完整的微博平台。微博平台包括微博内容接收、发送、评论、关注、私信等常用...

    EasyTalk开源微博系统 X2.5.zip

     支持国内外7大平台帐号一键登录,同时可以将微博同步更新到新浪微博或者是腾讯微博。 完善的插件系统 强大的后台管理 内置强大的插件系统,可按照需求来选择下载安装适合的插件或者自己进行二次开发。 拥有...

    新浪架构师谈微博架构

    微博(Micro-Blog)顾名思义是微型博客,是一种基于用户关系的信息分享和传播平台,用户可通过浏览器、手机、及时通讯软件(MSN、 QQ、 Skype 等)及外部 API 接口等多种渠道发布 140 字以内信息[1]。 支持跨平台交流、 ...

    无名微博 3.03.rar

    集成已发布的新浪微博asp版本sdk 产品特性与优点: 1.简约 摈弃了博客的复杂,汲取了微博的简便,一句话,一段文字,记录你心路历程。 2.运行环境低 一个支持asp的空间,就可以基本运行本程序,如果支持...

    share-faved-weibo-to-blog:导出收藏的微博到md文件

    想必各位都在新浪微博上收藏了很多精华片段,可否分享出来给大家瞧瞧? 近日闲来没事,打算将收藏的微博放到上,博客是基于hexo搭建在github上,因此需要将收藏的微博 导出为markdown文件,然后让hexo渲染为静态文件...

    百度社会化分享文档

    百度社会化分享Android组件用户手册,社会化分享 Android 组件基于百度社会化分享服务,封装了新浪微博、开心网、腾讯微博和 QQ 空间 等平台的授权及分享功能,同时提供了 API 接口调用及本地操作界面支持。 该组件...

    爱图谱社会化视觉购物系统 v1.2.0.zip

    内置淘宝客API,后台支持关键词、分类实时查询淘宝客推广商品,支持一键批量抓取,分享至前台。 MVC架构设计 基于PHP Mysql开发,采用国际流行CodeIgniter框架,页面与程序逻辑分离,二次开发与模版...

    YiiPiN社会化电商分享系统 v1.3.zip

    (增强)后台增加新浪微博、QQ登录验证META设置 (新增)淘宝商品采集增加店铺搜索采集功能,不受API权限限制,并结合好店展示 (增强)后台淘宝客采集增加总成交量限制条件 (增强)后台淘宝客采集增加记录商品...

    音乐电台 v1.1源码

    5.更有歌曲分享到人人、新浪微博、腾讯微博等功能,让您的朋友对您羡慕不已! 更新: 1.软件界面重新设计和改良; 2.频道优化,新增[音乐基因]和[搜索]选项,让音乐更随心! 3.重新书写和优化API,强化软件功能。

    爱图谱购物分享网站程序

    内置淘宝客API,后台支持关键词、分类实时查询淘宝客推广商品,支持一键批量抓取,分享至前台。 MVC架构设计 基于PHP+Mysql开发,采用国际流行CodeIgniter框架,页面与程序逻辑分离,二次开发与模版定制便捷。 ...

    豆瓣电台chrome版-crx插件

    豆瓣电台Chrome版,微博分享 豆瓣电台chrome插件--小豆电台 主要功能: 1.提供豆瓣电台的基本功能,...修改微博分享方式,使用分享按钮代替原来api请求方式 v0.9.6 微博分享,红心兆赫等功能 支持语言:中文 (简体)

    VeryIDE Bee 互动营销**台 v1.5 UTF-8.rar

    增加 "支付**台"(支付宝和财付通,用于广告和表单的收款)和"社区**台"(新浪微博和腾讯微博) 增加 "短信**台"目前适用于表单提交时给用户发送手机短信 增加 "怀旧经典"用户界面(VeryIDE Apps 风格)供用户设置

    FineCMS海豚大众版 v2.3.5

    内 置腾讯QQ、新浪微博、百度、网易、Google、搜狐等OAuth一键登录功能,发布文章、评论自动发微博分享,还集成手机短信接口API通过手机短信 验证更安全,同时会员支持与Ucenter完美整合,会员空间支持域名绑定,用...

    FineCMS海豚大众版源码 v2.3.2

    内 置腾讯QQ、新浪微博、百度、网易、Google、搜狐等OAuth一键登录功能,发布文章、评论自动发微博分享,还集成手机短信接口API通过手机短信 验证更安全,同时会员支持与Ucenter完美整合,会员空间支持域名绑定,用...

Global site tag (gtag.js) - Google Analytics