博客園api調用實例:獲取授權碼

博客園 OpenAPI文檔https://api.cnblogs.com/help

我們在調用博客園相關api時,一般先要獲取到token

關於token的獲取,官方提供了2種方式:Client_Credentials授權Authorization_Code授權

 

Client_Credentials授權比較簡單,只需要根據申請到的client_idclient_secret就可以拿到 access_token

但是使用這種方式拿到的access_token調用個別接口時卻無法調通(例如:獲取當前登錄用戶信息),此時需要使用Authorization_Code授權拿到的access_token纔行

 

所以我需要通過Authorization_Code授權獲取token,它的接口文檔如下

該接口有一個code參數,它是博客園的授權碼,需要通過另一個接口獲取:獲取授權碼

 

下面講一下如何獲取授權碼

獲取授權碼

接口文檔如下

剛開始我用requests在後臺請求了這個接口,發現無法得到code

詳細說明中有寫到:在瀏覽器中請求這個接口地址,會自動定向到博客園登陸頁,登陸後會進入默認回調頁

所以在瀏覽器中輸入這個接口地址,並拼接上參數,如下

https://oauth.cnblogs.com/connect/authorize?client_id=5xxxxx3&scope=openid profile CnBlogsApi offline_access&response_type=code id_token&redirect_uri=https://oauth.cnblogs.com/auth/callback&state=abc&nonce=xyz

登陸後就可以獲得授權碼了

 

很明顯這個結果我們無法通過接口拿到,它是在重定向到回調頁面時,自動帶上的code參數,應該從前端頁面獲取

 

例行網上衝浪一番後,發現可以通過selenium來實現,用selenium來模擬前端登錄然後拿到code

傳送門:https://q.cnblogs.com/q/133334/

具體實現過程如下

# coding: utf-8
"""
author: hmk
detail: 
create_time: 
"""
from selenium import webdriver
from urlobject import URLObject
from utils.read_conf import ConfigIni


conf = ConfigIni()
# print(conf["cn_blogs"]["client_id"])


def get_code():

    driver = webdriver.Chrome()

    url = URLObject("https://oauth.cnblogs.com/connect/authorize").add_query_params(
        client_id=conf["cn_blogs"]["client_id"],
        scope="openid profile CnBlogsApi offline_access",
        response_type="code id_token",
        redirect_uri="https://oauth.cnblogs.com/auth/callback",
        state="abc",
        nonce="xyz"
    )

    # print(url)

    driver.get(url)

    driver.implicitly_wait(30)

    code = driver.find_element_by_id('code').text
    print(code)
    # print("當前獲取到的博客園授權碼code={}".format(code))
    return code


if __name__ == '__main__':
    get_code()

運行這個文件後,會自動打開chrome瀏覽器,然後跳到登錄頁面,你手動輸入博客園賬號密碼登陸後,後端就會把code打印出來了

 

因爲每次調用get_code()函數時,selenium都會打開一個新的瀏覽器,然後需要你手動輸入驗證碼,這樣太不人性化了

我們需要設置selenium不要每次都打開新的瀏覽器,直接調用已經打開的瀏覽器,這樣手動登陸一次後就可以重複使用了

關於如何設置這一塊請參考如下博客:

mac:https://blog.csdn.net/weixin_35757704/article/details/109274655

windows:https://blog.csdn.net/weixin_41858542/article/details/84974356

 

拿到code後,就可以獲取博客園的token了~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章