订单追踪
这是一组 Python 脚本,旨在简化和自动化与采购团体核对订单的过程。从基本意义上讲,它可以自动检索跟踪信息、上传到购买团体的网站以及报销后的订单核对。这些脚本的主要目的是让人们可以查看一张 Google 表格并立即了解哪些订单已被购买团体正确跟踪和报销,并为用户提供解决可能出现的任何问题的工具。
这是做什么的
主要任务有两个。他们是:
获取订单跟踪.py:
该脚本执行以下操作:
- 解析过去 45 天内来自 Amazon 或 Best Buy 的未读发货通知电子邮件。
- 从这些电子邮件和关联电子邮件中解析出一组信息,包括跟踪编号、订单编号、订单成本、电子邮件地址、订单 URL 和发货日期,并将该信息保存到磁盘和云端硬盘。
- 将这些跟踪号码上传到 Pointsmaker、MYS 或 USA 等组织的订单跟踪系统。
- 将由 Amazon 或 Best Buy 捆绑在一起的订单或追踪号码分组在一起,以便稍后进行核对(例如,如果两个订单在同一个货件中发货,则它们会分组在一起)。
- 通过电子邮件向您(用户)发送找到的跟踪/订单号列表,以进行完整性检查。
如果由于某种原因无法解析电子邮件,它会将电子邮件标记为未读,以便您稍后可以手动查看。如果亚马逊运行缓慢,有时会发生这种情况 - 在这种情况下,再次运行脚本并没有什么坏处。
协调.py
这是和解的脚本。它执行以下操作:
- 从
get_tracking_numbers.py
加载跟踪号码/订单组。 - 尽可能填写报销费用(对于 Pointsmaker、MYS 或 USA 等团体)。这需要进入该组织的网站并解析从跟踪号码到报销费用的映射。
- 按采购订单将订单分组在一起(如果适用,仅限美国)。
- 应用手动调整(请参阅下面的“图纸输出”)。
- 以人类可读的格式将调节输出上传到 Google 表格。有关详细信息,请参阅下面的“工作表输出”。
局限性
- 这一次仅适用于一个电子邮件帐户
- 这仅适用于 GMail
- 自动上传仅适用于美国以及网站格式与 Pointsmaker 或 MYS 相同的网站
- 所有地址都必须包含唯一标识该地址属于哪个购买组的密钥。默认值是组地址的一部分。
先决条件
指示
如果您使用的是 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。请参阅下面有关如何设置的详细信息。
- 对于“groups”中的每个组,请包含该组的全名(对于像 MYS 这样的网站,这应该是 URL 减去“.com”位)。每个组包含一个唯一的密钥(默认基于地址),该密钥仅出现在向该组发送的运送通知中。用户名和密码应位于该团体的在线门户网站,以便我们可以上传跟踪号码并抓取对账数据。
- LookbackDays 是我们在您的电子邮件帐户中搜索未读的亚马逊发货电子邮件的时间。注意:发货链接将在 45 天后过期,因此我们不应超过此期限
- 调节 baseSpreadsheetId 应是现有 Google 表格的 ID。请参阅下面的部分,了解如何向该工作表授予正确的权限。可以从 URL 中检索 ID,其格式为“https://docs.google.com/spreadsheets/d/SHEET_ID”
- “driveFolderId”字段应该是我们将在其中存储持久数据的 Google Drive 文件夹的 ID。这可以从文件夹的 URL 中检索,其格式为“https://drive.google.com/drive/folders/FOLDER_ID”
表/驱动器配置和权限
我们需要创建并使用自动化的 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=en 上创建密钥,并将其作为 client_secret.json 存储在与这些脚本相同的目录中。
应该是这样——“creds.json”文件将使脚本能够作为服务帐户运行,并且我们已经向服务帐户授予了它需要写入的内容的权限。
论点
--headless
在无头浏览器中运行。如果您不关心自动化正在做什么,这会很有用。-
--firefox
使用 Firefox/Geckodriver 而不是 Chrome 运行 --groups AB
将仅对 A 组和 B 组运行协调。如果省略,将对所有组运行。
纸张输出
协调任务的输出由我们之前配置的 Google Sheet 中的两个选项卡组成。这些选项卡是:
和解
这是主要的电子表格。由于一个追踪号码可以包含多个订单,并且一个订单可以包含多个追踪号码,因此我们根据货件的划分方式将它们分组为订单。这些列是:
- 订单:该组中包含的订单 ID
- 追踪:该组中包含的追踪号码
- 计费金额:您为此组支付的总金额
- 报销金额:购买团体网站为该团体显示的总金额
- 最后发货日期:这是最近发货的日期。如果是很久以前的事,而且订单的补偿不足,那么您可能遇到了问题。
- PO:采购订单列表(目前仅适用于美国)
- 团体:采购团
- 收件人电子邮件:运送/订单电子邮件发送到的电子邮件
- 手动成本调整:这是调整订单预期报销成本的一种方法。如果您知道某件商品因合理原因而报销不足,您可以在此处添加该金额。我们预计计费金额等于报销金额加上此手动成本调整。如果您更改它,则会保存它。
- 手动覆盖:另一个手动字段,如果您确定该组看起来正确,请检查此项 - 它将忽略其他任何内容并标记为已解决
- 总差异:这是计费金额和报销金额之间的总差异(加上手动调整)。绿色表示金额相等或已检查超额,黄色表示您报销超额,红色表示您报销不足。
- 注释:供您个人使用的注释
追踪记录
此表上的每一行对应一个跟踪号码。它包含该跟踪的订单以及相关的其他信息,包括报销金额(如果我们能找到)。如果某个组误扫描了某些项目,则此选项卡对于准确找出问题发生的位置非常有用。
亚马逊报告导入
首先,将亚马逊业务发货报告导出为 CSV(通过网站的业务分析部分)。然后,将该 CSV 文件上传到 Google 云端硬盘并将其作为表格文件打开。请注意工作表 ID,它可以像以前一样从工作表 URL 中检索,即“https://docs.google.com/spreadsheets/d/SHEET_ID”。另请注意选项卡名称。
然后,运行python import_report.py
。它会要求您提供前面提到的工作表 ID 和选项卡名称 - 将它们放入。它将打印出有关正在导入的跟踪的信息,并且还会打印无法找到有效组的任何行(注意:地址的格式不像“城市,州”,因此对于本节,我建议使用地址的开头作为组键,例如组配置中的“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 通用公共许可证获得许可。但是,如果您想向我捐赠一些钱,请随时通过 Paypal 发送任意金额至 https://paypal.me/GustavBrodman