Initial import
This commit is contained in:
commit
5b6f8bb13d
4 changed files with 157 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.mp4
|
||||
*.part
|
13
Gemfile
Normal file
13
Gemfile
Normal file
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source "https://rubygems.org"
|
||||
|
||||
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
||||
|
||||
# gem "rails"
|
||||
|
||||
gem "thor", "~> 1.1"
|
||||
|
||||
gem "mechanize", "~> 2.7"
|
||||
|
||||
gem "colorize", "~> 0.8.1"
|
48
Gemfile.lock
Normal file
48
Gemfile.lock
Normal file
|
@ -0,0 +1,48 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
colorize (0.8.1)
|
||||
connection_pool (2.2.3)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
http-cookie (1.0.3)
|
||||
domain_name (~> 0.5)
|
||||
mechanize (2.7.7)
|
||||
domain_name (~> 0.5, >= 0.5.1)
|
||||
http-cookie (~> 1.0)
|
||||
mime-types (>= 1.17.2)
|
||||
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
||||
net-http-persistent (>= 2.5.2)
|
||||
nokogiri (~> 1.6)
|
||||
ntlm-http (~> 0.1, >= 0.1.1)
|
||||
webrick (~> 1.7)
|
||||
webrobots (>= 0.0.9, < 0.2)
|
||||
mime-types (3.3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2020.1104)
|
||||
mini_portile2 (2.5.0)
|
||||
net-http-digest_auth (1.4.1)
|
||||
net-http-persistent (4.0.1)
|
||||
connection_pool (~> 2.2)
|
||||
nokogiri (1.11.1)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
racc (~> 1.4)
|
||||
ntlm-http (0.1.1)
|
||||
racc (1.5.2)
|
||||
thor (1.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.7)
|
||||
webrick (1.7.0)
|
||||
webrobots (0.1.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
colorize (~> 0.8.1)
|
||||
mechanize (~> 2.7)
|
||||
thor (~> 1.1)
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.2
|
94
fosdem-recorder
Executable file
94
fosdem-recorder
Executable file
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'mechanize'
|
||||
require 'time'
|
||||
require 'colorize'
|
||||
|
||||
require 'thor'
|
||||
|
||||
# Fosdem Cli - Download and cut streams video
|
||||
class FosdemCli < Thor
|
||||
desc 'info URL', 'Get information about URL'
|
||||
def info(url)
|
||||
meta = _get_meta(url)
|
||||
puts "* title = #{meta[:title]}"
|
||||
puts "* start = #{meta[:start_str]}"
|
||||
puts "* stop = #{meta[:stop_str]}"
|
||||
puts "* diff = #{meta[:duration_str]}"
|
||||
puts "* url = #{stream_url}"
|
||||
end
|
||||
|
||||
desc 'download URL', 'Download conference described at URL'
|
||||
def download(url)
|
||||
meta = _get_meta(url)
|
||||
cmd = "Command: echo ffmpeg -i #{meta[:stream_url]} -c copy -t #{meta[:duration_str]} \"#{meta[:title_sane]}.mp4\" | at #{meta[:start_str]}"
|
||||
puts cmd.yellow
|
||||
system cmd
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def _get_meta(url)
|
||||
mechanize = Mechanize.new
|
||||
page = mechanize.get(url)
|
||||
|
||||
title = page.title
|
||||
title_sane =
|
||||
title
|
||||
.gsub(/[^a-zA-Z0-9]/, '-')
|
||||
.gsub(/--*/, '-')
|
||||
.gsub(/-$/, '')
|
||||
.gsub(/^-/, '')
|
||||
|
||||
play_start_str =
|
||||
page
|
||||
.at('.side-box .icon-play')
|
||||
.parent
|
||||
.at('.value-title')
|
||||
.text
|
||||
.strip
|
||||
|
||||
play_start = Time.parse(play_start_str)
|
||||
|
||||
play_stop_str =
|
||||
page
|
||||
.at('.side-box .icon-stop')
|
||||
.parent
|
||||
.at('.value-title')
|
||||
.text.strip
|
||||
|
||||
play_stop = Time.parse(play_stop_str)
|
||||
|
||||
duration = (play_stop - play_start) / 3600
|
||||
duration_h = duration.to_i
|
||||
duration_m = ((duration - duration_h) * 60).to_i
|
||||
duration_str = '%02d:%02d:00' % [duration_h, duration_m]
|
||||
|
||||
stream_page =
|
||||
page
|
||||
.links
|
||||
.select { |link| link.href =~ /live.fosdem.org/ }
|
||||
.first
|
||||
.href
|
||||
|
||||
stream_url =
|
||||
stream_page
|
||||
.gsub(%r{.*watch/}, 'https://stream.fosdem.org/')
|
||||
.gsub(/$/, '.m3u8')
|
||||
|
||||
{
|
||||
title: title,
|
||||
title_sane: title_sane,
|
||||
stream_url: stream_url,
|
||||
start_str: play_start_str,
|
||||
stop_str: play_stop_str,
|
||||
duration_str: duration_str
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
FosdemCli.start(ARGV)
|
||||
|
||||
# https://stream.fosdem.org/dpostgresql.m3u8
|
||||
|
Loading…
Reference in a new issue