Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Веселая аркада с Печенькой для новогоднего настроения. Объезжайте препятствия, а подарки, варежки, конфеты и прочие приятности не объезжайте: они помогут набрать очки и установить новый рекорд.

Сноуборд

Спорт, Аркады, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

API + Программист

С этим тегом используют

Программирование IT Python Искусственный интеллект ВКонтакте Разработка Нейронные сети IT юмор Юмор Картинка с текстом Работа Все
11 постов сначала свежее
10
Вопрос из ленты «Эксперты»
Аноним
Аноним
28 дней назад
Искусственный интеллект

Как работать с нейросетью через API?⁠⁠

Привет! Сразу прошу, не закидывайте камнями: да, тупой, да, куда я лезу, да, "ваш_вариант".
Но все с чего то начинают.

По работе возник запрос, провести маркетинговый анализ. Там материал объемом около 800 страниц, и по этой базе данных (текст, диалоги, описания) нужно провести исследование и получить ответ на около 100 вопросов.
Обычно я с нейросетями работаю просто тупо через чат. Покупаю иногда подписку на GPT, но он много придумывает и очень быстро возникает что-то типо "аналитическая усталось", когда он гоняет одни и те же тезисы по кругу, и начинает додумывать и говорить общими словами.
Deepseek красавчик, но постоянно ошибка сервера, и файл приходится дробить на кучу частей, соответственно уходит контекст.

Почитал на форумах, что проблему можно решить, если купить API у Deepseek-а, и с этим API будет мне счастье: ошибки сервера минимизируются, модель сможет глубоко озучать информацию внутри аналитической базы данных.

Но я нифига не понимаю ни в кодинге, ни во всех этих питонах, удавах и прочее)
Я умею работать через чат, и все тут...

Подскажите мне, какие решения могут быть для моей задачи? Может быть есть сервисы, куда можно тупо вставить свой api и работать также, как я работаю чате?

Спроси Пикабу Вопрос Компьютерная помощь Программист ChatGPT DeepSeek API Чат-бот Нейронные сети Искусственный интеллект Openai Сайт Текст
4
8
empenoso
empenoso
9 месяцев назад
Физкультура и Спорт

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API⁠⁠

Уже полгода хожу в фитнес клуб World Class или как пишут в самом клубе - являюсь его резидентом. Выбрал этот клуб в основном из-за наличия в нём бассейна. Потом заинтересовался групповыми программами и частенько хожу на сайкл тренировки - это тренировки на специальном велотренажере.

И единственное меня раздражает, что для просмотра расписания занятий на следующую неделю каждый раз приходилось идти на сайт сети Ворд Класс, переходить в мой клуб, отбиваться от нескольких назойливых баннеров которые предлагают перезвонить через 3 секунды для того чтобы стать их клиентом. И только после этого найти в огромном расписании несколько строчек которые я ищу. На неделе таких занятий может проходить несколько и я вносил их в свой календарь, чтобы сходить хотя бы на одно в неделю.
Вся это операция с поиском и занесением в календарь занимала минут 15. И так каждую неделю.

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Автоматически созданное при помощи скрипта событие в моём гугл календаре

В какой-то момент мне это надоело и я подумал, а не написать ли скрипт, который раз в неделю будет ходить на их сайт с расписанием и добавлять в мой календарь занятия на сайкле автоматически?

Некоторым препятствием стало то, что сайт World Class динамически загружает контент с помощью JavaScript после начальной загрузки страницы. Зато нашлась конечная точка API и теперь занятия по сайклу каждый понедельник ночью добавляются в мой календарь за 3 секунды работы скрипта вместо 15 минут моей жизни каждую неделю.

Веб-сайт с общедоступным расписанием клуба World Class

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Обычно расписание приветствует вот так

На сайте используется динамическая загрузка контента с помощью JavaScript. Это значит что сайт, который динамически загружает контент с помощью JavaScript после первоначальной загрузки страницы, - это тот, на котором не вся информация сразу доступна при первом появлении страницы. Вместо этого дополнительные данные или контент извлекаются с сервера и отображаются по мере взаимодействия со страницей. Этот метод обычно используется в современных веб-приложениях. Это устраняет необходимость перезагружать всю страницу и делает процесс более быстрым и плавным для пользователя.

Конечная точка API - это определенный URL-адрес, который позволяет внешним приложениям взаимодействовать с ним. API позволяют различным программным системам взаимодействовать друг с другом, отправляя запросы и получая ответы.

