“众所周知,云开发目前只支持 Node js,如何突破这个限制?且看高手们如何用 Python 打通云开发七经六脉,让云开发的使用更加行云流水。”
由于 BBC 六分钟官网直接访问,平时看 BBC 新闻也是颇费力气。于是我想,为何不自己做个“BBC 新闻摘要小程序”呢?
做一个方便自己的小程序,不需要很复杂的架构。:用闲置的 DigitalOcean 服务器下载音频和对话脚本,传回国内 COS。然后用小程序展示就搞定啦。
我还清晰地记得,5 月 17 号,微信开发者社区推送了一条消息:可以外网上传文件到云存储了!
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/index.html
说实话,之前也考虑过小程序里的云存储,但好像只能通过开发者工具人工上传。所以收到这条推送之后第一时间就去看了文档,理了一遍小程序云存储上传逻辑是:
step1: 用小程序 Appid 和 Appsecret 拿 Access_token
step2: 用拿到的 Access_token 拿文件上传 URL 和相关参数
step3: 用拿到的 URL 和相关参数拼接完整的 POST 请求来上传文件
从写抓取脚本和小程序制作上线花了大概一天的时间。
理顺了逻辑,接下来就是写代码了。 Python 用来 http 请求的,选用 requests。 首先:拿 access_token
def get_token():
token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + ID + "&secret=" + SECRET
try:
token = requests.get(token_url)
token = token.json()
return token["access_token"]
except Exception as e:
logging.error(e)
然后,用 access_token 获取文件上传相关参数
def get_upload_url(token, env, path):
post_url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=" + token
playload = json.dumps({"env":env, "path":path})
try:
upload = requests.post(post_url, data=playload)
return upload.json()
except Exception as e:
logging.error(e)
拿到参数后需要解析重新拼接来完成上传:
def parse_form(res):
form = {}
form["key"] = res["url"].split("/")[-1]
form["Signature"] = res["authorization"]
form["x-cos-security-token"] = res["token"]
form["x-cos-meta-fileid"] = res["cos_file_id"]
return (form, res["url"])
最后,就是上传了:
def upload(res, file):
form = res[0]
upload_url = res[1]
with open(file, "rb") as f:
form["file"] = f.read()
try:
success = requests.post(upload_url, files=form)
except Exception as e:
logging.error(e)
其实 Python 实现小程序·云开发的文件上传,只是一个小功能实战,但是由此给我们的启示是,可以利用云开发的 HTTP API 去实现各类语言和云开发的对接。
关于云开发 HTTP API 的使用文档,可参考超级链接 - `
最后放上小程序二维码,以及效果预览。
如果你有关于使用云开发 CloudBase 相关的技术故事/技术实战经验想要跟大家分享,欢迎留言联系我们哦!比心!