近期公司全部換成了飛書作為通訊的工具,之前的企業微信的機器人和寫法都得重新寫過了。
所以在打包以后的構建通知等都要通過飛書來通知。當然普通的通知寫法很簡單,帶有圖片的會有點麻煩。
但是比較蛋疼的是,公司打包的機器上只有Python2.7(WHATTHEFXXK)。
沒有辦法,雖然Python2.7很蛋疼,但是也只能上了。
在飛書的官方上有提供Python3.X版本的寫法,我這里也就不多說了。
主要講講,Python2.7的一個寫法。
其實一開始走了不少的各種彎路,總是以為是圖片的編碼問題?因為Python總是報的編碼的錯誤。
於是總是在圖片相關的編碼上的問題上糾結。
后面我才發現了一個巨大的坑!這個坑是之前沒有想到的。
問題出在headers上,由於編碼上的不同,Python2.7傳入的參數內是帶有u'...'
比如,我編寫了一個字符串number,輸出到網頁上,變成了u'number'
原因:python2.7支持unicode編碼和utf-8編碼兩種,顯示時顯示成u‘number’表明這是一個unicode編碼的字符串,所以轉換成utf-8就不顯示成u'number'啦!~
雖然有些人說其實他不會影響程序的運行,但是由於我是傳入的參數,傳錯了就會導致有各種的報錯,於是我就炸了,搞了半天。
然后我會附上2.7如何運行的代碼!注意是2.7!2.7!2.7!
def upload_image(self, image_path): postUrl = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/" payload_message = { "app_id": "", #填寫你的機器人的app_id "app_secret": "" #填寫你的機器人的app_secret } headers = { 'Content-Type': 'application/json' } response = requests.request("POST", postUrl, headers=headers, data=json.dumps(payload_message)) content = response.json() if content.get("code") != 0: raise Exception("Call Api Error, errorCode is %s" % content["code"]) token = content.get("tenant_access_token") with open(image_path, 'rb') as f: image = f.read() resp = requests.post( url='https://open.feishu.cn/open-apis/image/v4/put/', headers={'Authorization': "Bearer " + token.encode('utf-8')}, files={ "image": image }, data={ "image_type": "message" }, stream=True) resp.raise_for_status() content = resp.json() print(content) if content.get("code") == 0: return content else: raise Exception("Call Api Error, errorCode is %s" % content["code"])
啊,寫2.7心好累,還是3.X爽