Когда взаимодействую с сайтом, который динамически загружает контент, то сайт часто запрашивает данные со своего сервера с помощью API. Сервер обрабатывает запрос и возвращает необходимые данные, которые затем отображаются на веб-странице. В контексте фитнес-клуба World Class конечной точкой API будет определенный URL-адрес, который предоставляет данные о расписании занятий. Отправив запрос на эту конечную точку, можно получить данные о расписании напрямую, минуя необходимость вручную перемещаться по сайту.

Поворотный момент и техническая проблема

В какой-то момент я наткнулся на чистую ссылку, которая ведёт только на само расписание фитнес-клуба World Class без любой рекламы. Ссылка выглядит следующим образом:

https://my.worldclass.ru/scheduling?clubs=d35ba5fc-1f7e-11ec-b664-50e548298f06

Где вместо d35ba5fc-1f7e-11ec-b664-50e548298f06 должен стоять идентификатор вашего клуба. Выше это идентификатор клуба в городе Перми.

Все доступные идентификаторы других клубов можно посмотреть прямо в браузере в режиме просмотра страницы:

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Список доступных клубов

Поскольку World Class динамически загружает расписание с помощью JavaScript после начальной загрузки страницы, то стало некоторой проблемой найти конечную точка API и обратиться к ней за этим общедоступным и свободно опубликованным в интернете расписанием.

ICG Color Cycle (сайкл)

В пермском клубе World Class не обязательно записываться на занятия по сайклу заранее - достаточно прийти примерно за полчаса до занятия и взять на входе черную карточку для участия - места есть до тех пор пока карточки не закончатся. Правда бывают приходят и те кто записались онлайн, но карточку не взяли - просто не знали про это и мест не хватает. Это некоторая путаница.

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Примерно так выглядят занятия по сайклу

Создание решения

Поскольку я использую Гугл календарь, то написал Google Apps скрипт. Apps Script - платформа на основе JavaScript для быстрой и простой разработки решений.

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

Скрипт работает следующим образом:

  1. Получение расписания: скрипт отправляет запрос в API World Class с идентификатором определенного спортзала. Далее извлекает расписание на следующие семь дней.

  2. Фильтрация соответствующих занятий: после извлечения расписания скрипт отфильтровывает занятия «ICG Color Cycle» и «CORE», которые я хочу посещать. Все дальнейшие действия происходят только для отобранной выборки.

  3. Создание событий календаря: для каждой отфильтрованной тренировки скрипт автоматически создает событие в Google календарь по умолчанию. Каждое событие включает:

  • Название: название тренировки (в моём случае либо «ICG Color Cycle», либо «CORE»).

  • Продолжительность: каждое событие запланировано на один час.

  • Описание: подробное объяснение зачем нужна эта тренировка.

  • Расположение: конкретный адрес клуба World Class, где проходит занятие.

  • Ведение журнала и обработка ошибок: скрипт регистрирует свой ход выполнения, указывая, когда он начинается и заканчивается, и предоставляя подробную информацию о каждом созданном событии. Если запрос API не выполняется или возвращает ошибку, скрипт регистрирует сообщение об ошибке для устранения неполадок.

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Файл где можно посмотреть токен, который понадобится для обращения к API

По сути, этот скрипт - инструмент экономии времени для резидентов клуба World Class, которые могут быть уверены, что всегда будут знать когда проходят их любимые занятия.

Версия скрипта полного дня:

