前言
在平时的工作学习中,我们有时会遇到解析二维码内容的需求,碰到这种比较好玩的需求当然要用有意思的产品去实现了,刚好腾讯云推出了 web function 这种结合了 serverless 与 web 服务能力的产品,自然要去体验一番了。
本次就记录一下如何使用 Python web function 来实现一个简易二维码解析服务。
实现思路
本次实验目的是希望 web function 可以接收一个二维码图片的网络地址,然后下载下来进行解析并将解析后的结果返回出去。
这里主要借助Python的zxing这个库来做这个核心的解析功能。
话不多说,程序的功能还是比较简单的,下面是参考代码:
代码语言:txt复制import json
import zxing
import requests
import os
import time
from flask import Flask
from flask import request
now = 'file' str(time.time())
app = Flask(__name__)
@app.route('/')
def main():
imgurl=request.args.get("url")
if imgurl is None:
# 默认图片
imgurl=http://cdn.xuedingmiao.com/qrcode_xuedingmiao.com.png'
def download_img(img_url):
r = requests.get(img_url, headers={}, stream=True)
ctype = r.headers['Content-Type']
global fileName
fileName = now
if ctype.find('image') == -1:
return False
ctype = ctype[ctype.find('/') 1:]
typeDict = {
"jpeg": "jpeg",
"jpg": "jpg",
"png": "png",
"bmp": "bmp",
"gif": "gif"
}
global ext
ext = typeDict.get(ctype, 'png')
if r.status_code == 200:
open(os.getcwd() '/baseimg-' fileName '.' ext, 'wb').write(r.content)
return True
del r
# 下载的二维码图片
ok = download_img(imgurl)
save_name = os.getcwd() '/baseimg-' fileName '.' ext
if ok:
reader = zxing.BarCodeReader()
barcode = reader.decode(save_name)
return(barcode.parsed)
if __name__ == '__main__':
app.run(host='0.0.0.0',port=9000)
web 函数创建
本地开发
代码可以参考上方示例,这里我们发现官方文档上面说Python 3 云端运行时已经支持了一些库但是本次函数需要的并没包含,所以需要我们自己安装依赖库。
Python 运行时支持依赖打包上传及在线IDE安装两种依赖库安装方法,这里选择了本地将依赖安装好再进行打包上传。
函数创建
登录 Serverless 控制台,单击左侧导航栏的「函数服务」,选择自定义创建函数。
函数类型选择「Web函数」就好了,地域随便选一个,部署方式使用代码部署,运行环境为Python 3.6。
接着函数代码我们使用本地上传zip包即可。
函数测试
上传完成之后可能会有一些 bug,我们只需要在 cloud studio 中在线调试即可。
web 函数访问
测试好了之后如何进行访问呢,web函数可以直接通过网址触发,我们只要把生成的访问地址直接打开就好了。
部署之后就可以得到一个访问地址,通过这个地址我们就可以使用刚才的 web function 提供的服务了。
示例服务地址:
https://service-rw82mcg7-1256464567.sh.apigw.tencentcs.com/release/
测试二维码图片地址:
http://cdn.xuedingmiao.com/qrcode_xuedingmiao.com.png
体验感受
整体使用过程还是比较顺畅的,本地开发的代码不需要怎么改造就可以上传上去直接使用,除了文档方面资料相对少些,其它都还是比较方便的。
参考资料
- Python云函数开发方法
- Web 函数相关问题
- 依赖安装