Ismerje meg, hogyan lehet programozottan lekérni és beágyazni kedvelt Bluesky-bejegyzéseit hitelesítés, API-hívások és oEmbed-végpontok segítségével.
Nemrég áttértem a Bluesky- ra. Már most megerősíthetem, hogy élénk technológiai közösség van, rengeteg érdekes, hasznos és inspiráló tartalommal. Boldog új felhasználó vagyok! Ennek eredményeként a legjobban kedvelt Bluesky-bejegyzéseimet szerettem volna beágyazni a "Fejlesztői körkép" havi hírleveleimbe. Célom, hogy a Bluesky-bejegyzések válogatott listáját biztosítsam, amely kifejezetten a szoftverfejlesztők számára készült.
Szerencsére a Bluesky API teljesen ingyenesen használható, lehetővé téve a programozott hozzáférést az összes tartalomhoz. Ez az oktatóanyag végigvezeti Önt a kedvelt Bluesky-bejegyzések lekérésének és beágyazásának folyamatán az API használatával, amely tökéletes személyes blogokhoz, portfóliókhoz vagy tartalom-összesítő projektekhez.
Létrehoztam egy szkriptet, amely lehetővé teszi, hogy Bluesky-bejegyzéseimet automatikusan beágyazzam egy markdown blogbejegyzésbe. Úgy gondolom, hogy a szkriptben használt lépések bármelyike vagy mindegyike értékes számos felhasználási esetben.
A kedvelt bejegyzések beágyazásának munkafolyamatának összefoglalásához az alábbi fő lépéseket követjük:
Nézzük meg az egyes funkciókat és azok célját:
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; } };
Kulcsfontosságú betekintések:
accessJwt
JWT-t (JSON Web Token) ad vissza a későbbi API-hívásokhozcreateSession
végpontot használja a Bluesky ATP-jéből (Authenticated Transfer Protocol) 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; };
Kulcsfontosságú betekintések:
getActorLikes
végpontot használja a kedvelt bejegyzések lekéréséhez 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; } };
Kulcsfontosságú betekintések:
prettier
használ a HTML következetes formázásához<script>
címkéket a biztonság és a tiszta beágyazás érdekében 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); } }
Ez a megoldás számomra működik, mert csak egy statikusan generált havi blogbejegyzésre van szükségem.
Néhány fejlesztés a következőket foglalhatja magában:
accessJwt
token frissítéséhez, ha hosszú futó folyamatokban használjákA Bluesky-bejegyzések beágyazása dinamikus módot biztosít a közösségi média interakcióinak bemutatására. Az API munkafolyamatának megértésével és a robusztus hibakezelés megvalósításával vonzó, személyre szabott és válogatott tartalomintegrációkat hozhat létre.
Jó szórakozást és jó bütykölést! 🚀