12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #pragma once
- #include <glibmm/ustring.h>
- #include <string>
- #include <curl/curl.h>
- #include <vector>
- #include <sstream>
- #include <nlohmann/json.hpp>
- #include <Database/entities.hpp>
- #include <Database/database.hpp>
- namespace ytapi {
- // Перечисление статусов ответов которые могут произойти в библиотеке
- enum class Status {
- OK, // Запрос успешен
- NET_ERROR, // Ошибка подключения
- APIKEY_INVALID // Неверный API ключ
- };
-
- // Детали видео - необработанные
- struct Video {
- std::string yt_id; // ID на YouTube
- Glib::ustring title; // Название
- Glib::ustring description; // Описание
- std::string duration; // Длительность
- std::string author_yt_id; // ID автора на YouTube
- Glib::ustring author_name; // Имя автора на YouTube
- std::string published_at; // Когда было опубликовано
- int views_count; // Количество просмотров
- int rating; // Моя оценка видео
- std::string big_thumbnail; // URL самого большого превью
- };
- // Ответ поиска видео по запросу
- struct SearchResults {
- Status status; // Статус ответа
- std::vector<std::string> ytids; // Вектор из YTID видео по запросу
- };
-
- // Функция записи данных в std::ostringstream
- size_t writeHttpToString(char* ptr, size_t size, size_t nmemb, void *userdata);
- // Функция записи данных в файл на диске
- size_t writeHttpToFile(void* ptr, size_t size, size_t nmemb, FILE* userdata);
- // Кодирует URL-строку
- // https://stackoverflow.com/a/154627
- std::string urlencode(const std::string& decoded);
- // Раскодирует URL-строку
- std::string urldecode(const std::string& encoded);
- // Получает список YT_ID видео по запросу
- // query - запрос
- // key - ключ api
- SearchResults getVideoIDsByQuery(std::string query, std::string key);
- // Возвращает объект видео, получив данные по API
- // ytid - id видео на YouTube
- // key - ключ api
- Video getVideoByYTID(std::string ytid, std::string key);
- // Подгатавливает, настраивает и выполняет CURL запрос. Возвращает
- // успешность вызова
- // url - адрес запроса
- // key - ключ api
- // response - указатель на строковый поток, в который записывается ответ
- // запроса
- bool performCurlRequest(
- std::string url,
- std::string key,
- std::stringstream* response);
- // Подгатавливает, настраивает и выполняет CURL запрос на скачивание файла
- // Файл сохранится в save_path
- bool performCurlRequest(std::string url, std::string save_path);
- // Скачивает превью видео и сохраняет в путь save_path
- void downloadMediumThumnail(std::string yt_id, std::string save_path);
- // Скачивает большое превью видео и сохраняет в путь save_path
- void downloadLargeThumnail(std::string yt_id, std::string save_path);
- // Скачивает файл превью и сохраняет его
- // url: ссылка на превью
- // save_path: путь сохранения на диске
- void downloadThumbnail(std::string url, std::string save_path);
- // Устанавливает оценку видео
- // ytid - видео с каким ytid ставится оценка
- // rating - оценка видео (0 - нет, 1 - лайк, 2 - дизлайк)
- // secret - ключ пользователя
- //void setVideoRating(std::string ytid, int rating, std::string secret);
- }
|