抓取Edge浏览器天气API

2023-06-27 249 0

博主某天在抓其他东西时抓到了这个请求:
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

相关文章

发布评论