获取腾讯天气数据(jsonp 方式)

9 篇文章 0 订阅
订阅专栏

利用 jsonp 方式获取腾讯天气数据

案例分析

下面是利用 jsonp 函数写的一个小案例:跨域请求腾讯天气数据并展示在自己的页面。腾讯天气网站的中我们需要获取的数据是两天(48)内的天气数据,其他的我们不需要。即需要下图(网址:https://tianqi.qq.com/index.htm)中的数据。

在这里插入图片描述

查看网页中的请求信息发现一共有 4 个请求是利用 jsonp 实现的跨域请求(请求参数带有 callback 参数且请求地址是非同源的)。其中有三个是从 https://wis.qq.com/weather/common 得到一些有关天气的数据,有一个是从 https://apis.map.qq.com/ws/location/v1/ip 获取一些和定位有关的数据。当然我们只需要看一个请求 48 小时的天气数据的 jsonp 请求,打开如下(有下划线的那个请求):

在这里插入图片描述返回的数据的详细信息如下图:

在这里插入图片描述
如果没有接口文件(我也没有),为了可以更加清晰地了解请求需要传递地参数和响应数据的详细信息可以在另一个页面打开该请求。可以发现请求信息好长。。。

https://wis.qq.com/weather/common?source=pc&weather_type=observe%7Cforecast_1h%7Cforecast_24h%7Cindex%7Calarm%7Climit%7Ctips%7Crise&province=%E5%B9%BF%E4%B8%9C%E7%9C%81&city=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=&callback=jQuery111307981370712135891_1618987774109&_=1618987774111

而且看起来好乱,为此我利用 encodeURL() 对其进行解码结果如下

https://wis.qq.com/weather/common?source=pc&weather_type=observe|forecast_1h|forecast_24h|index|alarm|limit|tips|rise&province=广东省&city=广州市&county=&callback=jQuery111307981370712135891_1618987774109&_=1618987774111

现在可以根据请求地址信息看看其请求参数的信息:

  • source:设备类型。
  • weather_type:需要获取哪些天气数据,这里我们需要获取的是 forecast_1h|forecast_24h 。
  • province:需要获取哪个省份的天气数据。
  • city:需要获取的是哪个城市的天气数据。
  • callback:jsonp 的响应处理函数。

上面的设备类型应该是由浏览器进行判断输入,省份城市应该是由另一个定位有关的跨域请求得到。但是我们这里自己手动传入即可。

代码实现

如果将得到的数据直接渲染至页面可以发现有关时间的数据的展示太不友好了,所以需要封装一个格式化时间的方法。并将方法导入模板中对时间数据进行必要的格式化操作。

在这里插入图片描述

<body>
    <div class="container">
        <table class="table" align="center" id="box"></table>
    </div>
    <script src="/js/template-web.js"></script>
    <script src="/js/jsonp.js"></script>
    <!-- 渲染模板准备 -->
    <script id="tpl" type="taxt/html">
        <tr>
            <th>时间</th>
            <th>温度</th>
            <th>天气</th>
            <th>风向</th>
            <th>风力</th>
        </tr>
        {{each info}}
        <tr>
            <td style="width:200px">{{dateFormat($value.update_time)}}</td>
            <td>{{$value.degree}}</td>
            <td>{{$value.weather}}</td>
            <td>{{$value.wind_direction}}</td>
            <td>{{$value.wind_power}}</td>
        </tr>
        {{/each}}
    </script>
    <script>
        // 获取table标签
        var box = document.getElementById('box');
        function dateFormat(date) {
            var year = date.substr(0, 4);
            var month = date.substr(4, 2);
            var day = date.substr(6, 2);
            var hour = date.substr(8, 2);
            return year + '年' + month + '月' + day + '日' + hour + '时';
        }
        // 向模板中开放外部变量
        template.defaults.imports.dateFormat = dateFormat;
        jsonp({
            url: 'https://wis.qq.com/weather/common',
            data: {
                source: 'pc',
                weather_type: 'forecast_1h',
                // weather_type: 'forecast_1h|forecast_24h',
                province: '黑龙江省',
                city: '哈尔滨市'
            },
            success: function(data) {
                var html = template('tpl', {
                    info: data.data.forecast_1h
                });
                box.innerHTML = html;
            }
        })
    </script>
</body>

最后的页面展示如下图:

在这里插入图片描述

android用post解析webserver天气
08-12
android使用get和post方式来解析webserver的天气接口,非常的方便好用,注意添加清单文件中的权限
vue实现根据ip地址获取地区天气
weixin_45870300的博客
08-08 2449
vue实现根据ip地址获取地区天气
天气API接口 - 城市代码
02-25
针对:1. Vuejs模拟Ajax请求接口(天气预报API)跨域问题; 针对:2. 前后端分离的vue项目模拟axios与ajax跨域请求; 此TXT文档旨在罗列使用天气API接口中的城市对应码。 具体实现技术参考相关文档。
太强了,用 Python+Excel 制作天气预报表!
Python学习与数据挖掘
10-10 2528
今天给大家介绍一个Python+Excel的实战项目,非常有趣。主要使用xlwings和requests这两个Python库,以及Office的Excel。xlwings处理表格,requests则是请求数据。先从Excel中获取城市信息,然后请求接口,获取天气信息,再返回给Excel。具体操作可以看下图~在城市栏输入杭州,点击查询按钮,表格的数据就会发生变化,的确是杭州的天气预报。① 数据获取既然是天气预报,那肯定是需要天气数据的。找了一圈国内开放的天气API接口,大多都是需要注册,果断放弃。腾讯倒是有
【前端21_微信】常用之制作二维码、腾讯地图API、百度地图API、获取位置的天气信息
Lovely Ruby 的手账
12-10 2513
文章目录制作二维码腾讯地图 API :选择位置百度地图 API 使用示例获取位置天气信息 制作二维码 用途:扫二维码进入一个网站 二维码是用canvas画出来的演示如下 首先下载这个 weapp.qrcode.min.js 链接:https://pan.baidu.com/s/1MvY5iI60ipSCiCWZJOlEyQ 提取码:3yrs 把这个复制到你的项目中去,可以新建个名字叫 ...
腾讯天气接口
热门推荐
qq_39859060的博客
04-12 1万+
官方网站:https://tianqi.qq.com/ 城市接口:https://wis.qq.com/city/like source: pc (请求类型pc/wx) city: 龙岗 (搜索地名) 请求结果:{"data":{"101280606":"广东, 深圳, 龙岗"},"message":"OK","status":200} 没有结果data为{} 天气接口: htt...
腾讯天气的API接口
码农桃子的博客
05-10 1183
【代码】腾讯天气的API接口。
获取地理位置请求免费天气接口
请叫我欧皇!的博客
06-14 1201
需求:根据地理位置信息去请求免费的天气接口数据,拿到数据后进行展示,这边我用到了俩个key,一个是高德天气的key和心知天气的key,为什么要这么麻烦呢,是因为之前写过一版不需要获取地理位置,直接就可以请求天气获取数据,但是用了不到一个月,崩了,要我用升级版...,所以还是就麻烦一点吧,另外个版的请求免费天气,我在另外个文章单独写,如果不想请求地理位置直接请求天气接口的可以去看另外一篇文章。结果得到效果如下图1.需要注册开发者,在控制台申请。
腾讯天气API解析
默金
11-05 1万+
import requests import json def get_weather(): url = "https://wis.qq.com/weather/common" querystring = {"source":"xw","weather_type":"forecast_1h|forecast_24h|index|alarm|limit|tips","provinc...
免费天气接口
最新发布
别看,很懒,随心
06-28 282
weather_type index 穿衣,舒适度等。weather_type observe 当前天气。callback 回调函数 不传直接返回json。weather_type 查询类型,多个|分隔。weather_type tips 天气介绍。weather_type alarm 预警。weather_type air 空气质量。weather_type rise 日出。source 请求类型: pc/wx。province 省份:广东。请求类型: pc/wx。city 城市:深圳。
js天气预报 js版天气预报接口
05-17
js版得,可能显示的比较慢,显示不出来刷新下,经本人测试,可以显示出来,先去QQ查看ip,然后把ip转换为城市,最后由城市代码去查看天气
Ajax的jsonp方式跨域获取数据的简单实例
12-08
jsonp的调用,今天碰到了,正好整理了一下。 <!DOCTYPE html> <html> <head> [removed][removed] [removed] $(document).ready(function(){ $("#b01").click(function(){ $.ajax({//...
jQuery使用JSONP实现跨域获取数据的三种方法详解
10-19
主要介绍了jQuery使用JSONP实现跨域获取数据的三种方法,结合实例形式对比分析了jsonp跨域获取数据的3种常用操作技巧,需要的朋友可以参考下
AJAX跨域请求之JSONP获取JSON数据
10-23
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
使用jsonp实现跨域获取数据实例讲解
11-27
var jsonp = function(url, data, callback) { //1、挂载回调函数 var fnsuffix = Math.random().toString().replace('.', ''); var cbFuncName = 'my_json_cb' + fnsuffix; window[cbFuncName] = callback; /...
SyntaxError: Unexpected token R in JSON at position 0
TKOP_的博客
04-12 7726
这里主要是记录写项目练习时遇到的一个坑。解决报错问题 SyntaxError: Unexpected token R in JSON at position 0 和 SyntaxError: Unexpected token T in JSON at position 0 。
图书管理练习(Vue 基础练习 )
TKOP_的博客
04-30 3719
这是在学习 Vue 的模板语法和常用特性后自己敲的一个小练习。目的是避免眼高手低,做到掌握 Vue 的基本使用。其中涉及大部分的基本模板语法和常用特性。
博客项目(前端小项目练习)
TKOP_的博客
04-15 1200
记录使用 express 框架和基础的 node.js 实现多人博客管理系统项目的笔记。涉及的知识有 session、cookie 和一些第三方模块的使用等。
使用jsonp无法获取text格式数据
05-27
是的,JSONP一般用于跨域获取JSON格式的数据,无法直接用于获取text格式的数据。如果需要获取text格式的数据,可以使用代理页面的方式实现跨域访问。 代理页面的方式是指在同一域名下创建一个代理页面,用于在客户端和服务器端之间传递数据。客户端将数据发送到代理页面,代理页面再将数据转发给服务器端,服务器处理数据后再将结果发送回代理页面,代理页面再将结果传递给客户端。 具体实现方式如下: 1. 创建代理页面proxy.html: ```html <!-- proxy.html --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>代理页面</title> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <script> function proxy() { var data = window.location.search.substring(1); axios.post('http://example.com/proxy', data, { headers: { 'Content-Type': 'text/plain;charset=UTF-8' } }).then(function(response) { window.parent.postMessage(response.data, '*'); }).catch(function(error) { console.log(error); }); } window.onload = proxy; </script> </head> <body> </body> </html> ``` 2. 在父页面中,将需要获取的text格式数据以字符串形式作为参数,发送到代理页面: ```js // 父页面 var text = '这是需要获取的文本'; var proxyUrl = 'http://example.com/proxy.html'; var iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = proxyUrl + '?' + text; document.body.appendChild(iframe); window.addEventListener('message', function(event) { console.log(event.data); }); ``` 3. 在服务器端,接收代理页面发送的数据,并返回处理结果: ```js // 服务器端 const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.text()); app.post('/proxy', (req, res) => { const text = req.body; // 处理text格式的数据 const result = text.toUpperCase(); res.send(result); }); app.listen(80, () => { console.log('服务器已启动'); }); ``` 需要注意的是,代理页面需要在服务器端进行处理,并且需要考虑数据安全性的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 客户端与服务器端交互原理(HTTP数据请求与HTTP响应) 13263
  • Html常用标签和属性(包含Html5) 11903
  • css中的选择器及其权重 9671
  • SyntaxError: Unexpected token R in JSON at position 0 7725
  • JavaScript 基础(超详细) 7503

分类专栏

  • javaScript 14篇
  • DOM 和 BOM 7篇
  • vue
  • node.js 和 ajax 基础(前后端交互) 7篇
  • 代码分析 9篇
  • Html+Css 11篇
  • jQuery 6篇

最新评论

  • Html常用标签和属性(包含Html5)

    2301_76808783: 好详细,感谢分享😘

  • js 中的对象属性——configurable、writable 等(数据属性和访问器属性)

    make17better: 博主的表述确实不够清晰。我给你举个例子,如果对象的某个属性的 configurable 特性值为 false,那我显式地设置 {configurable: false} 是不会报错的,因为值并没有实际发生改变,就是这个意思。

  • js 中的对象属性——configurable、writable 等(数据属性和访问器属性)

    明月几时有666: 你好,configurable 和 enumerable 特性可以再次设置不变的值不报错,其中可以再次设置不变的值什么意思呢?不变的值是什么

  • 博客项目(前端小项目练习)

    学习学习嗨害嗨: 好的谢谢啦

  • 博客项目(前端小项目练习)

    TKOP_: https://blog.csdn.net/TKOP_/article/details/115611091

大家在看

  • 基础菜鸡学习c语言的一点感悟 1
  • SpringBoot + MyBaits+ Vue + ElementUi简单的数据流传递(从0开始搭建) 1012

最新文章

  • ES6 总结
  • Symbol、Map、Set
  • ES6 中的类(class)
2023年6篇
2021年38篇
2020年11篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源vc2008下载水族馆起名字取名花牛在草地里什么仿写句子王怎么起名字大全一号红人全部章节魔道祖师小说空间免费黑色皮肤tcl集团地址商标起名查询官网雨中的回忆给店起名有啥讲究没?姓杨起名网男高姓起名基金代码潘氏起名字大全的女孩子笔画五行起名儿童娱乐公司起名起个洋气点的生鲜店名flashplayer10堕落天使阵容精武门李连杰传奇1.85登录器吸吸吧黄晓明演的电影十小咒公司起名 农副产品宠物品牌起名成长的作文海西建设淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化