function WorldclassAPISchedulingPerm() {

console.log(`Функция WorldclassAPISchedulingPerm начала работу в ${(new Date()).toLocaleString("ru-RU")}`);

const url = 'https://my.worldclass.ru/api/v1/clubs/scheduling';

const currentDate = new Date();

const endDate = new Date(currentDate);

endDate.setDate(currentDate.getDate() + 7);

// Подробное описание: https://pikabu .ru/story/kak_ya_uluchshil_svoyo_vzaimodeystvie_s_fitnesklubom_world_class_naydya_i_ispolzuya_ikh_api_11835205

// Это версия скрипта полного дня

const payload = {

"gymList": [

"d35ba5fc-1f7e-11ec-b664-50e548298f06" // это World Class в Перми

],

"startDate": currentDate.toISOString().split('.')[0],

"endDate": endDate.toISOString().split('.')[0],

"chain": 1,

"token": "70a69ca6-XXXX-XXXX-a975-005056b1372d"

};

const options = {

method: 'post',

contentType: 'application/json',

payload: JSON.stringify(payload),

muteHttpExceptions: true,

headers: {

'brand': 'WorldClass',

'language': 'Ru',

'chain': '1',

'Accept': '*/*',

'Origin': 'https://my.worldclass.ru',

'Referer': 'https://my.worldclass.ru/scheduling?clubs='

},

timeoutSeconds: 30

};

try {

const response = UrlFetchApp.fetch(url, options);

const responseCode = response.getResponseCode();

console.log(`Код ответа: ${responseCode}`);

const responseText = response.getContentText();

const responseData = JSON.parse(responseText); // Разбираем JSON-строку

if (responseCode === 200) {

// Фильтрация для "ICG Color Cycle (сайкл)" и "CORE"

const filteredDates = responseData.data

.filter(item => item.service.name === "ICG Color Cycle (сайкл)" || item.service.name === "CORE")

.map(item => ({

name: item.service.name,

startDate: item.startDate,

employee: item.employee.firstName + " " + item.employee.lastName,

shortDescription: item.service.shortDescription

}));

console.log('Отфильтрованные даты:', filteredDates);

// Создаем события в календаре для каждой отфильтрованной даты

filteredDates.forEach(eventData => {

const startTime = new Date(eventData.startDate);

const endTime = new Date(startTime);

endTime.setHours(startTime.getHours() + 1); // Устанавливаем продолжительность события на 1 час

let eventTitle = `${eventData.name} - ${eventData.employee}`;

let eventDescription = '';

eventDescription = eventData.shortDescription +

'\n\nhttps://my.worldclass.ru/scheduling?clubs=d35ba5fc-1f7e-11ec...' +

'\nСоздано автоматически ' + (new Date()).toLocaleString("ru-RU");

CalendarApp.getDefaultCalendar().createEvent(

eventTitle,

startTime,

endTime, {

description: eventDescription,

location: 'Фитнес клуб World Class, Пермская ул., 33, Пермь, Пермский край, Россия, 614045'

}

);

console.log(`Событие создано для: ${startTime} - ${eventTitle}`);

});

} else {

console.error(`Ошибка: получен статус ${responseCode} с ответом: ${responseText}`);

}

} catch (error) {

console.error('Ошибка запроса:', error.message);

}

console.log(`Функция WorldclassAPISchedulingPerm закончила работу в ${(new Date()).toLocaleString("ru-RU")}`);

}

Как я улучшил своё взаимодействие с фитнес-клубом World Class, найдя и используя их API Программирование, API, Программист, Open Source, Длиннопост

Результат выполнения скрипта

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

Ниже версия скрипта для дневного браслета, когда обязательный выход из зала до 17:00:

// Фильтрация для "ICG Color Cycle (сайкл)" и "CORE", а также по времени начала (до 17:00)

const filteredDates = responseData.data

.filter(item => (item.service.name === "ICG Color Cycle (сайкл)" || item.service.name === "CORE") &&

new Date(item.startDate).getHours() < 17)

.map(item => ({

name: item.service.name,

startDate: item.startDate,

employee: item.employee.firstName + " " + item.employee.lastName,

shortDescription: item.service.shortDescription

}));

console.log('Отфильтрованные даты:', filteredDates);

Как Вы можете воспользоваться этим скриптом?

Если вы новичок и хотите тоже автоматизировать получение определенных занятий, то скрипт Google Apps это мощный инструмент, который может вам помочь:

Шаг 1: Доступ к скрипту Google Apps

  1. Откройте Google Drive: начните с перехода на Google Drive.

  2. Создайте новый скрипт:

  • Нажмите кнопку Создать в верхнем левом углу.

  • Выберите Еще в раскрывающемся меню.

  • Нажмите Скрипт Google Apps. Откроется редактор скриптов Google Apps на новой вкладке.

Шаг 2: Назовите свой проект

  1. Назовите свой скрипт: как только откроется редактор скриптов приложений, вы увидите проект без названия. Нажмите на заголовок (обычно это «Проект без названия») и дайте ему осмысленное имя, например «Расписание World Class».

Шаг 3: Скопируйте код

  1. Удалите код по умолчанию: в редакторе вы увидите код по умолчанию (function myFunction() {}). Вы можете удалить его, чтобы освободить место для нового скрипта.

  2. Скопируйте и вставьте код:

  • Перейдите к статье с кодом скрипта Google Apps.

  • Скопируйте весь скрипт, предоставленный в статье.

  • Вернитесь в редактор скриптов приложений и вставьте код в пустое место.

