Bảng snapshot backlink hàng tuần trên GitHub Actions: sách hướng dẫn
Mục tiêu: mỗi thứ Hai, một quy trình ghi lại các tên miền trỏ về và văn bản neo của ngày hôm đó vào kho lưu trữ. Không làm gì thêm. Việc so sánh sự khác biệt sẽ được thực hiện sau.
Đội ngũ biên tập Linkzoid ·
Trước khi bắt đầu
Bạn cần một kho lưu trữ, một khóa Linkzoid được lưu dưới dạng bí mật LZ_KEY, và một tên miền thuộc sở hữu của bạn. Ngân sách: khoảng 6 credit mỗi lần chạy cho mỗi mục tiêu, tương đương $0.0006. Một snapshot là một dữ liệu thực tế của một tháng, nên các lần chạy hàng tuần chủ yếu là lấy lại cùng một chỉ mục. Thiết lập cách kiểm tra backlink đến website của tôi theo cách này chỉ tốn một buổi tối.
Sách hướng dẫn, theo thứ tự
01
1. Thêm bí mật
Cài đặt kho lưu trữ, sau đó chọn Secrets and variables, rồi Actions. Đặt tên là LZ_KEY. Nếu bạn dán khóa vào tệp quy trình, hãy xoay khóa ngay hôm nay.
02
2. Commit script
Lưu đoạn Python bên dưới thành snap.py. Nó ghi vào data/YYYY-MM-DD/refdomains.json và sẽ báo lỗi nếu phản hồi có ok là false.
03
3. Commit quy trình
Sử dụng đoạn YAML bên dưới. Chạy nó một lần thủ công bằng kích hoạt workflow_dispatch và đọc nhật ký trước khi tin tưởng vào lịch trình.
04
4. Kiểm tra tệp đầu tiên
Mở tệp JSON. Xác nhận số hàng so với total, và so sánh con số này với những gì lệnh gọi overview miễn phí báo cáo cho tên miền của bạn.
05
5. Thêm cảnh báo
Một công việc bị lỗi sẽ gửi email cho chủ sở hữu kho lưu trữ theo mặc định. Hãy giữ nguyên cài đặt đó. Một công việc dừng lại một cách im lặng là cách thông thường mà các thiết lập này bị hỏng.
snap.py
Thư viện chuẩn. Vòng lặp kết thúc dựa trên số lượng, không dựa trên phỏng đoán.
python
import json, os, sys, datetime, pathlib, urllib.request as u
KEY = os.environ['LZ_KEY']
TARGET = sys.argv[1]
def get(**p):
q = '&'.join(f'{k}={v}' for k, v in p.items())
url = f'https://linkzoid.pro/api.php?{q}&key={KEY}'
with u.urlopen(url, timeout=30) as r:
return json.load(r)
rows, page = [], 1
while True:
d = get(action='refdomains', q=TARGET, page=page, per=1000)
if not d['ok']:
sys.exit(f'bad response: {d}')
rows += d['rows']
if not d['rows'] or len(rows) >= d['total']:
break
page += 1
day = datetime.date.today().isoformat()
out = pathlib.Path('data') / day
out.mkdir(parents=True, exist_ok=True)
(out / 'refdomains.json').write_text(json.dumps(rows))
print(len(rows), 'rows, balance', d['_credits'])
.github/workflows/snapshot.yml
Cron trong GitHub chạy theo UTC và có thể bắt đầu muộn khi các runner bận rộn. Không xây dựng bất cứ thứ gì phụ thuộc vào phút cụ thể.
Khóa nằm trong các bí mật của kho lưu trữ, và tệp YAML chỉ tham chiếu đến nó bằng tên.
Tệp quy trình nằm trên nhánh mặc định, vì đó là bản sao mà lịch trình đọc.
Một lần chạy thủ công với workflow_dispatch đã hoàn tất và tạo một thư mục có ngày tháng.
Số hàng trong tệp khớp với tổng số mà API trả về cho lệnh gọi đó.
Công việc thoát với mã khác 0 khi có phản hồi xấu, do đó một lỗi sẽ khiến lần chạy chuyển sang màu đỏ.
Lỗi và cách khắc phục
Điều gì thường hỏng trước tiên trong một công việc backlink theo lịch trình
Lỗi
Điều bạn thấy
Cách khắc phục
Khóa được dán vào YAML
Khóa hiển thị trong lịch sử kho lưu trữ
Xoay khóa, di chuyển nó vào secrets.LZ_KEY
Phút lẻ như 0 0
Lần chạy bắt đầu muộn 20 phút
Chọn 17 6; đầu giờ thường đông đúc
Kho lưu trữ không hoạt động trong 60 ngày
GitHub tạm dừng lịch trình
Commit một thứ gì đó, hoặc kích hoạt lại nó trong tab Actions
Vòng lặp dừng lại chỉ khi gặp trang trống
Lần chạy vô hạn ở giới hạn trang
Cũng dừng lại khi len(rows) >= total
Mã thoát bị bỏ qua
Dấu tích xanh, thư mục trống
Sử dụng sys.exit khi ok: false
Commit thất bại khi không có thay đổi
Lần chạy màu đỏ vô cớ
Thêm || exit 0 sau lệnh commit
Giữ khóa và kho lưu trữ an toàn
Khóa là thứ duy nhất trong thiết lập này đáng được bảo vệ. Hãy coi nó như mật khẩu, vì bất kỳ ai sở hữu nó đều có thể tiêu tốn số dư của bạn.
Các công việc theo lịch trình rò rỉ một cách im lặng. Một khóa được dán vào nhật ký, một quy trình được sao chép vào một kho lưu trữ công khai, hoặc một đồng nghiệp cũ có quyền ghi là những đường lây nhiễm thông thường. Hãy kiểm tra từng điểm một lần mỗi quý.
Xoay khóa khi ai đó rời đi
Khi một đồng nghiệp có quyền truy cập rời đi, hãy tạo một khóa mới, cập nhật bí mật và vô hiệu hóa khóa cũ. Sau đó xác nhận lần chạy tiếp theo thành công. Một lần chạy màu xanh lá cây sau khi thay đổi là bài kiểm tra rẻ nhất bạn sẽ thực hiện trong cả năm. Ghi ngày xoay khóa vào ghi chú của kho lưu trữ, để lần xoay khóa tiếp theo không gây bất ngờ.
Hạn chế người có thể chỉnh sửa quy trình
Bất kỳ ai có thể chỉnh sửa YAML đều có thể in bí mật trong một lần chạy. Hãy giữ quyền ghi ngắn hạn, và xem xét các thay đổi đối với tệp quy trình giống như cách bạn xem xét mã. Hai người có quyền ghi là thường đủ cho một kho lưu trữ nhỏ.
Không bao giờ in URL yêu cầu
In số dư và số hàng, không bao giờ in URL yêu cầu. Khóa đi kèm trong chuỗi truy vấn, vì vậy một dòng gỡ lỗi in URL sẽ ghi khóa vào nhật ký. Nếu bạn phải chia sẻ một yêu cầu trong một vấn đề, hãy thay thế khóa bằng một chỗ giữ chỗ trước.
Snapshot là gì và không phải là gì
Những gì bạn nhận được là một bức tranh hàng tháng. Bộ thu thập dữ liệu của chúng tôi làm mới chỉ mục khoảng một lần mỗi tháng, nên hai lần chạy thứ Hai trong cùng một tháng thường trả về cùng các hàng. Điều đó là bình thường.
Nhịp độ hàng tuần hoạt động hiệu quả. Nó duy trì thói quen, và bạn phát hiện ra một công việc bị lỗi trong vòng bảy ngày thay vì ba mươi ngày. Nếu một liên kết bạn đã xây dựng bị thiếu vào thứ Hai, hãy đợi lần làm mới tiếp theo trước khi hoảng sợ.
Khi bạn có ba hoặc bốn thư mục có ngày tháng, hãy chuyển sang so sánh hồ sơ backlink SQLite. Nếu bạn đang gặp phải một mã phản hồi cứng đầu, bảng giới hạn tốc độ liệt kê ý nghĩa của mỗi trạng thái đối với một vòng lặp.
Giữ lại thư mục đầu tiên làm cơ sở. Mọi so sánh sau đó đều hướng về nó, và một thư mục được đặt tên theo ngày dễ tin tưởng hơn nhiều so với trí nhớ về những con số trông như thế nào vào mùa xuân năm ngoái. Hãy duy trì sự nhất quán.
Thêm văn bản neo và các trang hàng đầu
Một hành động mỗi tệp giúp các diff dễ đọc. Sao chép vòng lặp trong snap.py, đổi refdomains thành anchors hoặc toppages, và ghi vào một tên tệp thứ hai. Mỗi cái tốn 2 credit.
Một tệp kết hợp ẩn đi phần nào đã thay đổi, và một người xem cuộn qua một pull request muốn thấy một khái niệm mỗi diff. Hãy giữ chúng riêng biệt. Nếu bạn theo dõi ba tên miền, hãy lặp qua một danh sách ngắn trong quy trình bằng cách sử dụng ma trận, để mỗi mục tiêu có công việc riêng và lỗi riêng.
Các văn bản neo là một tệp thứ hai với giới hạn riêng trong diff, vì vậy hãy xem xét chúng riêng biệt với các tên miền trỏ về. Mỗi lần chạy vẫn rẻ và có thể lặp lại, đó là ý tưởng chính.
Đọc nhật ký chạy
Mở nhật ký của lần chạy đầu tiên. Làm điều đó trước khi tin tưởng vào lịch trình. Hãy tìm số hàng, số dư và dòng commit. Nếu bất kỳ mục nào trong ba mục bị thiếu, công việc đã làm ít hơn những gì nó tuyên bố. Hãy ghi lại số dư ngắn gọn sau mỗi lần chạy, để chi tiêu hàng tháng hiển thị mà không cần mở bảng điều khiển.
Một dấu tích xanh nói rất ít. Nó chỉ có nghĩa là quy trình đã thoát sạch sẽ. Nó không nói rằng tệp chứa các hàng đúng, đó là lý do tại sao script in tóm tắt của riêng nó. Hãy giữ các dòng tóm tắt đó không thay đổi giữa các phiên bản của script, để một diff của hai nhật ký chỉ hiển thị các thay đổi thực sự.
Một nhật ký khỏe mạnh trông như thế nào
Một lần chạy khỏe mạnh in một dòng với số hàng và số dư credit, sau đó một commit với ngày hôm nay. Bất cứ điều gì chôn vùi những dòng đó dưới thêm nhiễu đều đáng được xem xét lại.
Nhận biết một lỗi im lặng
Hãy chú ý đến một thư mục trống, một commit không bao giờ xuất hiện, hoặc một số hàng khác với tổng số. Mỗi điểm trong số này đều chỉ vào vòng lặp hoặc quá trình phân tích, không phải bản thân API. Hãy lưu nhật ký khỏe mạnh đầu tiên làm tài liệu tham khảo cho các so sánh sau này.
Một số lỗi để lại một thư mục với ít hàng hơn bình thường. Hãy so sánh số lượng với tuần trước khi bạn ăn mừng một lần chạy màu xanh lá cây, vì một sự cắt giảm im lặng trông giống hệt như một tháng im lặng.
Thêm một mục tiêu thứ hai một cách an toàn
Một tên miền thứ hai là một mục ma trận, không phải là bản sao của toàn bộ quy trình. Hãy dành cho mỗi mục tiêu một công việc riêng để một lỗi không che giấu lỗi khác. Giữ mỗi công việc riêng biệt. Hãy kiểm tra xem các đường dẫn có bao gồm tên miền, để hai lần chạy không bao giờ ghi vào cùng một tệp.
Bắt đầu với mục tiêu thứ hai riêng lẻ. Khi thư mục của nó trông đúng, hãy thêm những cái còn lại. Một ma trận bị lỗi ở giữa khó đọc hơn hai lần chạy đơn giản.
Đặt tên thư mục theo mục tiêu
Đặt tên miền vào đường dẫn, ví dụ data/<domain>/YYYY-MM-DD, và các thư mục sẽ tách biệt ngay cả khi hai công việc chạy trong cùng một phút. Các thư mục cũ có thể giữ nguyên vị trí, vì một ngày trong đường dẫn giúp chúng dễ tìm.
Sử dụng quy tắc đặt tên giống nhau cho mọi mục tiêu. Một script sau đó có thể liệt kê các thư mục mà không cần các trường hợp đặc biệt.
Lên kế hoạch ngân sách credit trước
Nhân số lệnh gọi cho mỗi mục tiêu với số lượng mục tiêu, sau đó kiểm tra tổng số với số dư của bạn trước lần chạy đầu tiên. Một ma trận nhân chi tiêu nhanh như cách nó nhân số công việc. Hãy ghi tổng số tháng dự kiến vào kho lưu trữ bên cạnh quy trình. Khi số dư giảm nhanh hơn mức đó, một vòng lặp có lẽ đang lấy lại các trang, và bạn có thể dừng nó trước lần chạy tiếp theo.
Các câu hỏi thường xuất hiện trong tuần đầu tiên
Tôi có thể chạy điều này trên một kho lưu trữ riêng miễn phí không?
Thường là có, trong giới hạn phút hàng tháng mà GitHub cung cấp cho các tài khoản miễn phí. Một công việc snapshot chạy trong chưa đầy một phút, nên một lịch trình hàng tuần sử dụng một phần rất nhỏ. Hãy kiểm tra hạn mức hiện tại của gói của bạn, vì GitHub thay đổi nó theo thời gian.
Khóa nên nằm ở đâu nếu có nhiều người push?
Trong một bí mật tổ chức hoặc kho lưu trữ, không bao giờ trong các tệp. Bất kỳ ai có thể chỉnh sửa quy trình đều có thể in một bí mật trong nhật ký, vì vậy hãy hạn chế những người có quyền ghi, và xoay khóa nếu ai đó rời khỏi dự án.
Tại sao lần chạy theo lịch trình của tôi không kích hoạt?
Ba lý do thông thường. Tệp quy trình không nằm trên nhánh mặc định, kho lưu trữ không hoạt động trong 60 ngày và GitHub đã tạm dừng lịch trình, hoặc chuỗi cron có lỗi chính tả. Hãy chạy nó một lần với workflow_dispatch để loại bỏ script.
Các thư mục dữ liệu lớn đến mức nào?
Nhỏ. Một nghìn tên miền trỏ về là vài trăm kilobyte JSON. Một năm các tệp hàng tuần cho một tên miền vẫn nằm dưới một trăm megabyte, điều đó ổn cho git, mặc dù bạn có thể nén các thư mục cũ hơn nếu nó làm bạn phiền.