1.建立行政区规划清单表

use edw;

drop table if exists dim_prov_city_adcode;

create table if not exists dim_prov_city_adcode (
prov_nm varchar(64),
city_nm varchar(64),
county_nm varchar(64),
prov_code varchar(64),
county_code varchar(64),
adcode varchar(64),
alias_nm varchar(64)
) ENGINE=InnoDB default CHARSET=utf8;
--alter table dim_prov_city_adcode add primary key(adcode);
alter table dim_prov_city_adcode COMMENT '行政区划清单表';
alter table dim_prov_city_adcode modify column prov_nm varchar(64) COMMENT '省份、直辖市名称';
alter table dim_prov_city_adcode modify column city_nm varchar(64) COMMENT '城市名称';
alter table dim_prov_city_adcode modify column county_nm varchar(64) COMMENT '区域名称';
alter table dim_prov_city_adcode modify column prov_code varchar(64) COMMENT '省GB码';
alter table dim_prov_city_adcode modify column county_code varchar(64) COMMENT '市GB码';
alter table dim_prov_city_adcode modify column adcode varchar(64) COMMENT '参考GB码(adcode)';
alter table dim_prov_city_adcode modify column alias_nm varchar(64) COMMENT '别名';

2.插入行政区规划清单表数据

3.建立天气数据表

create table if not exists fact_weather_adcode_day(
province varchar(64) comment '省份名',
city varchar(64) comment '城市名',
adcode varchar(64) comment '区域编码',
weather varchar(64) comment '天气现象(汉字描述)',
temperature float comment '实时气温',
winddirection varchar(64) comment '风向',
windpower varchar(64) comment '风力',
humidity varchar(64) comment '空气湿度',
reporttime varchar(64) comment '发布时间',
date_id varchar(64) comment '日期',
hour_id varchar(64) comment '小时'
)ENGINE=InnoDB default CHARSET=utf8;
alter table fact_weather_adcode_day add primary key(adcode,date_id,hour_id);

3.开发Python脚本调用API获取数据

#coding:utf8
#------------------------------------------------------
#Filename: getWeather.py
#Revision: 1.0
#Date: 2018/08/17
#Author: Jim
#Description:
#Notes: 通过调用高德API获取天气数据
#key: 6ca7b720f2ab2a48f749c1e19c3d1c47
#高德API相关文档: https://lbs.amap.com/api/
#获取天气: https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=<用户key>
# 如:https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=6ca7b720f2ab2a48f749c1e19c3d1c47
#------------------------------------------------------ import time, re, os, sys, time,urllib2,shutil,string
import json,datetime,MySQLdb
from dateutil.parser import parse #设置utf-8编码格式
reload(sys)
sys.setdefaultencoding( "utf-8" ) #获取当前日期的前n天
def getbeforeDay(n=0):
now_time = datetime.datetime.now()
beforeday = now_time - datetime.timedelta(n)
return beforeday.strftime("%Y%m%d") scriptDir = os.getcwd() if len(sys.argv) > 1 :
job_date_id = sys.argv[1]
else :
job_date_id = getbeforeDay(0) print "当前脚本路径:%s,当前参数日期:%s" % (scriptDir,job_date_id) #保存数据到文件文件
def saveContext(filename,*name):
format = '^'
dev_prd_flag = 'prd'
context = name[0]
for i in name[1:]:
context = context + format + str(i)
context = str(context).replace('(','(').replace(')',')').replace(',',',').replace(':',':')
if dev_prd_flag != 'prd':
print context
else:
#去除文件路径名首位空格
filename = filename.strip()
#读取目录名称
path = os.path.dirname(filename)
#如果目录不存在则创建目录
if not os.path.exists(path):
os.makedirs(path)
#读取文件名称,以追加的方式写文件
name = os.path.basename(filename)
fp = open(filename,'a')
fp.write(context+'\n')
fp.close() #获取网页文件
def getHtml(url,code='utf-8'):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER' }
request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request,data=None,timeout=60)
html = unicode(response.read(),str(code))
return html class ConMysql():
def __init__(self,host='192.168.122.140',user='shutong',passwd='shutong',db='edw'):
print "连接mysql数据库"
try:
conn= MySQLdb.connect(
host= host,
port = 3306,
user=user,
passwd=passwd,
db =db,
charset='utf8',
)
self.conn = conn
print "连接mysql成功"
except :
print "连接mysql失败" def execSQL(self,sql):
print "执行语句:%s" % (sql)
cur = self.conn.cursor()
cur.execute('set character_set_client = utf8')
cur.execute('set character_set_server = utf8')
cur.execute('set character_set_connection = utf8')
cur.execute('set character_set_results = utf8')
cur.execute('set collation_connection = utf8_general_ci')
cur.execute('set collation_server = utf8_general_ci')
result = cur.fetchmany(cur.execute(sql))
cur.close()
self.conn.commit()
return result '''析构方法'''
def __del__(self):
if self.conn:
self.conn.close()
else:
pass adcode = "" key = "6ca7b720f2ab2a48f749c1e19c3d1c47" def crawl_weather(adcode):
url = "https://restapi.amap.com/v3/weather/weatherInfo?city=%s&key=%s" % (adcode,key)
html = getHtml(url)
jsondata = json.loads(html) #省份
province = jsondata['lives'][0]['province'] #市
city = jsondata['lives'][0]['province'] #区域编码
adcode = jsondata['lives'][0]['adcode'] #天气现象
weather = jsondata['lives'][0]['weather'] #实时气温 摄氏度
temperature = jsondata['lives'][0]['temperature'] #风向
winddirection = jsondata['lives'][0]['winddirection'] #风力
windpower = jsondata['lives'][0]['windpower'] #空气湿度
humidity = jsondata['lives'][0]['humidity'] #数据发布时间
reporttime = jsondata['lives'][0]['reporttime'] #日期
date_id = parse(reporttime).strftime('%Y%m%d') #小时
hour_id = parse(reporttime).strftime('%H') print province,city,adcode,weather,temperature,winddirection,windpower,humidity,reporttime,date_id,hour_id sql = "insert ignore into fact_weather_adcode_day values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');" % (province,city,adcode,weather,temperature,winddirection,windpower,humidity,reporttime,date_id,hour_id) print sql
conn.execSQL(sql) conn = ConMysql()
crawl_weather(adcode)

