Научите како да програмски преузмете и уградите Блуески постове које вам се свиђају користећи аутентификацију, АПИ позиве и оЕмбед крајње тачке.
Недавно сам прешао у Блуески . Већ могу да потврдим да тамо постоји жива технолошка заједница са гомилом занимљивог, корисног и инспиративног садржаја. Срећан сам нови корисник! Као резултат тога, желео сам да своје постове на Блуески-у који су ми се највише свиђали уградим у своје месечне постове билтена „Дев роундуп“. Мој циљ је да обезбедим курирану листу Блуески постова која је посебно прилагођена програмерима софтвера.
Срећом, Блуески-јев АПИ је потпуно бесплатан за коришћење, омогућавајући програмски приступ свом садржају у њему. Овај водич ће вас провести кроз процес преузимања и уграђивања Блуески постова који вам се свиђају користећи њихов АПИ, савршен за личне блогове, портфеље или пројекте агрегације садржаја.
Направио сам скрипту која ми омогућава да аутоматски уграђујем своје Блуески постове у пост на блогу за маркдовн. Мислим да су неки или сви кораци коришћени у овој скрипти вредни за многе случајеве употребе.
Да резимирамо мој ток рада за уграђивање постова који ми се свиђају, следимо ове кључне кораке:
Хајде да разложимо сваку функцију и њену сврху:
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
ЈВТ (ЈСОН веб токен) за наредне АПИ позиве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
токена ако се користи у дуготрајним процесимаУграђивање Блуески постова пружа динамичан начин да прикажете своје интеракције на друштвеним медијима. Разумевањем тока посла АПИ-ја и применом робусног руковања грешкама, можете креирати привлачне, персонализоване и куриране интеграције садржаја.
Уживајте и срећно петљање! 🚀