예제 #1
0
    def get_meetings(self, meta=False):
        """
        This call will return a list of all the meetings found on this server.
        """
        call = 'getMeetings'
        query = urlencode((('random', 'random'), ))

        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            # Create dict of values for easy use in template
            all_meetings = []
            meetings = xml[1].findall('meeting')
            for meeting in meetings:
                meeting_id = meeting.find('meetingID').text
                password = meeting.find('moderatorPW').text
                info = yield self.meeting_info(meeting_id, password, meta=meta)
                all_meetings.append({
                    'name': meeting_id,
                    'moderator_pw': password,
                    'attendee_pw': meeting.find('attendeePW').text,
                    'has_been_forcibly_ended': meeting.\
                                find('hasBeenForciblyEnded').text == "true",
                    'running': meeting.find('running').text == "true",
                    'create_time': int(meeting.find('createTime').text),
                    'info': info
                })
            defer.returnValue(all_meetings)
        else:
            defer.returnValue(None)
예제 #2
0
    def check_api(self):
        """
        This call  simply checks whether a bigbluebutton instane is reachable.

        """
        xml = yield get_xml(self.bbb_api_url, self.salt, None, None)
        defer.returnValue(xml)
예제 #3
0
    def get_meetings(self, meta=False):
        """
        This call will return a list of all the meetings found on this server.
        """
        call = 'getMeetings'
        query = urlencode((
            ('random', 'random'),
        ))

        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            # Create dict of values for easy use in template
            all_meetings = []
            meetings = xml[1].findall('meeting')
            for meeting in meetings:
                meeting_id = meeting.find('meetingID').text
                password = meeting.find('moderatorPW').text
                info = yield self.meeting_info(meeting_id, password, meta=meta)
                all_meetings.append({
                    'name': meeting_id,
                    'moderator_pw': password,
                    'attendee_pw': meeting.find('attendeePW').text,
                    'has_been_forcibly_ended': meeting.\
                                find('hasBeenForciblyEnded').text == "true",
                    'running': meeting.find('running').text == "true",
                    'create_time': int(meeting.find('createTime').text),
                    'info': info
                })
            defer.returnValue(all_meetings)
        else:
            defer.returnValue(None)
예제 #4
0
    def check_api(self):
        """
        This call  simply checks whether a bigbluebutton instane is reachable.

        """
        xml = yield get_xml(self.bbb_api_url, self.salt, None, None)
        defer.returnValue(xml)
