How I Schedule Bluesky Posts Without SaaS

Saya menjadualkan tiga hantaran Bluesky setiap hari menggunakan GitHub Actions dan fail JSONL. Saya tidak menggunakan perkhidmatan penjadualan luaran.

Sistem ini berfungsi menggunakan satu fail sahaja: content/bluesky-queue.jsonl.

Setiap baris dalam fail ini ialah objek JSON.

  • Baris yang belum dihantar hanya mengandungi teks.
  • Baris yang telah dihantar menyertakan cap masa dan URI hantaran.

Skrip tersebut membaca fail dari atas ke bawah. Ia mencari baris pertama tanpa cap masa, menghantarnya, dan kemudian mengemas kini baris tersebut.

Mengapa saya menggunakan JSONL berbanding pangkalan data:

  • Ia mudah untuk menjejaki perubahan dalam Git.
  • Sebarang tugasan CI boleh menambah baris baharu ke dalam fail tersebut.
  • Ia memastikan persediaan kekal ringkas dan percuma.

Handling Bluesky API Requirements Bluesky memerlukan "facets" untuk pautan dan tanda pagar (hashtag). Anda tidak boleh sekadar menghantar teks. Anda mesti menyediakan kedudukan bait (byte positions) yang tepat untuk elemen-elemen ini.

Saya menggunakan skrip untuk mengira kedudukan ini. Saya menggunakan TextEncoder untuk mendapatkan offset bait UTF-8. Ini mengelakkan ralat apabila anda menggunakan emoji. Aksara dan bait adalah tidak sama.

Optimizing GitHub Actions GitHub Actions sering berjalan lewat jika anda menjadualkan tugasan pada awal jam. Untuk mengatasi masalah ini, saya menggunakan offset minit yang tidak genap. Daripada 00:00, saya menggunakan 23:37. Ini mengurangkan kelewatan.

Saya juga menambah sela masa rawak antara 0 hingga 5 minit sebelum menghantar. Ini menjadikan corak penghantaran kelihatan lebih seperti manusia. Ia mengelakkan pemasaan mesin yang tepat yang sering dikurangkan kepentingannya oleh sesetengah algoritma.

Preventing Infinite Loops Apabila skrip mengemas kini barisan (queue), ia melakukan commit perubahan tersebut kembali ke repositori. Ini boleh mencetuskan semula aliran kerja (workflow) tersebut.

Saya menyelesaikannya dengan pengawal mesej commit:

  • Skrip tersebut menambah [skip bluesky-queue] pada mesej commit.
  • Aliran kerja akan menyemak tag ini.
  • Jika tag tersebut wujud, aliran kerja tidak akan dijalankan.

Sistem ini adalah sebahagian daripada eksperimen jangka panjang dengan laman web yang dikurasi oleh AI. Ia kekal ringkas, murah, dan boleh dipercayai.

Source: https://dev.to/morinaga/how-i-schedule-three-daily-bluesky-posts-from-a-jsonl-queue-without-an-external-service-mno