Шаг 4: Сохраните свой скрипт

  1. Сохраните свою работу: Щелкните значок дискеты или нажмите Ctrl + S (или Cmd + S на Mac), чтобы сохранить свой скрипт.

Шаг 5: Запустите скрипт

  1. Запустите свой скрипт: Чтобы протестировать скрипт, щелкните значок воспроизведения (▶) в верхней части редактора. Если вы запускаете скрипт впервые, Google запросит авторизацию.

  2. Авторизуйте свой скрипт: Следуйте инструкциям, чтобы разрешить скрипту доступ к вашему Google Calendar и другим необходимым службам.

Шаг 6: Проверьте вывод

  1. Проверьте журналы: После запуска скрипта вы можете проверить сообщения журнала, чтобы убедиться, что он работает правильно. Перейдите в Просмотр > Журналы в редакторе скриптов приложений, чтобы увидеть вывод.

Шаг 7: Автоматизируйте его

  1. Установите триггер: если вы хотите, чтобы этот скрипт запускался автоматически через регулярные интервалы, вы можете настроить триггер:

  • Нажмите на значок часов на панели инструментов (Триггеры).

  • Нажмите + Добавить триггер в правом нижнем углу.

  • Установите запуск скрипта еженедельно, например на ночь между понедельником и вторником.

И это все! Вы успешно создали скрипт Google Apps, который автоматизирует добавление расписания в ваш календарь Google.

Результаты

При использовании гугл календаря этот скрипт представляет удобный инструмент который ищет интересующие групповые события и добавляет их автоматически в Ваш собственный Гугл Календарь.

Автор: Михаил Шардин

Показать полностью 6
[моё] Программирование API Программист Open Source Длиннопост
5
7
Wowovideo
Wowovideo
1 год назад
ITmozg

Топ 9 архитектурных паттернов для потоков данных и коммуникаций⁠⁠

🔹Peer-to-Peer

Схема Peer-to-Peer предполагает прямую связь между двумя компонентами без необходимости в центральном координаторе.

🔹API Gateway

API-шлюз выступает в качестве единой точки входа для всех клиентских запросов к внутренним сервисам приложения.

🔹Pub-Sub

Шаблон Pub-Sub отделяет производителей сообщений (издателей) от потребителей сообщений (подписчиков) с помощью брокера сообщений.

🔹Request-Response

Это один из самых фундаментальных паттернов интеграции, когда клиент отправляет запрос на сервер и ждет ответа.

🔹Event Sourcing

Event Sourcing предполагает хранение изменений состояния приложения в виде последовательности событий.

🔹ETL

ETL - это схема интеграции данных, используемая для сбора данных из различных источников, преобразования их в структурированный формат и загрузки в конечную базу данных.

🔹Batching

Пакетирование подразумевает накопление данных за определенный период или до достижения определенного порога, после чего они обрабатываются как единая группа.

🔹Streaming Processing

Потоковая обработка позволяет непрерывно получать, обрабатывать и анализировать потоки данных в режиме реального времени.

🔹Orchestration

Оркестровка подразумевает наличие центрального координатора (оркестранта), управляющего взаимодействием между распределенными компонентами или сервисами для реализации рабочего процесса или бизнес-процесса.

источник https://t.me/itmozg/9703

Показать полностью 1
IT Программист Технологии Паттерны API Gateway Linux Программирование Google Видео Без звука Вертикальное видео Telegram (ссылка)
1
Партнёрский материал Реклама
specials
specials

Сколько нужно времени, чтобы уложить теплый пол?⁠⁠

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Ремонт Теплый пол Текст
3
Wowovideo
Wowovideo
1 год назад
ITmozg

Развивающийся ландшафт протоколов API⁠⁠

Обзор шести самых популярных протоколов API

REST

Webhooks

GraphQL

SOAP

WebSocket

gRPC

https://blog.postman.com/api-protocols-in-2023/

источник https://t.me/itmozg/9692

Развивающийся ландшафт протоколов API Программист, IT, API, Rest, Программирование, Linux, Python, Telegram (ссылка)
Показать полностью 1
Программист IT API Rest Программирование Linux Python Telegram (ссылка)
2
69
bigseo
bigseo
2 года назад

Backend - Fronrend - API⁠⁠

Backend - Fronrend - API Backend, Frontend, API, Программирование, Программист, Проект, Картинка с текстом
Показать полностью 1
Backend Frontend API Программирование Программист Проект Картинка с текстом
23
NEDoK
2 года назад

