[Python 3.x]택배 실시간 배송조회 구현 {Delivery Service Tracking}

Programming/Project2019. 10. 3. 13:49Dev zeroday0619

온라인 쇼핑몰에서 상품을 구매 후 배송 조회를 할떼 매번 검색해서 배송 조회를 하는게 귀찮아서

택배배송조회기능을 한번 만들어 볼까하는 생각에 이왕이면 여러 플랫폼에 적용이 가능하도록 개발한 프로그램입니다.

실행결과

프로그램을 실행하기 전에 DST_run.py을 수정해야합니다.

_int = Template_Gen(code=Code.search(name="cj대한통운"), dst_code="111111111111")

# name : 택배회사 이름, dst_code : 송장번호

다음과 같이 주문후 표시된 송장번호와 택배회사명을 입력후 실행하게 되면

위 이미지와 같이 json형태로 출력하게 됩니다.

 

여기서 택배회사 코드 조회는 노가다를 통해 구현하였습니다.

택배회사 코드는 스마트택배 API 문서를 참고 하였습니다.

http://info.sweettracker.co.kr/apidoc

 

배송정보연동

배송조회를 필요로 하는 페이지에서 아래와 같이 입력 form 창을 추가합니다. 스마트 택배 배송조회에서 발급 받은 APIKEY를 Parameter(파리미터)값에 추가합니다. 스마트 택배 배송조회 API 에서 제공받은 택배사 목록 코드를 form 창에 mapping(매핑)합니다. 택배사 코드와 운송장 번호를 Parameter(파리미터)값에 추가합니다. 사용할 템플릿을 선택하여 url 마지막에 추가합니다. ( 1번 cyan, 2번 pink, 3번 gray)

info.sweettracker.co.kr

# DeliveryServiceTracking은 스마트 택배API가 아닌 네이버 조회결과를 파싱하는 형태로 개발 하였습니다.

스마트택배 API를 사용하기에는 무료제공의 경우 요청 제한이 걸려 있고 그이상을 문제없이 서비스하려면 

비용이 들기 때문입니다.

 

아래 코드를 통해 택배회사 코드를 가져오게 됩니다.

#DeliveryServiceTracking / dst_co.py

class DST_Company:
    def __init__(self):
        self.company_code = {
            "건영택배": "18	", "경동택배": "23", "홈픽택배": "54",
            "굿투럭": "40", "농협택배": "53", "대신택배": "22",
            "로젠택배": "06", "롯데택배": "08", "세방": "52",
            "애니트랙": "43", "우체국택배": "01", "일양로지스": "11",
            "천일택배": "17", "한덱스": "20", "한의사랑택배": "16",
            "한진택배": "05", "합동택배": "32", "호남택배": "45",
            "CJ대한통운": "04", "CU편의점택배": "46", "CVSnet 편의점택배": "24",
            "KGB택배": "56", "KGL네트웍스": "30", "SLX": "44",
            "하이택배": "58", "FLF퍼레버택배": "64",
            "롯데글로벌 로지스": "99", "TNT Express": "25", "USPS": "26",
            "APEX(ECMS Express)": "38", "에어보이익스프레스": "29", "Cway Express": "57",
            "DHL": "13", "범한판토스": "37", "EMS": "12",
            "Fedex": "21", "CJ대한통운 국제특송": "42", "GSMNtoN(인로스)": "28",
            "i-Parcel": "34", "DHL Global Mail": "33", "EuroParcel(유로택배)": "55",
            "UPS": "14", "GSI Express": "41"
        }

    def search(self, name):
        code = self.company_code[f'{name}']
        return code


Code = DST_Company()

 

dst_template_generator.py는 파싱한 데이타를 가공하는 모듈입니다.

...        
        try:
            DST_Status = self.json_data['completeYN']
            DST_invoiceNo = self.json_data['invoiceNo']
            DST_itemName = self.json_data['itemName']

            DST_level = self.json_data['level']

            DST_receiverName = self.json_data['receiverName']
            DST_receiverAddr = self.json_data['receiverAddr']

            DST_trackingDetails = self.json_data['trackingDetails']
            DST_estimate = self.json_data['estimate']
            """
            진행단계 [level 1: 배송준비중, 2: 집화완료, 3: 배송중, 4: 지점 도착, 5: 배송출발, 6:배송 완료]
            """
            X = DST_LEVEL(x=DST_level)
            Y = DST_CompleteYN(y=DST_Status)
            # return [DST_Status, DST_invoiceNo, DST_itemName, DST_level, DST_receiverName, DST_receiverAddr, DST_result, DST_trackingDetails, DST_estimate]
            DST_Td = DST_trackingDetails[len(DST_trackingDetails) - 1]
            DST_timeString = DST_Td['timeString']
            DST_telno = DST_Td['telno']
            DST_telno2 = DST_Td['telno2']
            DST_manName = DST_Td['manName']
            DST_where = DST_Td['where']
            # DST_kind = DST_Td['kind']

            return {
                '송장번호': DST_invoiceNo,
                '배송여부': Y,
                '배송상황': X,
                'INFO': {
                    '상품명': DST_itemName,
                    '수령인': DST_receiverName,
                    '주소': DST_receiverAddr,
                    '배송소요시간': DST_estimate,
                    '세부정보': {
                        "진행시간": DST_timeString,
                        "지점전화번호": DST_telno,
                        "배송기사이름": DST_manName,
                        "배송기사전화번호": DST_telno2,
                        "진행위치지점": DST_where
                    }
                }
            }

        except KeyError as e:
            null = e
            return {
                'Error': 'System Error'
            }
...

 

아레는 API레퍼런스 가이드입니다.

Generate
---------
 
DST Template Generation :
1 | DST_Status :
배송 완료 여부(true or false)
 
2 | DST_invoiceNo :
운송장 번호
 
3 | DST_itemName :
상품 이름
 
4 | DST_level :
진행단계 [level 1: 배송준비중, 2: 집화완료, 3: 배송중, 4: 지점 도착, 5: 배송출발, 6:배송 완료]
 
5 | DST_receiverName :
받는 사람
 
6 | DST_receiverAddr :
받는 사람 주소
 
7 | DST_result :
조회 결과
 
8 | DST_trackingDetails :
 
9 | DST_estimate :
배송예정 시간

다음과 같은 정보를 통해 다음 코드에서 처리된 정보를 출력하게 됩니다.

            return {
                '송장번호': DST_invoiceNo,
                '배송여부': Y,
                '배송상황': X,
                'INFO': {
                    '상품명': DST_itemName,
                    '수령인': DST_receiverName,
                    '주소': DST_receiverAddr,
                    '배송소요시간': DST_estimate,
                    '세부정보': {
                        "진행시간": DST_timeString,
                        "지점전화번호": DST_telno,
                        "배송기사이름": DST_manName,
                        "배송기사전화번호": DST_telno2,
                        "진행위치지점": DST_where
                    }
                }
            }

본 프로젝트는 Github에 소스코드가 공개되어 있습니다.

MIT LICENSE가 적용됩니다.

 

https://github.com/zeroday0619/DeliveryServiceTracking

 

zeroday0619/DeliveryServiceTracking

택배 배송 상황을 json으로 표시합니다. Contribute to zeroday0619/DeliveryServiceTracking development by creating an account on GitHub.

github.com

 

학생개발자의  ITstory에 방문해주셔서 감사합니다 ^^

블로그 주인 사진Authorzeroday0619
프로그래밍, programming, 코딩, Development, Linux, Ubuntu | IT NEWS & 리뷰