# Copyright (c) Meta Platforms, Inc. and affiliates. | |
import json | |
from pathlib import Path | |
from typing import Dict, Optional | |
import urllib3 | |
from utils.geo import BoundaryBox | |
import urllib.request | |
import requests | |
def get_osm( | |
boundary_box: BoundaryBox, | |
cache_path: Optional[Path] = None, | |
overwrite: bool = False, | |
) -> str: | |
if not overwrite and cache_path is not None and cache_path.is_file(): | |
with cache_path.open() as fp: | |
return json.load(fp) | |
(bottom, left), (top, right) = boundary_box.min_, boundary_box.max_ | |
content: bytes = get_web_data( | |
# "https://api.openstreetmap.org/api/0.6/map.json", | |
"https://openstreetmap.erniubot.live/api/0.6/map.json", | |
# 'https://overpass-api.de/api/map', | |
# 'http://localhost:29505/api/map', | |
# "https://lz4.overpass-api.de/api/interpreter", | |
{"bbox": f"{left},{bottom},{right},{top}"}, | |
) | |
content_str = content.decode("utf-8") | |
if content_str.startswith("You requested too many nodes"): | |
raise ValueError(content_str) | |
if cache_path is not None: | |
with cache_path.open("bw+") as fp: | |
fp.write(content) | |
a=json.loads(content_str) | |
return json.loads(content_str) | |
def get_web_data(address: str, parameters: Dict[str, str]) -> bytes: | |
# logger.info("Getting %s...", address) | |
# proxy_address = "http://107.173.122.186:3128" | |
# | |
# # 设置代理服务器地址和端口 | |
# proxies = { | |
# 'http': proxy_address, | |
# 'https': proxy_address | |
# } | |
# 发送GET请求并返回响应数据 | |
# response = requests.get(address, params=parameters, timeout=100, proxies=proxies) | |
print('url:',address) | |
response = requests.get(address, params=parameters, timeout=100) | |
return response.content | |
def get_web_data(address: str, parameters: Dict[str, str]) -> bytes: | |
# logger.info("Getting %s...", address) | |
while True: | |
try: | |
# proxy_address = "http://107.173.122.186:3128" | |
# | |
# # 设置代理服务器地址和端口 | |
# proxies = { | |
# 'http': proxy_address, | |
# 'https': proxy_address | |
# } | |
# # 发送GET请求并返回响应数据 | |
response = requests.get(address, params=parameters, timeout=100) | |
request = requests.Request('GET', address, params=parameters) | |
prepared_request = request.prepare() | |
# 获取完整URL | |
full_url = prepared_request.url | |
break | |
except Exception as e: | |
# 打印错误信息 | |
print(f"发生错误: {e}") | |
print("重试...") | |
return response.content | |
# def get_web_data_2(address: str, parameters: Dict[str, str]) -> bytes: | |
# # logger.info("Getting %s...", address) | |
# proxy_address="http://107.173.122.186:3128" | |
# http = urllib3.PoolManager(proxy_url=proxy_address) | |
# result = http.request("GET", address, parameters, timeout=100) | |
# return result.data | |
# | |
# | |
# def get_web_data_1(address: str, parameters: Dict[str, str]) -> bytes: | |
# | |
# # 设置代理服务器地址和端口 | |
# proxy_address = "http://107.173.122.186:3128" | |
# | |
# # 创建ProxyHandler对象 | |
# proxy_handler = urllib.request.ProxyHandler({'http': proxy_address}) | |
# | |
# # 构建查询字符串 | |
# query_string = urllib.parse.urlencode(parameters) | |
# | |
# # 构建完整的URL | |
# url = address + '?' + query_string | |
# print(url) | |
# # 创建OpenerDirector对象,并将ProxyHandler对象作为参数传递 | |
# opener = urllib.request.build_opener(proxy_handler) | |
# | |
# # 使用OpenerDirector对象发送请求 | |
# response = opener.open(url) | |
# | |
# # 发送GET请求 | |
# # response = urllib.request.urlopen(url, timeout=100) | |
# | |
# # 读取响应内容 | |
# data = response.read() | |
# print() | |
# return data |