بیاموزید که چگونه با استفاده از احراز هویت، تماسهای API، و نقاط پایانی oEmbed، پستهای Bluesky مورد علاقه خود را واکشی و جاسازی کنید.
من اخیراً به Bluesky رفته ام. من قبلاً می توانم تأیید کنم که یک جامعه فناوری پر جنب و جوش با هزاران محتوای جالب، مفید و الهام بخش وجود دارد. من یک کاربر جدید خوشحال هستم! در نتیجه، من میخواستم پستهای محبوب Bluesky خود را در پستهای خبرنامه ماهانه "برنامهنویس جمعبندی" قرار دهم. هدف من ارائه لیستی از پست های Bluesky است که به طور خاص برای توسعه دهندگان نرم افزار طراحی شده است.
خوشبختانه، استفاده از API 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 Web Token) را برای تماسهای API بعدی برمیگرداندcreateSession
از ATP (پروتکل انتقال تأیید شده) Bluesky استفاده می کند. 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
برای قالببندی پیوسته HTML استفاده میکند<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
در صورت استفاده در فرآیندهای طولانی مدتجاسازی پست های Bluesky راهی پویا برای نمایش تعاملات رسانه های اجتماعی شما فراهم می کند. با درک گردش کار API و اجرای مدیریت خطای قوی، میتوانید محتوای جذاب، شخصیسازی شده و مدیریتشده ایجاد کنید.
لذت بردن و سرهم بندی شاد! 🚀