Ответ на пост «Сравнение Yaml и Json»1
Байтовый протокол лучше
Байтовый протокол лучше
Представьте себе, что у вас есть кот, который собирает все свои секреты и достижения в одну волшебную коробку. Эта коробка — это не что иное, как формат данных JSON! Но вот в чем фишка: эта коробка не просто одна, она может делиться на множество секций! Каждая секция предназначена для разных игрушек, и в каждой из них можно хранить информацию по цветам, форме или даже о том, как часто кот любит играть с той или иной игрушкой. Давайте разберемся, что такое JSON, как он работает и почему он стал таким популярным среди программистов.
JSON (JavaScript Object Notation) — это текстовый формат для обмена данными, который легко читается как людьми, так и машинами. Если бы JSON был котом, он был бы тем самым умным и ловким котенком, который всегда знает, как удобно устроиться на вашем коленке и при этом не мешать вам работать.
JSON состоит из двух основных структур: объектов и массивов. Давайте представим, что объекты — это как коробки с игрушками, а массивы — это сами игрушки внутри этих коробок. И вот тут начинается самое интересное: каждая коробка может делиться на множество секций, чтобы удобно организовать все игрушки!
Объект: это набор пар "ключ-значение", как если бы вы назвали каждую игрушку в коробке. Например, у вас есть коробка с игрушками, и вы хотите записать, что в ней есть мячик и мышка:
Массив: это список элементов, как если бы вы просто перечислили все игрушки в коробке. Например:
📖 Простота: JSON легко читать и писать. Это как если бы ваш кот сам мог объяснить, где он прятал свои игрушки. Никаких сложных схем и запутанных инструкций!
🤝 Совместимость: JSON поддерживается многими языками программирования, включая Python, JavaScript, Java и другие. Это как если бы ваш кот мог дружить с другими котами из разных дворов, не обращая внимания на языковые барьеры.
🧳 Легковесность: JSON занимает меньше места по сравнению с другими форматами, такими как XML. Это как если бы ваш кот умел складывать свои игрушки так, чтобы они занимали минимум места в коробке.
Работа с JSON в программировании — это как игра с вашим котом. Вы можете легко добавлять, удалять и изменять данные, как если бы вы меняли игрушки в коробке. Вот несколько примеров, как это можно сделать в Python:
В этом примере мы создаем словарь с данными о коте, сериализуем его в формат JSON и затем десериализуем обратно. Это как если бы вы сначала собрали все игрушки в коробку, а потом снова достали их, чтобы поиграть!
JSON — это удобный и простой способ хранения и обмена данными. Он позволяет вам организовать свои "котячьи" секреты так, чтобы они всегда были под рукой. Теперь, когда вы знаете, что такое JSON, вы можете использовать его в своих проектах и не бояться потерять свои достижения!
А какие секреты вы бы хотели сохранить в формате JSON? Напишите в комментариях, и, возможно, в следующей статье мы обсудим, как работать с JSON в различных языках программирования! 😺
API нейросети Sora от компании Yes Ai предоставляет возможность интеграции функций генерации видео в любые приложения, веб-сайты или проекты.
Нейросеть Sora, разработанная компанией Open Ai, превосходит многих конкурентов в сфере создания видео по текстовым описаниям. Проект обладает значительным потенциалом, поэтому мы регулярно расширяем возможности API. Рекомендуем подписаться на наш канал в Телеграм, чтобы быть в курсе последних обновлений.
Для подачи заданий и отслеживания их статусов в нейросети Sora вам потребуется API-токен (ключ авторизации). Подробная инструкция по его получению доступна здесь.
Стоимость генерации видео зависит от входных параметров. Актуальную информацию можно получить через нашего бота. Мы настоятельно рекомендуем провести тестирование нейросети Sora перед интеграцией в ваш проект. Для получения дополнительной информации обращайтесь в нашу службу поддержки через мессенджер Telegram по адресу @yes_ai_support.
Более подробную информацию о возможностях нейросети Sora вы можете найти в нашей статье.
Создание видео по текстовому описанию — генерация видео на основании только текстовых промтах без использования референсных изображений.
Создание видео по референсному изображению — генерация видео, основываясь на предоставленном изображении.
Создание видео с использованием референсного изображения и текстового описания (промт) — комбинированный подход для более точной генерации видео.
Выбор продолжительности видео — настройка длины видео от 5 до 20 секунд.
Выбор анимационных эффектов — использование полного авторского набора эффектов от Open AI для придания видео уникальности.
Выбор разрешения видео — поддержка различных разрешений: 480p, 720p, 1080p.
Выбор ориентации видео — возможность создания видео в альбомной, квадратной или портретной ориентации.
Эти функции делают API Sora мощным инструментом для генерации качественного видео контента, адаптированного под ваши потребности.
POST https://api.yesai.su/v2/yesvideo/aniimage/sora
headers: { Content-Type: application/json, Authorization: Bearer }
Пример API запроса для подачи задания на генерацию видео в Sora
curl -X POST https://api.yesai.su/v2/yesvideo/aniimage/sora
-H "Authorization: Bearer <token>"
-H "Content-Type: application/json"
-d '{
"prompt": "котенок бежит",
"image_url": "https://yoururl.com/image1.jpeg",
"effect_id": 0,
"resolution": 480,
"dimensions": "9:16",
"duration": 15
}'
Параметры:
prompt = '' (опционально: Текстовое описание задания. Обязателен, если не указан image_url);
image_url = '' (опционально: Ссылка на изображение. Требуется, если не указан prompt);
effect_id = 0 (опционально, по умолчанию: 0: Идентификатор видеоэффекта). Доступные варианты:
0 — Без эффекта
1 — Воздушные шары
2 — Ручная работа
3 — Старая пленка
4 — Нуарный стиль
5 — Оригами
resolution = 480 (опционально, по умолчанию: 480: Разрешение видео. Возможные значения: 480, 720, 1080);
dimensions = '9:16' (опционально, по умолчанию: 1:1: Соотношение сторон видео). Допустимые параметры:
1:1
9:16
16:9
duration = 15 (опционально, по умолчанию: 5: Длительность анимации изображения в секундах). Допустимые значения:
5
10
15
20
Возможные ошибки:
['success' => false, 'message' => 'IMAGE_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'IMAGE_URL_NOT_VALID'], 400
['success' => false, 'message' => 'IMAGE_FILE_SIZE_NOT_VALID'], 400
['success' => false, 'message' => 'IMAGE_MIME_TYPE_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_IS_EMPTY'], 400
['success' => false, 'message' => 'PROMPT_NOT_VALID'], 400
['success' => false, 'message' => 'PROMPT_AND_IMAGE_URL_IS_EMPTY'], 400
['success' => false, 'message' => 'RESOLUTION_IS_EMPTY'], 400
['success' => false, 'message' => 'RESOLUTION_NOT_VALID'], 400
['success' => false, 'message' => 'DIMENSIONS_IS_EMPTY'], 400
['success' => false, 'message' => 'DIMENSIONS_NOT_VALID'], 400
['success' => false, 'message' => 'DURATION_IS_EMPTY'], 400
['success' => false, 'message' => 'DURATION_NOT_VALID'], 400
['success' => false, 'message' => 'EFFECT_ID_IS_EMPTY'], 400
['success' => false, 'message' => 'EFFECT_ID_NOT_VALID'], 400
['success' => false, 'message' => 'SETTINGS_IS_EMPTY'], 400
['success' => false, 'message' => 'SETTINGS_NOT_VALID'], 400
['success' => false, 'message' => 'UNAUTHORIZED'], 401
['success' => false, 'message' => 'IMAGE_NOT_FOUND'], 404
['success' => false, 'message' => 'USER_HAS_BEEN_BANNED'], 409
['success' => false, 'message' => 'USER_HAS_BEEN_DELETED'], 409
['success' => false, 'message' => 'NOT_ENOUGH_RPOINTS'], 409
['success' => false, 'message' => 'PROMPT_NSFW_WORDS'], 409
['success' => false, 'message' => 'PARAMETERS_IS_NOT_ALLOWED'], 409
['success' => false, 'message' => 'TASK_LIMIT_EXCEEDED'], 409
['success' => false, 'message' => 'TOO_MANY_REQUESTS'], 429
['success' => false, 'message' => 'INTERNAL_SERVER_ERROR'], 500
Формат ответа при успешной подаче нового задания через API Yes Ai:
['success' => true, 'message' => 'OK', 'results' => ['animation_data' => [ ... ]]], 200
Возможные коды статусов:
"status": 0 ("status_description":"in queue") - задание в очереди (ожидайте)
"status": 1 ("status_description":"in progress") - задание в работе (ожидайте)
"status": 2 ("status_description":"completed") - задание выполнено (можно обрабатывать результат)
"status": 3 ("status_description":"rejected with error") - задание отклонено с ошибкой (проверьте описание причины отклонения из блоков "comment_ru" и "comment_en")
"status": 4 ("status_description":"rejected due to timeout") - задание отклонено по таймауту (следует подать задание повторно)
{
"success": true, // данные успешно получены
"message": "OK",
"results": {
"animation_data": {
"id": 15977, // уникальный ID задания в системе Yes Ai
"user_id": 1234567890, // ID пользователя, который подал задание
"tariff_id": 30, // тарифный план пользователя (0 - Demo, 5 - Micro, 10 - Start, 20 - Standard, 30 - VIP)
"type": 23, // тип выполненного задания, 23 - генерация видео в нейросети Sora
"styles": [],
"settings": {
"sora_resolution": 480,
"sora_dimensions": "1:1",
"sora_duration": 5,
"sora_effect_id": 0
},
"child_ids": [],
"parent_id": 0,
"photo_url": "",
"image_url": "https://yourdomain.com/photo1.jpeg", // ссылка с исходным изображением, которое отправил клиент
"audio_url": "",
"video_url": "",
"final_frame_url": "",
"result_url": "https://yesai.su/files/yesvideo/animations/1234567890_173457...", // результат выполнения задания в формате MP4, его необходимо скачать на свой сервер
"result_type": "video",
"result_data": {
"video_fps": 30, // количество кадров в секунду
"video_width": 480, // ширина видео в пикселях, которое является результатом выполнения задания
"video_height": 480, // высота видео в пикселях, которое является результатом выполнения задания
"video_duration": 5, // длительность видео в секундах
"video_durrange": 0
},
"comment_ru": "", // комментарий к заданию на русском языке, он заполняется только в том случае, если задание не удалось выполнить
"comment_en": "", // комментарий к заданию на английском языке, он заполняется только в том случае, если задание не удалось выполнить
"accounting": {
"total_cost": 1, // итоговая стоимость выполнения задания в условных единицах
"spent_points": 0, // количество ⭐️ баллов, которые были сняты с баланса за выполнение задания. Для Sora поле всегда будет равно 0, т.к. оплата производится в 🔅 монетах
"spent_rpoints": 1, // количество 🔅 монет, которые были сняты с баланса за выполнение задания
"spent_repost_points": 0,
"spent_balance": 0, // количество денег с основного баланса, которое было снято за выполнение задания. Для Sora поле всегда будет равно 0, т.к. оплата производится в 🔅 монетах
"spent_rbalance": 0, // количество денег с бонусного баланса, которое было снято за выполнение задания. Для Sora поле всегда будет равно 0, т.к. оплата производится в 🔅 монетах
"remaining_points": 1820, // остаток средств на балансе ⭐️ баллов после выполнения задания
"remaining_rpoints": 3574.3038666, // остаток средств на балансе 🔅 монет после выполнения задания
"remaining_repost_points": 0,
"remaining_balance": 0, // остаток средств на основном балансе после выполнения задания
"remaining_rbalance": 5019.31631 // остаток средств на бонусном балансе после выполнения задания
},
"language": "",
"prompt": "ваш промт на любом языке", // оригинальный текст промта, отправленного клиентом - не отображается, если не было отправлено при подаче задания
"prompt_en": "your prompt", // текст промта на английском языке - система Yes Ai производит автоматический перевод промтов клиентов
"status": 2, // статус задания, где 2 - успешное завершение
"status_description": "completed", // текстовое пояснение у статусу задания, где completed означает успешное завершение
"start_at": 1735095375, // unixtime, время начала выполнения задания
"finish_at": 1735095463, // unixtime, время завершения выполнения задания
"created_at": 1735095279, // unixtime, время подачи задания клиентом
"updated_at": 1735095463 // unixtime, время последнего обновления статуса задания
}
}
}
После успешного выполнения задания по анимации изображения вы получите уникальную ссылку для скачивания видео в формате MP4, которое будет доступно на нашем сервере в течение 60 минут.
После завершения выполнения задания необходимо немедленно загрузить результат на ваш сервер.
Вы имеете возможность создавать задания в системе Yes Ai через API и отслеживать их статусы в соответствии с установленными правилами.
Требования к изображениям для подачи новых заданий:
Максимальный размер файла: до 5 мегабайт для анимаций.
Максимальное разрешение: не превышает 2000 пикселей по ширине или высоте.
Допустимые форматы: JPEG, JPG, PNG.
Для подачи новых заданий используйте метод POST:
Частота подачи: не более одного запроса в секунду.
Максимальное количество заданий в очереди: 8 заданий (очередь общая для всех типов заданий, подаваемых через API Yes Ai).
Если ваша система создаёт задания чаще заданного лимита, рекомендуется реализовать собственную очередь задач.
Для получения статусов ранее поданных заданий используйте метод GET:
Частота запросов: не чаще одного запроса в секунду.
По всем вопросам, касающимся использования API от Yes Ai, обращайтесь в официальную техническую поддержку через мессенджер Telegram: @yes_ai_support - https://t.me/yes_ai_support.
Оригинальная инструкция находится тут - перейти на сайт API
Хотел обновить свой пост на эту тему, но что-то набралось текста по этому поводу..
Почему не работает галочка в интерфейсе Запускать вместе с системой для автоматического поднятия в TUN режиме..?
Видимо это баг, или фича.. Я заставил запускаться ее автоматически с поднятием туннеля, но далее такой вывод сделан исходя из того, что при некорректном завершении работы программы (перезагрузка без выхода из NekoRay в трее) всегда без исключений можно ловить окошко с предложением перезапустить программу, при отказе вскоре вылетит следующее
Говорящее о том, что у нас уже есть TUN интерфейс в системе с таким названием, что указано в конфиге и вот никак с ним не получается подружиться (в диспетчере устройств он же лежит в ошибке).
Прежде чем запускать NekoRay нам нужно удалить ранее созданный сетевой интерфейс, и нам надо делать это автоматически.. Забываем про галочку Запускать вместе с системой. Отмечаем пункты Запомнить последний профиль (разумеется с активированным профилем) и Режим TUN. Но это может работать некорректно, поэтому выходим из софта через трей либо Программа — Выход. Открываем следующий файл (путь может отличаться в зависимости от того где лежит папка с утилитой)
C:\nekoray\config\groups\nekobox.json
Подробнее о пунктах:
remember_enable — галочка Запомнить последний профиль (true/false)
remember_id — идентификатор профиля (подробнее ниже)
spmode2 — галочка Режим ... (элемент массива "vpn" для TUN режима)
Идентификатор профиля указывает на профиль, который будет активирован при запуске, нумерация в JSON начинается с нуля, как для массивов, с единицы же в графическом интерфейсе программы, т.е. 0 соответствует 1 профилю, а 2 соответствует 3 профилю.
Идентификатор со значением -1919 говорит программе о том, что не нужно активировать ни один из доступных профилей.
Отлично, NekoRay настроили, в конфиге все перепроверили.. Осталось решить задачу с удалением сетевого интерфейса, ранее созданного утилитой, чтобы при перезагрузке или включении компьютера не словить проблем. Как я говорил ранее, про галочку Запускать вместе с системой забыли. Создаем файл AutorunNekoRay.ps1 рядом с nekobox.exe
C:\nekoray\AutorunNekoRay.ps1
Содержимое скрипта следующее
# Удаляем устройства с именем "sing-tun Tunnel"
foreach ($dev in (Get-PnpDevice | Where-Object { $_.Name -like "sing-tun Tunnel" })) {
# Запускаем pnputil для удаления устройства и ждем завершения процесса
Start-Process pnputil -ArgumentList "/remove-device", "$($dev.InstanceId)" -NoNewWindow -Wait
}
# Путь к exe файлу, который находится в той же папке, что и скрипт
$exePath = Join-Path -Path $PSScriptRoot -ChildPath "nekobox.exe"
# Запускаем nekobox.exe с аргументом -tray
Start-Process -FilePath $exePath -ArgumentList "-tray"
Стоит отметить, что в исходной конфигурации интерфейс в диспетчере устройств называется sing-tun Tunnel. Если меняли, то используем свое название, или смотрим что появилось в диспетчере с включенным режимом TUN.
Создаем файлы autorunEnable.reg (для добавления в автозапуск) и autorunDisable.reg (для удаления из автозапуска), их содержимое соответственно ниже. Проверяйте путь скрипта RemoveNetworkInterfaceTest.ps1!
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"RemoveNetworkInterfaceTest"="powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File \"C:\\nekoray\\RemoveNetworkInterfaceTest.ps1\""
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"RemoveNetworkInterfaceTest"=-
Чтобы утилита запускалась для всех пользователей — HKEY_CURRENT_USER необходимо заменить на HKEY_LOCAL_MACHINE в файлах .reg. Также рекомендую быть администратором в системе при использовании HKEY_CURRENT_USER, при использовании HKEY_LOCAL_MACHINE шансов выше, что утилита запуститься с правами администратора, от системного пользователя (касается не только NekoRay).
Запускаем autorunEnable.reg, соглашаемся со всем, что выскочит. Перезагружаем компьютер — радуемся.
Если что-то не работает перепроверяем именно конфиг (ну я по крайней мере решил, что это надежнее). Если все-таки трудности настигают киньте в комментарии скриншоты, где у вас nekobox.exe лежит, скрипта и файлов реестра (.reg), не забудьте конфиг nekobox.json попробуем разобраться 🫡
Возможно я тут много насквернословил и есть более простые решения обозреваемой задачи, поделитесь если знаете 🥲
Добрый день!
Я создал гугл форму и подключил её по скрипту к дискорд каналу. Но когда я пытаюсь отправить слишком большой текст, то у меня разбивается текст на блоки. Как можно удалить это разделение и что бы текст можно было отправлять большой?
Прикладываю фотографию:
Сам скрипт:
const URL = "https://discord.com/api/webhooks/";
var LEFT_COLOR = "16711680"; // 16711680;
var HEADER = "JSON";
var DESCRIPTION = "Some The Text";
var THUMBNAIL = "https://i.imgur.com/Ymuqmqn.jpeg";
const SEND_TIME = true;
var CONTENT = "<@&7283545455495>, <@&728355454545694>";
function onSubmit(e) {
const response = e.response.getItemResponses();
let items = [];
for (const responseAnswer of response) {
const question = responseAnswer.getItem().getTitle();
const answer = responseAnswer.getResponse();
let parts = []
try {
parts = answer.match(/[\s\S]{1,1024}/g) || [];
} catch (e) {
parts = answer;
}
if (!answer) {
continue;
}
for (const [index, part] of Object.entries(parts)) {
if (index == 0) {
items.push({
"name": question,
"value": part,
"inline": false
})
} else {
items.push({
"name": question.concat(" (удалит)"),
"value": part,
"inline": false
});
}
}
}
var TIME = "";
if (SEND_TIME) {
TIME = new Date().toISOString();
}
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
},
"payload": JSON.stringify({
"content": CONTENT,
"embeds": [{
"title": HEADER,
"description": DESCRIPTION,
"color": LEFT_COLOR,
"fields": items,
"thumbnail": {
"url": THUMBNAIL
},
"timestamp": TIME
}],
})
};
UrlFetchApp.fetch(URL, options);
};
Яндекс Музыка ведёт историю прослушивания (ведёт своеобразно*), в мобильной версии она вообще не доступна, в десктопной к счастью можно посмотреть. просто гигантский список из треков, а ведь могли бы по датам разбить, было бы удобно
в феврале я обнаружил фичу Яндекса, которая позволяет скачать свои данные с сервисов, скачал данные из Яндекс Музыки. быстро пришёл архив следующей структурой:
history.json — история прослушивания
likes.json — лайки на треках, альбомах, исполнителях
playlists.json — список плейлистов
usersettings.json — настройки
wizard.json — какие-то опции настройки рекомендаций при регистрации
меня интересовал собственно history.json, массив из 7'500 записей о прослушанных треках, обрадовало что в каждой указаны дата и время прослушивания. удобно, когда хочешь, например, узнать когда впервые услышал какой-то трек, или какие треки слушал в определённый день
7'500 треков показались странно специфичным числом, тем более потому что самая первая запись датировалась несколькими месяцами после моей регистрации. но я и так был удовлетворён логами длиной в полтора года, допустил что 7'500 треков — это их лимит. ну или так невероятно совпало, что я ровно 7'500 треков назад очистил историю прослушивания
14 августа решил снова закачать, успеть пока снова случайно не нажму кнопочку "очистить историю прослушивания", как успел сделать когда-то в марте. скачал, открыл — а там в истории всего 1'520 треков. и первый датируется 21 мая, так что это точно не связано со случайной очисткой. а 26 августа для этого поста снова скачал, а там... 1'500 треков. насчитал прослушанных с того момента 153 трека, а из истории подстёрлось с конца 173 трека, вот и разница
куда треки деваются? непонятно...
* — по моему опыту, в историю трек вписывается обычно только если его прослушали полностью. не супер удобно
Друзья, помощь нужна.
Объясните мне глупому, как правильно делать JSON фаил для андроил ТВ.
Я вообще ни чего не понимаю((((
""""Где:
YOUR-SERVER и порт 12345 берем из вашего outline-ключа вида ss://...,
а все что между ss:// и @ декодируем из base64 кодировки для получения пароля и метода.
Получаем строку вида chacha20-ietf-poly1305:56gsef6zr5 что и является парой метод:пароль для JSON, подставляем их туда и сохраняем наш json-файл.
3. Копируем outline.json на приставку. Я использовал приложение из маркета X-plore и сетевую папку с домашнего ноутбука.
4. Открываем приложение Shadosocks app и добавляем в него наш outline.json."""
Есть ключ от Outline - как его в json залить?
YOUR-SERVER - откуда брать?
и порт 12345 - указан в ключе?
Надо ли txt перекодировать в json? или просто сохраняю?
Спасибо.