## 経緯 <div class="link-card"> <div class="link-card-header"> <img src="https://bsky.app/static/favicon-32x32.png" class="link-card-site-icon"/> <span class="link-card-site-name">Bluesky Social</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">hann-solo (@hnsol.bsky.social)</p> <p class="link-card-description">個人的な希望としては、Obsidianのvaultに画像ファイルは置かず、リンク貼り付けにしたい。Blueskyに投稿するとき、画像を貼りたい(キーボード関係はとくに)。などとおもっております。Obsidianに投稿するだけならあまり必要性を感じず、Memosも含めて試しては中断を繰り返していたのですが、Osidian→SNS投稿、はまったく意味が変わって、すごくありがたいですね〜!MFDIをつかうためだけでも、X比率下げてBluesky比率を上げようかなとおもっています ... </p> </div> </div> <a href="https://bsky.app/profile/hnsol.bsky.social/post/3koemcsdunw2k"></a> </div> ## 対応方法検討 以下の関数で`meta`に`HTMLMeta`以外を渡せるようにする。 ```ts postToBluesky( identifier: string, password: string, text: string, meta?: HTMLMeta ): Promise<{ uri: string; cid: string }> ``` 渡しているMetaは以下のような感じ。 ```ts const [htmlMetas, setHtmlMetas] = useState<HTMLMeta[]>([]); const [imageMetas, setImageMetas] = useState<ImageMeta[]>([]); const [twitterMetas, setTwitterMetas] = useState<TwitterMeta[]>([]); const meta = htmlMetas.first(); ``` なので、`ImageMeta`も渡せるようにすればよさそう。 ```ts export type Meta = HTMLMeta | ImageMeta | TwitterMeta; export interface HTMLMeta { type: "html"; siteName: string; title: string; description?: string; faviconUrl: string; coverUrl?: string; originUrl: string; } export interface ImageMeta { type: "image"; data: Blob; originUrl: string; } ``` どちらも`originUrl`はあるのでそれで処理はできるはず。画像の渡し方が内部で少し変わるだけ。 ## 画像の埋め込み方 https://docs.bsky.app/docs/tutorials/creating-a-post#images-embeds より ```ts const image = 'data:image/png;base64,...' const { data } = await agent.uploadBlob(convertDataURIToUint8Array(image), { encoding, }) await agent.post({ text: 'I love my cat', embed: { $type: 'app.bsky.embed.images', images: [ // can be an array up to 4 values { alt: 'My cat mittens', // the alt text image: data.blob, aspectRatio: { // a hint to clients width: 1000, height: 500 } }], }, createdAt: new Date().toISOString() }) ``` ## タスク - [x] postToBlueskyのImageMeta対応 - [x] postToBlueskyのImageMetaの呼び出し対応 - [x] 動作確認 - [x] HTML - [x] Image - [x] HTML & Image