网络知识 娱乐 【Web Function】实践:Python搭建轻量级二维码解析服务

【Web Function】实践:Python搭建轻量级二维码解析服务

前言

在平时的工作学习中,我们有时会遇到解析二维码内容的需求,碰到这种比较好玩的需求当然要用有意思的产品去实现了,刚好腾讯云推出了 web function 这种结合了 serverless 与 web 服务能力的产品,自然要去体验一番了。

本次就记录一下如何使用 Python web function 来实现一个简易二维码解析服务。

实现思路

本次实验目的是希望 web function 可以接收一个二维码图片的网络地址,然后下载下来进行解析并将解析后的结果返回出去。

这里主要借助Python的zxing这个库来做这个核心的解析功能。

话不多说,程序的功能还是比较简单的,下面是参考代码:

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 控制台,单击左侧导航栏的「函数服务」,选择自定义创建函数。

image.png

函数类型选择「Web函数」就好了,地域随便选一个,部署方式使用代码部署,运行环境为Python 3.6。

image.png

接着函数代码我们使用本地上传zip包即可。

image.png

函数测试

上传完成之后可能会有一些 bug,我们只需要在 cloud studio 中在线调试即可。

web 函数访问

测试好了之后如何进行访问呢,web函数可以直接通过网址触发,我们只要把生成的访问地址直接打开就好了。

image.png

部署之后就可以得到一个访问地址,通过这个地址我们就可以使用刚才的 web function 提供的服务了。

示例服务地址:

https://service-rw82mcg7-1256464567.sh.apigw.tencentcs.com/release/

测试二维码图片地址:

http://cdn.xuedingmiao.com/qrcode_xuedingmiao.com.png

体验感受

整体使用过程还是比较顺畅的,本地开发的代码不需要怎么改造就可以上传上去直接使用,除了文档方面资料相对少些,其它都还是比较方便的。

参考资料

  • Python云函数开发方法
  • Web 函数相关问题
  • 依赖安装