Как мы ChatGPT-3 бота учили контекст запоминать⁠⁠

Привет, это NED, сейчас я расскажу вам о разработке нашего нового бота под названием projectND(Nastya Dyatlova) ,данный бот работает только в телеграм и находится в закрытом тестировании, чтобы туда попасть вам необходимо вступить в паблик ChatGPT Артемий (vk.com) и войти в беседу ,находящуюся в закрепленном посте , да-да, там тоже живет бот и работает 24/7 на моем сервере абсолютно бесплатно !

Так вот, в прошлых статьях я писал о том ,как поднимал сервер , запускал паблик ВК и то как ChatGPT 3.5 написал мне код и я его доработал без опыта в программировании !

Сейчас же после наплыва аудитории возникла потребность в том, чтобы бот смог поддержать разговор ,так как это основная претензия (ну и еще жалуются на вылеты, ну тут сорян openAI часто вылетает с разрывом соединения) прочитав пару гайдов в интернете ,как сделать так ,чтобы PythonBot мог понимать контекст ,а также спросив об этом ChatGPT бота у меня с горем пополам получилось сделать ,так ,чтобы ботик мог запоминать контекст...

НО ТУТ

Оказалось, что у меня возникла другая проблема, бот начал запоминать контекст, но контекст он запоминал глобальный , то есть то что написал каждый пользователь использовавший бота и вот ,что из этого вышло

Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост

ЭТО БЫЛИ МОИ ЗАПРОСЫ, А ВОТ ЧТО НАЧАЛИ ТВОРИТЬ РЕБЯТА ИЗ ЧАТИКА

Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост
Как мы ChatGPT-3 бота учили контекст запоминать Telegram, Искусственный интеллект, Переписка, IT юмор, ChatGPT, Gpt, Машинное обучение, Нейронные сети, Python, Программирование, Юмор, Девушки, Диалог, Программист, IT, API, Интернет, ВКонтакте, Бот, Чат-бот, Длиннопост

Как мы видим запрос связанный с тюрьмой наложился на запрос пользователя, который пытался обучить ее ведением баз данных ! Да ,я знаю что глобальный контекст это бред и именно из-за такого наплыва пользователей и возникали ошибки и вылеты бота, поэтому уже есть переписанный код, который ограничивает работу Анастасии в пределах одного диалога, но в бота он еще не внедрен !

Спасибо за внимание, это была больше развлекательная статья нежели познавательная, однако обученная модель с пониманием контекста вскоре будет внедрена, как в телеграм, так и ВК ботов

-----------------------------

Ссылки на ботов : ВК ChatGPT Артемий (vk.com)

Бот Телеграм : https://t.me/GPT_RUSSIA_BOT

Повторяю, протестировать Настю можно только вступив в наш чатик, который находится в паблике ВК, админ чаще всего находится там и решает прежде всего проблемы бота находящегося в ВК

-----------------------------

Показать полностью 8
[моё] Telegram Искусственный интеллект Переписка IT юмор ChatGPT Gpt Машинное обучение Нейронные сети Python Программирование Юмор Девушки Диалог Программист IT API Интернет ВКонтакте Бот Чат-бот Длиннопост
6
23
Web.Study
Web.Study
2 года назад
Web-технологии

4 редких API, которые встречаются в дикой природе JavaScript⁠⁠

В продолжение к этой статье я хочу вам рассказать о еще 4 API, которые не очень популярны, но могут выручить вас в некоторых ситуациях


Наш канал для новичков во Front-end

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Beacon API


Beacon API позволяет отправлять на сервер асинхронные и неблокирующие запросы (методом POST), которые гарантированно завершаются до выгрузки страницы, в отличие от XMLHttpRequest или Fetch API.


Одним из основных вариантов использования Beacon API является логгирование активности пользователей или отправка аналитических данных на сервер.


Раньше для этого приходилось прибегать к таким уловкам, как обработка событий unload или beforeunload глобального объекта Window с помощью синхронного XMLHttpRequest, например:


const someData = {
a: 1,
b: 2,
};
// страница будет выгружена только после отправки данного запроса
window.addEventListener("beforeunload", () => {
const xhr = new XMLHttpRequest(); 
xhr.open("POST", "https://example.com/beacon");
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
const params = new URLSearchParams(Object.entries(someData)); xhr.send(params); 
});


Интерфейс


Beacon API расширяет свойство navigator методом sendBeacon, который имеет следующую сигнатуру:

