实践篇:无服务器云函数 SCF+API网关+第三方天气api接口(实现天气查询功能)

2019-02-21 17:37:55 浏览数 (1)

引言:有人可能要问,要实现天气查询功能,网上随便一搜,一大把,为何,要绕道去无服务器云函数中去实现这个天气查询的功能,其实,网上给的天气api接口,返回的天气信息,都是以json的形式返回,在展现给客户之前,还需要经过一般处理的。于是就有了笔者的这篇文章。开篇之作。

下面我做一个简单的例子,把无服务器云函数SCF API网关 第三方API接口三者结合起来,提供一个能查询天气预报的服务,在这个框架里不需要配置WEB容器、不需要搭建运行环境、不需要购买负载均衡,通过配置和一段代码就能完成一个查询天气预报的服务提供出去。 API网关 无服务器云函数SCF 云市场的结合架构图

API网关 无服务器云函数SCF 云市场的结合架构图API网关 无服务器云函数SCF 云市场的结合架构图

整个这个架构搭建分三部分设置,第三方API接口,编写函数代码,设置API网关,调试成功就可以开放API地址了。

申请第三方天气API接口 进入云市场选择手机号归属地查询(免费)服务,开通该服务,获取到服务的密钥等,填写到对应的代码中。本例使用的第三方天气api接口是阿里云,云市场提供的天气API接口,为什么选择这里呢,因为有1000次的免费调用api额度,就算是付费,也只需要少许的钱,就能拥有1万次的调用。大家请自行准备好天气api接口。 无服务器云函数SCF 第一步:创建一个函数 直接在腾讯云控制台,无服务器云函数中新建设一个函数,可以选择空白函数,或者模板函数,然后填写函数名称,选择运行环境,本例选择,空白函数,运行环境选择 Python2.7 代码模块如下:

代码语言:javascript复制
# -*- coding: utf8 -*-
import json
import urllib, urllib2, sys
def main_handler(event,content):
    if "requestContext" not in event.keys():
        return {"errorCode":410,"errorMsg":"event is not come from api gateway"}
    city=event["queryStringParameters"]["city"] #获取API网关设置的参数,如图(API网关设置)
    host = 'http://weatherq.market.alicloudapi.com' #api接口地址
    path = '/clouds/query/weather/details'#api接口路径
    method = 'GET'
    appcode = 'apicode'#从API接口服务商获取appcode相关信息
    querys = 'cityNameOrId='   city #cityNameOrId 此参数,是根据api接口文档中指定的。
    bodys = {}
    url = host   path   '?'   querys #拼接URL
    request = urllib2.Request(url)
    request.add_header('Authorization', 'APPCODE '   appcode)
    response = urllib2.urlopen(request)
    content = response.read()
    res=json.loads(content)
    city = res['data']['todayDetails']['city']
    wendu = res['data']['currentDetails']['temp']
    fengxiang = res['data']['currentDetails']['windDirection']
    fengli = res['data']['currentDetails']['windStrength']
    shidu = res['data']['currentDetails']['humidity']
    time = res['data']['currentDetails']['refreshTime']
    #注意拼接字符串时,字符前加u 如u':当前实况天气,',否则报错
    res = city   u':当前实况天气,'  u'温度:'   wendu   u'℃'   u','   u'湿度:'   shidu   u','   u'风向:'   fengxiang   u','   u',风力:'   fengli  u'。'  
    return {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {'Content-Type': 'text/html'},
        "body": res
    }

第二步 API网关配置

在编写函数的界面,选择触发方式,然后点击新增触发方式

依次选择,触发方式,API网关触发器,选择新建API服务,填写API服务名称,请求方式 GET ,发布环境,发布,为了方便调试效果,鉴权方法选免鉴权。如下图所示。

API网关参数设置,如下图所示。

第三步 调式API接口,及返回数据效果 API网关调式结果:如下图

Postman返回结果:

至此,搭建无服务器应用--无服务器云函数 SCF API网关 第三方天气api接口(实现天气查询功能)请成功的实现了,第一次发布实践性的文章,写得不好的地方,大家多多指正,欢迎留言评论。

0 人点赞