Известные методы приватного API boosty.to

Описание известных методов приватного API boosty.to

Чтобы сделать примеры более универсальными будут использованы две переменные: 1. blogName - название блога на boosty.to 2. token - Bearer-токен владельца данного блога

Важный метод, который может пригодиться - это получение списка подписок. HTTP GET https://api.boosty.to/v1/blog/{{blogName}}/subscription_level/?show_free_level=true Authorization: Bearer {{token}} На выходе отдается JSON с подробным описанием всех существующих подписок: json { "subscriptions": [], "currentId": null, "nextId": null, "data": [{... }, { "name": "STREAM", "promos": [], "externalApps": {... }, "deleted": false, "isArchived": false, "ownerId": 17326198, "price": 200, "id": 2527971, "currencyPrices": {... }, "data": [], "badges": [], "hasActivePromo": false, "createdAt": 1709746048 }, { "externalApps": {... }, "deleted": false, "isArchived": false, "ownerId": 17326198, "price": 300, "name": "WORKSHOP", "promos": [], "hasActivePromo": false, "createdAt": 1709746062, "id": 2527973, "currencyPrices": {... }, "data": [], "badges": [] }] } Как видно на примере - в поле data[i].name хранится наименование уровня подписки boosty.to. Эти данные можно будет использовать в дальнейшем для сопоставления уровней подписок Администратором.

Ну и конечно же метод для получения всех подписчиков с их уровнем подписки: HTTP GET https://api.boosty.to/v1/blog/{{blogName}}/subscribers?sort_by=on_time&offset=0&limit=10&order=gt Authorization: Bearer {{token}}

Проблема

Указанные в запросе GET-параметры используются по умолчанию, в том числе и limit=10, что совершенно не подходит, при количестве подписчиков большем, чем пальцев на руках.

Решение

  1. В лоб: установить большое значение лимита, например: 100000
  2. Более элегантное: Есть метод в API, который может помочь: HTTP GET https://api.boosty.to/v1/blog/stat/{{blogName}}/current Authorization: Bearer {{token}} Данный метод возвращает JSON следующего вида: json { "paidCount": 2, "hold": 0, "income": 0, "payoutSum": 0, "balance": 0, "followersCount": 0 } Здесь стоит обратить внимание на значение поля paidCount - это количество платных подписчиков. Данное значение и можно передавать в limit

Таким образом запрос подписчиков вернет следующий JSON: `json

{ "offset": 0, "limit": 2, "total": 2, "data": [ { "email": "test1@test.ru", "level": { // ... "name": "STREAM" }, // ... "name": "Тестовый Тестировщик", "id": 23464233, "isBlackListed": false, "subscribed": true }, { "email": "lysiy@blesk.ru", "level": { // ... "name": "WORKSHOP", }, "name": "Гоша Куценко", "isBlackListed": false, "id": 123456789, "subscribed": true, } ] }

`

Останется преобразовать полученные JSON в объекты и прокинуть их на фронт

Процесс отправки личного сообщения:

HTTP GET https://api.boosty.to/v1/dialog?user_id={{user_id}} Authorization: Bearer {{token}} Ответ: (когда нет диалога/сообщений; при активном диалоге ответ аналогичен POST методу) 201 `json

{ "relation": { "type": "subscriber", "isChatmateBlackListed": false, "canWrite": true, "startAt": 1720339878, "needDonation": false, "canWriteMe": true, "isBlackListed": false }, "chatmate": { "id": {{id}}, "avatarUrl": "https://images2.boosty.to/user/{{id}}/avatar?change_time=1720286807", "hasAvatar": true, "name": "{{name}}", "url": "{{id}}", "isBlogger": false } } `

Метод для получения dialog_id: HTTP POST https://api.boosty.to/v1/dialog/ Authorization: Bearer {{token}} Data: user_id={{user_id}}

Ответ: 201 json { "unreadMsgCount": 0, "createdAt": 1720340960, "wsChannel": "$dialog:{{dialog_id}}", "id": {{dialog_id}}, "chatmate": { "isBlogger": false, "id": {{chatmate_id}}, "url": "{{chatmate_id}}", "hasAvatar": true, "name": "{{chatmate_name}}", "avatarUrl": "https://images2.boosty.to/user/{{chatmate_id}}/avatar?change_time=1720286807"}, "signedQuery": "?user_id={{chatmate_id}}&content_id={{dialog_id}}&expire_time=1720427360&sign={{somet_token}}", "relation":{ "isBlackListed": false, "type": "subscriber", "needDonation": false, "canWriteMe": true, "isChatmateBlackListed": false, "canWrite": true, "startAt": 1720339878 } }

Метод для отправки личного сообщения: `HTTP POST https://api.boosty.to/v1/dialog/{{dialog_id}}/message

Authorization: Bearer {{token}}

Data: data=[ {"type":"link","content":"[\"some text\",\"unstyled\",[]]","modificator":"", "url":"{{url}}", {"type":"text","content":"","modificator":"BLOCKEND"} ]& teaserdata=[] **Ответ:** json { "isPaid": false, "id": 14694520, "currencyPrices": { "RUB": 100, "USD": 1.18 }, "previewType": "text", "dialogId": {{dialogid}}, "attachments": { "files": { "count": 0 }, "videos": { "previewUrl": "", "count": 0 }, "audios": { "count": 0 }, "text": { "count":1 }, "images": { "previewUrl": "", "count":0 } }, "teaser": [], "isRead": false, "isDeleted": false, "authorId": {{userid}}, "data": [ { "content": "[\"tut\",\"unstyled\",[]]", "explicit": false, "type": "link", "url": "https://soer.pro" }, { "content": "", "modificator": "BLOCK_END", "type": "text" } ], "payWall": false, "createdAt": 1720347244 } `

Типы сообщений: - text - smile - image - okvideo - file - audiofile - link