USPS 배송 지역 정보를 표시하려고하는데이 정보를 긁어내는 데 사용한 USPS 사이트의 섹션이 손상되었습니다. 몇 달 동안 파싱 가능한 형식으로 가져 오는 다른 방법을 아는 사람이 있는지 궁금합니다.
몇 달 동안 깨진 페이지는 다음과 같습니다. http://postcalc.usps.gov/Zonecharts/ZoneChartPrintable.aspx?zipcode=931
그렇게 분석 할 수없는 형식의 동일한 차트가 있습니다. http://postcalc.usps.gov/Zonecharts/
이 정보를 캐시하여 지속적으로 요청할 필요는 없지만 영역이 변경되므로 캐시가 가끔 지워집니다. 수시로.
답변
다음은 http://postcalc.usps.gov/Zonecharts/ .
private String getZoneJSON(String zip3Digit) { URL url; HttpURLConnection con; String zoneJSON = null; try { url = new URL("https://postcalc.usps.com/DomesticZoneChart/GetZoneChart?ZIPCode3Digit=" + zip3Digit + "&ExcelFormat=1"); con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"); con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); con.setRequestProperty("DNT", "1"); con.setInstanceFollowRedirects(false); InputStream h = (InputStream) con.getContent(); BufferedReader r = new BufferedReader(new InputStreamReader(h)); zoneJSON = r.readLine(); } catch(Exception e) { e.printStackTrace(); } return zoneJSON; }
댓글
- 완벽합니다. 감사합니다. 당분간 새 사이트를 검토하기 위해 돌아 오지 않았지만 HTML을 파싱하는 대신 이제 JSON 문자열을 제공하게되어 기쁩니다.
Answer
또한 좌표 원점 SCF (Sectional Center Facility)와 목적지 SCF 사이의 거리를 기반으로 구역을 계산할 수 있습니다.
Zone 1 : 출발지에서 반경 50 마일 이내의 비 로컬 영역
구역 2 : 반경 51-150 마일
구역 3 : 반경 151-300 마일
영역 4 : 반경 301-600 마일
영역 5 : 반경 601-1,000 마일
영역 6 : 반경 1001-1400 마일
영역 7 : 반경 1401-1800 마일
영역 8 : 1801 마일 이상
영역 9 : 예외적 인 네트워크 환경에 할당 된 우편 번호
- 각 우편 번호의 SCF : https://fast.usps.com/fast/fastApp/resources/labelListFiles.action
- SCF의 좌표를 가져올 수 있습니다. Google API에서
- 좌표가 있으면 여러 가지 방법이 있습니다. 그들 사이의 거리를 계산하기 위해
- 좌표를 건너 뛰고 SCF iteself의 우편 번호 사이의 거리를 계산할 수도 있습니다 (제공하는 우편 번호가 아님)
답변
USPS는 여기에서 모든 From-to zip 조합에 대한 전체 영역 차트를 63 달러에 판매합니다. https://postalpro.usps.com/operations/zone-charts
몇 달 동안 다른 곳에서 정보를 찾을 수 없었기 때문에 하나를 보냈습니다.