navigator.sendBeacon(url: string | URL, data?: BodyInit | null)

- url — адрес сервера;

- data — опциональные данные для отправки, которые могут быть строкой, объектом, ArrayBuffer, Blob, DataView, FormData, TypedArray или URLSearchParams.


sendBeacon возвращает логическое значение (true или false) — индикатор постановки data в очередь для передачи.


Пример использования


Создаем шаблон проекта с помощью Yarn и Vite на чистом JavaScript:

# rare-web-apis - название проекта
# --template vanilla - используемый шаблон
yarn create vite rare-web-apis --template vanilla

Переходим в созданную директорию, устанавливаем зависимости и запускаем сервер для разработки:

cd rare-web-apis
yarn
yarn dev

Определяем в файле main.js следующий обработчик:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Событие visibilitychange объекта document (подробнее о нем можно почитать по ссылке, приведенной в начале статьи) является более надежным способом определения состояния видимости страницы, чем события unload или beforeunload. В обработчике при скрытии страницы, например, при переключении вкладки или сворачивании страницы, с помощью sendBeacon по адресу https://example.com/beacon отправляются некоторые данные в форме URLSearchParams.


Результат переключения вкладки:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост
4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Поддержка — 96.8%.



Clipboard API



Clipboard API позволяет выполнять асинхронные операции записи/чтения текстовых и других данных в/из системного буфера обмена, а также обрабатывать события copy, cut и paste (копирование, вырезка и вставка) буфера.

По причинам безопасности Clipboard API доступен только при условии, что:


- страница обслуживается по протоколу https или localhost;

- страница находится в активной вкладке браузера (не находится в фоновом режиме);

- операции записи/чтения инициализируются пользователем (например, с помощью нажатия кнопки).


Разрешение clipboard-write для записи данных предоставляется активной странице автоматически, а разрешение clipboard-read для чтения данных запрашивается у пользователя с помощью Permissions API.


Раньше для работы с содержимым редактируемой области использовался метод document.execCommand. Например, вот как выполнялась запись текста:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Интерфейс


Clipboard API расширяет свойство navigator интерфейсом Clipboard, экземпляры которого предоставляют следующие методы для работы с буфером:


- writeText(text: string) — для записи текста, принимает строку;

- readText() — для чтения текста, возвращает строку;

- write(data: ClipboardItem[]) — для записи данных, принимает массив объектов ClipboardItem (см. ниже);

- read() — для чтения данных, возвращает массив объектов ClipboardItem.


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


ClipboardItem — это интерфейс, предназначенный для работы с нетекстовыми данными, который имеет следующую сигнатуру:

new ClipboardItem(
items: Record<string, string | Blob | PromiseLike<string | Blob>>,
options?: ClipboardItemOptions
)

- items — данные для записи в форме объектов, ключами которых являются MIME-типы, а значениями — строки, Blob или промисы, разрешающиеся строками или Blob;

- options — опциональные настройки (точнее, одна настройка — presentationStyle).


В действительности, ClipboardItem можно использовать также для работы с текстовыми данными, но есть один нюанс, о котором чуть позже.


Что касается событий copy, cut и paste, то их обработка обычно выполняется через свойство clipboardData события ClipboardEvent, которое содержит объект DataTransfer, предоставляющий следующие методы:


- setData(format: string, data: string) — для записи данных;

- getData(format: string) — для чтения данных;

- clearData() — для удаления данных и др.

Пример использования


Начнем с записи и чтения текста. Редактируем файл index.html следующим образом:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Получаем ссылки на DOM-элементы:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Определяем функцию копирования текста:


async function copyText() {
let textToCopy; 
// получаем выделение
const selectedText = getSelection().toString().trim(); 
// текстом для копирования является либо выделенный текст, либо содержимое `copyBox`
selectedText
? (textToCopy = selectedText)
: (textToCopy = copyBox.textContent.trim()); 
// если текст отсутствует
if (!textToCopy) {
logBox.textContent = "No text to copy"; 
return; 
}
try {
// записываем текст в буфер
await navigator.clipboard.writeText(textToCopy); 
logBox.textContent = "Copy success"; 
} catch (e) {
console.error(e); 
logBox.textContent = "Copy error"; 
}
}

Определяем функцию для вставки текста:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Наконец, регистрируем соответствующие обработчики:

copyBtn.addEventListener("click", copyText); 
pasteBtn.addEventListener("click", pasteText);

