TL;DR
Một tập dữ liệu danh mục Etsy nên biểu diễn danh mục và đề nghị hoặc biến thể cụ thể mà bạn muốn so sánh. Một tệp chứa chỉ tiêu đề và giá tiền dạng số thực có thể đủ cho danh sách thô, nhưng không đủ cho việc theo dõi giá tiền đáng tin cậy. Bạn cần mã danh mục, tiền tệ, thời gian quan sát, và đủ bối cảnh biến thể để giải thích sự thay đổi.
Đối với tích hợp cửa hàng riêng, bắt đầu với dữ liệu mà Etsy cung cấp cho thao tác yêu cầu. Đối với một dự án nghiên cứu rộng hơn, xác minh quyền truy cập được phép và sử dụng trước khi thu thập. Một trang danh mục công khai không phải là bằng chứng rằng mọi phương pháp thu thập tự động đều được phép. Môi trường trình duyệt quản lý thực thi; nó không mở rộng cấp độ truy cập của ứng dụng.
Chọn con đường dữ liệu dựa trên các trường và phạm vi mà dự án thực sự được phép sử dụng. Dữ liệu có cấu trúc có thể giảm bớt sự mơ hồ trong phân tích, nhưng vẫn cần xác minh lược đồ và mô hình xác thực phù hợp. Xem xét trình duyệt hữu ích để giải quyết một sự không khớp cụ thể khi được phép, thay vì thay thế mọi tích hợp có cấu trúc.
Hướng dẫn xác thực của Etsy ghi lại khóa API và yêu cầu OAuth cho các thao tác có phạm vi. Hướng dẫn hiện tại xác định giá trị x-api-key gồm keystring và bí mật chia sẻ được phân tách bằng dấu hai chấm. Kiểm tra yêu cầu hiện tại trong tài liệu chính thức khi triển khai; các hướng dẫn cũ có thể hiển thị định dạng tiêu đề không tương thích.
Yêu cầu chỉ phạm vi cần thiết cho endpoint thực tế. Một việc nhập danh mục chỉ đọc không nên yêu cầu quyền ghi hoặc xóa chỉ vì một ví dụ bao gồm chúng. Giữ các khóa và bí mật ứng dụng bên ngoài mã bài viết, nhật ký và dữ liệu xuất khẩu. Không có yêu cầu API Etsy được xác thực nào được chạy cho bài viết này.
Hướng dẫn danh mục chính thức mô tả các trạng thái chu kỳ sống và biến thể tồn kho. Một danh mục có thể không hoạt động hoặc hết hàng, trong khi người thu thập cũng có thể thất bại trong việc truy xuất nó. Bảo tồn những khả năng này riêng biệt. Một bản ghi bị thiếu trong một trang kết quả không đủ bằng chứng để cho rằng người bán đã xóa danh mục.
Đối với quy trình cửa hàng được phép, so sánh biến thể được chọn, số lượng, tiền tệ và thời gian quan sát trước khi coi sự không khớp là lỗi phân tích. Ghi lại những gì trình duyệt thực sự hiển thị. Không nên coi giá khởi điểm trên thẻ danh mục, giá biến thể được cấu hình và tổng giá cuối cùng thanh toán là như nhau.
Sử dụng một bảng danh mục cho mã danh mục cấp độ và một bảng đề nghị hoặc biến thể khi nguồn cung cấp chi tiết đó. Lưu trữ các mã định danh thô dưới dạng văn bản để tránh vấn đề chuyển đổi bảng tính. Bảo tồn mối quan hệ của nguồn giữa sản phẩm, đề nghị và thuộc tính biến thể thay vì làm phẳng các lựa chọn không liên quan thành chuỗi tiêu đề duy nhất.
| Quan Sát | Bối cảnh cần thiết | Lỗi diễn giải phổ biến |
|---|---|---|
| Giá danh mục | Tiền tệ, thời gian, ý nghĩa giá | Coi nó là giá của mọi biến thể |
| Đề nghị biến thể | Thuộc tính được chọn và mã định danh | So sánh các kích thước khác nhau như sự thay đổi giá |
| Số lượng | Phạm vi và trạng thái nguồn | Gọi số lượng cấp độ danh mục là tồn kho chung |
| Hàng bị thiếu | Phân trang và hoàn tất chạy | Báo cáo xóa sau khi thất bại một lô |
| Số tiền liên quan đến vận chuyển | Địa điểm và bối cảnh tính toán | Trộn giá sản phẩm với chi phí cuối cùng |
Làm cho khóa so sánh rõ ràng. Ví dụ, một bản ghi lịch sử giá có thể được khóa bằng listing_id, chữ ký biến thể, tiền tệ và observed_at. Đó là thiết kế kho đề xuất, không phải tuyên bố rằng Etsy trả về trường tên là variation_signature. Phân biệt các cột được chuẩn hóa của bạn với các trường của nhà cung cấp.
Các định nghĩa tiền của Etsy mô tả amount chia cho divisor và mã tiền tệ riêng biệt. Một phép chia cứng mã 100 làm hỏng các bản ghi có divisor khác. Số học dấu phẩy động nhị phân cũng gây ra các vấn đề đại diện có thể tránh được khi giá trị được sử dụng cho việc đối chiếu.
Ví dụ Python này sử dụng các đối tượng tiền giả định được hình thành xung quanh các trường được mô tả. Nó xác minh divisor và bảo tồn tiền tệ. Đó là một thử nghiệm chuyển đổi, không phải phản hồi API được ghi lại từ một cửa hàng thực tế.
from decimal import Decimal
import json
def money(value):
amount, divisor = value["amount"], value["divisor"]
if type(amount) is not int or type(divisor) is not int or divisor <= 0:
raise ValueError("integer amount and positive integer divisor required")
currency = value["currency_code"]
if not isinstance(currency, str) or len(currency) != 3 or not currency.isalpha():
raise ValueError("three-letter currency code required")
return {"value": format(Decimal(amount) / Decimal(divisor), "f"),
"currency": currency.upper()}
samples = [{"amount": 1299, "divisor": 100, "currency_code": "USD"},
{"amount": 2500, "divisor": 1000, "currency_code": "USD"}]
result = [money(x) for x in samples]
assert result[0]["value"] == "12.99"
assert result[1]["value"] == "2.5"
try:
money({"amount": 1, "divisor": 0, "currency_code": "USD"})
except ValueError:
rejected_zero_divisor = True
else:
raise AssertionError("zero divisor was accepted")
print(json.dumps({"converted": result, "rejected_zero_divisor": rejected_zero_divisor}))
Thử nghiệm cục bộ đã thực hiện trả về 12.99 và 2.5 USD và từ chối divisor bằng 0. Bộ thử nghiệm thứ hai cố ý sử dụng divisor khác để làm nổi bật một giả định phổ biến trong triển khai. Xác minh mã tiền tệ 3 chữ cái chỉ là kiểm tra định dạng; chính sách tiền tệ sản xuất nên sử dụng tập tiền tệ được hỗ trợ cho tích hợp. Không chuyển đổi tiền tệ một cách im lặng hoặc làm tròn giá trị trước khi xác định chính sách kế toán báo cáo.
Bắt đầu với một cửa hàng hoặc tập danh mục được phép có giới hạn. Lưu trữ phản hồi thô cùng với thao tác, thời gian và bối cảnh chẩn đoán bị che đi. Chuẩn hóa mỗi danh mục chỉ sau khi xác minh các mã định danh và cấu trúc giá cần thiết. Theo dõi hoàn tất trang hoặc con trỏ riêng biệt khỏi số lượng bản ghi được trả về.
Đối với các lần chạy lặp lại, cập nhật biểu diễn hiện tại và thêm các quan sát giá lịch sử nơi dự án cần chúng. Đối chiếu các hàng được chấp nhận, hàng bị từ chối và mã định danh lặp lại. Nếu một trang thất bại, ghi chú chạy là không hoàn chỉnh và thử lại theo hướng dẫn hiện tại của endpoint. Không gán danh mục chưa thấy là đã xóa cho đến khi so sánh hoàn chỉnh và chính sách xóa được dự định hỗ trợ kết luận đó.
Nstbrowser có thể tổ chức việc kiểm tra trình duyệt xung quanh một Hồ Sơ đã lưu cho quy trình cửa hàng mong muốn. Điều này hữu ích khi một người cần so sánh các bản ghi có cấu trúc với một trang xem được phép. Cài đặt nhóm giúp bạn xem lại các lựa chọn lưu trữ và đồng bộ cho môi trường. RPA có thể hỗ trợ chuỗi xem có giới hạn khi phạm vi của nó được phép và đầu ra được kiểm tra. Các tính năng này không thay thế sự phê duyệt ứng dụng Etsy, xác thực API hoặc mô hình dữ liệu cấp độ biến thể chính xác.
Chuẩn bị môi trường bằng cách tạo Hồ Sơ, kiểm tra cài đặt nhóm và thích nghi chuỗi được phép từ tài liệu RPA. So sánh một danh mục được biết và biến thể được chọn với bản ghi có cấu trúc. Không có tích hợp trình duyệt Etsy hoặc Nstbrowser nào được thực hiện ở đây.
Sử dụng thử nghiệm để xác minh ý nghĩa, không chỉ là trích xuất thành công. Một bản ghi chỉ hữu ích khi người kiểm tra khác có thể xác định được danh mục, biến thể, tiền tệ và thời điểm nào mà nó đại diện.
Câu hỏi: Giá Etsy có phải luôn là số tiền chia cho 100 không?
Không. Sử dụng divisor được trả về cùng với amount và currency_code.
Câu hỏi: Khóa API có cấp quyền truy cập vào mọi thao tác không?
Không. Phạm vi endpoint, xác thực OAuth, quyền truy cập ứng dụng và sử dụng được phép vẫn còn quan trọng.
Câu hỏi: Một giá danh mục có thể đại diện cho tất cả các biến thể không?
Không nên giả định. Bảo tồn bối cảnh đề nghị hoặc biến thể cụ thể được sử dụng bởi so sánh.
Câu hỏi: Việc danh mục bị thiếu trong một lần chạy có chứng minh rằng nó đã bị xóa không?
Không. Một thu thập không hoàn chỉnh, vấn đề truy cập hoặc sự cố trích xuất cũng có thể tạo ra các bản ghi bị thiếu.