21'C 흐림
서울 강남구
먼저 이글을 한번 읽어주시구요. https://sir.kr/cm_free/1441713?page=2
우체국 배송정보를 파싱하는 php 모듈입니다. 앞으로 계속 추가할 예정이구요. 아마 10개 ~ 20개 정도 만들것 같네요.
guzzle + dom crawer 를 사용하였기 때문에 php 5.5 이상에서 해당 라이브리러리를 composer 로 설치하셔야 합니다.
업로드한 class 파일은 파싱만 수행함으로 영카트에서 사용하기 위해선 테이블 생성과, db입력 부분은 추가로 작업하셔야 합니다.
영카트에서 사용할수 완성된 형태의 코드는 별도로 작업하여 플러그인 게시판에 업로드 하도록 하겠습니다.
<?php
require_once '../vendor/autoload.php';
use DeliveryEpostParser;
set_time_limit(120); //최대 실행시간은 2분으로
ini_set('display_errors', 'On');
error_reporting(E_ALL & ~E_NOTICE);
//파싱된 데이타 구조
/**
* 배송 관련
* part1 배송 기본정보 delivery_info
* 택배사 company_name
* 택배사 코드 comapny_id
* 운송장번호 invoice_no
* 주문번호 order_no
* 발송인 sender
* 발송전화번호 sender_telno
* 주소 receiver_addr
* 수취인 receiver
* 수취전화번호 receiver_telno
* 상태 status
* 배송 진행상태 step 1: 배송준비중, 2:집하완료, 3:배송중, 4: 지점도착, 5: 배송출발, 6:배송완료
* STEP1 접수 STEP2 상품이동중 STEP3 배달지도착 STEP4 배달준비 STEP5 배달완료
* 배송 완료여부 complete_yn
* 배송예정 시간 estimate_time
*
* part2 delivery_product 배송 품목정보
* 품명 item_name
* 수량 item_qty
* 브랜드 item_brand
*
* part3 배송 상세 delivery_history (array)
* 날짜/시간 d_datetime
* 현재위치 d_location
* 처리현황 d_status
* 담당자명 d_person
* 담당자 연락처 d_person_telno
* 수령인 d_recipient
* 비고 d_etc
*/
//todo 주문서에 해당하는 배송정보를 가져와 배송상태를 확인한다.
//배송이 완료된건이면, 배송정보를 파싱하지 않는다.
$delivery = new EpostParser();
$invoice_no = "6074985271983"; //우체국 택 송장번호배 13자리
$result = $delivery->getDeliveryInfo($invoice_no);
if($result['delivery_info']['step'] == "-1") { //배송정보 오류
echo "배송 정보가 아직 입력되지 않았거나, 등기(송장)번호 오류입니다.";
}
//todo 파싱된 배송정보를 db에 insert/update 처리한다.
//마지막 파싱 시간을 기록하여, 파싱이 너무 자주 실행되지 않도록 한다.
//너무 자주 실행하면 IP 차단 당할수 있음으로 realtime 파싱보다는 배치 처리하도록 한다.
echo "<xmp>";
print_r($result);
echo "</xmp>";
?>
작업후기우체국 배송정보 파싱 작업하면서 느낀부분인데, 문제가 많네요
일단 태그구조가 깨져있습니다. 남발함. 웹표준 따윈 바라지도 않습니다. 일반적
위의 문제 때문에 코드에서 이를 처리하기 위해 예외적 코드가 들어가, 코드를 깔끔하게 만들려고 한 저의 노력이 바랜 느낌입니다.
나름 국가기관급 홈페이지인데, 다른 택배사는 몰라도 적어도 우체국은 openapi를 제공해야 되지 않을까요?
얼른 업그레이드 해줬으면 하는 바램입니다.아래 santa100님이 우체국 오픈 api를 알려주셨네요.
다음번엔 사용빈도가 높은 CJ 택배를 파싱하는 모듈을 작업하도록 하겠습니다.