`
longzhun
  • 浏览: 369973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

腾讯微博Oauth2.0授权以及API调用封装

 
阅读更多

 

说明:大家看到引用的包中有weibo2这个路径,这是我自己修改的,因为我的项目中有1.0的包,冲突了

上一篇讲sina的封装看到的webbo5j也是因为冲突才改的,希望大家不要误解


TuanDistributedHttpSession 这是封装的分布式session

MyUser  这是封装的一个User对象

 

 

腾讯提供的sdk中有代码错误,给大家看看

这是我修改过的,没修改之前是OAuthVersion == OAuthConstants.OAUTH_VERSION_1

这是一个小问题,估计也是刚毕业的写的

我在附件中会提供修改过的Jar包,直接用就行

public BasicAPI(String OAuthVersion){
        if (OAuthVersion.equals(OAuthConstants.OAUTH_VERSION_1 )) {
            requestAPI = new OAuthV1Request();
            apiBaseUrl=APIConstants.API_V1_BASE_URL;
        }else if(OAuthVersion.equals(OAuthConstants.OAUTH_VERSION_2_A)){
            requestAPI = new OAuthV2Request();
            apiBaseUrl=APIConstants.API_V2_BASE_URL;
        }
    }

 

 

 


 package com.tuan.web.service.weibo;    

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;

import com.tencent.weibo2.api.FriendsAPI;
import com.tencent.weibo2.api.TAPI;
import com.tencent.weibo2.api.UserAPI;
import com.tencent.weibo2.oauthv2.OAuthV2;
import com.tencent.weibo2.oauthv2.OAuthV2Client;
import com.tencent.weibo2.utils.QHttpClient;

/** 
 * @Title: QQWeiBo2.java
 * @Package com.tuan.web.service.weibo
 * @Description: TODO(腾讯微博)
 * @author longzhun
 * @date 2012-7-30 上午09:36:00
 * @version V2.0
 */
@Service
public class QQWeiBo2 {
    private static final Log LOG = LogFactory.getLog(QQWeiBo2.class);
   
    private OAuthV2 oAuth;
   
    public QQWeiBo2(){
        oAuth=new OAuthV2();
        init();
    }
   

    public String getRequestToken(){
         String authorizationUrl = "";
         QHttpClient qHttpClient=new QHttpClient(2, 2, 5000, 5000, null, null);
         OAuthV2Client.setQHttpClient(qHttpClient);
         authorizationUrl = OAuthV2Client.generateAuthorizationURL(oAuth);
         return authorizationUrl;
    }
    public OAuthV2 getAccessToken(OAuthV2 oAuth,String code,String openid,String openkey){
            //检查是否正确取得授权码
           if (oAuth.getStatus() == 2) {
               LOG.error("Get Authorization Code failed!");
           }
          
           //换取access token
           oAuth.setGrantType("authorize_code");
          
           try {
               OAuthV2Client.setAuthorization(code, openid, openkey, oAuth);
               OAuthV2Client.accessToken(oAuth);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
           //检查是否正确取得access token
           if (oAuth.getStatus() == 3) {
               LOG.error("Get Access Token failed!");
            }
           return oAuth;
    }
   
    public void pulishMsg(OAuthV2 oAuth,String status,String fileName) throws Exception{
            TAPI tAPI=new TAPI(oAuth.getOauthVersion());//根据oAuth配置对应的连接管理器
            if(StringUtils.isBlank(fileName)){
                 tAPI.add(oAuth, "json", status, "127.0.0.1");
            }else{
                tAPI.addPic(oAuth, "json", status, "127.0.0.1", fileName);   //发布围脖
            }
            tAPI.shutdownConnection();
    }
    public void createFriend(OAuthV2 oAuth,String name) throws Exception{
        FriendsAPI friendsAPI= new FriendsAPI(oAuth.getOauthVersion());
        String checkData = friendsAPI.check(oAuth, "json", name, "", "2");
        JSONObject responseJsonObject;
        JSONObject dataJsonObject;
        responseJsonObject= JSONObject.fromObject(checkData);
        dataJsonObject=((JSONObject)responseJsonObject.get("data"));
        String isidol = ((JSONObject)dataJsonObject.get(name)).get("isidol").toString();
        if("false".equals(isidol)){
           friendsAPI.add(oAuth, "json", name, "");   //添加关注
        }
        friendsAPI.shutdownConnection();
    }
   
    public MyUser getUserInfo(OAuthV2 oAuth,String name) throws Exception{
         UserAPI userAPI= new UserAPI(oAuth.getOauthVersion());
         String res = null;
         weibo4j.org.json.JSONObject userData = null;
         MyUser user = null;
         if(StringUtils.isBlank(name)){
             res = userAPI.info(oAuth, "json");
         }else{
             res =  userAPI.infos(oAuth, "json", name, "");
         }
         weibo4j.org.json.JSONObject userJson = new weibo4j.org.json.JSONObject(res);
         userData = userJson.getJSONObject("data");
         System.out.println(userData);
            if (userData != null){
                user = new MyUser();
                user.setId(userData.getString("openid"));
                user.setUserName(userData.getString("name"));
                user.setHuaming(userData.getString("nick"));
                user.setLocation(userData.getString("location"));
                user.setBirth(userData.getString("birth_year"));
                user.setDescription(userData.getString("introduction"));
                String head = userData.getString("head");
                if (head != null && !"".equals(head))
                    user.setPicUrl((new StringBuilder(String.valueOf(userData.getString("head")))).append("/50").toString());
                String sex = userData.getString("sex");
                if (sex != null && !"".equals(sex))
                    user.setSex(Integer.valueOf(Integer.parseInt(sex)));
            }
         userAPI.shutdownConnection();
         return user;
    }

   //ClientId,ClientSecret  大家自己去申请,这个我改动了 不能给大家用
    public void init(){
        oAuth.setClientId("801187117");
        oAuth.setClientSecret("2d485d1c588849ca036452d78ad82bc4");
        oAuth.setRedirectUri("http://www.55tuan.com/a/forwardQQweibo2.do");
    }


    public OAuthV2 getOAuth() {
   
        return oAuth;
    }


    public void setOAuth(OAuthV2 auth) {
   
        oAuth = auth;
    }
   
   
}

 

 

    @RequestMapping(value = "/bindQQ2",method=RequestMethod.GET)
    public String bindQQ2(QueryForm queryForm, String goodsId,ModelMap modelMap, HttpServletRequest request,
            HttpServletResponse response) {
        String authorizationUrl = "";
        try{
           
            authorizationUrl = qqWeiBo2.getRequestToken();
            TuanDistributedHttpSession session = new TuanDistributedHttpSession(request, response);
            session.setAttribute("oAuth", qqWeiBo2.getOAuth());
           
        }catch(Exception e){
            e.printStackTrace();
            logger.error("bindSina is error "+e,e);
           
        }
        return "redirect:"+authorizationUrl;
    }
    @RequestMapping(value = "/forwardQQweibo2")
    public String forwardQQweibo2(QueryForm queryForm, String code,String openid,String openkey,
            ModelMap modelMap, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        try{
               TuanDistributedHttpSession session = new TuanDistributedHttpSession(request, response);
               OAuthV2 oAuth = (OAuthV2)session.getAttribute("oAuth");
               qqWeiBo2.getAccessToken(oAuth,code, openid, openkey);
              
               qqWeiBo2.pulishMsg(oAuth,"封装完毕:Oauth2授权后发表一条带网络图片的微博", "http://ww1.sinaimg.cn/bmiddle/7e14fe22jw1dvbdwfyvpoj.jpg");
              
               qqWeiBo2.createFriend(oAuth,"linariel");
             
               MyUser user = qqWeiBo2.getUserInfo(oAuth, null);
              
               System.out.println(user.getId());
             
              
        }catch(Exception e){
            logger.error("异常信息:"+e,e);
            return "error";
        }
        return "error";
    }

 

 

分享到:
评论

相关推荐

    Java版|腾讯微博|OAuth2.0授权|官方方法|可发文本和图片|示例代码

    首先,让我们了解OAuth2.0的基本概念,然后详细讲解腾讯微博的TAPI(Tencent API)以及如何整合这些知识来实现所需功能。 OAuth2.0是一种授权框架,它允许第三方应用安全地访问用户在某个服务提供商(如腾讯微博)...

    腾讯微博api封装

    腾讯微博API封装是一个针对开发者的工具,旨在简化与腾讯微博平台的交互过程,方便开发者集成腾讯微博的功能到自己的应用中。下面将详细讲解这个过程,包括API授权、接口调用和封装方法。 首先,让我们从授权开始。...

    asp.net 腾讯微博新浪微博帐号登录 授权

    2. 拼接授权URL:根据腾讯微博的OAuth2.0协议,构建授权请求的URL,包含App ID、回调地址、权限范围等参数。 3. 用户授权:引导用户跳转到上述URL,用户在腾讯微博上确认授权。 4. 获取授权码:用户授权后,腾讯微博...

    腾讯微博 开放平台 PHP SDK2.1.2.zip

    2. **API调用**:提供了对腾讯微博API的封装,如发布微博、转发微博、评论、获取用户信息、搜索等,简化了API调用过程。 3. **错误处理**:当API调用出现问题时,SDK能自动捕获错误并返回相应的错误信息,帮助开发者...

    PHP-QQ-OAuth2.0:QQ第三方登录原始码(针对对象)

    PHP-QQ-OAuth2.0库就是为了解决这个问题,它将调用QQ OAuth2.0接口的复杂流程封装成了一组易于使用的类。 在"PHP-QQ-OAuth2.0"项目中,开发者可以创建一个类实例,通过调用特定方法来实现QQ登录的集成。例如,关键...

    腾讯微博API_SDK_PHP示例

    1. **OAuth认证**:腾讯微博API使用OAuth 2.0进行授权,这是互联网上广泛采用的一种安全授权协议。开发者需要先注册应用获取App Key和App Secret,然后通过OAuth流程获取用户授权,才能访问用户的微博数据。 2. **...

    新浪、腾讯微博,微信好友、朋友圈 分享

    需要注意的是,腾讯微博的分享可能需要处理OAuth 2.0授权流程。 3. 微信分享: 微信提供了微信开放平台,开发者可以注册应用并获取AppID和AppSecret。微信SDK支持多种分享形式,如文本、图片、网页链接、小程序等...

    PHP版腾讯微博SDK库3.0.2

    PHP版腾讯微博SDK库3.0.2是一个用于与腾讯微博平台进行交互的开发工具包,它使得PHP...在整个过程中,理解OAuth 2.0授权流程、熟悉腾讯微博的API接口,以及掌握SDK提供的各种工具和功能,都是开发者必备的知识点。

    腾讯微博 API C++-SDK (修正版)

    1. **认证机制**:SDK提供OAuth 2.0认证流程,这是腾讯微博API的基本安全要求。通过授权码(Access Token),开发者可以在用户的许可下访问其微博账户的相关信息。 2. **请求与响应对象**:SDK封装了HTTP请求和响应...

    C#QQ登录的API,返回头像等用户信息,QQ登录OAuth2.0

    QQ登录的API是腾讯提供的一种服务,允许第三方应用通过OAuth2.0协议获取用户的QQ账号信息,以便实现安全的身份验证和授权。C#开发者可以利用这些API为自己的应用程序添加QQ登录功能,使得用户可以通过自己的QQ账号...

    新浪腾讯微博分享demo

    总结一下,"新浪腾讯微博分享demo"主要涵盖了OAuth 2.0授权流程、微博API的使用、分享功能的实现,以及用户体验设计。通过这个demo,开发者能够学习到如何在移动或Web应用中集成微博分享,为用户提供方便快捷的社交...

    Android应用源码之新浪、腾讯、网易、搜狐微博OAuth认证整合版.zip

    用户授权流程结束后,应用会得到OAuth Token和OAuth Token Secret,这两个参数用于调用网易微博的API。 最后是搜狐微博的OAuth整合。开发者需在搜狐开放平台注册应用,获取API Key和Secret Key。在用户授权后,应用...

    腾讯微博第3方接入

    1. **OAuth认证**:腾讯微博采用OAuth 2.0协议进行授权,这是目前广泛使用的开放网络身份验证标准。开发者需要在腾讯微博开放平台上注册应用,获取App ID(客户端ID)和App Key(客户端密钥)。OAuth流程包括请求...

    腾讯微博api开发C#版 SDK asp.net 获取登陆用户 源码

    如果你需要其他未提供的功能,可以查看腾讯微博的官方API文档,了解如何通过SDK直接调用未封装的API接口,然后根据需要扩展SDK的功能。 6. **注意事项**: 在使用过程中,务必遵守腾讯微博的开发者政策,不要滥用...

    腾讯微博登陆包

    1. **OAuth认证**:腾讯微博使用OAuth 2.0进行授权,允许第三方应用安全地获取用户的微博信息,而不必存储用户的登录凭据。开发者需要申请获得App Key和App Secret,然后通过这些密钥引导用户授权,获取Access Token...

    安卓Android源码——新浪、腾讯、网易、搜狐微博OAuth认证整合Android版.zip

    这个压缩包"安卓Android源码——新浪、腾讯、网易、搜狐微博OAuth认证整合Android版.zip"提供了针对四大中国主流社交媒体平台——新浪、腾讯、网易和搜狐的OAuth认证整合示例代码,这对于开发者来说是宝贵的资源,...

    腾讯微博APIDemo.rar

    腾讯微博API Demo是一款基于腾讯微博开放平台的示例应用,它展示了如何使用腾讯微博的API进行各种功能的实现,如发布微博、获取用户信息、管理粉丝等。此压缩包文件包含了一个完整的SDK(Software Development Kit)...

    基于ThinkPHP框架的腾讯微博和新浪微博同步登陆代码

    这些SDK封装了OAuth认证和API调用,简化了与微博平台的交互。你需要学习如何集成这两个SDK到ThinkPHP项目中,设置相应的配置,如API密钥、回调URL等。 3. **会话管理**:当用户授权后,你需要将访问令牌存储在...

    Android 腾讯微博客户端源码.zip

    这个微博客户端中用到得一些知识点。...15:腾讯Oauth认证的使用(新浪的,人人的,淘宝的开放API也是基于这个的,版本不同可能) 16:ViewHolder以及LayoutInflater等的使用 17:腾讯API的调用与封装  

    实现新浪微博一键分享

    总结起来,实现新浪微博一键分享功能,开发者需要对OAuth2.0授权机制有基本了解,熟悉微博开放平台的API接口,以及如何使用SDK进行集成。同时,良好的用户体验设计也是关键,如在分享过程中保持流畅,错误处理及时且...

Global site tag (gtag.js) - Google Analytics