注文追跡
これは、購入グループとの注文を調整するプロセスを合理化し、自動化するための Python スクリプトのセットです。基本的には、追跡情報の取得、購入グループのサイトへのアップロード、償還後の注文の調整を自動化します。これらのスクリプトの主な目的は、単一の Google スプレッドシートを見るだけで、どの注文が購入グループによって適切に追跡され、返金されたかをすぐに知ることができ、発生する可能性のある問題を解決するためのツールをユーザーに提供することです。
これが何をするのか
主なタスクは 2 つあります。彼らです:
get_order_tracking.py:
このスクリプトは次のことを行います。
- Amazon または Best Buy からの過去 45 日間の未読の配送通知メールを解析します。
- これらのメールおよび関連するメールから、追跡番号、注文番号、注文費用、メール アドレス、注文 URL、発送日などの一連の情報を解析し、その情報をディスクとドライブに保存します。
- これらの追跡番号を Pointsmaker、MYS、USA などのグループの注文追跡システムにアップロードします。
- 後で照合できるように、Amazon または Best Buy によってまとめられた注文または追跡番号をグループ化します (たとえば、2 つの注文が同じ出荷で発送される場合は 1 つにグループ化されます)。
- 健全性チェックのために、見つかった追跡番号/注文番号のリストを電子メールで送信します。
何らかの理由で電子メールを解析できない場合は、電子メールを未読としてマークし、後で手動で確認できるようにします。これは、Amazon の動作が遅い場合に発生することがあります。このような場合、スクリプトを再度実行しても問題はありません。
調整する.py
これは和解のためのスクリプトです。これは次のことを行います。
-
get_tracking_numbers.py
から追跡番号/注文のグループを読み込みます。 - 可能な場合は、払い戻される費用を記入します (Pointmaker、MYS、USA などのグループの場合)。これには、グループの Web サイトにアクセスし、追跡番号から払い戻される費用までのマッピングを解析する必要があります。
- 注文書ごとに注文をグループ化します (該当する場合は米国のみ)。
- 手動調整を適用します (下記の「シート出力」を参照)。
- 調整出力を人間が読める形式で Google シートにアップロードします。詳細については、以下の「シート出力」を参照してください。
制限事項
- これは一度に 1 つの電子メール アカウントに対してのみ機能します
- これは GMail でのみ機能します
- 自動アップロードは、米国および Web サイトが 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 から取得できます。
シート/ドライブの構成と権限
ドライブとスプレッドシートに書き込むには、自動化された Google Cloud アカウントを作成して使用する必要があります。その方法は次のとおりです。
- まず、https://console.cloud.google.com で Google Cloud プロジェクトを作成します。
- 次に、このページの手順 1 ~ 5 に従って、Google Cloud でサービス アカウントを作成し、その認証情報を取得します。サービス アカウントの電子メール アドレスを必ずメモしてください。このアドレスは非常に長く、最後に「.gserviceaccount.com」が含まれている必要があります。
- 資格情報 JSON ファイルをダウンロードするときは、そのファイルの名前を「creds.json」に変更し、これらのスクリプトと同じディレクトリに置きます。
- Google Cloud コンソールのウェブサイトで、左側のナビゲーション ペインを使用して [API とサービス] に移動します。
- 次に「APIとサービスを有効にする」をクリックします。これにより、API ライブラリに移動します。 「Google Drive API」と「Google Sheets API」を検索して有効にする必要があります。それぞれについて、検索し、用語をクリックして有効にします。
- 次に、調整用の Google シートと設定した Google ドライブ フォルダーについて、前に作成したサービス アカウントと必ずシート/フォルダーを共有してください。 「.gserviceaccount.com」で終わる電子メール アドレスを使用して両方を共有するだけです (アドレスにシートとフォルダーに対する編集権限があることを確認してください)。
- OAuth の場合は、https://support.google.com/cloud/answer/6158849?hl=ja でキーを作成し、これらのスクリプトと同じディレクトリに client_secret.json として保存します。
それもそのはずです。「creds.json」ファイルにより、スクリプトはサービス アカウントとして実行できるようになり、書き込む必要があるものに対するアクセス許可がサービス アカウントに与えられました。
引数
--headless
ヘッドレスブラウザで実行します。これは、自動化が何を行っているかを確認する必要がない場合に便利です。-
--firefox
Chrome ではなく Firefox/Geckodriver を使用して実行します。 -
--groups AB
、グループ A と B に対してのみ調整を実行します。省略すると、すべてのグループに対して実行されます。
シート出力
調整タスクの出力は、前に構成した Google シートの 2 つのタブで構成されます。タブは次のとおりです。
和解
これがメインのスプレッドシートです。 1 つの追跡番号が複数の注文で構成され、1 つの注文に複数の追跡番号が含まれる可能性があるため、出荷がどのように分割されたかに基づいて注文をグループ化します。列は次のとおりです。
- 注文: このグループに含まれる注文 ID
- 追跡: このグループに含まれる追跡番号
- 請求金額: このグループに対して請求された合計金額
- 払い戻される金額: 購入グループのサイトがこのグループに対して表示する合計金額
- 最終出荷日: 最新の出荷日です。かなり前の注文で払い戻しが不十分な場合は、おそらく問題が発生していると考えられます。
- PO: 注文書のリスト (現在は米国のみ)
- グループ: 購入グループ
- 宛先メール: 発送/注文メールの送信先メールアドレス
- 手動コスト調整: これは、注文に対して予想される払い戻しコストを調整する方法です。正当な理由で商品の払い戻しが不足していることがわかっている場合は、ここでその金額を追加できます。請求金額は、払い戻される金額にこの手動によるコスト調整を加えた金額に等しいことが予想されます。変更すると保存されます。
- 手動オーバーライド: 別の手動フィールド。グループが正しいと確信できる場合は、これをチェックしてください。他のものはすべて無視され、解決済みとしてマークされます。
- 合計差額: これは、請求額と払い戻された金額の合計差額です (手動調整を加えたもの)。緑は金額が等しいか上書きがチェックされたことを意味し、黄色は払い戻しが過剰であることを、赤は払い戻しが不足していることを意味します。
- 注意事項: 個人使用のための注意事項
追跡
このシートの各行は追跡番号に対応します。これには、その追跡の注文と、見つかった場合の払い戻し金額を含む、それに関するその他の情報が含まれています。このタブは、グループが何らかのアイテムを誤ってスキャンした場合に、問題が発生した場所を正確に把握するのに最も役立ちます。
Amazon レポートのインポート
まず、Amazon ビジネス出荷レポートを CSV としてエクスポートします (サイトの Business Analytics セクションを通じて)。次に、その CSV ファイルを Google ドライブにアップロードし、スプレッドシート ファイルとして開きます。シート ID に注目してください。これは、前と同じ方法でシート URL から取得できます (つまり、「https://docs.google.com/spreadsheets/d/SHEET_ID」)。タブ名にも注意してください。
次に、 python import_report.py
を実行します。前述のシート ID とタブ名を入力するよう求められますので、それらを入力します。インポートしている追跡に関する情報が出力され、有効なグループが見つからなかった行も出力されます (注:アドレスは「City, STATE」のような形式ではないため、このセクションでは、アドレスの先頭をグループ キーとして使用することをお勧めします (例: グループ設定では「123 Fake St」(引用符なし))。
手動注文インポート
場合によっては、追跡オブジェクトをデータストアに手動で追加したい場合があります。これを行うには、 manual_input.py
スクリプトを実行します。引数なしで実行すると、一連の入力を求められます (既存の追跡オブジェクトを削除することもできます)。ほとんどの引数はオプションであり、適切なデフォルト値を入力しようとしますが、追跡番号、注文番号、およびグループのフィールドは必須です。
入力をすべて 1 つのステップで実行して、最も単純な形式で新しい追跡オブジェクトを追加する場合は、単に 1 つのコマンドとして実行します。
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 に自由に金額を送ってください。