본문으로 바로가기

Alfred 우편번호 검색 Workflow

category 컴퓨터 - 기타 2023. 2. 8. 14:57
반응형

클리앙의 동그리a 님이 만드신 우편번호 검색 workflow를 오랫동안 잘 쓰고 있었는데, 어느 순간부터 동작하지 않는 것을 발견했다.

코드를 분석해보니 MacOS에 기본으로 탑재되어 있던 python2 버전으로 작성되어 있었는데,

MacOS Venture로 업그레이드하면서 OS에 기본 탑재 버전이 python3 으로 변경되면서 생긴 호환 문제였다.

 

동그리a님의 코드를 기본으로, Ventura에서도 사용 가능하도록 코드를 일부 수정했다.

알프레드에 직접 코드를 입력하여 사용할 경우 아래 코드를 참조하면 된다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# epost, v2.0
#

import sys
from unicodedata import normalize
import urllib, urllib.parse, urllib.request
import json
import xml.etree.ElementTree as ET

def send_request(q):
    params = {
        "ServiceKey": "ePOST API KEY", # 코드를 복사해서 사용하실 분은 이곳에 ePOST API Key를 발급받아 넣으면 됩니다.
        "srchwrd": q
    }
    url = "http://openapi.epost.go.kr/postal/retrieveNewAdressAreaCdSearchAllService/retrieveNewAdressAreaCdSearchAllService/getNewAddressListAreaCdSearchAll"
    url += "?"+urllib.parse.urlencode(params)

    return urllib.request.urlopen(url).read()

if __name__ == '__main__':
    try:        
        query = normalize('NFC', '{query}').encode('utf-8')
    except:
        query = ""

    data = send_request(query)

    output = []
    tree = ET.fromstring(data)
    success = tree.findtext('.//successYN')
    if success == 'Y':
        for item in tree.findall('newAddressListAreaCdSearchAll'):
            zipNo = item.findtext('.//zipNo')
            lnmAdres = item.findtext('.//lnmAdres')
            rnAdres = item.findtext('.//rnAdres')
            output.append({
                "title": '(' + zipNo + ') ' + lnmAdres,
                "subtitle": rnAdres,
                "valid": True,
                "arg": zipNo
            })
    else:
        output.append({
            'title': tree.findtext('.//errMsg'),
            'valid': False
        });

    rObj = {"items":output}

    print(json.dumps(rObj))

 

다운로드

워크플로우만 다운받아 사용하고 싶을 경우 아래 파일을 다운받아 실행해서 알프레드에 추가하면 된다.

우편번호 검색.alfredworkflow
0.12MB

 

 

 

사용하기

알프레드 검색창에 'post 검색할주소' 라고 입력하면 아래에 검색결과가 출력된다.

반응형