SaaS शिवाय मी Bluesky पोस्ट्स कशा शेड्यूल करतो

मी GitHub Actions आणि JSONL फाईल वापरून दररोज तीन Bluesky पोस्ट्स शेड्यूल करतो. मी कोणत्याही बाह्य (external) शेड्यूलिंग सर्व्हिसचा वापर करत नाही.

ही प्रणाली एकाच फाईलवर आधारित आहे: content/bluesky-queue.jsonl.

या फाईलमधील प्रत्येक ओळ एक JSON ऑब्जेक्ट आहे.

  • ज्या ओळी पोस्ट केल्या नाहीत, त्यात फक्त मजकूर असतो.
  • ज्या ओळी पोस्ट केल्या आहेत, त्यात टाइमस्टॅम्प (timestamp) आणि पोस्ट URI समाविष्ट असतो.

स्क्रिप्ट फाईल वरून खाली वाचते. ती टाइमस्टॅम्प नसलेली पहिली ओळ शोधते, ती पोस्ट करते आणि नंतर ती ओळ अपडेट करते.

डेटाबेसऐवजी मी JSONL का वापरतो:

  • Git मध्ये बदल ट्रॅक करणे सोपे जाते.
  • कोणताही CI जॉब फाईलमध्ये नवीन ओळ जोडू शकतो.
  • यामुळे सेटअप साधा आणि मोफत राहतो.

Bluesky API च्या गरजा हाताळणे

Bluesky ला लिंक्स आणि हॅशटॅगसाठी "facets" लागतात. तुम्ही फक्त मजकूर पाठवू शकत नाही. तुम्हाला या घटकांसाठी नेमकी 'byte positions' द्यावी लागते.

मी या पोझिशन्स मोजण्यासाठी एक स्क्रिप्ट वापरतो. UTF-8 byte offsets मिळवण्यासाठी मी TextEncoder वापरतो. यामुळे इमोजी वापरताना येणाऱ्या त्रुटी टाळता येतात. कॅरेक्टर्स (characters) आणि बाईट्स (bytes) एकच नसतात.

GitHub Actions ऑप्टिमाइझ करणे

जर तुम्ही तासाच्या सुरुवातीला (top of the hour) जॉब्स शेड्यूल केले, तर GitHub Actions अनेकदा उशिरा चालते. हे सुधारण्यासाठी, मी 'off-minute offset' वापरतो. 00:00 ऐवजी, मी 23:37 वापरतो. यामुळे विलंब (delays) कमी होतो.

पोस्ट करण्यापूर्वी मी 0 ते 5 मिनिटांचा यादृच्छिक (random) विलंब देखील जोडतो. यामुळे पोस्टिंगचा पॅटर्न अधिक मानवी वाटतो. यामुळे मशीनचे अचूक टायमिंग टाळता येते, ज्याला काही अल्गोरिदम कमी महत्त्व देतात.

इन्फिनिट लूप्स (Infinite Loops) रोखणे

जेव्हा स्क्रिप्ट क्यू (queue) अपडेट करते, तेव्हा ती बदल रिपॉझिटरीमध्ये कमिट (commit) करते. यामुळे वर्कफ्लो पुन्हा ट्रिगर होऊ शकतो.

मी हे 'commit message guard' वापरून सोडवतो:

  • स्क्रिप्ट कमिट मेसेजमध्ये [skip bluesky-queue] जोडते.
  • वर्कफ्लो या टॅगची तपासणी करतो.
  • जर टॅग अस्तित्वात असेल, तर वर्कफ्लो चालत नाही.

ही प्रणाली AI-curated साइट्सवरील दीर्घकालीन प्रयोगाचा एक भाग आहे. ही प्रणाली सुटसुटीत, स्वस्त आणि विश्वसनीय आहे.

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