博主某天在抓其他东西时抓到了这个请求:http://api.msn.com/weather/LiveTile/front?locale=zh-CN&lat=31.2559617&lon=121.2989499&apiKey=OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT
(注:为保护博主个人地址隐私,坐标已经过微量偏移处理。此地址指向上海虹桥火车站编组站附近,疑似电信西郊机房)
分析
URL:http://api.msn.com/weather/LiveTile/front
请求方法: GET
返回格式: XML
反扒: 无(NB,防范这么弱)
参数 | 值 | 意思 |
---|---|---|
locale | zh-CN(不变) | 语言,会IP效验 |
lat | 31.2559617(变) | 坐标纬度 |
lon | 121.2989499(变) | 坐标经度 |
apikey | OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT | 未知(疑似加密后的系统标识码) |
返回数据
<tile>
<visual version="2" Branding="name">
<binding template="TileSmall" hint-textStacking="center" hint-overlay="30" branding="none">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<group>
<subgroup hint-weight="50">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="70" hint-textStacking="bottom">
<text>30°</text>
</subgroup>
</group>
</binding>
<binding template="TileMedium" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<group>
<subgroup hint-weight="80"/>
<subgroup hint-weight="20">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/weatherapp/Spacer/10px.png"/>
</subgroup>
</group>
<group>
<subgroup hint-weight="60" hint-textStacking="bottom">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="50" hint-textStacking="center">
<text hint-align="right" hint-style="title">30</text>
</subgroup>
<subgroup hint-weight="20">
<text>°C</text>
<text/>
</subgroup>
</group>
</binding>
<binding template="TileWide" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<text hint-style="body"/>
<group>
<subgroup hint-weight="20" hint-textStacking="center">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="23" hint-textStacking="center">
<text hint-align="right" hint-style="subtitle">30</text>
</subgroup>
<subgroup hint-weight="10" hint-textStacking="center">
<text>°C</text>
<text/>
</subgroup>
<subgroup hint-weight="60" hint-textStacking="center">
<text hint-wrap="true" hint-style="body">晴</text>
</subgroup>
</group>
</binding>
<binding template="TileLarge" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<text/>
<group>
<subgroup hint-weight="20" hint-textStacking="center">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="23" hint-textStacking="center">
<text hint-align="right" hint-style="subtitle">30</text>
</subgroup>
<subgroup hint-weight="10" hint-textStacking="center">
<text>°C</text>
<text/>
</subgroup>
<subgroup hint-weight="60" hint-textStacking="center">
<text hint-wrap="true" hint-style="body">晴</text>
</subgroup>
</group>
<text/>
<group>
<subgroup hint-weight="1">
# 未来天气日报,略
</subgroup>
</group>
<group>
<subgroup hint-weight="1">
<text hint-align="center">29°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">24°</text>
<text hint-align="center" hint-style="captionSubtle">14°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">22°</text>
<text hint-align="center" hint-style="captionSubtle">12°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">23°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">22°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
</group>
</binding>
</visual>
</tile>
根据分析,提取如下表达式:
大致区域://tile/visual/binding[3]的DisplayName属性
当前温度://tile/visual/binding[3]/group/subgroup[2]/text的内容
天气状况://tile/visual/binding[3]/group/subgroup[3]/text的内容
代码
格式化返回:
from urllib.request import urlopen
import xmltodict
def getWeather(lat, lon):
r = urlopen(
"http://api.msn.com/weather/LiveTile/front?locale=zh-CN&lat=%f&lon=%f&apiKey=OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT" % (lat, lon))
j = xmltodict.parse(r.read().decode())
i = j["tile"]["visual"]["binding"][2]
n = i["@DisplayName"]
g = i["group"]["subgroup"]
t = g[1]["text"]["#text"]+"℃
l = g[3]["text"]["#text"]
c = g[0]["image"]["@src"]
return {"Location":n,"Weather":l,"Temperature":t,"ImageURL":"c"}
原文链接:https://www.cnblogs.com/blog-xhg78999/p/msn-weather.html