微博開放平臺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來作到。
 
若是之後實踐中用到了這些功能,再作記錄,本文到此爲止。
相關文章
相關標籤/搜索