bigbluebutton 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +3 -0
- data/README +23 -0
- data/Rakefile +53 -0
- data/lib/bigbluebutton.rb +140 -0
- metadata +66 -0
data/LICENSE
ADDED
data/README
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
= Project: bigbluebutton
|
2
|
+
|
3
|
+
== Goal
|
4
|
+
|
5
|
+
Provide access to the BigBlueButton web conferencing API.
|
6
|
+
|
7
|
+
== Releases
|
8
|
+
|
9
|
+
=== Version 0.0.1
|
10
|
+
This is the first version of this gem. It provides an implementation of the
|
11
|
+
0.64 bbb API, with the following exceptions:
|
12
|
+
|
13
|
+
- Does not implement meeting token, and instead relies on meeting id as the
|
14
|
+
unique identifier for a meeting.
|
15
|
+
- Documentation suggests there is way to call join_meeting as API call
|
16
|
+
(instead of browser URL). This call currently does not work as documented.
|
17
|
+
|
18
|
+
== Contact
|
19
|
+
|
20
|
+
Author:: Joe Kinsella
|
21
|
+
Email:: joe.kinsella@gmail.com
|
22
|
+
Home Page:: http://www.brownbaglunch.com/bigbluebutton
|
23
|
+
License:: Distributes under same terms as Ruby
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# To change this template, choose Tools | Templates
|
3
|
+
# and open the template in the editor.
|
4
|
+
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'rake'
|
8
|
+
require 'rake/clean'
|
9
|
+
require 'rake/gempackagetask'
|
10
|
+
require 'rake/rdoctask'
|
11
|
+
require 'rake/testtask'
|
12
|
+
|
13
|
+
spec = Gem::Specification.new do |s|
|
14
|
+
s.name = 'bigbluebutton'
|
15
|
+
s.version = '0.0.1'
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.extra_rdoc_files = ['README', 'LICENSE']
|
18
|
+
s.summary = 'Provides an interface to the BigBlueButton web meeting API (http://code.google.com/p/bigbluebutton/)'
|
19
|
+
s.description = s.summary
|
20
|
+
s.author = 'Joe Kinsella'
|
21
|
+
s.email = 'joe.kinsella@gmail.com'
|
22
|
+
s.homepage = "http://www.brownbaglunch.com/bigbluebutton"
|
23
|
+
# s.executables = ['your_executable_here']
|
24
|
+
s.files = %w(LICENSE README Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
|
25
|
+
s.require_path = "lib"
|
26
|
+
s.bindir = "bin"
|
27
|
+
end
|
28
|
+
|
29
|
+
Rake::GemPackageTask.new(spec) do |p|
|
30
|
+
p.gem_spec = spec
|
31
|
+
p.need_tar = true
|
32
|
+
p.need_zip = true
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::RDocTask.new do |rdoc|
|
36
|
+
files =['README', 'LICENSE', 'lib/**/*.rb']
|
37
|
+
rdoc.rdoc_files.add(files)
|
38
|
+
rdoc.main = "README" # page to start on
|
39
|
+
rdoc.title = "bigbluebutton Docs"
|
40
|
+
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
41
|
+
rdoc.options << '--line-numbers'
|
42
|
+
end
|
43
|
+
|
44
|
+
Rake::TestTask.new do |t|
|
45
|
+
t.test_files = FileList['test/**/*.rb']
|
46
|
+
end
|
47
|
+
|
48
|
+
desc 'Test the gem.'
|
49
|
+
Rake::TestTask.new(:test) do |t|
|
50
|
+
t.pattern = 'test/**/*_test.rb'
|
51
|
+
t.verbose = true
|
52
|
+
t.libs << 'test'
|
53
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'cgi'
|
3
|
+
require 'rexml/document'
|
4
|
+
require 'digest/sha1'
|
5
|
+
|
6
|
+
module BigBlueButton
|
7
|
+
|
8
|
+
# This class provides access to the BigBlueButton API. BigBlueButton
|
9
|
+
# is an open source project that provides web conferencing for distance
|
10
|
+
# education (http://code.google.com/p/bigbluebutton/wiki/API). This API
|
11
|
+
# was developed to the 0.64 version of bbb.
|
12
|
+
#
|
13
|
+
# Sample usage of the API is as follows:
|
14
|
+
# 1) Create a meeting with the create_meeting call
|
15
|
+
# 2) Direct a user to either moderator_url or attendee_url
|
16
|
+
# 3) To force meeting to end, call end_meeting
|
17
|
+
#
|
18
|
+
# Author:: Joe Kinsella (mailto:joe.kinsella@gmail.com)
|
19
|
+
# Copyright:: Copyright (c) 2010 Joe Kinsella
|
20
|
+
# License:: Distributes under same terms as Ruby
|
21
|
+
class BigBlueButtonApi
|
22
|
+
|
23
|
+
# Initializes an instance
|
24
|
+
# base_url:: URL to a BigBlueButton server (defaults to bbb development server)
|
25
|
+
# salt:: Secret salt for this server (defaults to bbb development server)"http://devbuild.bigbluebu
|
26
|
+
def initialize(base_url = 'http://devbuild.bigbluebutton.org/bigbluebutton/api', salt = '639259d4-9dd8-4b25-bf01-95f9567eaf4b', debug=false)
|
27
|
+
@session = {}
|
28
|
+
@base_url = base_url
|
29
|
+
@salt = salt
|
30
|
+
@debug = debug
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns url to login as moderator
|
34
|
+
# meeting_id:: Unique identifier for the meeting
|
35
|
+
# user_name:: Name of the user
|
36
|
+
# password:: Moderator password for this meeting
|
37
|
+
def moderator_url(meeting_id, user_name, password)
|
38
|
+
attendee_url(meeting_id, user_name, password)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns url to login as attendee
|
42
|
+
# meeting_id:: Unique identifier for the meeting
|
43
|
+
# user_name:: Name of the user
|
44
|
+
# password:: Attendee password for this meeting
|
45
|
+
def attendee_url(meeting_id, user_name, attendee_password)
|
46
|
+
get_url(:join, {:meetingID=>meeting_id,:password=>attendee_password, :fullName=>user_name})
|
47
|
+
end
|
48
|
+
|
49
|
+
# Creates a new meeting. Throws BigBlueButtonException on failure.
|
50
|
+
# meeting_id:: Unique identifier for the meeting
|
51
|
+
# meeting_name:: Name for the meeting
|
52
|
+
# moderator_password:: Moderator password
|
53
|
+
# attendee_password:: Attendee password
|
54
|
+
# welcome_message:: Welcome message to display in chat window
|
55
|
+
# dialin_number:: Dial in number for conference
|
56
|
+
# logout_url:: URL to return user to after exiting meeting
|
57
|
+
def create_meeting(meeting_id, meeting_name, moderator_password, attendee_password,
|
58
|
+
welcome_message = nil, dialin_number = nil, logout_url = nil, max_participants = nil)
|
59
|
+
|
60
|
+
send_api_request(:create, {:name=>meeting_name, :meetingID=>meeting_id,
|
61
|
+
:moderatorPW=>moderator_password, :attendeePW=>attendee_password,
|
62
|
+
:welcome=>welcome_message, :dialNumber=>dialin_number,
|
63
|
+
:logoutURL=>logout_url, :maxParticpants=>max_participants} )
|
64
|
+
end
|
65
|
+
|
66
|
+
# Ends an existing meeting. Throws BigBlueButtonException on failure.
|
67
|
+
# meeting_id:: Unique identifier for the meeting
|
68
|
+
# moderator_password:: Moderator password
|
69
|
+
def end_meeting(meeting_id, moderator_password)
|
70
|
+
send_api_request(:end, {:meetingID=>meeting_id,:password=>moderator_password} )
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns true or false as to whether meeting is open. A meeting is
|
74
|
+
# only open after at least one participant has joined.
|
75
|
+
# meeting_id:: Unique identifier for the meeting
|
76
|
+
def is_meeting_running(meeting_id)
|
77
|
+
doc = send_api_request(:isMeetingRunning, {:meetingID=>meeting_id} )
|
78
|
+
running = doc.root.get_text('/response/running').to_s
|
79
|
+
running == "true"
|
80
|
+
end
|
81
|
+
|
82
|
+
# Warning: As of this version of the gem, this bbb call does not work
|
83
|
+
# (instead of returning XML response, joins meeting).
|
84
|
+
#
|
85
|
+
# Joins a user into the meeting using an API call, instead of
|
86
|
+
# directing the user's browser to moderator_url or attendee_url
|
87
|
+
# (note: this will still be required however to actually use bbb).
|
88
|
+
# Returns the URL a user can use to enter this meeting.
|
89
|
+
# meeting_id:: Unique identifier for the meeting
|
90
|
+
# user_name:: Name of the user
|
91
|
+
# password:: Moderator or attendee password for this meeting
|
92
|
+
def join_meeting(meeting_id, user_name, password)
|
93
|
+
send_api_request(:join, {:meetingID=>meeting_id, :password=>password,
|
94
|
+
:fullName=>user_name, :redirectImmediately=>0} )
|
95
|
+
doc.root.get_text('/response/entryURL').to_s
|
96
|
+
end
|
97
|
+
|
98
|
+
# Returns a REXML::Document object containing the meeting information.
|
99
|
+
# See the API documentation for details on the return XML
|
100
|
+
# (http://code.google.com/p/bigbluebutton/wiki/API).
|
101
|
+
#
|
102
|
+
# meeting_id:: Unique identifier for the meeting
|
103
|
+
# password:: Moderator password for this meeting
|
104
|
+
def get_meeting_info(meeting_id, password)
|
105
|
+
send_api_request(:getMeetingInfo, {:meetingID=>meeting_id, :password=>password} )
|
106
|
+
end
|
107
|
+
|
108
|
+
protected
|
109
|
+
|
110
|
+
def get_url(method, data)
|
111
|
+
base_url = "#{@base_url}/#{method}?"
|
112
|
+
params = ""
|
113
|
+
data.each {|key, value|
|
114
|
+
params += key.to_s + "=" + CGI.escape(value.to_s) + "&" unless key.nil? || value.nil?
|
115
|
+
}
|
116
|
+
checksum = Digest::SHA1.hexdigest(params.chop + @salt)
|
117
|
+
"#{base_url}#{params}checksum=#{checksum}"
|
118
|
+
end
|
119
|
+
|
120
|
+
def send_api_request(method, data = {})
|
121
|
+
url = get_url(method, data)
|
122
|
+
res = Net::HTTP.get_response(URI.parse(url))
|
123
|
+
puts "BigBlueButtonAPI: URL=#{url}" if @debug
|
124
|
+
puts "BigBlueButtonAPI: URL response=#{res.body}" if @debug
|
125
|
+
doc = REXML::Document.new(res.body)
|
126
|
+
return_code = doc.root.get_text('/response/returncode')
|
127
|
+
message = doc.root.get_text('/response/message')
|
128
|
+
unless return_code == "SUCCESS"
|
129
|
+
raise BigBlueButtonException.new("BigBlueButton error: #{message}")
|
130
|
+
end
|
131
|
+
doc
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
class BigBlueButtonsException < Exception
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bigbluebutton
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Joe Kinsella
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-13 23:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Provides an interface to the BigBlueButton web meeting API (http://code.google.com/p/bigbluebutton/)
|
22
|
+
email: joe.kinsella@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- README
|
29
|
+
- LICENSE
|
30
|
+
files:
|
31
|
+
- LICENSE
|
32
|
+
- README
|
33
|
+
- Rakefile
|
34
|
+
- lib/bigbluebutton.rb
|
35
|
+
has_rdoc: true
|
36
|
+
homepage: http://www.brownbaglunch.com/bigbluebutton
|
37
|
+
licenses: []
|
38
|
+
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 0
|
50
|
+
version: "0"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.3.6
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: Provides an interface to the BigBlueButton web meeting API (http://code.google.com/p/bigbluebutton/)
|
65
|
+
test_files: []
|
66
|
+
|