У меня было немного свободного времени и сил, чтобы починить Трактир. А для этого пришлось немного поковыряться в запросах, которые сейчас формирует DTF. Внутри будет немного примеров, как это всё сейчас работает.Начнём с того, что все запросы которые слались на v1.x больше не работают. Актуальные версии v2.31 и v3.0.Частичная документация для версии 2.31:cmtt-ru.github.ioSwagger UIСокетыАдрес для сокетов остался прежний: ws-sio.dtf.ruhttps://ws-sio.dtf.ru/И все стандартные подключения, которые не требуют авторизации, работают как обычно.НО!Если вам нужен личный канал пользователя (т.е себя), то вам нужен специальный хэш.И вот тут нам уже нужна авторизация.Происходит она следующим образом:URL для запроса: https://api.dtf.ru/v3.0/auth/email/login Header: 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' method: POST Параметры: email, password ------- Пример на axios: let formData = new URLSearchParams(); formData.append("email", 'тут ваш емейл'); formData.append("password", 'тут ваш пароль'); axios.request({ url: 'https://api.dtf.ru/v3.0/auth/email/login', method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}, data: formData }) .then((login) => {В ответ мы получаем несколько параметров, нам нужен accessToken.Вообще, раньше при авторизации нам сразу давали userHash и mHash, но теперь не дают. Сейчас его можно получить только при дополнительном запросе.Следовательно, после того как мы получили accessToken, нам нужно отправить следующий запрос:URL для запроса: https://api.dtf.ru/v2.1/subsite/me Header: 'jwtauthorization': 'Bearer <наш accessToken>' method: GET ------- Пример на axios: var accessToken = login.data.data.accessToken; axios.request({ url: 'https://api.dtf.ru/v2.1/subsite/me', method: 'GET', headers: {'jwtauthorization': 'Bearer ' + accessToken} }).then((response) => { var uhash = response.data.result.userHash;В ответ на этот запрос мы получим всю информацию о пользователе и внизу будут нужные нам userHash и mHash.Дальше вы можете эмитить сокет:socket.emit("subscribe", { "channel": "mobile:" + uhash });Добавление комментарияURL для запроса: https://api.dtf.ru/v2.1/comment/add Header: 'X-Device-Token': <ваш токен который можно получить в настройках профиля> method: POST Параметры: id - ID поста reply_to (опционально) - ID комментария на который нужно ответить text - Текст комментария attachments (опционально) - JSON объект, который возвращается после загрузки файла (об этом ниже)Получение комментарияURL для запроса: https://api.dtf.ru/v3.0/comments/:ID_Комментария Header: 'X-Device-Token': <ваш токен который можно получить в настройках профиля> method: GETЗагрузка изображения / видеоURL для запроса: https://api.dtf.ru/v2.1/uploader/upload Header: 'X-Device-Token': <ваш токен который можно получить в настройках профиля> method: POST Параметры: url - ссылка на изображениеПолучаем комментарии к постуURL для запроса: https://api.dtf.ru/v2.4/comments?contentId=:ID_ПОСТА&sorting=date Header: 'X-Device-Token': <ваш токен который можно получить в настройках профиля> method: POSTСоздание постаВот это будет труднее всего объяснить.Начнём с того, что там нужно будет опять залогинится через запрос который был самым первым и получить accessToken.URL для запроса: https://api.dtf.ru/v2.1/editor Header: 'X-Device-Token': <ваш токен который можно получить в настройках профиля> Jwtauthorization: Bearer <accessToken> // Вообще, скорей всего можно использовать что-то одно, но я на всякий случай сразу два поля использую. method: POST Параметры: entry - Все данные о посте. Пример параметра entry: {"user_id":534897,"type":1,"subsite_id":534897,"title":"Трактир открыт","is_published":true,"entry":{"blocks":<блоки>}}Обратите внимание, если раньше в API мы передавали блоки отдельно, то теперь они внутри entry. Получается entry->entry.Параметр is_published говорит, что запись нужно опубликовать сразу. Если там выставить false, то пост создастся в черновиках.По блокам не смогу просто объяснить, как они формируются. Если вы использовали прошлый API, то там такая же структура блоков осталась.Самым лучшим вариантом будет, если вы отроете консоль когда будете писать пост и посмотрите на запросы которые отправляются.В общем, всё основное, что может кому-то пригодится, я разобрал. Получение поста описано в документации, не стал дублировать.Надеюсь пост кому-то пригодится и поможет.#dtf #api #dtf_api
А Вы можете выложить полный код подключения к сокету? А то по документации нихрена не понятно.
const io = require('socket.io-client');
const socket = io('https://ws-sio.dtf.ru');
socket.emit("subscribe", { "channel": "api" });
socket.on('new_entry_published', (message) => {
console.log(message);
});
socket.io.on("error", (error) => {
console.log(error);
});
socket.on('connect', () => {
console.log('Successfully connected!');
});
const io = require('socket.io-client');
let socket = io("https://ws-sio.dtf.ru", {
transports: ["websocket"],
});
socket.emit("subscribe", { "channel": "api" });
socket.on("event", (data) => {
// console.log(data.data);
});
@NightRunner
Спасибо.
Полезный материал, схоронил в закладочки.
@mr2zeek мне сказали тегнуть тебя
Комментарий недоступен
Я правильно понимаю что сейчас токен для работы с апи нельзя получить? Не вижу в настройках нужную кнопку