youtubeapi.hpp 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include <glibmm/ustring.h>
  3. #include <string>
  4. #include <curl/curl.h>
  5. #include <vector>
  6. #include <sstream>
  7. #include <nlohmann/json.hpp>
  8. #include <Database/entities.hpp>
  9. #include <Database/database.hpp>
  10. namespace ytapi {
  11. // Перечисление статусов ответов которые могут произойти в библиотеке
  12. enum class Status {
  13. OK, // Запрос успешен
  14. NET_ERROR, // Ошибка подключения
  15. APIKEY_INVALID // Неверный API ключ
  16. };
  17. // Детали видео - необработанные
  18. struct Video {
  19. std::string yt_id; // ID на YouTube
  20. Glib::ustring title; // Название
  21. Glib::ustring description; // Описание
  22. std::string duration; // Длительность
  23. std::string author_yt_id; // ID автора на YouTube
  24. Glib::ustring author_name; // Имя автора на YouTube
  25. std::string published_at; // Когда было опубликовано
  26. int views_count; // Количество просмотров
  27. int rating; // Моя оценка видео
  28. std::string big_thumbnail; // URL самого большого превью
  29. };
  30. // Ответ поиска видео по запросу
  31. struct SearchResults {
  32. Status status; // Статус ответа
  33. std::vector<std::string> ytids; // Вектор из YTID видео по запросу
  34. };
  35. // Функция записи данных в std::ostringstream
  36. size_t writeHttpToString(char* ptr, size_t size, size_t nmemb, void *userdata);
  37. // Функция записи данных в файл на диске
  38. size_t writeHttpToFile(void* ptr, size_t size, size_t nmemb, FILE* userdata);
  39. // Кодирует URL-строку
  40. // https://stackoverflow.com/a/154627
  41. std::string urlencode(const std::string& decoded);
  42. // Раскодирует URL-строку
  43. std::string urldecode(const std::string& encoded);
  44. // Получает список YT_ID видео по запросу
  45. // query - запрос
  46. // key - ключ api
  47. SearchResults getVideoIDsByQuery(std::string query, std::string key);
  48. // Возвращает объект видео, получив данные по API
  49. // ytid - id видео на YouTube
  50. // key - ключ api
  51. Video getVideoByYTID(std::string ytid, std::string key);
  52. // Подгатавливает, настраивает и выполняет CURL запрос. Возвращает
  53. // успешность вызова
  54. // url - адрес запроса
  55. // key - ключ api
  56. // response - указатель на строковый поток, в который записывается ответ
  57. // запроса
  58. bool performCurlRequest(
  59. std::string url,
  60. std::string key,
  61. std::stringstream* response);
  62. // Подгатавливает, настраивает и выполняет CURL запрос на скачивание файла
  63. // Файл сохранится в save_path
  64. bool performCurlRequest(std::string url, std::string save_path);
  65. // Скачивает превью видео и сохраняет в путь save_path
  66. void downloadMediumThumnail(std::string yt_id, std::string save_path);
  67. // Скачивает большое превью видео и сохраняет в путь save_path
  68. void downloadLargeThumnail(std::string yt_id, std::string save_path);
  69. // Скачивает файл превью и сохраняет его
  70. // url: ссылка на превью
  71. // save_path: путь сохранения на диске
  72. void downloadThumbnail(std::string url, std::string save_path);
  73. // Устанавливает оценку видео
  74. // ytid - видео с каким ytid ставится оценка
  75. // rating - оценка видео (0 - нет, 1 - лайк, 2 - дизлайк)
  76. // secret - ключ пользователя
  77. //void setVideoRating(std::string ytid, int rating, std::string secret);
  78. }