주문 추적
이는 구매 그룹과 함께 주문을 조정하는 프로세스를 간소화하고 자동화하기 위한 Python 스크립트 세트입니다. 기본적으로 추적 정보 검색, 구매 그룹 사이트에 업로드, 환급 후 주문 조정을 자동화합니다. 이러한 스크립트의 주요 목적은 단일 Google 시트를 보고 어떤 주문이 구매 그룹에 의해 적절하게 추적되고 보상되었는지 즉시 알 수 있고 발생할 수 있는 문제를 해결할 수 있는 도구를 사용자에게 제공하는 것입니다.
이것이 하는 일
두 가지 주요 작업이 있습니다. 그들은:
get_order_tracking.py:
이 스크립트는 다음을 수행합니다.
- Amazon 또는 Best Buy에서 지난 45일 동안 읽지 않은 배송 알림 이메일을 구문 분석합니다.
- 추적 번호, 주문 번호, 주문 비용, 이메일 주소, 주문 URL, 배송 날짜 등 해당 이메일 및 관련 이메일에서 일련의 정보를 구문 분석하고 해당 정보를 디스크와 드라이브에 저장합니다.
- Pointsmaker, MYS 또는 USA와 같은 그룹의 주문 추적 시스템에 해당 추적 번호를 업로드합니다.
- 나중에 조정을 위해 Amazon 또는 Best Buy에서 함께 묶은 주문 또는 추적 번호를 그룹화합니다(예: 두 주문이 동일한 배송으로 배송되는 경우 함께 그룹화됨).
- 온전한 확인을 위해 발견된 추적/주문 번호 목록을 사용자(사용자)에게 이메일로 보냅니다.
어떤 이유로 이메일을 구문 분석할 수 없는 경우 나중에 수동으로 볼 수 있도록 이메일을 읽지 않은 것으로 표시합니다. Amazon이 느린 경우에 이런 일이 발생합니다. 이 경우 스크립트를 다시 실행해도 아무런 해가 없습니다.
reconcile.py
화해를 위한 스크립트입니다. 다음을 수행합니다.
-
get_tracking_numbers.py
에서 추적 번호/주문 그룹을 로드합니다. - 가능한 경우 환급 비용을 작성합니다(Pointsmaker, MYS 또는 USA와 같은 그룹의 경우). 여기에는 그룹의 웹사이트로 이동하여 추적 번호에서 환급 비용으로의 매핑을 구문 분석하는 작업이 수반됩니다.
- 구매 주문별로 주문을 그룹화합니다(해당되는 경우 미국만 해당).
- 수동 조정을 적용합니다(아래 "시트 출력" 참조).
- 조정 결과를 사람이 읽을 수 있는 형식으로 Google 시트에 업로드합니다. 자세한 내용은 아래의 "시트 출력"을 참조하세요.
제한 사항
- 이는 한 번에 하나의 이메일 계정에서만 작동합니다.
- Gmail에서만 작동합니다.
- 자동 업로드는 미국 및 Pointsmaker 또는 MYS와 동일한 형식의 웹사이트를 갖춘 사이트에서만 작동합니다.
- 모든 주소에는 해당 주소가 속한 구매 그룹을 고유하게 식별하는 키가 포함되어 있어야 합니다. 기본값은 그룹 주소의 일부입니다.
전제 조건
- Python3 및 pip3(이들은 함께 제공되어야 함)
지침
Windows를 사용하는 경우 이 지침 대신 이 가이드를 사용하십시오. Windows는 약간 어렵고 이 가이드는 명확합니다.
Mac(OSX)을 사용하는 경우:
터미널을 열고 다음 명령을 실행하십시오. 이들은 Homebrew(패키지 관리자)를 설치한 다음 Homebrew를 사용하여 Git+Python을 설치하고 프로젝트를 다운로드한 다음 Python 환경을 설정합니다.
cd ~
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install pyenv
brew install git
git clone https://github.com/gbrodman/order-tracking.git
cd order-tracking
pyenv install 3.7.4
pyenv global 3.7.4
echo -e 'if command -v pyenv 1>/dev/null 2>&1; thenn eval "$(pyenv init -)"nfi' >> ~/.bash_profile
source ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pip install -r requirements.txt
모든 운영 체제에서:
- 방해할 수 있는 모든 VPN의 연결을 끊습니다(일부 네트워크 연결 문제를 일으킬 수도 있고 그렇지 않을 수도 있음).
- GMail에서 IMAP 활성화 - 설정 페이지로 이동한 다음 '전달 및 POP/IMAP' 탭으로 이동한 다음 IMAP이 활성화되어 있는지 확인하세요.
- config.yml.template을 config.yml에 복사합니다.
- 구성을 설정합니다(자세한 내용은 아래의 "구성" 섹션 참조).
-
python get_tracking_numbers.py
실행한 다음 python reconcile.py
실행합니다.
구성
config.yml의 필드에 대한 세부정보는 다음과 같습니다.
- 이메일과 비밀번호는 GMail 계정이어야 합니다. 특히 비밀번호는 앱 비밀번호여야 합니다. IMAP 및 SMTP 구성을 동일하게 유지할 수 있습니다(그렇지 않아야 한다는 것을 확실히 알지 않는 한).
- 2020년 3월부터 Google에서는 앱 비밀번호를 더 이상 지원하지 않습니다. Gmail에 로그인하려면 OAuth가 필요합니다. 설정 방법은 아래 세부정보를 참조하세요.
- '그룹'의 각 그룹에 대해 그룹의 전체 이름을 포함합니다(MYS와 같은 사이트의 경우 URL에서 ".com" 비트를 뺀 이름이어야 함). 해당 그룹에 대한 배송 알림에만 표시되는 그룹별 고유 키(기본값은 주소 기준)를 포함합니다. 추적 번호를 업로드하고 조정 데이터를 스크랩할 수 있도록 사용자 이름과 비밀번호는 그룹의 온라인 포털에 있어야 합니다.
- LookbackDays는 귀하의 이메일 계정에서 읽지 않은 Amazon 배송 이메일을 검색할 기간입니다. 참고: 배송 링크는 45일 후에 만료되므로 그 기간을 넘기면 안 됩니다.
- 조정 baseSpreadsheetId는 기존 Google 시트의 ID여야 합니다. 해당 시트에 올바른 권한을 부여하는 방법은 아래 섹션을 참조하세요. ID는 "https://docs.google.com/spreadsheets/d/SHEET_ID" 형식의 URL에서 검색할 수 있습니다.
- 'driveFolderId' 필드는 영구 데이터를 저장할 Google 드라이브 폴더의 ID여야 합니다. 이는 "https://drive.google.com/drive/folders/FOLDER_ID" 형식의 폴더 URL에서 검색할 수 있습니다.
스프레드시트/드라이브 구성 및 권한
Drive와 Sheets에 쓰려면 자동화된 Google Cloud 계정을 만들고 사용해야 합니다. 그 방법은 다음과 같습니다.
- 먼저 https://console.cloud.google.com에서 Google Cloud 프로젝트를 만듭니다.
- 그런 다음 이 페이지의 1~5단계에 따라 GCP에서 서비스 계정을 만들고 이에 대한 사용자 인증 정보를 가져옵니다. 서비스 계정의 이메일 주소를 기록해 두세요. 이메일 주소는 매우 길어야 하며 끝에 '.gserviceaccount.com'이 포함되어야 합니다.
- 자격 증명 JSON 파일을 다운로드할 때 이름을 "creds.json"으로 바꾸고 이 스크립트와 동일한 디렉터리에 넣습니다.
- Google Cloud 콘솔 웹사이트에서 왼쪽 탐색 창을 사용하여 'API 및 서비스'로 이동합니다.
- 그런 다음 "API 및 서비스 활성화"를 클릭하십시오. 그러면 API 라이브러리로 이동됩니다. "Google Drive API" 및 "Google Sheets API"를 검색하고 활성화해야 합니다. 각각에 대해 검색하고 해당 용어를 클릭한 후 활성화하십시오.
- 다음으로, 우리가 설정한 Google Sheet와 Google Drive 폴더 조정에 대해서는 앞서 생성한 서비스 계정과 시트/폴더를 반드시 공유해야 합니다. '.gserviceaccount.com'으로 끝나는 이메일 주소로 둘 다 공유하면 됩니다(해당 주소에 시트 및 폴더에 대한 편집 권한이 있는지 확인하세요).
- OAuth의 경우 https://support.google.com/cloud/answer/6158849?hl=en에서 키를 생성하고 이 스크립트와 동일한 디렉터리에 client_secret.json으로 저장하세요.
그게 전부입니다. "creds.json" 파일은 스크립트에 서비스 계정으로 실행될 수 있는 기능을 제공하며, 작성해야 하는 항목에 대한 서비스 계정 권한을 부여했습니다.
인수
-
--headless
헤드리스 브라우저에서 실행합니다. 이는 자동화가 수행하는 작업을 확인하고 싶지 않은 경우 유용합니다. -
--firefox
Chrome 대신 Firefox/Geckodriver를 사용하여 실행됩니다. -
--groups AB
그룹 A와 B에 대해서만 조정을 실행합니다. 생략하면 모든 그룹에 대해 실행됩니다.
시트 출력
조정 작업에는 이전에 구성한 Google 시트의 두 탭으로 구성된 출력이 있습니다. 탭은 다음과 같습니다.
화해
이것이 주요 스프레드시트입니다. 단일 추적 번호는 여러 주문으로 구성될 수 있고 단일 주문에는 여러 추적 번호가 포함될 수 있으므로 배송이 분할된 방식에 따라 주문을 그룹화합니다. 열은 다음과 같습니다.
- 주문: 이 그룹에 포함된 주문 ID
- 추적: 이 그룹에 포함된 추적 번호
- 청구 금액: 이 그룹에 대해 청구된 총 금액
- 환급 금액: 구매 그룹 사이트에서 이 그룹에 대해 표시하는 총 금액
- 마지막 배송 날짜: 가장 최근 배송 날짜입니다. 오래 전이고 주문에 대한 환급이 부족한 경우 문제가 있을 수 있습니다.
- PO: 구매 주문 목록(현재는 미국에만 해당)
- 그룹: 구매 그룹
- 이메일 수신: 배송/주문 이메일이 전송된 이메일
- 수동 비용 조정: 주문에 대해 예상되는 상환 비용을 조정하는 방법입니다. 타당한 이유로 항목이 과소 환급되었음을 알고 있는 경우 여기에 해당 금액을 추가할 수 있습니다. 청구 금액은 환급 금액에 수동 비용 조정을 더한 금액이 될 것으로 예상됩니다. 변경하면 저장됩니다.
- 수동 재정의: 또 다른 수동 필드입니다. 그룹이 올바르게 보이는 경우 이 필드를 확인하세요. 다른 항목은 무시되고 해결된 것으로 표시됩니다.
- 총 차액: 청구 금액과 환급 금액(수동 조정 포함) 간의 총 차액입니다. 녹색은 금액이 동일했거나 재정의가 확인되었음을 의미하고, 노란색은 초과 환급을 받았음을 의미하며, 빨간색은 환급을 덜 받았음을 의미합니다.
- 메모: 개인적인 용도로 사용하기 위한 메모
추적
이 시트의 각 행은 추적 번호에 해당합니다. 여기에는 해당 추적에 대한 주문과 이에 대한 기타 정보가 포함되어 있으며, 찾을 수 있는 경우 환급 금액도 포함됩니다. 이 탭은 그룹이 일부 항목을 잘못 스캔한 경우 문제가 발생한 정확한 위치를 파악하는 데 가장 유용합니다.
아마존 보고서 가져오기
먼저 사이트의 비즈니스 분석 섹션을 통해 Amazon 비즈니스 배송 보고서를 CSV로 내보냅니다. 그런 다음 해당 CSV 파일을 Google 드라이브에 업로드하고 스프레드시트 파일로 엽니다. 이전과 동일한 방식으로 시트 URL에서 검색할 수 있는 시트 ID(예: "https://docs.google.com/spreadsheets/d/SHEET_ID")를 기록해 두세요. 또한 탭 이름을 기록해 두십시오.
그런 다음 python import_report.py
실행하세요. 앞서 언급한 시트 ID와 탭 이름을 입력하라는 메시지가 표시됩니다. 가져오는 추적에 대한 정보를 인쇄하고 유효한 그룹을 찾을 수 없는 행도 인쇄합니다(참고: 주소는 "City, STATE"와 같은 형식이 아니므로 이 섹션에서는 주소의 시작 부분을 그룹 키로 사용하는 것이 좋습니다(예: 그룹 구성에서 '123 Fake St'(따옴표 제외)).
수동 주문 가져오기
때로는 추적 개체를 데이터 저장소에 수동으로 추가하고 싶을 수도 있습니다. 이렇게 하려면 manual_input.py
스크립트를 실행하세요. 인수 없이 실행하면 일련의 입력을 요청합니다(기존 추적 개체를 삭제할 수도 있음). 대부분의 인수는 선택 사항이며 올바른 기본값을 입력하려고 시도하지만 추적 번호, 주문 번호 및 그룹 필드는 필수입니다.
가장 간단한 형태로 새 추적 개체를 추가하여 입력을 한 번에 모두 실행하려면 다음 명령 하나로 실행하면 됩니다.
python manual_input.py -a -t TRACKING_NUMBER -g GROUP -o ORDER_NUMBER
예를 들어
python manual_input.py -a -t TBA1234567890 -g mysbuyinggroup -o 123-1234567-1234567
기부
이 소프트웨어는 완전 무료이며 GNU Affero General Public License에 따라 라이센스가 부여됩니다. 하지만 저에게 돈을 기부하고 싶으시다면 Paypal을 통해 https://paypal.me/GustavBrodman으로 금액을 보내주세요.