class YoutubeParser::Channels::VideosSection

Public Instance Methods

info() click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 8
def info
  {
    video_ids: video_ids,
    playlist_id: playlist_id
  }
end

Private Instance Methods

json() click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 48
def json
  @json ||= client.get("#{options.channel_url}/videos")
end
playlist_id() click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 33
def playlist_id
  return @playlist_id if @playlist_id

  section = sections.detect { |s| s.dig(*keys.playlist_id) }
  @playlist_id = section&.dig(*keys.playlist_id)
end
scrape_video_ids(videos) click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 40
def scrape_video_ids(videos)
  videos.map { |video| video.dig(*keys.video_ids) }.compact
end
sections() click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 44
def sections
  @sections ||= json.dig(*keys.section_tabs) || []
end
video_ids() click to toggle source
# File lib/youtube_parser/channels/videos_section.rb, line 17
def video_ids
  return @video_ids if @video_ids&.any?

  sections.each do |section|
    videos = section.dig(*keys.video_section_tabs) ||
      section.dig(*keys.second_video_section)
    next unless videos.is_a? Array

    @video_ids = scrape_video_ids videos

    return @video_ids if @video_ids.any?
  end

  []
end