91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
from typing import Optional
|
|
|
|
from app.utils.http import RequestUtils
|
|
|
|
|
|
class WebUtils:
|
|
|
|
@staticmethod
|
|
def get_location(ip: str):
|
|
"""
|
|
查询IP所属地
|
|
"""
|
|
return WebUtils.get_location1(ip) or WebUtils.get_location2(ip)
|
|
|
|
@staticmethod
|
|
def get_location1(ip: str):
|
|
"""
|
|
https://api.mir6.com/api/ip
|
|
{
|
|
"code": 200,
|
|
"msg": "success",
|
|
"data": {
|
|
"ip": "240e:97c:2f:1::5c",
|
|
"dec": "47925092370311863177116789888333643868",
|
|
"country": "中国",
|
|
"countryCode": "CN",
|
|
"province": "广东省",
|
|
"city": "广州市",
|
|
"districts": "",
|
|
"idc": "",
|
|
"isp": "中国电信",
|
|
"net": "数据中心",
|
|
"zipcode": "510000",
|
|
"areacode": "020",
|
|
"protocol": "IPv6",
|
|
"location": "中国[CN] 广东省 广州市",
|
|
"myip": "125.89.7.89",
|
|
"time": "2023-09-01 17:28:23"
|
|
}
|
|
}
|
|
"""
|
|
try:
|
|
r = RequestUtils().get_res(f"https://api.mir6.com/api/ip?ip={ip}&type=json")
|
|
if r:
|
|
return r.json().get("data", {}).get("location") or ''
|
|
except Exception as err:
|
|
print(str(err))
|
|
return ""
|
|
|
|
@staticmethod
|
|
def get_location2(ip: str):
|
|
"""
|
|
https://whois.pconline.com.cn/ipJson.jsp?json=true&ip=
|
|
{
|
|
"ip": "122.8.12.22",
|
|
"pro": "上海市",
|
|
"proCode": "310000",
|
|
"city": "上海市",
|
|
"cityCode": "310000",
|
|
"region": "",
|
|
"regionCode": "0",
|
|
"addr": "上海市 铁通",
|
|
"regionNames": "",
|
|
"err": ""
|
|
}
|
|
"""
|
|
try:
|
|
r = RequestUtils().get_res(f"https://whois.pconline.com.cn/ipJson.jsp?json=true&ip={ip}")
|
|
if r:
|
|
return r.json().get("addr") or ''
|
|
except Exception as err:
|
|
print(str(err))
|
|
return ""
|
|
|
|
@staticmethod
|
|
def get_bing_wallpaper() -> Optional[str]:
|
|
"""
|
|
获取Bing每日壁纸
|
|
"""
|
|
url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
|
|
resp = RequestUtils(timeout=5).get_res(url)
|
|
if resp and resp.status_code == 200:
|
|
try:
|
|
result = resp.json()
|
|
if isinstance(result, dict):
|
|
for image in result.get('images') or []:
|
|
return f"https://cn.bing.com{image.get('url')}" if 'url' in image else ''
|
|
except Exception as err:
|
|
print(str(err))
|
|
return None
|