专栏首页用户1057441的专栏实践篇:无服务器云函数 SCF+API网关+第三方天气api接口(实现天气查询功能)
原创

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

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

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

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

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

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

# -*- 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接口(实现天气查询功能)请成功的实现了,第一次发布实践性的文章,写得不好的地方,大家多多指正,欢迎留言评论。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 业余草 SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的...

    业余草
  • Java基础系列(二十):枚举入门

    关键字 enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件来使用,这种新的类型就是枚举类。

    Vi的技术博客
  • Spring Boot 2.x(八):日志框架的使用

    最初我们开始接触Java的时候,我们通常会使用System.out.println()将我们想要知道的信息打印到控制台。 但是,如果在服务器上我们去运行我们的J...

    Vi的技术博客
  • Android开发笔记(八十二)SDK版本兼容

    Android控件很多属性都有默认值,比如文字默认黑色、编辑框默认透明背景等等,但因为android是开源的,各厂商都会自行修修补补,所以很多时候默认值并不...

    用户4464237
  • 利用图灵机器人为公众号添加智能问答,知识库功能

    订阅号很早就有了,我最近闲了无事就像探索探索可以怎么玩。首先联想到就是微软小冰智能问答系统,还有很早时候有一个公众号提供了,根据c、c++函数名返回API具体用...

    用户1539362
  • Elasticsearch集群监控指标

    “本片主要通过两个API讲解Elasticsearch集群监控的指标说明”

    create17
  • Spring Batch JSON 支持

    Spring Batch 4.1 开始能够支持 JSON 格式了。这个发布介绍了一个新的数据读(item reader)能够读取一个 JSON 资源,这个资源按...

    HoneyMoose
  • Swagger UI教程 API 文档神器

    在一些接口项目中,API的使用很频繁,所以一款API在线文档生成和测试工具非常有必要。而Swagger UI就是这么一款很实用的在线工具 本博客介绍如何在公...

    用户1208223
  • 对象持久化API之JPA入门教程

    注意:JPA是规范,不是ORM框架,是ORM框架的规范,JPA没有实现ORM,具体实现由ORM厂商提供

    用户1208223
  • 独立使用zuul网关分发不同服务的请求、权限控制,非SpringCloud

    网关api Gateway的重要性不言而喻,网关负责统一接收所有请求,然后根据不同的规则进行转发到不同的服务。使用网关能够统一的管理请求日志、进行权限控制、过滤...

    天涯泪小武

扫码关注云+社区

领取腾讯云代金券