Обратите внимание: при первой вставке текста браузер запрашивает разрешение на чтение буфера. При отказе в разрешении выбрасывается исключение DOMException: Read permission denied.


Записать текстовые данные с помощью ClipboardItem можно следующим образом:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Обратите внимание: несмотря на то, что значением объекта ClipboardItem может быть строка (new ClipboardItem({ [type]: text })), при записи такого объекта в буфер выбрасывается исключение DOMException: Invalid Blob types.


Также обратите внимание, что при программной записи данных в случае, когда страница находится в фоновом режиме, выбрасывается исключение DOMException: Document is not focused.


Для извлечения данных из ClipboardItem используется метод getType:

const blob = await item.getType(type); 
const text = await blob.text(); 
console.log(text); // Text to copy

Добавим возможность копирования и вставки изображения, хранящегося на сервере.


Добавляем кнопки в index.html:

<div>
<button id="copy-img-btn">Copy remote image</button>
<button id="paste-img-btn">Paste remote image</button>
</div>

Определяем тип и функцию для копирования изображения:


const IMG_TYPE = "image/png";
async function copyRemoteImg() {
try {
const response = await fetch(
"https://images.unsplash.com/photo-1529788295308-1eace6f67388..."
);

// см. ниже
const blob = new Blob([await response.blob()], { type: IMG_TYPE });

// создаем элемент копирования

const item = new ClipboardItem({ [blob.type]: blob });
// записываем его в буфер
await navigator.clipboard.write([item]);

logBox.textContent = "Copy image success";
} catch (e) {
console.error(e);
logBox.textContent = "Copy image error";
}
}

Не уверен насчет других браузеров, но в Chrome наблюдается следующее:


- при преобразовании изображения из тела ответа в Blob с помощью response.blob() дефолтным типом становится image/jpeg (независимо от типа запрашиваемого изображения);

- при попытке записи такого Blob в буфер выбрасывается исключение DOMException: Type image/jpeg not supported on write.


Поэтому приходится выполнять двойное преобразование с помощью new Blob([await response.blob()], { type: IMG_TYPE });.


Определяем функцию для чтения данных из буфера и вставки изображения:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Итерация по item.types является безопасной, в отличие от прямого обращения к item.getType() — при отсутствии типа выбрасывается исключение DOMException: Failed to execute 'getType' on 'ClipboardItem': The type was not found.


Регистрируем соответствующие обработчики:

copyImgBtn.addEventListener("click", copyRemoteImg); pasteImgBtn.addEventListener("click", pasteRemoteImg);

Реализуем модификацию копируемых и вставляемых данных.


Редактируем index.html:


<textarea cols="30" rows="10" id="text-area">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, labore.</textarea>

Определяем функцию модификации копируемых данных:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Данная функция добавляет к копируемому тексту строку copied from MySite.com.


Определяем функцию модификации добавляемых данных:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Данная функция переводит добавляемый текст в верхний регистр.


Обратите внимание, что в обоих случаях отключается стандартная обработка события браузером с помощью e.preventDefault().


Регистрируем соответствующие обработчики:

textArea.addEventListener("copy", onCopy); textArea.addEventListener("paste", onPaste);

Поддержка — 95.08%.



Notifications API


Notifications API позволяет отображать системные уведомления. Особенность этих уведомлений состоит в том, что они находятся вне контекста окна браузера, поэтому могут отображаться даже если пользователь сменил вкладку или свернул окно. Данный интерфейс разработан таким образом, что совместим со встроенными механизмами уведомлений на большинстве платформ.


Интерфейс


Для запроса разрешения на показ уведомлений используется метод Notification.requestPermission. Данный метод возвращает промис, который разрешается или отклоняется со статусом разрешения. Статус разрешения содержится в свойстве Notification.permission и может иметь одно из трех значений:


- default — запрос на разрешение не выполнялся, уведомления не отображаются;

- granted — пользователь предоставил разрешение, уведомления отображаются;

- denied — пользователь отклонил запрос, уведомления не отображаются.


Для создания уведомления используется конструктор Notification, который имеет следующую сигнатуру:

new Notification(title: string, options?: NotificationOptions | undefined)

- title: string — заголовок уведомления;

- options — опциональный объект с настройками, такими как:

- body: string — тело уведомления;

- icon: string — ссылка на иконку;

- tag: string — тег, используемый для идентификации уведомления. Тег позволяет обновлять уведомления без их отображения, что может быть полезным при большом количестве уведомлений;

- image: string — ссылка на изображение;

- data: any — данные, ассоциированные с уведомлением и др.


