IYouTubeApiService.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. namespace Application.Abstractions.YouTube;
  2. /// <summary>
  3. /// YouTube Data API v3 — 채널 정보, 구독/멤버십 확인
  4. /// </summary>
  5. public interface IYouTubeApiService
  6. {
  7. // ── 공개 정보 (API Key 사용) ──────────────────────────────────────
  8. /// <summary>채널 ID로 채널 정보 조회</summary>
  9. Task<YouTubeChannelInfo?> GetChannelByIdAsync(string channelId, CancellationToken ct);
  10. /// <summary>여러 채널 ID를 한 번에 조회 (최대 50개, 1 unit)</summary>
  11. Task<IReadOnlyList<YouTubeChannelInfo>> GetChannelsByIdsAsync(IReadOnlyList<string> channelIds, CancellationToken ct);
  12. /// <summary>핸들(@username)로 채널 정보 조회</summary>
  13. Task<YouTubeChannelInfo?> GetChannelByHandleAsync(string handle, CancellationToken ct);
  14. /// <summary>videoId로 라이브 스트림 정보 조회 (liveBroadcastContent, activeLiveChatId, concurrentViewers)</summary>
  15. Task<YouTubeLiveStreamInfo?> GetLiveStreamInfoAsync(string videoId, CancellationToken ct);
  16. /// <summary>
  17. /// 여러 videoId의 실시간 시청자 수를 한 번에 조회 (videos.list batch, 50개당 1 unit).
  18. /// 라이브 아니거나 concurrentViewers 필드 없으면 해당 videoId는 결과에서 제외.
  19. /// </summary>
  20. Task<IReadOnlyDictionary<string, int>> GetConcurrentViewersAsync(IReadOnlyList<string> videoIds, CancellationToken ct);
  21. /// <summary>
  22. /// 채널의 uploads 플레이리스트에서 최근 업로드 videoId 목록 조회 (최대 50개, 1 unit).
  23. /// channelId는 YouTube channel ID (UC...).
  24. /// </summary>
  25. Task<IReadOnlyList<string>> GetRecentUploadsAsync(string channelId, int maxResults, CancellationToken ct);
  26. /// <summary>
  27. /// 여러 videoId를 한 번에 조회 — liveStreamingDetails + statistics (최대 50개, 3 units).
  28. /// 일일 배치 집계 전용.
  29. /// </summary>
  30. Task<IReadOnlyList<YouTubeVideoStats>> GetVideoStatsBatchAsync(IReadOnlyList<string> videoIds, CancellationToken ct);
  31. // ── 사용자별 (OAuth Access Token 필요) ────────────────────────────
  32. /// <summary>현재 사용자가 특정 채널을 구독 중인지 확인</summary>
  33. Task<bool> IsSubscribedAsync(string accessToken, string channelId, CancellationToken ct);
  34. /// <summary>현재 사용자의 특정 채널 멤버십 상태 확인</summary>
  35. Task<YouTubeMembershipStatus> CheckMembershipAsync(string accessToken, string channelId, CancellationToken ct);
  36. /// <summary>OAuth Access Token으로 인증된 사용자 본인의 채널 조회 (mine=true)</summary>
  37. Task<YouTubeChannelInfo?> GetMyChannelAsync(string accessToken, CancellationToken ct);
  38. }