|
require 'net/http' |
|
require 'uri' |
|
require 'cgi' |
|
|
|
require 'nokogiri' |
|
# require 'open-uri' |
|
|
|
SHORT_URL = 'https://www.gotomeet.me/' |
|
JOIN_URL = 'https://global.gotomeeting.com/join/' |
|
IFRAME_URL = 'https://launch.getgo.com/launcher2/launch.html?token=' |
|
|
|
USER_AGENT = 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0' |
|
|
|
OPENER_URL = 'gotoopener://launch.getgo.com/launcher2/launch/' |
|
|
|
def get_body(url) |
|
uri = URI.parse(url) |
|
http = Net::HTTP.new(uri.host, uri.port) |
|
http.use_ssl = true if uri.scheme == 'https' |
|
req = Net::HTTP::Get.new(uri, {'User-Agent' => USER_AGENT}) |
|
res = http.start { |http| http.request req } |
|
Nokogiri::HTML.parse res.body |
|
end |
|
|
|
def get_token_by_id(id) |
|
url = "#{JOIN_URL}#{id}" |
|
get_token(url) |
|
end |
|
|
|
def get_token(url) |
|
doc = get_body(url) |
|
parse_token(get_iframe_url(doc)) |
|
end |
|
|
|
def get_token_by_url(url) |
|
doc = get_body url |
|
url = get_meeting_url doc |
|
get_token(url) |
|
end |
|
|
|
def get_token_by_name(name) |
|
url = "#{SHORT_URL}#{name}" |
|
doc = get_body url |
|
url = get_meeting_url doc |
|
get_token(url) |
|
end |
|
|
|
def get_iframe_url(doc) |
|
doc.css('iframe').attr('src').value |
|
end |
|
|
|
def get_meeting_url(doc) |
|
doc.css('.g2mm-join-link').attr('href').value |
|
end |
|
|
|
def get_meeting_url(doc) |
|
doc.css('.g2mm-join-link').attr('href').value |
|
end |
|
|
|
def parse_token(url) |
|
uri = URI(url) |
|
query = CGI::parse(uri.query) |
|
query["token"][0] |
|
end |
|
|
|
def get_opener_url(token) |
|
"#{OPENER_URL}#{token}" |
|
end |
|
|
|
def get_id_by_name(name) |
|
url = "#{SHORT_URL}#{name}" |
|
doc = get_body url |
|
get_meeting_url doc |
|
end |
|
|
|
def get_browser(token, is_id) |
|
unless is_id |
|
"#{SHORT_URL}#{token}" |
|
end |
|
get_id_by_name(token) |
|
end |
|
|
|
def open(url) |
|
system("open #{url}") |
|
end |
|
|
|
def main |
|
id_or_name = ARGV.first |
|
id_or_name = Integer(id_or_name) if id_or_name.match(/^\d+$/) |
|
dont_open = ARGV[1] == '-n' || ARGV[1] == '--no-open' |
|
browser = ARGV[1] == '-b' || ARGV[1] == '--browser' |
|
|
|
is_id = id_or_name.is_a? Integer |
|
|
|
if is_id |
|
token = get_token_by_id(id_or_name) |
|
elsif id_or_name.include? 'gotomeet.me' |
|
token = get_token_by_url(id_or_name) |
|
else id_or_name =~ URI::regexp |
|
token = get_token_by_name(id_or_name) |
|
end |
|
|
|
opener_url = get_opener_url(token) |
|
|
|
# if browser url (for chrome) should be returned |
|
if browser |
|
print get_browser(id_or_name, is_id) |
|
# don't automatically open gotoopener and only print the url |
|
elsif dont_open |
|
print opener_url |
|
else |
|
# by default open the opener url |
|
open opener_url |
|
end |
|
end |
|
|
|
main |