Cara Saya Menjadwalkan Postingan Bluesky Tanpa SaaS
Saya menjadwalkan tiga postingan Bluesky setiap hari menggunakan GitHub Actions dan file JSONL. Saya tidak menggunakan layanan penjadwalan eksternal.
Sistem ini bekerja menggunakan satu file: content/bluesky-queue.jsonl.
Setiap baris dalam file ini adalah objek JSON.
- Baris yang belum diposting hanya berisi teks.
- Baris yang sudah diposting menyertakan timestamp dan URI postingan.
Skrip tersebut membaca file dari atas ke bawah. Skrip akan mencari baris pertama tanpa timestamp, mempostingnya, lalu memperbarui baris tersebut.
Mengapa saya menggunakan JSONL alih-alih database:
- Mudah untuk melacak perubahan di Git.
- Setiap job CI dapat menambahkan baris baru ke file tersebut.
- Menjaga pengaturan tetap sederhana dan gratis.
Menangani Persyaratan API Bluesky Bluesky memerlukan "facets" untuk tautan dan hashtag. Anda tidak bisa hanya mengirim teks. Anda harus menyediakan posisi byte yang tepat untuk elemen-elemen ini.
Saya menggunakan skrip untuk menghitung posisi ini. Saya menggunakan TextEncoder untuk mendapatkan offset byte UTF-8. Hal ini mencegah kesalahan saat Anda menggunakan emoji. Karakter dan byte tidaklah sama.
Mengoptimalkan GitHub Actions GitHub Actions sering kali berjalan terlambat jika Anda menjadwalkan job tepat pada pergantian jam. Untuk mengatasinya, saya menggunakan offset menit yang tidak bulat. Alih-alih 00:00, saya menggunakan 23:37. Ini mengurangi penundaan.
Saya juga menambahkan penundaan acak antara 0 hingga 5 menit sebelum memposting. Ini membuat pola postingan terlihat lebih manusiawi. Hal ini menghindari waktu mesin yang presisi yang sering kali diberi bobot rendah oleh beberapa algoritma.
Mencegah Loop Tak Terbatas Saat skrip memperbarui antrean, ia melakukan commit perubahan kembali ke repositori. Hal ini dapat memicu workflow kembali.
Saya mengatasi ini dengan pengaman pesan commit:
- Skrip menambahkan
[skip bluesky-queue]ke dalam pesan commit. - Workflow akan memeriksa tag ini.
- Jika tag tersebut ada, workflow tidak akan berjalan.
Sistem ini adalah bagian dari eksperimen jangka panjang dengan situs-situs yang dikurasi oleh AI. Sistem ini tetap ramping, murah, dan andal.
