Python web api
本文是系列的第二篇。
Json与pojo ###Python处理json的库
import json #基本库
import simplejson #需用pip安装
Json->python object:
json.loads(string_of_json)
Python object->json:
Json.dumps(json, indent=2) #indent为缩进空格数
##Requests:http for humans 这里有中文简介
个人认为,requests是对Python价值观最好的体现。
##示例2 pm2.5 问题:寻找可用的api,获取城市的pm2.5及空气质量数据
知识点:用requests写rest客户端
子问题1:寻找可用的api
- 通过google,找到这个有态度的网站
子问题2: 使用api
子问题3:结果缓存与定时获取
代码如下
#encoding=utf-8
u'''
pm25.py
Usage:
pm25.py <cityname>
Options:
<cityname> 城市名
'''
from docopt import docopt
def wget_pm25(city):
token="5j1znBVAsnSf5xQyNQyq"
import requests as r
result=r.get("http://www.pm25.in/api/querys/pm2_5.json",params={
"city":city,
"token":token,
})
return result.json()
def needs_refresh(filename,timeout=3600):
return False
import os,time
mtime=os.path.getmtime(filename)
now=time.time()
return now-mtime>timeout
def get_pm25(city):
filename='pm25.data.{}.json'.format(city)
import os,json
data=None
if os.path.isfile(filename) and not needs_refresh(filename):
data=file(filename,'r').read()
data=json.loads(data)
else:
data=wget_pm25(city)
if type(data)==type({}):
print data['error']
return -1
else:
file(filename,'w').write(json.dumps(data,indent=2))
return data[-1]["pm2_5"]
if __name__ == '__main__':
args=docopt(__doc__)
cities=args['<cityname>']
print get_pm25(args['<cityname>'])
##示例3 使用flask-rest搭建rest服务 flask-rest 是一个使用flash框架搭建rest服务的工具,使用方法如下:
-
安装pip,方法见这个网页
- pip install flask-restful
- hello flask-rest
from flask import Flask
from flask.ext import restful
app = Flask(__name__)
api = restful.Api(app)
class HelloWorld(restful.Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
4.在此基础上调用pm25.py,并且把<cityname>
作为http get的参数传递
代码如下:
from flask import Flask
from flask.ext import restful
app = Flask(__name__)
api = restful.Api(app)
class PM25(restful.Resource):
def get(self,city):
import pm25
res=pm25.get_pm25(city)
return {city: res}
api.add_resource(PM25, '/pm25/<string:city>')
if __name__ == '__main__':
app.run(debug=True)
##思考题2
写一个天气服务
输入:
http://<hostname>/<city_name>
输出json:
{
"city_name":"beijing",
"high_temperature":"5",
"low_temperature":"-3",
}
数据源可选择如下api:
http://www.thinkpage.cn/weather/api/#all.json
http://blog.csdn.net/duxinfeng2010/article/details/7830136
也可以自己找。
##拓展阅读
Python Shortcuts for the Python Beginner