Для закрытия уведомления используется метод notification.close.


Notifications API позволяет обрабатывать следующие события:


- show — отображение уведомления;

- close — закрытие уведомления;

- click — нажатие на уведомление;

- error.


Пример использования


В качестве примера реализуем отображение уведомлений о скрытии страницы. При клике по уведомлению в контейнер для логгов будет выводиться соответствующее сообщение.


Определяем в index.html кнопку для запроса разрешения на показ уведомлений:

<button id="notification-btn">Enable notifications</button>

Регистрируем соответствующий обработчик в main.js:

notificationBtn.addEventListener("click", () => { Notification.requestPermission();
});
Определяем переменные для уведомления и идентификатора таймера, а также функцию для создания уведомления:
4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Несмотря на то, что большинство браузеров автоматически уничтожают уведомления по прошествии некоторого времени (около 4 сек), рекомендуется делать это явно.


Расширяем обработку изменения состояния видимости страницы:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Включаем уведомления:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Переключаем вкладку:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

При клике по уведомлению на странице приложения появляется сообщение Notification clicked.


Обратите внимание: при нахождении в другой вкладке уведомление уничтожается через 3 сек, а при возвращении в приложение — сразу.


Поддержка оставляет желать лучшего — 79.86%.



Performance API


Performance API позволяет измерять задержку в приложении на стороне клиента. Интерфейсы Performance (интерфейсы производительности) считаются высокоточными (high resolution), поскольку имеют точность, равную тысячным миллисекунды (точность зависит от ограничений аппаратного или программного обеспечения). Данные интерфейсы используются для вычисления частоты кадров (например, в анимации) и бенчмаркинге (например, для измерения времени загрузки ресурса).


Поскольку системные часы (system clock) платформы подвергаются различным корректировкам (таким как коррекция времени по NTP), интерфейсы Performance поддерживают монотонные часы (monotonic clock), т.е. время, которое все время увеличивается. Для этого Performance API определяет тип DOMHighResTimeStamp вместо использования интерфейса Date.now().


DOMHighResTimeStamp представляет высокоточную отметку времени (point in time). Данный тип является double и используется интерфейсами производительности. Значение DOMHighResTimeStamp может быть дискретной отметкой времени или разницей между двумя такими отметками.


Единицей DOMHighResTimeStamp является миллисекунда с точностью до 5 микросекунд. Если браузер не может обеспечить такую точность, допускается представление значения в миллисекундах с точностью до миллисекунды.


Интерфейс


Основным методом, предоставляемым Performance API, является метод now, который возвращает DOMHighResTimeStamp, значение которого зависит от времени создания контекста браузера или воркера (worker).

Кроме этого, рассматриваемый интерфейс содержит два основных свойства:


- timing — возвращает объект PerformanceTiming, содержащий такую информацию, как время начала навигации, время начала и завершения перенаправлений, время начала и завершения ответов и т.д.;

- navigation — возвращает объект PerformanceNavigation, представляющий тип навигации, происходящей в текущем контексте браузера, такой как переход к странице из истории, по ссылке и т.п.


Пример использования


В качестве примера реализуем функцию для измерения времени выполнения другой функции.


Редактируем main.js:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Определяем функцию вычисления факториала числа и измеряем время ее выполнения:

const getFactorial = (n) => (n <= 1 ? 1 : n * getFactorial(n - 1)); howLong(getFactorial)(12);

Определяем функцию получения данных из сети и измеряем время ее выполнения:

const fetchSomething = (url) => fetch(url).then((r) => r.json()); howLong(fetchSomething)("https://jsonplaceholder.typicode.com/users?_limit=10");

Результат:

4 редких API, которые встречаются в дикой природе JavaScript Программирование, IT, Javascript, API, Frontend, Программист, Длиннопост

Поддержка — 97.17%.



Иии...


На этом все, надеюсь ты узнал что-то новое и применишь это на практике. Иначе зачем я писал этот и прошлый пост

Показать полностью 17
[моё] Программирование IT Javascript API Frontend Программист Длиннопост
1
552
Immortalique
Immortalique
2 года назад
Типичный программист

Хэй, Джейсон!⁠⁠

Хэй, Джейсон! Программирование, Json, IT юмор, Программист, AJAX, API, Юмор, Джейсон Вурхис, Картинка с текстом
Показать полностью 1
[моё] Программирование Json IT юмор Программист AJAX API Юмор Джейсон Вурхис Картинка с текстом
13
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии