返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: MAI 表盘
楼主: 石头
打印 上一主题 下一主题

[表盘制作教程] [更新]自己做的一个天气api地址 新加月相和日出日落时间api

[复制链接]

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

跳转到指定楼层
楼主
发表于 2016-6-27 11:05:32 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 石头 于 2016-7-1 20:23 编辑

之前做了一个天气表盘,主要是自己的做了一个转发的页面,弥补了麦步sdk中只能获取son数组中同样的key只能获取第一个key对应的值的问题。然后又用自己的一个闲置域名绑定了一个免费的空间,把那个转发的页面放了上去。
访问地址是:http://www.pilipapa.com/weather.php?city=所在的城市
比如:http://www.pilipapa.com/weather.php?city=北京
获得数据是:
{"err":0,"city":"北京","aqi":"良","uvi":"中等","t":"23","w1":"雷阵雨","t1":"33~21","d1":"微风","w2":"雷阵雨","t2":"26~20","d2":"微风","w3":"雷阵雨转多云","t3":"29~22","d3":"微风","w4":"阴转雷阵雨","t4":"29~22","d4":"微风"}
key所对应的值是:
err:错误代码,0代表的是成功
city:城市名称
aqi:空气质量
uvi:紫外线强度
t:今天的实时温度
w1: 今天的天气(w2,w3,w4依次为明天,后天,大后天的天气)
t1:今天的温度范围(t2,t3,t4依次为明天,后天,大后天的温度范围)
d1:今天的风向和强度(d2,d3,d4依次为明天,后天,大后天的风向和强度)

然后提供给有需要的麦友吧。

至于天气表盘的源码,都是依照卖萌表盘的源码修改的,主要是替换了获取json的几个key,都很简单。然后代码改的比较乱,就不公开了。

然后大家有什么请求联网数据的需要,获取一些什么信息,用到转发的话,可以说一下,我会尽量做一个。
【更新】
增加日出日落时间:
http://www.pilipapa.com/sun.php?city=城市
返回json示例:
http://www.pilipapa.com/sun.php?city=北京

{"sunrise":"04:52","sunset":"19:44","sunAltitude":-0.11,"sunAzimuth":2.21,"moonrise":"03:00","moonset":"17:29","moonAltitude":-0.55,"moonAzimuth":2.74}
增加月相:
http://www.pilipapa.com/moon.php
返回json示例
{"age":26.3,"distance":"365223.99","phase_name":"残月","phase":88}
phase代表月亏得百分比

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信 WeiboWeibo
收藏收藏3 分享分享 顶 踩

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

沙发
 楼主| 发表于 2016-6-27 16:07:59 来自手机 | 显示全部楼层
域名会一直在的 空间是免费的 但是应该是没什么问题吧
来自: 微社区

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

板凳
 楼主| 发表于 2016-6-27 19:23:46 | 显示全部楼层
wx_AAlzVp9L 发表于 2016-6-27 16:30
然而想自己动手做却无从下手 没学过c需要啥也看不懂啊 能不能哪位大神给小白这个简单教程 ...

接触过编程吗,只要知道什么是变量和函数就行了,改表盘无非是通过源码改,改图片位置,改文字位置,如果是改天气的话就是改几个key就行了,照那个卖萌天气改就很好弄了。要说工作量的话,无非复制粘贴多一些,打包调试麻烦些。遇到不懂的尽情百度。

点评

没接触过 纯小白 现学要多久?  发表于 2016-6-28 10:25

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

地板
 楼主| 发表于 2016-6-27 21:06:30 | 显示全部楼层
本帖最后由 石头 于 2016-6-27 21:26 编辑
aix 发表于 2016-6-27 20:26
說的太好了,確實如此,無中生有那是大神在幹的!

不過話說回來,樓主您也是大神級的,能搞一個這個服務 ...

我还是小白级别的。然后看到6楼自己做过表盘。应该就很容易了。
然后我还是说一下改天气的地方吧。
参照卖萌天气源码。
第40行和第42行
#define WEATHER_KEY                        "temperature,pm25,info,level"

#define WEATHER_URL "http://op.juhe.cn/onebox/weather/querykey=REPLACE_WITH_YOUR_KEY_HERE&cityname="

