प्रमाणीकरण, API कलहरू, र oEmbed अन्त्य बिन्दुहरू प्रयोग गरेर तपाइँका मनपर्ने Bluesky पोस्टहरू कसरी प्रोग्राम्याटिक रूपमा ल्याउने र इम्बेड गर्ने जान्नुहोस्।
मैले भर्खरै Bluesky मा सारियो। म पहिले नै पुष्टि गर्न सक्छु कि त्यहाँ धेरै रोचक, उपयोगी, र प्रेरणादायक सामग्री संग एक जीवन्त प्राविधिक समुदाय छ। म खुसी नयाँ प्रयोगकर्ता हुँ! फलस्वरूप, म मेरो "देव राउन्डअप" मासिक न्यूजलेटर पोस्टहरूमा मेरो शीर्ष मनपर्ने Bluesky पोस्टहरू इम्बेड गर्न चाहन्छु। मेरो उद्देश्य ब्लूस्की पोष्टहरूको क्युरेट गरिएको सूची प्रदान गर्नु हो जुन विशेष गरी सफ्टवेयर विकासकर्ताहरूको लागि उपयुक्त छ।
सौभाग्य देखि, Bluesky को एपीआई प्रयोग गर्न को लागी पूर्णतया नि: शुल्क छ, भित्र सबै सामग्री मा प्रोग्रामेटिक पहुँच को अनुमति दिदै। यस ट्यूटोरियलले तपाइँलाई उनीहरूको API प्रयोग गरी मनपर्ने Bluesky पोस्टहरू पुन: प्राप्त गर्ने र इम्बेड गर्ने प्रक्रियामा लैजानेछ, व्यक्तिगत ब्लगहरू, पोर्टफोलियोहरू, वा सामग्री एकत्रीकरण परियोजनाहरूका लागि उपयुक्त।
मैले एउटा स्क्रिप्ट बनाएको छु जसले मलाई स्वचालित रूपमा मेरो ब्लुस्की पोष्टहरू मार्कडाउन ब्लग पोस्टमा इम्बेड गर्न अनुमति दिन्छ। मलाई लाग्छ कि यस लिपिमा प्रयोग गरिएका कुनै वा सबै चरणहरू धेरै प्रयोग-केसहरूको लागि मूल्यवान छन्।
मनपर्ने पोस्टहरू इम्बेडिङको लागि मेरो कार्यप्रवाह संक्षेप गर्न, हामी यी मुख्य चरणहरू पालना गर्छौं:
प्रत्येक प्रकार्य र यसको उद्देश्यलाई तोडौं:
export const createSession = async (): Promise<string | null> => { try { const response = await fetch( "https://bsky.social/xrpc/com.atproto.server.createSession", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ identifier: "your-handle", password: "your-password", }), } ); const responseJson = await response.json(); return responseJson.accessJwt; } catch (e) { console.error("Failed to create session: ", e); return null; } };
मुख्य अन्तरदृष्टि:
accessJwt
JWT (JSON वेब टोकन) फर्काउँछcreateSession
अन्त्य बिन्दु प्रयोग गर्दछ। export const getBlueskyLikeUris = async (actor: string, limit: number = 40) => { const token = await createSession(); if (!token) { console.error("Failed to get token"); return; } const response = await fetch( "https://bsky.social/xrpc/app.bsky.feed.getActorLikes?actor=${actor}&limit=${limit}", { method: "GET", headers: { Authorization: `Bearer ${token}`, }, } ); const responseJson = await response.json(); const uris = responseJson.feed.map((entry: any) => entry.post.uri); return uris; };
मुख्य अन्तरदृष्टि:
getActorLikes
अन्तिम बिन्दु प्रयोग गर्दछ export const getBlueskyPostEmbedMarkup = async (uri: string) => { try { const response = await fetch(`https://embed.bsky.app/oembed?url=${uri}`); const responseJson = await response.json(); const formattedHTML = prettier.format(responseJson.html, { parser: "html", plugins: [require("prettier/parser-html")], htmlWhitespaceSensitivity: "ignore", printWidth: 1000, }); return formattedHTML.replace(/<script[\s\S]*?<\/script>/g, ""); } catch (e) { console.error("Failed to get Bluesky post embed markup"); return null; } };
मुख्य अन्तरदृष्टि:
prettier
प्रयोग गर्दछ<script>
ट्यागहरू हटाउँछ async function embedLikedPosts() { try { // Get liked post URIs const likedPostUris = await getBlueskyLikeUris(); if (!likedPostUris) { console.error("No liked posts found"); return; } // Convert URIs to embed HTML const embedPromises = likedPostUris.map(getBlueskyPostEmbedMarkup); const embedHtmlArray = await Promise.all(embedPromises); // Filter out any failed embeds const validEmbeds = embedHtmlArray.filter(embed => embed !== null); // Return the markup for all liked posts return ` ## Some Fave Posts 🦋 ${validEmbeds.join(`\n\n`)} ` } catch (error) { console.error("Error embedding Bluesky posts:", error); } }
यो समाधान मेरो लागि काम गर्दछ किनकि मलाई चाहिने सबै स्थिर रूपमा उत्पन्न मासिक ब्लग पोस्ट हो।
केही सुधारहरू समावेश हुन सक्छन्:
accessJwt
टोकनलाई ताजा गर्नको लागि संयन्त्र सिर्जना गर्दैब्लुस्की पोस्टहरू इम्बेडिङले तपाइँको सामाजिक मिडिया अन्तरक्रियाहरू प्रदर्शन गर्न गतिशील तरिका प्रदान गर्दछ। API कार्यप्रवाह बुझेर र बलियो त्रुटि ह्यान्डलिङ लागू गरेर, तपाइँ आकर्षक, व्यक्तिगत, र क्युरेट गरिएको सामग्री एकीकरणहरू सिर्जना गर्न सक्नुहुन्छ।
रमाइलो र खुसी tinkering! 🚀