예제 #5
0
    def meeting_info(self, meeting_id, password, meta=False):
        """
        This call will return all of a meeting's information,
        including the list of attendees as well as start and end times.

        :param meetingID: The meeting ID that identifies the meeting
        :param password: The moderator password for this meeting.
        """
        call = 'getMeetingInfo'
        query = urlencode((
            ('meetingID', meeting_id),
            ('password', password),
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            # Create dict of values for easy use in template
            users = []
            attendees = xml.find('attendees')
            if attendees is not None:
                for attendee in attendees.getchildren():
                    user = {}
                    user['user_id'] = attendee.find('userID').text
                    user['name'] = attendee.find('fullName').text
                    user['role'] = attendee.find('role').text
                    users.append(user)
            metadata_dict = {}
            if meta:
                metadata = xml.find('metadata')
                for data in list(metadata):
                    metadata_dict[data.tag] = decode_json(data.text)

            meeting_info = {
                'meeting_name': xml.find('meetingName').text,
                'meeting_id': xml.find('meetingID').text,
                'create_time': int(xml.find('createTime').text),
                'voice_bridge': int(xml.find('voiceBridge').text),
                'attendee_pw': xml.find('attendeePW').text,
                'moderator_pw': xml.find('moderatorPW').text,
                'running': xml.find('running').text == "true",
                'recording': xml.find('recording').text == "true",
                'has_been_forcibly_ended': xml.\
                                find('hasBeenForciblyEnded').text == "true",
                'start_time': int(xml.find('startTime').text),
                'end_time': int(xml.find('endTime').text),
                'participant_count': int(xml.find('participantCount').text),
                'max_users': int(xml.find('maxUsers').text),
                'moderator_count': int(xml.find('moderatorCount').text),
                'users': users
            }
            if meta and metadata_dict:
                meeting_info.update(metadata_dict)
            defer.returnValue(meeting_info)
        else:
            defer.returnValue(None)
예제 #6
0
    def meeting_info(self, meeting_id, password, meta=False):
        """
        This call will return all of a meeting's information,
        including the list of attendees as well as start and end times.

        :param meetingID: The meeting ID that identifies the meeting
        :param password: The moderator password for this meeting.
        """
        call = 'getMeetingInfo'
        query = urlencode((
            ('meetingID', meeting_id),
            ('password', password),
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            # Create dict of values for easy use in template
            users = []
            attendees = xml.find('attendees')
            if attendees is not None:
                for attendee in attendees.getchildren():
                    user = {}
                    user['user_id'] = attendee.find('userID').text
                    user['name'] = attendee.find('fullName').text
                    user['role'] = attendee.find('role').text
                    users.append(user)
            metadata_dict = {}
            if meta:
                metadata = xml.find('metadata')
                for data in list(metadata):
                    metadata_dict[data.tag] = decode_json(data.text)

            meeting_info = {
                'meeting_name': xml.find('meetingName').text,
                'meeting_id': xml.find('meetingID').text,
                'create_time': int(xml.find('createTime').text),
                'voice_bridge': int(xml.find('voiceBridge').text),
                'attendee_pw': xml.find('attendeePW').text,
                'moderator_pw': xml.find('moderatorPW').text,
                'running': xml.find('running').text == "true",
                'recording': xml.find('recording').text == "true",
                'has_been_forcibly_ended': xml.\
                                find('hasBeenForciblyEnded').text == "true",
                'start_time': int(xml.find('startTime').text),
                'end_time': int(xml.find('endTime').text),
                'participant_count': int(xml.find('participantCount').text),
                'max_users': int(xml.find('maxUsers').text),
                'moderator_count': int(xml.find('moderatorCount').text),
                'users': users
            }
            if meta and metadata_dict:
                meeting_info.update(metadata_dict)
            defer.returnValue(meeting_info)
        else:
            defer.returnValue(None)
예제 #7
0
    def is_running(self, meeting_id):
        """
        This call enables you to simply check on whether or not a meeting is
        running by looking it up with your meeting ID.

        :param meeting_id: ID that can be used to identify the meeting
        """
        call = 'isMeetingRunning'
        match = 'running'
        query = urlencode((('meetingID', meeting_id), ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        defer.returnValue(xml_match(xml, match))
예제 #8
0
    def delete_recordings(self, record_id, publish=False):
        """
        Delete one or more recordings for a given recordID (or set of record IDs).

        :param record_id: A record ID for specify the recordings to delete. It can be a set of
                         meetingIDs separate by commas.
        :param publish: The value for publish or unpublish the recording(s). Available values: True or False.
        """
        call = 'deleteRecordings'
        match = "deleted"
        query = urlencode(
            (('recordID', record_id), 'publish', str(publish).lower()))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        defer.returnValue(xml_match(xml, match))
예제 #9
0
    def is_running(self, meeting_id):
        """
        This call enables you to simply check on whether or not a meeting is
        running by looking it up with your meeting ID.

        :param meeting_id: ID that can be used to identify the meeting
        """
        call = 'isMeetingRunning'
        match = 'running'
        query = urlencode((
            ('meetingID', meeting_id),
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        defer.returnValue(xml_match(xml, match))
예제 #10
0
    def get_recordings(self, meeting_id=u'', meta=None):
        """
        Retrieves the recordings that are available for playback for a given meetingID (or set of meeting IDs).

        :param meetingID: The meeting ID that identifies the meeting
        :param meta: You can pass one or more metadata values to filter the recordings returned
        """
        call = 'getRecordings'
        params = {}
        if meeting_id:
            params.update(dict(meetingID=meeting_id))
        if meta:
            for k, v in meta.iteritems():
                meta_key = "meta_%s" % k
                params.update({meta_key: json.dumps(v)})
        if params:
            query = urlencode((params))
        else:
            query = ''
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        # ToDO implement more keys
        if xml is not None:
            recordings = xml.find('recordings')
            records = []
            for meeting in list(recordings):
                record = {}
                record['record_id'] = meeting.find('recordID').text
                record['meeting_id'] = meeting.find('meetingID').text
                record['meeting_name'] = meeting.find('name').text
                record['published'] = meeting.find('published').text == "true"
                record['start_time'] = meeting.find('startTime').text
                record['name'] = meeting.find('name').text
                record['end_time'] = meeting.find('endTime').text
                metadata = meeting.find('metadata')
                if metadata is not None:
                    for data in list(metadata):
                        record[data.tag] = decode_json(data.text)
                size = meeting.find('size')
                if size is not None:
                    record['size'] = meeting.find('size').text
                playback = meeting.find('playback')
                play_format = playback.find('format')
                record['length'] = play_format.find('length').text
                record['url'] = play_format.find('url').text
                records.append(record)

            defer.returnValue(records)
        else:
            defer.returnValue(None)
예제 #11
0
    def get_recordings(self, meeting_id=u'', meta=None):
        """
        Retrieves the recordings that are available for playback for a given meetingID (or set of meeting IDs).

        :param meetingID: The meeting ID that identifies the meeting
        :param meta: You can pass one or more metadata values to filter the recordings returned
        """
        call = 'getRecordings'
        params = {}
        if meeting_id:
            params.update(dict(meetingID=meeting_id))
        if meta:
            for k, v in meta.iteritems():
                meta_key = "meta_%s" % k
                params.update({meta_key: json.dumps(v)})
        if params:
            query = urlencode((params))
        else:
            query = ''
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        # ToDO implement more keys
        if xml is not None:
            recordings = xml.find('recordings')
            records = []
            for meeting in list(recordings):
                record = {}
                record['record_id'] = meeting.find('recordID').text
                record['meeting_id'] = meeting.find('meetingID').text
                record['meeting_name'] = meeting.find('name').text
                record['published'] = meeting.find('published').text == "true"
                record['start_time'] = meeting.find('startTime').text
                record['name'] = meeting.find('name').text
                record['end_time'] = meeting.find('endTime').text
                metadata = meeting.find('metadata')
                if metadata is not None:
                    for data in list(metadata):
                        record[data.tag] = decode_json(data.text)
                size = meeting.find('size')
                if size is not None:
                    record['size'] = meeting.find('size').text
                playback = meeting.find('playback')
                play_format = playback.find('format')
                record['length'] = play_format.find('length').text
                record['url'] = play_format.find('url').text
                records.append(record)

            defer.returnValue(records)
        else:
            defer.returnValue(None)
예제 #12
0
    def create_meeting(self):
        """
        creates the meeting
        """
        meeting = Meeting(self.bbb_api_url, self.salt)
        is_running = yield meeting.is_running(self.meeting_id)
        if not is_running:
            call = 'create'
            if self.pre_upload_slide is not None:
                self.welcome = (
                    'The presentation will appear in moment.  To download click <a href="%(url)s"></a>.'
                    '<br> %(welcome)s' % {
                        "url": self.pre_upload_slide,
                        "welcome": self.welcome
                    })

            if not self.voice_bridge:
                voicebridge = 70000 + random.randint(0, 9999)
            else:
                voicebridge = self.voice_bridge

            params = dict(
                name=self.meeting_name,
                meetingID=self.meeting_id,
                attendeePW=self.attendee_password,
                moderatorPW=self.moderator_password,
                voiceBridge=voicebridge,
                dialNumber=self.dial_number,
                welcome=self.welcome,
                logoutURL=self.logout_url,
                maxParticipants=self.max_participants,
                duration=self.duration,
                record=self.record,
                moderatorOnlyMessage=self.moderator_only_message,
                autoStartRecording=self.auto_start_recording,
                allowStartStopRecording=self.allow_start_stop_recording)

            if self.meta:
                for k, v in self.meta.iteritems():
                    meta_key = "meta_%s" % k
                    params.update({meta_key: json.dumps(v)})
            query = urlencode((params))
            xml = yield get_xml(self.bbb_api_url, self.salt, call, query,
                                self.pre_upload_slide)
            if xml is not None:
                defer.returnValue(xml)
            else:
                defer.returnValue(None)
예제 #13
0
    def delete_recordings(self, record_id, publish=False):
        """
        Delete one or more recordings for a given recordID (or set of record IDs).

        :param record_id: A record ID for specify the recordings to delete. It can be a set of
                         meetingIDs separate by commas.
        :param publish: The value for publish or unpublish the recording(s). Available values: True or False.
        """
        call = 'deleteRecordings'
        match = "deleted"
        query = urlencode((
            ('recordID', record_id),
            'publish', str(publish).lower()
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        defer.returnValue(xml_match(xml, match))
예제 #14
0
    def end_meeting(self, meeting_id, password):
        """
        Use this to forcibly end a meeting and kick all participants out of the meeting.

        :param meetingID: The meeting ID that identifies the meeting you are attempting to end.
        :param password: The moderator password for this meeting.
                         You can not end a meeting using the attendee password.
        """
        call = 'end'
        query = urlencode((
            ('meetingID', meeting_id),
            ('password', password),
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            defer.returnValue(xml)
        else:
            defer.returnValue(None)
예제 #15
0
    def end_meeting(self, meeting_id, password):
        """
        Use this to forcibly end a meeting and kick all participants out of the meeting.

        :param meetingID: The meeting ID that identifies the meeting you are attempting to end.
        :param password: The moderator password for this meeting.
                         You can not end a meeting using the attendee password.
        """
        call = 'end'
        query = urlencode((
            ('meetingID', meeting_id),
            ('password', password),
        ))
        xml = yield get_xml(self.bbb_api_url, self.salt, call, query)
        if xml is not None:
            defer.returnValue(xml)
        else:
            defer.returnValue(None)
예제 #16
0
    def create_meeting(self):
        """
        creates the meeting
        """
        meeting = Meeting(self.bbb_api_url, self.salt)
        is_running = yield meeting.is_running(self.meeting_id)
        if not is_running:
            call = 'create'
            if self.pre_upload_slide is not None:
                self.welcome = ('The presentation will appear in moment.  To download click <a href="%(url)s"></a>.'
                            '<br> %(welcome)s' % {"url": self.pre_upload_slide,
                                                  "welcome": self.welcome})

            if not self.voice_bridge:
                voicebridge = 70000 + random.randint(0, 9999)
            else:
                voicebridge = self.voice_bridge

            params = dict(name=self.meeting_name, meetingID=self.meeting_id,
                      attendeePW=self.attendee_password, moderatorPW=self.moderator_password,
                      voiceBridge=voicebridge, dialNumber=self.dial_number,
                      welcome=self.welcome, logoutURL=self.logout_url,
                      maxParticipants=self.max_participants, duration=self.duration,
                      record=self.record, moderatorOnlyMessage=self.moderator_only_message,
                      autoStartRecording=self.auto_start_recording,
                      allowStartStopRecording=self.allow_start_stop_recording)
      
            if self.meta:
                for k, v in self.meta.iteritems():
                    meta_key = "meta_%s" % k
                    params.update({meta_key: json.dumps(v)})
            query = urlencode((params))
            xml = yield get_xml(self.bbb_api_url, self.salt, call, query,
                                self.pre_upload_slide)
            if xml is not None:
                defer.returnValue(xml)
            else:
                defer.returnValue(None)