मैं बिना SaaS के Bluesky पोस्ट कैसे शेड्यूल करता हूँ
मैं GitHub Actions और एक JSONL फ़ाइल का उपयोग करके हर दिन तीन Bluesky पोस्ट शेड्यूल करता हूँ। मैं किसी बाहरी शेड्यूलिंग सर्विस का उपयोग नहीं करता हूँ।
यह सिस्टम एक सिंगल फ़ाइल का उपयोग करके काम करता है: content/bluesky-queue.jsonl।
इस फ़ाइल की प्रत्येक लाइन एक JSON ऑब्जेक्ट है।
- बिना पोस्ट की गई लाइनों में केवल टेक्स्ट होता है।
- पोस्ट की गई लाइनों में एक टाइमस्टैम्प और एक पोस्ट URI शामिल होता है।
स्क्रिप्ट फ़ाइल को ऊपर से नीचे तक पढ़ती है। यह बिना टाइमस्टैम्प वाली पहली लाइन को ढूँढती है, उसे पोस्ट करती है, और फिर उस लाइन को अपडेट कर देती है।
डेटाबेस के बजाय मैं JSONL का उपयोग क्यों करता हूँ:
- Git में बदलावों को ट्रैक करना आसान है।
- कोई भी CI जॉब फ़ाइल में एक नई लाइन जोड़ सकता है।
- यह सेटअप को सरल और मुफ्त रखता है।
Bluesky API की आवश्यकताओं को संभालना
Bluesky को लिंक और हैशटैग के लिए "facets" की आवश्यकता होती है। आप केवल टेक्स्ट नहीं भेज सकते। आपको इन एलिमेंट्स के लिए सटीक बाइट पोजीशन (byte positions) प्रदान करनी होगी।
मैं इन पोजीशन की गणना करने के लिए एक स्क्रिप्ट का उपयोग करता हूँ। मैं UTF-8 बाइट ऑफसेट प्राप्त करने के लिए TextEncoder का उपयोग करता हूँ। यह इमोजी का उपयोग करते समय होने वाली गलतियों को रोकता है। कैरेक्टर्स (characters) और बाइट्स (bytes) एक समान नहीं होते हैं।
GitHub Actions को ऑप्टिमाइज़ करना
यदि आप जॉब्स को घंटे के ठीक शुरुआत (top of the hour) पर शेड्यूल करते हैं, तो GitHub Actions अक्सर देर से चलता है। इसे ठीक करने के लिए, मैं एक ऑफ-मिनट ऑफसेट (off-minute offset) का उपयोग करता हूँ। 00:00 के बजाय, मैं 23:37 का उपयोग करता हूँ। इससे देरी कम हो जाती है।
मैं पोस्ट करने से पहले 0 और 5 मिनट के बीच एक रैंडम डिले (random delay) भी जोड़ता हूँ। इससे पोस्टिंग पैटर्न अधिक मानवीय (human) लगता है। यह उस सटीक मशीन टाइमिंग से बचता है जिसे कुछ एल्गोरिदम कम महत्व देते हैं।
इन्फिनिट लूप (Infinite Loops) को रोकना
जब स्क्रिप्ट क्यू (queue) को अपडेट करती है, तो यह बदलाव को वापस रिपॉजिटरी में कमिट (commit) कर देती है। इससे वर्कफ़्लो फिर से ट्रिगर हो सकता है।
मैं इसे एक कमिट मैसेज गार्ड (commit message guard) के साथ हल करता हूँ:
- स्क्रिप्ट कमिट मैसेज में
[skip bluesky-queue]जोड़ देती है। - वर्कफ़्लो इस टैग की जाँच करता है।
- यदि टैग मौजूद है, तो वर्कफ़्लो नहीं चलता है।
यह सिस्टम AI-क्यूरेटेड साइटों के साथ एक दीर्घकालिक प्रयोग का हिस्सा है। यह लीन, सस्ता और विश्वसनीय बना रहता है।
