Class: Bilibili::Video

Inherits:
BilibiliBase show all
Defined in:
lib/bilibili_console/video.rb

Overview

bilibili video interfaces

Instance Attribute Summary

Attributes inherited from BilibiliBase

#http_client, #options

Instance Method Summary collapse

Methods inherited from BilibiliBase

#clean_cookie, #initialize, #load_cookie, #save_cookie

Constructor Details

This class inherits a constructor from Bilibili::BilibiliBase

Instance Method Details

#download_video_by_bv(bv_id, options) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/bilibili_console/video.rb', line 80

def download_video_by_bv(bv_id, options)
  urls = video_url_list(bv_id, options[:qn])
  return nil if urls.empty?

  urls = page_slice(urls, options[:start], options[:end], options[:page])
  download_path = "#{File.expand_path(@options['download_path'].to_s, __dir__)}/#{bv_id}/"
  url_array = []
  urls.map { |url| download_file(url, download_path) }.each_with_index do |u, i|
    same_part = same_part?(u, i)
    url_array << u[:file_path]
    combine_media(url_array, "#{download_path}#{u[:prefix]}.flv") unless same_part
  end
end

#get_video_url(bv_id, cid, video_qn = '720') ⇒ Object



58
59
60
61
62
63
# File 'lib/bilibili_console/video.rb', line 58

def get_video_url(bv_id, cid, video_qn = '720')
  qn = BilibiliBase.video_qn[video_qn]
  url = "#{Api::Video::PLAY_URL}?bvid=#{bv_id}&cid=#{cid}&qn=#{qn}&fnval=0&fnver=0&fourk=1"
  data = get_jsona(url)
  data[:durl]
end

#video_page_list(bv_id) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/bilibili_console/video.rb', line 46

def video_page_list(bv_id)
  return nil if bv_id.nil?

  url = "#{Api::Video::PAGE_LIST}?bvid=#{bv_id}"
  datas = get_jsona(url)
  return nil if datas.nil?

  datas.map do |d|
    Bilibili::PageInfo.new(d)
  end
end

#video_url_list(bv_id, video_qn = '720') ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/bilibili_console/video.rb', line 65

def video_url_list(bv_id, video_qn = '720')
  result = []
  page_list = video_page_list(bv_id)
  return nil if page_list.nil?

  page_list.each do |page|
    get_video_url(bv_id, page.cid, video_qn).each do |down_url|
      order = down_url[:order] < 10 ? "0#{down_url[:order]}" : down_url[:order]
      result << { 'name': "#{page.part}_#{order}.flv", 'url': down_url[:url].to_s, 'prefix': page.part,
                  'order': "#{page.page}#{order}", 'bv': bv_id.to_s }
    end
  end
  result
end