比如把WEATHER_KEY 改成"w1,t1,w2,t2" 这个就是获取w1这个key的值,就是今天的天气,w2-明天的天气,t1-今天的温度范围,t2-明天温度范围。当然如果想获取后天的天气,可以再加w3,t3。依次类推。
然后把WEATHER_URL 改成"http://www.pilipapa.com/weather.php?city="

然后再在164行的那个weather_info_callback函数内改key,第176,177,178行。
        maibu_get_json_int(buff, "temperature", &g_temperature);
        maibu_get_json_int(buff, "level",&g_level);
        maibu_get_json_int(buff, "pm25", &g_curPm);
把第二个参数改成我们的key,w1,t1,w2,t2,当然还要复制一行。
因为maibu_get_json_int这个函数是获取int整数类型的。而我们的json数组中都是string类型的
所以要改成maibu_get_json_str,相应的第三个参数要改成char[]类型的。所以你在程序开头建四个char[]类型的变量,不行就吧19行的那个
static char    g_city[20]              = {0};
复制四个,改改变量名比如可以改成w1,t1,w2,t2 ,然后因为天气信息大约最多6个汉字吧,6x4,把20改成30。
就是:
static char    w1[30]              = {0};
static char    t1[30]              = {0};
static char    w2[30]              = {0};
static char    t2[30]              = {0};
然后再回到164行的函数那里,改里面的maibu_get_json_int这种函数
maibu_get_json_str(buff, "w1", &w1);
maibu_get_json_str(buff, "t1", &t1);
maibu_get_json_str(buff, "w2", &w2);
maibu_get_json_str(buff, "t2", &t2);

这样你就可以获得了今天的天气w1,今天的温度范围t1,明天的天气w2,明天的气温范围t2。

然后如果需要更多的信息,加key,加成员变量,加maibu_get_json_str就行了。很简单吧。
对了还有180行的那个判断语句

               
        if(maibu_get_json_str(buff, "info", buffer,sizeof(weather_info)) != JSON_ERROR )
        {//防止数据为空导致的数据清空
                memset(weather_info,0,sizeof(weather_info));
                maibu_get_json_str(buff, "info", weather_info,sizeof(weather_info));
                g_weather_icon_key = get_weather_icon(weather_info,get_date_flag());
        }
        else
        {
                return;
        }



这个里面的"info"可以改成"w1",然后把g_weather_icon_key改成g_weather_icon_key = 1。这个只是偷懒的方法,如果要优化的话,这里的判断语句里面还是需要优化一下的。

至于展示天气信息,就需要改文字,改图片,界面了。

以上只是最简单的修改方法。

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

5#
 楼主| 发表于 2016-7-2 18:11:37 | 显示全部楼层
大大眼睛 发表于 2016-6-30 22:52
楼主,非常感谢你的分享,我在使用时遇到一个问题,
maibu_comm_request_web("http://www.pilipapa.com/wea ...

刚看到 我先看看 可能跟编码有关

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

6#
 楼主| 发表于 2016-7-2 22:01:09 | 显示全部楼层
大大眼睛 发表于 2016-6-30 22:52
楼主,非常感谢你的分享,我在使用时遇到一个问题,
maibu_comm_request_web("http://www.pilipapa.com/wea ...

我测试的时候没有问题的 然后访问url的时候中文参数是需要自己转码的 也就是你下面列出源码中的的那一段  需要把中文转为url编码 可能期间你在某个地方出现了问题 在编码前 你先获取一下city_name是否正确 还有url是否正确 如果实在搞不定 还是通过卖萌天气的源码一点一点修改吧

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

7#
 楼主| 发表于 2016-7-2 22:01:32 | 显示全部楼层
超爱麦步 发表于 2016-7-2 21:02
请问是从哪个天气预报数据源转的天气数据?

百度的天气api

6

主题

49

帖子

930

麦力

精华
2
阅读权限
30
在线时间
36 小时

8#
 楼主| 发表于 2016-7-8 18:52:27 | 显示全部楼层
bigKevin 发表于 2016-7-8 10:59
楼主,数据里面的aqi不准,始终是优,改下吧

谢谢你发现了这个问题,已经修复了:D
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|麦步官方论坛 ( 粤ICP备12052190号  

GMT+8, 2024-5-16 02:29 , Processed in 0.092305 second(s), 25 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

快速回复 返回顶部 返回列表