بیاموزید که چگونه با استفاده از احراز هویت، تماسهای API، و نقاط پایانی oEmbed، پستهای Bluesky مورد علاقه خود را واکشی و جاسازی کنید.
من اخیراً به Bluesky رفته ام. من قبلاً می توانم تأیید کنم که یک جامعه فناوری پر جنب و جوش با هزاران محتوای جالب، مفید و الهام بخش وجود دارد. من یک کاربر جدید خوشحال هستم! در نتیجه، من میخواستم پستهای محبوب Bluesky خود را در پستهای خبرنامه ماهانه "برنامهنویس جمعبندی" قرار دهم. هدف من ارائه لیستی از پست های Bluesky است که به طور خاص برای توسعه دهندگان نرم افزار طراحی شده است.
خوشبختانه، استفاده از API Bluesky کاملاً رایگان است و امکان دسترسی برنامهریزی به تمام محتوای داخل را فراهم میکند. این آموزش شما را در فرآیند بازیابی و جاسازی پستهای دوستداشتنی Bluesky با استفاده از API آنها راهنمایی میکند، که برای وبلاگهای شخصی، نمونه کارها یا پروژههای تجمع محتوا مناسب است.
آشنایی با Bluesky API Workflow
من یک اسکریپت ساختهام که به من امکان میدهد به طور خودکار پستهای Bluesky خود را در یک پست وبلاگ علامتگذاری شده جاسازی کنم. من فکر می کنم که تمام یا هر یک از مراحل استفاده شده در این اسکریپت برای بسیاری از موارد استفاده ارزشمند است.
برای خلاصه کردن گردش کار من برای جاسازی پست های پسندیده، این مراحل کلیدی را دنبال می کنیم:
- یک جلسه تایید شده ایجاد کنید
- بازیابی URI پست های پسندیده برای یک "بازیگر"
- از این URI ها برای واکشی oEmbed embed HTML استفاده کنید
- کد جاسازی را پاک و فرمت کنید
پیاده سازی کامل
بیایید هر تابع و هدف آن را تجزیه کنیم:
1. ایجاد یک جلسه 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; } };
بینش های کلیدی:
- این تابع اکانت Bluesky شما را احراز هویت می کند.
- توجه: این مثال رشتههایی را برای اعتبارنامهها درج میکند، اما در موارد استفاده تولید باید از این کار اجتناب شود.
- یک
accessJwt
JWT (JSON Web Token) را برای تماسهای API بعدی برمیگرداند - از نقطه پایانی
createSession
از ATP (پروتکل انتقال تأیید شده) Bluesky استفاده می کند. - در صورت عدم موفقیت در احراز هویت، رسیدگی به خطا، شکست دلپذیری را تضمین می کند
2. بازیابی URI های پست پسندیده
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
برای واکشی پست های پسندیده استفاده می کند - مهم - دامنه نقطه پایانی باید https://bsky.social باشد، زیرا این یک درخواست تأیید شده است.
- URI های منحصر به فرد را برای هر پست پسندیده استخراج می کند
- محدودیت به 40 پست (قابل تنظیم)
3. تبدیل URI ها به HTML قابل جاسازی
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; } };
بینش های کلیدی:
- از نقطه پایانی oEmbed Bluesky با URI های پست برای دسترسی به HTML قابل جاسازی پست استفاده می کند.
- اختیاری:
prettier
برای قالببندی پیوسته HTML استفاده میکند - اختیاری: برچسب های
<script>
را برای امنیت و جاسازی تمیز حذف می کند- دلیل این امر این است که من یک اسکریپت Bluesky را برای هر پست حاوی محتوای Bluesky تعبیه کردم.
- مدیریت خطا انعطاف پذیر
قرار دادن همه چیز در کنار هم: یک مثال کامل
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); } }
بهبودهای بالقوه
این راه حل برای من کار می کند زیرا تمام چیزی که نیاز دارم یک پست وبلاگ ماهانه است که به صورت ایستا تولید می شود.
برخی از پیشرفت ها می تواند شامل موارد زیر باشد:
- برای واکشی بیش از 40 پست پسندیده، پشتیبانی صفحه بندی را اضافه کنید
- برای کاهش تماس های غیر ضروری API، حافظه پنهان را پیاده سازی کنید
- مکانیزم مدیریت خطای قوی تری ایجاد کنید
- ایجاد مکانیزم برای تازه کردن توکن
accessJwt
در صورت استفاده در فرآیندهای طولانی مدت - مرتب سازی پست های پسند شده بر اساس محبوبیت (لایک)
نکات عیب یابی
- بررسی کنید که اعتبار Bluesky شما درست است
- بررسی کنید که نشانه حامل به درستی در درخواستهای احراز هویت شده شما تنظیم شده باشد.
- بررسی کنید که دامنههای نقطه پایانی که استفاده میکنید همگی معتبر هستند.
نتیجه گیری
جاسازی پست های Bluesky راهی پویا برای نمایش تعاملات رسانه های اجتماعی شما فراهم می کند. با درک گردش کار API و اجرای مدیریت خطای قوی، میتوانید محتوای جذاب، شخصیسازی شده و مدیریتشده ایجاد کنید.
مراحل بعدی
- با کد آزمایش کنید
- استایل جاسازی را سفارشی کنید
- نقاط پایانی Bluesky API اضافی را کاوش کنید
لذت بردن و سرهم بندی شاد! 🚀