微博开放平台api使用

前言:微博开放平台提供了微博数据的api接口,不只能够直接经过api调用微博服务发布微博查询微博,更重要的是,能够在本身的网站上得到新浪微博api的受权,调用微博的某些内容,就好像咱们再网站中看到好文章要分享到微博或者其余社交网站中同样,很是方便。java

下面就来探秘一番。
1.注册开发者并获取app key 和 app secret
  百度很容易找到微博开放平台的入口,登陆本身的微博帐号,点击帐号头像,会提示编辑开发者信息。
  
  能够看到以下的页面,只须要按照提示填写,其中紧急联系人能够填本身,网站无所谓,填百度也行。
  
提交以后,你须要在个人应用下实名认证,上传图片时请耐心等待,有点慢并且没有上传进度。上传以后点击返回,能够跳转到新页面:
 按照须要选择,而后建立本身的应用。至于这里面各类应用名词是什么意思我也不是很清楚,用着用着就熟了。我选择的是其余应用
 
 建立以后,会收到邮件,含有app key 和 app secret 。这是获取受权的关键。
2.获取token
  首页  http://open.weibo.com/ 点击api接口,会跳转到api接口说明文档页面,你会发现api有不少功能,包括建立微博,删除微博,关注/取消关注等很是多的接口,可是每一个接口都须要token才能访问。token从何而来?
首先你须要获取一个code码,其次你须要有个调用接口的网址(由于我申请的是网页应用)。
设置关联的网址:
点击你的应用名,而后在左边的菜单中找到高级信息,而后就能够编辑了。
 
点击api接口下 ,进入受权接口查看用法
按照实例,你须要发一个get请求包含client_id和redirect_uri。能够直接拼接。
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
其中,client_id是你申请的app key,redirect_uri是本身要回调接口的地址,api会原样返回。能够直接在浏览器输入url,以下图所示:
这个页面是否有些熟悉呢?受权以后,网页会跳回redirect_uri页面,而且在url后面拼上code。因而code就有了
接下来获取受权token,受权接口第二个:
页面上有详细的用法,发送http post请求,我用java的http-client4.5来作的,事实上其余方式也行。
代码写的比较烂,可是多少是可用的。5个必备参数值。咱们已经获取了最后两个,前面两个在邮件中。代码就不贴出来了。看管本身敲一敲有利于熟悉用法,之后少不了发各类请求。
至此,咱们成功受权,返回值里有须要的token值,若是返回error,请查看错误提示,或者百度错误信息。
此后只须要带着token,就能够请求到各类接口,虽然有次数限制,不过若是正常使用应该足够了。
 
后记:
1.原本我是想作一些相似于爬虫的功能,想在微博开放接口中,拿点数据,不过纵览api,多数是基于网页应用的微博分享的功能,
  好比获取本身的微博,获取粉丝,发微博,关注等,不是本身须要的。
  
 2.前面提了,微博开放api主要是用于第三方网站或者app接入微博,用微博登录或者经过api作微博分享,因此有这方面需求的彻底能够深刻研究一下api接口。
 3.api接口中,get请求均可以直接拼接字符串获取,可是对于刚刚请求受权的get请求来讲,它是须要用户的帐号赞成受权给应用,因此必需要登陆用户帐号,若是浏览器保有微博登录后的cookie,那么浏览器能自动登陆从而拿到目标code,若是没有就会提示登陆
    

    于是这个请求适合在浏览器上作,由于用代码发请求还要模拟登陆,或者使用登陆后的cookie,很是麻烦。不过api中其余get请求不会有这个问题,直接带token便可。模拟登陆可使用selenium的webdriver 拿到 cookie,其余模拟登陆的方式广泛很是麻烦。web

    固然,若是你内嵌到网站上,那登陆就是用户的事了。json

 4.以发送微博 为例:
@Test
    public void test2() throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        RequestConfig config =
                RequestConfig.custom().setConnectTimeout(10000)
                        .setSocketTimeout(10000).build();
        HttpPost post = new HttpPost("https://api.weibo.com/2/statuses/update.json");
        post.setConfig(config);
        List<NameValuePair> pairs = new ArrayList<>();
        BasicNameValuePair p1 = new BasicNameValuePair("access_token","");
        String content = "本条微博经过微博开放接口发送";
        BasicNameValuePair p2 = new BasicNameValuePair("status",
                content);
        BasicNameValuePair p3 = new BasicNameValuePair("visible","0");
        pairs.add(p1);
        pairs.add(p2);
        pairs.add(p3);
        post.setEntity(new UrlEncodedFormEntity(pairs,"utf-8"));
        response = client.execute(post);
        HttpEntity entities = response.getEntity();
        System.out.println(EntityUtils.toString(entities,"UTF-8"));
    }

 5.若是将开放api嵌入本身的网站中,大概作法是:在分享微博按钮(第三方登录按钮)上,发送微博受权认证,用户在网页上点击受权后,后台就得到了code,以及能根据code获取token。此后若是须要提取微博的用户名,也就能够直接在后台发请求。若是是分享到微博,也能够经过api来作到。
 
若是之后实践中用到了这些功能,再作记录,本文到此为止。
相关文章
相关标签/搜索