youtubeapi.hpp 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. struct Video {
  13. std::string yt_id; // ID на YouTube
  14. Glib::ustring title; // Название
  15. Glib::ustring description; // Описание
  16. std::string duration; // Длительность
  17. std::string author_yt_id; // ID автора на YouTube
  18. Glib::ustring author_name; // Имя автора на YouTube
  19. std::string published_at; // Когда было опубликовано
  20. int views_count; // Количество просмотров
  21. int rating; // Моя оценка видео
  22. std::string big_thumbnail; // URL самого большого превью
  23. };
  24. // Функция записи данных в std::ostringstream
  25. size_t writeHttpToString(char* ptr, size_t size, size_t nmemb, void *userdata);
  26. // Функция записи данных в файл на диске
  27. size_t writeHttpToFile(void* ptr, size_t size, size_t nmemb, FILE* userdata);
  28. // Кодирует URL-строку
  29. // https://stackoverflow.com/a/154627
  30. std::string urlencode(const std::string& decoded);
  31. // Раскодирует URL-строку
  32. std::string urldecode(const std::string& encoded);
  33. // Получает список YT_ID видео по запросу
  34. // key - ключ api
  35. std::vector<std::string> getVideoIDsByQuery(std::string query, std::string key);
  36. // Возвращает объект видео, получив данные по API
  37. // ytid - id видео на YouTube
  38. // key - ключ api
  39. Video getVideoByYTID(std::string ytid, std::string key);
  40. // Возвращает список видео id из JSON списка видео
  41. std::vector<std::string> getVideoIDsFromJSON(std::string input);
  42. // Подгатавливает, настраивает и выполняет CURL запрос. Возвращает
  43. // успешность вызова
  44. // url - адрес запроса
  45. // key - ключ api
  46. // response - указатель на строковый поток, в который записывается ответ
  47. // запроса
  48. bool performCurlRequest(
  49. std::string url,
  50. std::string key,
  51. std::stringstream* response);
  52. // Подгатавливает, настраивает и выполняет CURL запрос на скачивание файла
  53. // Файл сохранится в save_path
  54. bool performCurlRequest(std::string url, std::string save_path);
  55. // Скачивает превью видео и сохраняет в путь save_path
  56. void downloadMediumThumnail(std::string yt_id, std::string save_path);
  57. // Скачивает большое превью видео и сохраняет в путь save_path
  58. void downloadLargeThumnail(std::string yt_id, std::string save_path);
  59. // Скачивает файл превью и сохраняет его
  60. // url: ссылка на превью
  61. // save_path: путь сохранения на диске
  62. void downloadThumbnail(std::string url, std::string save_path);
  63. // Устанавливает оценку видео
  64. // ytid - видео с каким ytid ставится оценка
  65. // rating - оценка видео (0 - нет, 1 - лайк, 2 - дизлайк)
  66. // secret - ключ пользователя
  67. //void setVideoRating(std::string ytid, int rating, std::string secret);
  68. }