{"id":87405,"date":"2024-12-09T01:45:53","date_gmt":"2024-12-08T22:15:53","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/"},"modified":"2024-12-09T01:45:53","modified_gmt":"2024-12-08T22:15:53","slug":"fetching-liked-posts-using-the-bluesky-api-4iko","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/","title":{"rendered":"\u0648\u0627\u06a9\u0634\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc \u0644\u0627\u06cc\u06a9 \u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Bluesky API"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n              \u0645\u0646 \u0627\u062e\u06cc\u0631\u0627\u064b \u0628\u0647 Bluesky \u0631\u0641\u062a\u0647 \u0627\u0645. \u0645\u0646 \u0642\u0628\u0644\u0627\u064b \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0645 \u06a9\u0647 \u06cc\u06a9 \u062c\u0627\u0645\u0639\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc \u067e\u0631 \u062c\u0646\u0628 \u0648 \u062c\u0648\u0634 \u0628\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0627\u0644\u0628\u060c \u0645\u0641\u06cc\u062f \u0648 \u0627\u0644\u0647\u0627\u0645 \u0628\u062e\u0634 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0645\u0646 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u062e\u0648\u0634\u062d\u0627\u0644 \u0647\u0633\u062a\u0645! \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0645\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0645 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u0645\u062d\u0628\u0648\u0628 Bluesky \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627\u0647\u0627\u0646\u0647 &#8220;\u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc&#8221; \u0642\u0631\u0627\u0631 \u062f\u0647\u0645. \u0647\u062f\u0641 \u0645\u0646 \u0627\u0631\u0627\u0626\u0647 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u067e\u0633\u062a \u0647\u0627\u06cc Bluesky \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u062e\u0648\u0634\u0628\u062e\u062a\u0627\u0646\u0647\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Bluesky \u06a9\u0627\u0645\u0644\u0627\u064b \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0633\u062a \u0648 \u0627\u0645\u06a9\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc \u0628\u0647 \u062a\u0645\u0627\u0645 \u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0627\u062e\u0644 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648 \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u062f\u0648\u0633\u062a\u200c\u062f\u0627\u0634\u062a\u0646\u06cc Bluesky \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u0622\u0646\u200c\u0647\u0627 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0648\u0628\u0644\u0627\u06af\u200c\u0647\u0627\u06cc \u0634\u062e\u0635\u06cc\u060c \u0646\u0645\u0648\u0646\u0647 \u06a9\u0627\u0631\u0647\u0627 \u06cc\u0627 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u062a\u062c\u0645\u0639 \u0645\u062d\u062a\u0648\u0627 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a.<\/p>\n<p>  \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 Bluesky API Workflow<\/p>\n<p>\u0645\u0646 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a\u0647\u200c\u0627\u0645 \u06a9\u0647 \u0628\u0647 \u0645\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc Bluesky \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0639\u0644\u0627\u0645\u062a\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u06a9\u0646\u0645. \u0645\u0646 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u06cc\u0627 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0645\u0631\u0627\u062d\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0631\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0645\u0646 \u0628\u0631\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f\u06cc\u062f\u0647\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<p>\u06cc\u06a9 \u062c\u0644\u0633\u0647 \u062a\u0627\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc URI \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f\u06cc\u062f\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9 &#8220;\u0628\u0627\u0632\u06cc\u06af\u0631&#8221;<br \/>\n\u0627\u0632 \u0627\u06cc\u0646 URI \u0647\u0627 \u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc oEmbed embed HTML \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0631\u0627 \u067e\u0627\u06a9 \u0648 \u0641\u0631\u0645\u062a \u06a9\u0646\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0647\u0631 \u062a\u0627\u0628\u0639 \u0648 \u0647\u062f\u0641 \u0622\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<p>  1. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062c\u0644\u0633\u0647 Bluesky<\/p>\n<p>export const createSession = async (): Promise&lt;string | null&gt; =&gt; {<br \/>\n  try {<br \/>\n    const response = await fetch(<br \/>\n      &#8220;https:\/\/bsky.social\/xrpc\/com.atproto.server.createSession&#8221;,<br \/>\n      {<br \/>\n        method: &#8220;POST&#8221;,<br \/>\n        headers: {<br \/>\n          &#8220;Content-Type&#8221;: &#8220;application\/json&#8221;,<br \/>\n        },<br \/>\n        body: JSON.stringify({<br \/>\n          identifier: &#8220;your-handle&#8221;,<br \/>\n          password: &#8220;your-password&#8221;,<br \/>\n        }),<br \/>\n      }<br \/>\n    );<br \/>\n    const responseJson = await response.json();<br \/>\n    return responseJson.accessJwt;<br \/>\n  } catch (e) {<br \/>\n    console.error(&#8220;Failed to create session: &#8220;, e);<br \/>\n    return null;<br \/>\n  }<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/p>\n<p>\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0627\u06a9\u0627\u0646\u062a Bluesky \u0634\u0645\u0627 \u0631\u0627 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u062a\u0648\u062c\u0647: \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0634\u062a\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631\u062c \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0627\u0645\u0627 \u062f\u0631 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u062c\u062a\u0646\u0627\u0628 \u0634\u0648\u062f.<\/p>\n<p>\u06cc\u06a9 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f accessJwt JWT (JSON Web Token) \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0633\u200c\u0647\u0627\u06cc API \u0628\u0639\u062f\u06cc<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f createSession \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0627\u0632 Bluesky&#39;s ATP (\u067e\u0631\u0648\u062a\u06a9\u0644 \u0627\u0646\u062a\u0642\u0627\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647)<\/p>\n<p>\u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627\u060c \u0634\u06a9\u0633\u062a \u062f\u0644\u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<p>  2. \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc URI \u0647\u0627\u06cc \u067e\u0633\u062a \u067e\u0633\u0646\u062f\u06cc\u062f\u0647<\/p>\n<p>export const getBlueskyLikeUris = async (actor: string, limit: number = 40) =&gt; {<br \/>\n  const token = await createSession();<br \/>\n  if (!token) {<br \/>\n    console.error(&#8220;Failed to get token&#8221;);<br \/>\n    return;<br \/>\n  }<\/p>\n<p>  const response = await fetch(<br \/>\n    &#8220;https:\/\/bsky.social\/xrpc\/app.bsky.feed.getActorLikes?actor=${actor}&amp;limit=${limit}&#8221;,<br \/>\n    {<br \/>\n      method: &#8220;GET&#8221;,<br \/>\n      headers: {<br \/>\n        Authorization: `Bearer ${token}`,<br \/>\n      },<br \/>\n    }<br \/>\n  );<\/p>\n<p>  const responseJson = await response.json();<br \/>\n  const uris = responseJson.feed.map((entry: any) =&gt; entry.post.uri);<\/p>\n<p>  return uris;<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/p>\n<p>  3. \u062a\u0628\u062f\u06cc\u0644 URI \u0647\u0627 \u0628\u0647 HTML \u0642\u0627\u0628\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc<\/p>\n<p>export const getBlueskyPostEmbedMarkup = async (uri: string) =&gt; {<br \/>\n  try {<br \/>\n    const response = await fetch(`https:\/\/embed.bsky.app\/oembed?url=${uri}`);<br \/>\n    const responseJson = await response.json();<\/p>\n<p>    const formattedHTML = prettier.format(responseJson.html, {<br \/>\n      parser: &#8220;html&#8221;,<br \/>\n      plugins: [require(&#8220;prettier\/parser-html&#8221;)],<br \/>\n      htmlWhitespaceSensitivity: &#8220;ignore&#8221;,<br \/>\n      printWidth: 1000,<br \/>\n    });<\/p>\n<p>    return formattedHTML.replace(\/[\\s\\S]]]>*?&lt;\\\/script&gt;\/g, &#8220;&#8221;);<br \/>\n  } catch (e) {<br \/>\n    console.error(&#8220;Failed to get Bluesky post embed markup&#8221;);<br \/>\n    return null;<br \/>\n  }<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/p>\n<p>\u0627\u0632 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc oEmbed Bluesky \u0628\u0627 URI \u0647\u0627\u06cc \u067e\u0633\u062a \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 HTML \u0642\u0627\u0628\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\n\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f prettier \u0628\u0631\u0627\u06cc \u0641\u0631\u0645\u062a HTML \u0628\u0647 \u0637\u0648\u0631 \u0645\u062f\u0627\u0648\u0645<br \/>\n\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f  \u0628\u0631\u0686\u0633\u0628 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a \u0648 \u062c\u0627\u0633\u0627\u0632\u06cc \u062a\u0645\u06cc\u0632<\/p>\n<p>\u062f\u0644\u06cc\u0644 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a Bluesky \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u0633\u062a \u062d\u0627\u0648\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc Bluesky \u062a\u0639\u0628\u06cc\u0647 \u06a9\u0631\u062f\u0645.<\/p>\n<p>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631<\/p>\n<p>  \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645: \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u0627\u0645\u0644<\/p>\n<p>async function embedLikedPosts() {<br \/>\n  try {<br \/>\n    \/\/ Get liked post URIs<br \/>\n    const likedPostUris = await getBlueskyLikeUris();<\/p>\n<p>    if (!likedPostUris) {<br \/>\n      console.error(&#8220;No liked posts found&#8221;);<br \/>\n      return;<br \/>\n    }<\/p>\n<p>    \/\/ Convert URIs to embed HTML<br \/>\n    const embedPromises = likedPostUris.map(getBlueskyPostEmbedMarkup);<br \/>\n    const embedHtmlArray = await Promise.all(embedPromises);<\/p>\n<p>    \/\/ Filter out any failed embeds<br \/>\n    const validEmbeds = embedHtmlArray.filter(embed =&gt; embed !== null);<\/p>\n<p>    \/\/ Return the markup for all liked posts<br \/>\n    return `<br \/>\n      ## Some Fave Posts \ud83e\udd8b<br \/>\n      ${validEmbeds.join(`\\n\\n`)}<br \/>\n    `<br \/>\n  } catch (error) {<br \/>\n    console.error(&#8220;Error embedding Bluesky posts:&#8221;, error);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0647\u0628\u0648\u062f\u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647 \u062d\u0644 \u0628\u0631\u0627\u06cc \u0645\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0632\u06cc\u0631\u0627 \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0645 \u06cc\u06a9 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0645\u0627\u0647\u0627\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u06cc\u0633\u062a\u0627 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u067e\u06cc\u0634\u0631\u0641\u062a \u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0627\u0645\u0644 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc \u0628\u06cc\u0634 \u0627\u0632 40 \u067e\u0633\u062a \u067e\u0633\u0646\u062f\u06cc\u062f\u0647\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0635\u0641\u062d\u0647 \u0628\u0646\u062f\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n\u0628\u0631\u0627\u06cc \u06a9\u0627\u0647\u0634 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc API\u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n\u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc \u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u0627\u06cc\u062c\u0627\u062f \u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u0648\u062a accessJwt \u062a\u0648\u06a9\u0646 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0645\u062f\u062a<br \/>\n\u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f \u0634\u062f\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062d\u0628\u0648\u0628\u06cc\u062a (\u0644\u0627\u06cc\u06a9)<\/p>\n<p>  \u0646\u06a9\u0627\u062a \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc<\/p>\n<p>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0639\u062a\u0628\u0627\u0631 Bluesky \u0634\u0645\u0627 \u062f\u0631\u0633\u062a \u0627\u0633\u062a<br \/>\n\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646\u0647 \u062d\u0627\u0645\u0644 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0634\u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u062f.<br \/>\n\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0645\u0646\u0647\u200c\u0647\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0647\u0645\u06af\u06cc \u0645\u0639\u062a\u0628\u0631 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/p>\n<p>\u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc Bluesky \u0631\u0627\u0647\u06cc \u067e\u0648\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0631\u0633\u0627\u0646\u0647 \u0647\u0627\u06cc \u0627\u062c\u062a\u0645\u0627\u0639\u06cc \u0634\u0645\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0627 \u062f\u0631\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 API \u0648 \u0627\u062c\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0630\u0627\u0628\u060c \u0634\u062e\u0635\u06cc\u200c\u0634\u062f\u0647 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \u0645\u0631\u0627\u062d\u0644 \u0628\u0639\u062f\u06cc<\/p>\n<p>\u0628\u0627 \u06a9\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f<br \/>\n\u0627\u0633\u062a\u0627\u06cc\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n\u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc Bluesky API \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0644\u0630\u062a \u0628\u0631\u062f\u0646 \u0648 \u0633\u0631\u0647\u0645 \u0628\u0646\u062f\u06cc \u0634\u0627\u062f! \ud83d\ude80<\/p>\n<div data-article-id=\"2146016\" id=\"article-body\">\n<p>\u0645\u0646 \u0627\u062e\u06cc\u0631\u0627\u064b \u0628\u0647 Bluesky \u0631\u0641\u062a\u0647 \u0627\u0645. \u0645\u0646 \u0642\u0628\u0644\u0627\u064b \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0645 \u06a9\u0647 \u06cc\u06a9 \u062c\u0627\u0645\u0639\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc \u067e\u0631 \u062c\u0646\u0628 \u0648 \u062c\u0648\u0634 \u0628\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0627\u0644\u0628\u060c \u0645\u0641\u06cc\u062f \u0648 \u0627\u0644\u0647\u0627\u0645 \u0628\u062e\u0634 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0645\u0646 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u062e\u0648\u0634\u062d\u0627\u0644 \u0647\u0633\u062a\u0645! \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0645\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0645 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u0645\u062d\u0628\u0648\u0628 Bluesky \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627\u0647\u0627\u0646\u0647 &#8220;\u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633 \u062c\u0645\u0639\u200c\u0628\u0646\u062f\u06cc&#8221; \u0642\u0631\u0627\u0631 \u062f\u0647\u0645. \u0647\u062f\u0641 \u0645\u0646 \u0627\u0631\u0627\u0626\u0647 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u067e\u0633\u062a \u0647\u0627\u06cc Bluesky \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u062e\u0648\u0634\u0628\u062e\u062a\u0627\u0646\u0647\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Bluesky \u06a9\u0627\u0645\u0644\u0627\u064b \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0633\u062a \u0648 \u0627\u0645\u06a9\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc \u0628\u0647 \u062a\u0645\u0627\u0645 \u0645\u062d\u062a\u0648\u0627\u06cc \u062f\u0627\u062e\u0644 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648 \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u062f\u0648\u0633\u062a\u200c\u062f\u0627\u0634\u062a\u0646\u06cc Bluesky \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u0622\u0646\u200c\u0647\u0627 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0648\u0628\u0644\u0627\u06af\u200c\u0647\u0627\u06cc \u0634\u062e\u0635\u06cc\u060c \u0646\u0645\u0648\u0646\u0647 \u06a9\u0627\u0631\u0647\u0627 \u06cc\u0627 \u067e\u0631\u0648\u0698\u0647\u200c\u0647\u0627\u06cc \u062a\u062c\u0645\u0639 \u0645\u062d\u062a\u0648\u0627 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C_%D8%A8%D8%A7_Bluesky_API_Workflow\" >\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 Bluesky API Workflow<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D8%A7%D9%85%D9%84\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%AC%D9%84%D8%B3%D9%87_Bluesky\" >1. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062c\u0644\u0633\u0647 Bluesky<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#2_%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C_URI_%D9%87%D8%A7%DB%8C_%D9%BE%D8%B3%D8%AA_%D9%BE%D8%B3%D9%86%D8%AF%DB%8C%D8%AF%D9%87\" >2. \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc URI \u0647\u0627\u06cc \u067e\u0633\u062a \u067e\u0633\u0646\u062f\u06cc\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#3_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_URI_%D9%87%D8%A7_%D8%A8%D9%87_HTML_%D9%82%D8%A7%D8%A8%D9%84_%D8%AC%D8%A7%D8%B3%D8%A7%D8%B2%DB%8C\" >3. \u062a\u0628\u062f\u06cc\u0644 URI \u0647\u0627 \u0628\u0647 HTML \u0642\u0627\u0628\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%A7%D8%AF%D9%86_%D9%87%D9%85%D9%87_%DA%86%DB%8C%D8%B2_%D8%AF%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85_%DB%8C%DA%A9_%D9%85%D8%AB%D8%A7%D9%84_%DA%A9%D8%A7%D9%85%D9%84\" >\u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645: \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u0627\u0645\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D8%A8%D9%87%D8%A8%D9%88%D8%AF%D9%87%D8%A7%DB%8C_%D8%A8%D8%A7%D9%84%D9%82%D9%88%D9%87\" >\u0628\u0647\u0628\u0648\u062f\u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D9%86%DA%A9%D8%A7%D8%AA_%D8%B9%DB%8C%D8%A8_%DB%8C%D8%A7%D8%A8%DB%8C\" >\u0646\u06a9\u0627\u062a \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/fetching-liked-posts-using-the-bluesky-api-4iko\/#%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%A8%D8%B9%D8%AF%DB%8C\" >\u0645\u0631\u0627\u062d\u0644 \u0628\u0639\u062f\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C_%D8%A8%D8%A7_Bluesky_API_Workflow\"><\/span>\n<p>  \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 Bluesky API Workflow<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062e\u062a\u0647\u200c\u0627\u0645 \u06a9\u0647 \u0628\u0647 \u0645\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc Bluesky \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0639\u0644\u0627\u0645\u062a\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u06a9\u0646\u0645. \u0645\u0646 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u06cc\u0627 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0645\u0631\u0627\u062d\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0631\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u06a9\u0631\u062f\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0645\u0646 \u0628\u0631\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f\u06cc\u062f\u0647\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<ol>\n<li>\u06cc\u06a9 \u062c\u0644\u0633\u0647 \u062a\u0627\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc URI \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f\u06cc\u062f\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9 &#8220;\u0628\u0627\u0632\u06cc\u06af\u0631&#8221;<\/li>\n<li>\u0627\u0632 \u0627\u06cc\u0646 URI \u0647\u0627 \u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc oEmbed embed HTML \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\n<\/li>\n<li>\u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0631\u0627 \u067e\u0627\u06a9 \u0648 \u0641\u0631\u0645\u062a \u06a9\u0646\u06cc\u062f<\/li>\n<\/ol>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0647\u0631 \u062a\u0627\u0628\u0639 \u0648 \u0647\u062f\u0641 \u0622\u0646 \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0646\u06cc\u0645:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D8%AC%D9%84%D8%B3%D9%87_Bluesky\"><\/span>\n<p>  1. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062c\u0644\u0633\u0647 Bluesky<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">createSession<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">():<\/span> <span class=\"nb\">Promise<\/span><span class=\"o\">&lt;<\/span><span class=\"kr\">string<\/span> <span class=\"o\">|<\/span> <span class=\"kc\">null<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span>\n      <span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/bsky.social\/xrpc\/com.atproto.server.createSession<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"na\">method<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">POST<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n          <span class=\"dl\">\"<\/span><span class=\"s2\">Content-Type<\/span><span class=\"dl\">\"<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">application\/json<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"na\">body<\/span><span class=\"p\">:<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nf\">stringify<\/span><span class=\"p\">({<\/span>\n          <span class=\"na\">identifier<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">your-handle<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n          <span class=\"na\">password<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">your-password<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">}),<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">responseJson<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">responseJson<\/span><span class=\"p\">.<\/span><span class=\"nx\">accessJwt<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Failed to create session: <\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">e<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/strong><\/p>\n<ul>\n<li>\u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0627\u06a9\u0627\u0646\u062a Bluesky \u0634\u0645\u0627 \u0631\u0627 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.\n<ul>\n<li>\u062a\u0648\u062c\u0647: \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0634\u062a\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631\u062c \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0627\u0645\u0627 \u062f\u0631 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f\u06cc \u0628\u0627\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u062c\u062a\u0646\u0627\u0628 \u0634\u0648\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\u06cc\u06a9 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f <code>accessJwt<\/code> JWT (JSON Web Token) \u0628\u0631\u0627\u06cc \u062a\u0645\u0627\u0633\u200c\u0647\u0627\u06cc API \u0628\u0639\u062f\u06cc<\/li>\n<li>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>createSession<\/code> \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0627\u0632 Bluesky&#39;s ATP (\u067e\u0631\u0648\u062a\u06a9\u0644 \u0627\u0646\u062a\u0642\u0627\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647)<\/li>\n<li>\u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627\u060c \u0634\u06a9\u0633\u062a \u062f\u0644\u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"2_%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C_URI_%D9%87%D8%A7%DB%8C_%D9%BE%D8%B3%D8%AA_%D9%BE%D8%B3%D9%86%D8%AF%DB%8C%D8%AF%D9%87\"><\/span>\n<p>  2. \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc URI \u0647\u0627\u06cc \u067e\u0633\u062a \u067e\u0633\u0646\u062f\u06cc\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">getBlueskyLikeUris<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">actor<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">limit<\/span><span class=\"p\">:<\/span> <span class=\"kr\">number<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">40<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">token<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">createSession<\/span><span class=\"p\">();<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">token<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Failed to get token<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span>\n    <span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/bsky.social\/xrpc\/app.bsky.feed.getActorLikes?actor=${actor}&amp;limit=${limit}<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">{<\/span>\n      <span class=\"na\">method<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">GET<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">headers<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">Authorization<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`Bearer <\/span><span class=\"p\">${<\/span><span class=\"nx\">token<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">},<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">);<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"nx\">responseJson<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">uris<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">responseJson<\/span><span class=\"p\">.<\/span><span class=\"nx\">feed<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">((<\/span><span class=\"na\">entry<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">post<\/span><span class=\"p\">.<\/span><span class=\"nx\">uri<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"k\">return<\/span> <span class=\"nx\">uris<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"3_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_URI_%D9%87%D8%A7_%D8%A8%D9%87_HTML_%D9%82%D8%A7%D8%A8%D9%84_%D8%AC%D8%A7%D8%B3%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  3. \u062a\u0628\u062f\u06cc\u0644 URI \u0647\u0627 \u0628\u0647 HTML \u0642\u0627\u0628\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">const<\/span> <span class=\"nx\">getBlueskyPostEmbedMarkup<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">uri<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">fetch<\/span><span class=\"p\">(<\/span><span class=\"s2\">`https:\/\/embed.bsky.app\/oembed?url=<\/span><span class=\"p\">${<\/span><span class=\"nx\">uri<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">responseJson<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">();<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">formattedHTML<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">prettier<\/span><span class=\"p\">.<\/span><span class=\"nf\">format<\/span><span class=\"p\">(<\/span><span class=\"nx\">responseJson<\/span><span class=\"p\">.<\/span><span class=\"nx\">html<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n      <span class=\"na\">parser<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">html<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">plugins<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">prettier\/parser-html<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)],<\/span>\n      <span class=\"na\">htmlWhitespaceSensitivity<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">ignore<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">printWidth<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"nx\">formattedHTML<\/span><span class=\"p\">.<\/span><span class=\"nf\">replace<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/<script><![CDATA[<span class=\"se\">[\\s\\S]]]><\/script><\/span><span class=\"sr\">*<\/span><span class=\"se\">?<\/span><span class=\"sr\">&lt;<\/span><span class=\"se\">\\\/<\/span><span class=\"sr\">script&gt;\/g<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Failed to get Bluesky post embed markup<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0628\u06cc\u0646\u0634 \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc:<\/strong><\/p>\n<ul>\n<li>\u0627\u0632 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc oEmbed Bluesky \u0628\u0627 URI \u0647\u0627\u06cc \u067e\u0633\u062a \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 HTML \u0642\u0627\u0628\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>prettier<\/code> \u0628\u0631\u0627\u06cc \u0641\u0631\u0645\u062a HTML \u0628\u0647 \u0637\u0648\u0631 \u0645\u062f\u0627\u0648\u0645<\/li>\n<li>\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc: \u062d\u0630\u0641 \u0645\u06cc \u06a9\u0646\u062f <code><script\/><\/code> \u0628\u0631\u0686\u0633\u0628 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a \u0648 \u062c\u0627\u0633\u0627\u0632\u06cc \u062a\u0645\u06cc\u0632\n<ul>\n<li>\u062f\u0644\u06cc\u0644 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a Bluesky \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u0633\u062a \u062d\u0627\u0648\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc Bluesky \u062a\u0639\u0628\u06cc\u0647 \u06a9\u0631\u062f\u0645.<\/li>\n<\/ul>\n<\/li>\n<li>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%82%D8%B1%D8%A7%D8%B1_%D8%AF%D8%A7%D8%AF%D9%86_%D9%87%D9%85%D9%87_%DA%86%DB%8C%D8%B2_%D8%AF%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85_%DB%8C%DA%A9_%D9%85%D8%AB%D8%A7%D9%84_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645: \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">embedLikedPosts<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Get liked post URIs<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">likedPostUris<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">getBlueskyLikeUris<\/span><span class=\"p\">();<\/span>\n\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">likedPostUris<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">No liked posts found<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c1\">\/\/ Convert URIs to embed HTML<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">embedPromises<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">likedPostUris<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">getBlueskyPostEmbedMarkup<\/span><span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">embedHtmlArray<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nb\">Promise<\/span><span class=\"p\">.<\/span><span class=\"nf\">all<\/span><span class=\"p\">(<\/span><span class=\"nx\">embedPromises<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"c1\">\/\/ Filter out any failed embeds<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">validEmbeds<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">embedHtmlArray<\/span><span class=\"p\">.<\/span><span class=\"nf\">filter<\/span><span class=\"p\">(<\/span><span class=\"nx\">embed<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">embed<\/span> <span class=\"o\">!==<\/span> <span class=\"kc\">null<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"c1\">\/\/ Return the markup for all liked posts<\/span>\n    <span class=\"k\">return<\/span> <span class=\"s2\">`\n      ## Some Fave Posts \ud83e\udd8b\n      <\/span><span class=\"p\">${<\/span><span class=\"nx\">validEmbeds<\/span><span class=\"p\">.<\/span><span class=\"nf\">join<\/span><span class=\"p\">(<\/span><span class=\"s2\">`\\n\\n`<\/span><span class=\"p\">)}<\/span><span class=\"s2\">\n    `<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Error embedding Bluesky posts:<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87%D8%A8%D9%88%D8%AF%D9%87%D8%A7%DB%8C_%D8%A8%D8%A7%D9%84%D9%82%D9%88%D9%87\"><\/span>\n<p>  \u0628\u0647\u0628\u0648\u062f\u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0631\u0627\u0647 \u062d\u0644 \u0628\u0631\u0627\u06cc \u0645\u0646 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0632\u06cc\u0631\u0627 \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0645 \u06cc\u06a9 \u067e\u0633\u062a \u0648\u0628\u0644\u0627\u06af \u0645\u0627\u0647\u0627\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u06cc\u0633\u062a\u0627 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u067e\u06cc\u0634\u0631\u0641\u062a \u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0634\u0627\u0645\u0644 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:<\/p>\n<ul>\n<li>\u0628\u0631\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc \u0628\u06cc\u0634 \u0627\u0632 40 \u067e\u0633\u062a \u067e\u0633\u0646\u062f\u06cc\u062f\u0647\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0635\u0641\u062d\u0647 \u0628\u0646\u062f\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0628\u0631\u0627\u06cc \u06a9\u0627\u0647\u0634 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc API\u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc \u062a\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0627\u06cc\u062c\u0627\u062f \u0645\u06a9\u0627\u0646\u06cc\u0632\u0645 \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u0648\u062a <code>accessJwt<\/code> \u062a\u0648\u06a9\u0646 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0645\u062f\u062a<\/li>\n<li>\u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc \u067e\u0633\u0646\u062f \u0634\u062f\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0645\u062d\u0628\u0648\u0628\u06cc\u062a (\u0644\u0627\u06cc\u06a9)<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%DA%A9%D8%A7%D8%AA_%D8%B9%DB%8C%D8%A8_%DB%8C%D8%A7%D8%A8%DB%8C\"><\/span>\n<p>  \u0646\u06a9\u0627\u062a \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0639\u062a\u0628\u0627\u0631 Bluesky \u0634\u0645\u0627 \u062f\u0631\u0633\u062a \u0627\u0633\u062a<\/li>\n<li>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646\u0647 \u062d\u0627\u0645\u0644 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0634\u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0634\u062f\u0647 \u0628\u0627\u0634\u062f.<\/li>\n<li>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0645\u0646\u0647\u200c\u0647\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u06a9\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0647\u0645\u06af\u06cc \u0645\u0639\u062a\u0628\u0631 \u0647\u0633\u062a\u0646\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062c\u0627\u0633\u0627\u0632\u06cc \u067e\u0633\u062a \u0647\u0627\u06cc Bluesky \u0631\u0627\u0647\u06cc \u067e\u0648\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0631\u0633\u0627\u0646\u0647 \u0647\u0627\u06cc \u0627\u062c\u062a\u0645\u0627\u0639\u06cc \u0634\u0645\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0627 \u062f\u0631\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 API \u0648 \u0627\u062c\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0630\u0627\u0628\u060c \u0634\u062e\u0635\u06cc\u200c\u0634\u062f\u0647 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%A8%D8%B9%D8%AF%DB%8C\"><\/span>\n<p>  \u0645\u0631\u0627\u062d\u0644 \u0628\u0639\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\u0628\u0627 \u06a9\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0627\u0633\u062a\u0627\u06cc\u0644 \u062c\u0627\u0633\u0627\u0632\u06cc \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc Bluesky API \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ol>\n<p>\u0644\u0630\u062a \u0628\u0631\u062f\u0646 \u0648 \u0633\u0631\u0647\u0645 \u0628\u0646\u062f\u06cc \u0634\u0627\u062f! \ud83d\ude80<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0645\u0646 \u0627\u062e\u06cc\u0631\u0627\u064b \u0628\u0647 Bluesky \u0631\u0641\u062a\u0647 \u0627\u0645. \u0645\u0646 \u0642\u0628\u0644\u0627\u064b \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0645 \u06a9\u0647 \u06cc\u06a9 \u062c\u0627\u0645\u0639\u0647 \u0641\u0646\u0627\u0648\u0631\u06cc \u067e\u0631 \u062c\u0646\u0628 \u0648 \u062c\u0648\u0634 \u0628\u0627 \u0647\u0632\u0627\u0631\u0627\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0627\u0644\u0628\u060c \u0645\u0641\u06cc\u062f \u0648 \u0627\u0644\u0647\u0627\u0645 \u0628\u062e\u0634 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0645\u0646 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u062e\u0648\u0634\u062d\u0627\u0644 \u0647\u0633\u062a\u0645! \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0645\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0645 \u067e\u0633\u062a\u200c\u0647\u0627\u06cc \u0645\u062d\u0628\u0648\u0628 Bluesky \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":87406,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-87405","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/87405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=87405"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/87405\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/87406"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=87405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=87405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=87405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}