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. 值得一做》关于一道暴搜BZOJ1024(EASY+)

    为什么要写这道题的DP捏? 原因很简单,因为为原来在openjudge上有一道题叫分蛋糕,有一个思路和这道题很像:“分锅”. 分锅:即为考虑计算当前情况的最优解时,把当前状态结果,分散为考虑当前状态的 ...

  2. Spark性能优化的10大问题及其解决方案

    Spark性能优化的10大问题及其解决方案 问题1:reduce task数目不合适 解决方式: 需根据实际情况调节默认配置,调整方式是修改参数spark.default.parallelism.通常 ...

  3. Openssl s_client命令

    一.简介 s_client为一个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进行通信,也能与任何使用ssl协议的其他服务程序进行通信 二.语法 openssl s_cl ...

  4. code1169 传纸条

    来自:http://www.cnblogs.com/DSChan/p/4862019.html 题目说找来回两条不相交路径,其实也可以等价为从(1,1)到(n,m)的两条不相交路径. 如果是只找一条, ...

  5. ubuntu 16.04 nfs服务的搭建

    nfs服务是实现Linux和Linux之间的文件共享,nfs服务的搭建比较简单. 现在介绍如何在ubuntu16.04系统中搭建nfs服务,ubuntu的搭建比红帽的还要简单. 1.安装nfs服务 s ...

  6. ubuntu启动流程和要读取相关文件

    当前系统环境为:linux mint mate 17.1(基于ubuntu14.04的衍生版) 查阅资料后总结如下: 首先: /etc/rc.d链接目标为:/etc /etc/rc*.d文件夹中的脚本 ...

  7. ettercap 命令

    本地主机:192.168.0.149 目标主机:192.168.0.138 /etc/ettercap/etter.dns,将dns欺骗到本机 ettercap -T -q -i wlan0 -P d ...

  8. Word2010如何编辑好了直接发布csdn博文?

    目前大部分的博客作者在写博客这件事情上都会遇到以下3个痛点:1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.2.发布到博客或公众号平台 ...

  9. ASP.NET MVC WebApi接口授权验证

    对于很任何多开发者来说,不管是使用任何一种框架,或者是使用任何一种语言,都要使用面向接口编程.使用面向接口编程的时候,那么就会有很多的权限验证,用户验证等等. 特别是对于一些系统来说,别人想要对接你的 ...

  10. Linq的使用场景简介和认识

    一:C#的一个分支Linq 二:学Linq需要有一些基础知识 1. var 隐式类型 2. 匿名类型/匿名方法 3. 自动属性 4. 委托/泛型的委托 5. lambda 6. 扩展方法 7. 对象初 ...