高德地图API获取天气的更多相关文章

  1. 微信小程序-基于高德地图API实现天气组件(动态效果)

    微信小程序-基于高德地图API实现天气组件(动态效果) ​ 在社区翻腾了许久,没有找到合适的天气插件.迫不得已,只好借鉴互联网上的web项目,手动迁移到小程序中使用.现在分享到互联网社区中,帮助后续有 ...

  2. 解析高德地图api获取省市区,生成最新三级联动sql表

    前言: 最近项目中用到了全国省市区三级信息,但是网上找到的信息都是比较旧的信息.与现在最新的地区信息匹配不上.后来想到高德地图上可能有这些信息.所以解析了一下api接口,生成了相关省市区的sql信息. ...

  3. js调用高德地图API获取地理信息进行定位

    <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=(需要自 ...

  4. 手机端获取用户详细地理位置(高德地图API)

    项目开发需要获取用户详细的地理位置信息,使用了高德地图API接口 1,注册高德地图开发者账号获取开发者Key 2,页面调用 <script type="text/javascript& ...

  5. 【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

    原文:[高德地图API]从零开始学高德JS API(七)——定位方式大揭秘 摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为w ...

  6. 安卓---高德地图API应用

    说明:定位需要导入android_location 的jar包,如果没有会报错,这个官方网站好像找不到,这是我在网上找到的一个链接 http://download.csdn.net/detail/ra ...

  7. 安卓开发笔记①:利用高德地图API进行定位、开发电子围栏、天气预报、轨迹记录、搜索周边(位置)

    高德地图开发时需要导入的包在下面的网盘链接中:(由于高德地图api更新得太快,官网上最新的包使用起来没有之前的方便,所以以下提供最全面的原始包) 链接:http://pan.baidu.com/s/1 ...

  8. 高德地图API应用

    高德地图官网:http://api.amap.com/javascript/ 输入关键字,搜索地址功能的网页: 1.引用远程Map Api(js)网址形式(注册后获取) 2.定义个<div> ...

  9. 使用高德地图SDK获取定位信息

    使用高德地图SDK获取定位信息 第一步: 在高德官网下载SDK,如我这里需要获取定位信息,故仅下载"定位功能" 第二步: 注册成为开发者,并创建应用获取相应的key.其中,在使用A ...

随机推荐

  1. 【HDU4734】F(x) 【数位dp】

    题意 先定义了一个函数F(X)=An*2^n-1+An-1*2^n-2+.....+A1*1.其中Ai为X的第i位的值.对于每组数据给出了两个整数A,B.问不超过B的数中有多少的F值是不超过F(A)的 ...

  2. 【LA 3989 训练指南】女士的选择 【稳定婚姻问题】

    我们先来学一下稳定婚姻问题 什么是稳定婚姻问题? 有n个女士和n个男士,他们要一一进行配对.每个男士心中对这n个女士都有一个排名,同理,每个女士心里对n个男性也有一个排名.我们要做的是,在他们配对完成 ...

  3. [hdu4347]The Closest M Points(平衡树式kdtree)

    解题关键:模板题(结合起来了) #include<iostream> #include<cstdio> #include<cstring> #include< ...

  4. Kubuntu上连接PPTP

    生活在天朝,如果没备几招FQ的本领,都不敢说自己还活着... 前两天从朋友那抢了个VPN帐号,使用的是PPTP的,在google上找了一会,发现网上大都是讲VPN服务搭建的,就算是介绍客户端的,也大都 ...

  5. 优化mysql slave的同步速度

    测试环境:Red Hat Enterprise Linux Server release 6.3 (Santiago)Server version: 5.6.22-log MySQL Communit ...

  6. Docker学习记录常用命令

    1. docker ps  -a 查看运行中的容器 2. docker images 查看docker镜像 3. docker rm id(容器id)  删除容器(容器id可以通过docker ps查 ...

  7. 前端学习--HTML标签温习一

    1.<a>标签 在所有浏览器中,链接的默认外观如下: 1)未被访问的链接带有下划线而且是蓝色的 2)已被访问的链接带有下划线而且是紫色的 3)活动链接带有下划线而且是红色的 提示:如果没有 ...

  8. EZOJ #224

    传送门 分析 首先我们发现要让答案最小,或运算一定是没有用的 我们还可以发现a^b = a&(~b) 所以异或运算也没有用 于是我们只考虑否和与 我们还会得到一个性质就是没增加一个数一定会让答 ...

  9. C#序列化效率对比

    原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...

  10. 遍历properties文件

    Properties pro = new Properties();try {    InputStream inStr = ClassLoader.getSystemResourceAsStream ...