Bluesky

Прийнявши факт що для розробки нативних апок я недостатньо розумний, вирішив зробити щось простіше.

Послухав черговий епізод подкасту Startups are hard Макса Іщенко, де той схвально відгукується про відкритість Bluesky. Мені ще давно дали туди інвайт, але я не заходив. Вирішив подивитися.

Bluesky — це твітер на відкритому протоколі, без алгоритмів та сумнівних власників. Зараз він потроху відвойовує аудиторію в тих місцях, де твітер заблокували, або серед тих людей, яким не подобається політика твітеру.

Коли я робив Donate1024, то хотів, щоб збори публікувались не тільки в телеграм бот, телеграм канал та на сайт, а ще й у твітер, фейсбук та інстаграм.

Але, на жаль, зробити це дуже складно через закритість екосистем. Тому я навіть не намагався, і просто забив.

Протокол Bluesky, AT Proto,  відкритий, а для доступу до API не потрібно проходити через пекельні кола верифікації та отримання токенів. Реєструєшся і твої логін та пароль і є ключами доступу.

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

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

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

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

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

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

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

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

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

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

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

Як і в боті, кожного дня на акаунті буде публікуватися новий збір та новий звіт. Підписуйтесь, донатьте.

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

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


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred