> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Bluesky
- URL: https://www.rozhkov.me/bluesky/
- Published: 2024-12-16T07:24:00.000Z
- Updated: 2024-12-16T07:33:18.000Z
- Author: Vova Rozhkov
- Tags: проєкти, donate1024

Прийнявши факт що для розробки нативних апок [я недостатньо розумний](https://www.rozhkov.me/screencast-struggles/), вирішив зробити щось простіше.

Послухав [черговий епізод](https://newsletter.maxua.com/p/power-of-open-platforms) подкасту Startups are hard Макса Іщенко, де той схвально відгукується про відкритість Bluesky. Мені ще давно дали туди інвайт, але я не заходив. Вирішив подивитися.

[Bluesky](https://bsky.app/) — це твітер на відкритому протоколі, без алгоритмів та сумнівних власників. Зараз він потроху відвойовує аудиторію в тих місцях, де твітер заблокували, або серед тих людей, яким не подобається політика твітеру.

Коли я робив [Donate1024](https://donate1024.org/), то хотів, щоб збори публікувались не тільки в телеграм бот, телеграм канал та на сайт, а ще й у твітер, фейсбук та інстаграм.

Але, на жаль, зробити це дуже складно через [закритість](https://www.rozhkov.me/walled-garden-platforms-are-bad/) екосистем. Тому я навіть не намагався, і просто забив.

Протокол Bluesky, [AT Proto](https://docs.bsky.app/docs/get-started), відкритий, а для доступу до API не потрібно проходити через пекельні кола верифікації та отримання токенів. Реєструєшся і твої логін та пароль і є ключами доступу.

Дивовижно, наскільки ускладнений є доступ до API великих сервісів, генерація мільйона ключів, збереження їх у файли, токен щоб отримати токен яким будеш рефрешити токен. Я вже не кажу про IAM, через який просто хочеться викинути все у вікно.

Далі все просто — є перелік методів: створити пост, завантажити картинку, отримати якусь інформацію. API повний, тобто використовуючи лише його, можна писати власні клієнти, алгоритми стрічок, рахувати статистику і так далі.

Спільнота вже створила цілу купу апок під Bluesky, ось, наприклад, добірка: <https://www.growbluesky.com/>

Офіційний SDK для AT Proto є тільки тайпскрипиту та пітону, для вашої мови теж швидше за все буде щось від ком'юніті. Donate1024 написаний на Ruby on Rails, під Ruby є декілька SDK, найживіший серед яких це [minisky](https://github.com/mackuba/minisky). Його я й взяв. Трішки повозився, щоб передати логін та пароль, а далі все просто — методи описані в документації, бери й роби. Єдина особливість це те, що для форматування тексту AT Proto використовує не розмітку, а так звані фасети. Тобто замість `тут буде [посилання](https://..)` передається просто текст `тут буде посилання` і окремо об'єкт фасету, який вказує індекси початку та кінця фасету та тип (посилання, хештег, юзернейм):

```
{
  index: {
    byteStart: 6,
    byteEnd: 15
  },
  features: [{
    $type: 'app.bsky.richtext.facet#link',
    uri: 'https://example.com'
  }]
}
```

Здається що це дуже незручно, бо потрібно проходити по тексту, щоб знаходити індекси початку та кінця. Так само зроблено і в телеграмі, хоча телеграм дає можливість передавати маркдаун який він вже конвертує у фасети всередині.

Я спочатку здивувався та бомбанув чому так, а потім прочитав [мотивацію](https://www.pfrazee.com/blog/why-facets), де один з розробників наводить аргументи за, головний з яких це сумісність між різними клієнтами, тому я попустився та погодився.

Щоб прикріпити до поста картинку потрібно її спершу завантажити на сервер, отримати посилання, а потім вставити його у пост. Дещо незручно, але вже як є. Не знаю чи можна завантажувати через API відео, здається що вже так, але я ще не пробував. Через вебклієнт можна.

Також випадково натрапив на рейтліміт. Через те що в мене не зберігалась сесія між постами, я перевищив ліміти на логін (хоч і коректний) і система мене заблокувала. Мусив чекати добу поки відпустить.

API дозволяє вказати дату коли було зроблено пост. Дуже зручно, щоб перегнати у Bluesky всю історію, що я й зробив.

Результат: <https://bsky.app/profile/donate1024.org>

Як і в [боті](https://t.me/Donate1024Bot), кожного дня на акаунті буде публікуватися новий збір та новий звіт. Підписуйтесь, донатьте.

Платформа дуже класна своєю відкритістю. Я не знаю які плани щодо монетизації, дуже сподіваюсь що засновники будуть дотримуватися своїх цінностей.

Також підписуйтесь на <https://bsky.app/profile/rozhkov.me>. Хоч в мене ніяк не ходить займатися мікроблогінгом, буду пробувати.