برنامه نویسی

واکشی پست های لایک شده با استفاده از Bluesky API

Summarize this content to 400 words in Persian Lang
من اخیراً به 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 نقطه پایانی از Bluesky's ATP (پروتکل انتقال تأیید شده)

در صورت عدم موفقیت در احراز هویت، رسیدگی به خطا، شکست دلپذیری را تضمین می کند

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;
};

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بینش های کلیدی:

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(/[\s\S]]]>*?<\/script>/g, “”);
} catch (e) {
console.error(“Failed to get Bluesky post embed markup”);
return null;
}
};

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بینش های کلیدی:

از نقطه پایانی oEmbed Bluesky با URI های پست برای دسترسی به HTML قابل جاسازی پست استفاده می کند.
اختیاری: استفاده می کند prettier برای فرمت HTML به طور مداوم
اختیاری: حذف می کند برچسب ها برای امنیت و جاسازی تمیز

دلیل این امر این است که من یک اسکریپت 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 اضافی را کاوش کنید

لذت بردن و سرهم بندی شاد! 🚀

من اخیراً به Bluesky رفته ام. من قبلاً می توانم تأیید کنم که یک جامعه فناوری پر جنب و جوش با هزاران محتوای جالب، مفید و الهام بخش وجود دارد. من یک کاربر جدید خوشحال هستم! در نتیجه، من می‌خواستم پست‌های محبوب Bluesky خود را در پست‌های خبرنامه ماهانه “برنامه‌نویس جمع‌بندی” قرار دهم. هدف من ارائه لیستی از پست های Bluesky است که به طور خاص برای توسعه دهندگان نرم افزار طراحی شده است.

خوشبختانه، استفاده از API Bluesky کاملاً رایگان است و امکان دسترسی برنامه‌ریزی به تمام محتوای داخل را فراهم می‌کند. این آموزش شما را در فرآیند بازیابی و جاسازی پست‌های دوست‌داشتنی Bluesky با استفاده از API آن‌ها راهنمایی می‌کند، که برای وبلاگ‌های شخصی، نمونه کارها یا پروژه‌های تجمع محتوا مناسب است.

آشنایی با Bluesky API Workflow

من یک اسکریپت ساخته‌ام که به من امکان می‌دهد به طور خودکار پست‌های Bluesky خود را در یک پست وبلاگ علامت‌گذاری شده جاسازی کنم. من فکر می کنم که تمام یا هر یک از مراحل استفاده شده در این اسکریپت برای بسیاری از موارد استفاده ارزشمند است.

برای خلاصه کردن گردش کار من برای جاسازی پست های پسندیده، این مراحل کلیدی را دنبال می کنیم:

  1. یک جلسه تایید شده ایجاد کنید
  2. بازیابی URI پست های پسندیده برای یک “بازیگر”
  3. از این URI ها برای واکشی oEmbed embed HTML استفاده کنید
  4. کد جاسازی را پاک و فرمت کنید

توضیحات تصویر

پیاده سازی کامل

بیایید هر تابع و هدف آن را تجزیه کنیم:

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 نقطه پایانی از Bluesky's ATP (پروتکل انتقال تأیید شده)
  • در صورت عدم موفقیت در احراز هویت، رسیدگی به خطا، شکست دلپذیری را تضمین می کند

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;
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بینش های کلیدی:

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>/g, "");
  } catch (e) {
    console.error("Failed to get Bluesky post embed markup");
    return null;
  }
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بینش های کلیدی:

  • از نقطه پایانی oEmbed Bluesky با URI های پست برای دسترسی به HTML قابل جاسازی پست استفاده می کند.
  • اختیاری: استفاده می کند prettier برای فرمت HTML به طور مداوم
  • اختیاری: حذف می کند

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا