博客园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了~

 

posted @ 2022-10-24 14:41  我是冰霜  阅读(747)  评论(0编辑  收藏  举报