Inicio > PHP > BlackBoard PHP Class [Manipular Información]

BlackBoard PHP Class [Manipular Información]

Bueno hoy hice esta pequeña clase en PHP para ingresar a BlackBoard.
¿ Que puedes Hacer con esta clase ?

– Puedes Conectarte a Blackboard.
– Ver tus ramos.
– Ver cuantos mensajes en Inbox/Enviados
– Muestra los mensajes en Bandeja de entrada

Requerimientos:
– PHP5
– Libreria curl habilitada

¿ Que puedes hacer con esta libreria ?
Se podria crear un archivo php y crear un cron en tu hosting cada X minutos y comprobar si tienes mensajes nuevos, asi estar al día con los mensajes que envian los profesores, etc.

Aca dejo la clase:

<?PHP
require_once 'class/ProtocolHTTP.class.php';
/*
	@Autor: Esteban Fuentealba
	@Email:	mi [dot] warezx [at] gmail [dot] com
	@Web:	https://estebanfuentealba.wordpress.com/
*/
class BlackBoard {
	var $data	= null;
	var $method	= null;
	var $urls	= null;
	function __construct($data) {
		$this->data	= $data;
		$this->method = new ProtocolHTTP();
	}
	function Login() {
		$params = "action=login&remote-user=&new_loc=&auth_type=&one_time_token=&encoded_pw=".base64_encode($this->data['password'])."&encoded_pw_unicode=".base64_encode($this->data['password'])."&user_id=".$this->data['user']."&password=&Login.x=81&Login.y=8";
		$g = $this->method->methodGET($this->data['urls']['login'],null,null);
		$r = $this->method->methodPOST($this->data['urls']['login'],
									$g['cookies'],
									null,
									$params
								);
		$this->data['cookies'] = $r['cookies'];
	}
	function GetSubjects() {
		if(!$this->data['cookies'])
			$this->Login();
		$httpRequest	= $this->method->methodGET($this->data['urls']['index'],$this->data['cookies'],null);
		$elements = $this->CreateDOM($httpRequest['response'],"//a[contains(@href,'frameset.jsp?tab_id=')]");
		$subjects=null;
		foreach ($elements as $element) {
			preg_match_all('#\%26id\%3d(.+)\%26url\%3d#',$element->attributes->item(0)->value,$r);
			$nodes = $element->childNodes;
			foreach ($nodes as $node) {
				$subjects[$r[1][0]] = $node->nodeValue;
			}
		}
		return $subjects;
	}
	function GetInboxMsgs($idSubject) {
		if(!$this->data['cookies'])
			$this->Login();
		$httpRequest	= $this->method->methodGET($this->CreateUrl($this->data['urls']['inbox'],array('id' => $idSubject)),$this->data['cookies'],null);
		$elements = $this->CreateDOM($httpRequest['response'],"//span[contains(@class,'listItem')]");
		$msgs=null;
		$tmp=null;
		$d = array('user','title','date');
		$x=0;
		$i=0;
		foreach ($elements as $element) {
			$val = trim($element->nodeValue);
			if($val != "") {
				$in = $d[$x++];
				$tmp[$i][$in] = $val;
				if($x == 3) {
					$x = 0;
					$i++;
				}
			}
		}
		return $tmp;
	}
	function GetInboxStats($idSubject) {
		if(!$this->data['cookies'])
			$this->Login();
		$httpRequest	= $this->method->methodGET($this->CreateUrl($this->data['urls']['inboxStats'],array('id' => $idSubject)),$this->data['cookies'],null);
		$elements = $this->CreateDOM($httpRequest['response'],"//span[contains(@class,'listItem')]");
		$stats=null;
		$d = array('BandejaEntradaNoLeido','BandejaEntradaTotal','EnviadoNoLeido','EnviadoTotal');
		$i=0;
		foreach ($elements as $element) {
			$value = trim($element->nodeValue);
			if (is_numeric($value)) {
				$stats[$d[$i++]] = $value;
			}
		}
		return $stats;
	}
	function CreateDOM($html,$xp) {
		$webDoc = new DOMDocument();
		@$webDoc->loadHTML($html);
		$xpath = new DOMXpath($webDoc);
		$elements = $xpath->query($xp);
		return $elements;
	}
	function CreateUrl($text,$replaceParams) {
		preg_match_all('#\{(.[^\}]+)\}#',$text,$r);
		$urlCreated = '';
		foreach($r[1] as $param) {
			$urlCreated = str_replace('{'.$param.'}',(is_numeric($replaceParams[$param])) ? ((int)$replaceParams[$param]) : $replaceParams[$param],$text);
		}
		return $urlCreated;
	}
}
?>

USO:

<?PHP
/*
	@Autor: Esteban Fuentealba
	@Email:	mi [dot] warezx [at] gmail [dot] com
	@Web:	https://estebanfuentealba.wordpress.com/
*/
	//## Incluyo la clase
	require_once 'class/BlackBoard.class.php';
	//## Crea una instancia a la clase BlackBoard
	$b = new BlackBoard(
		//## Como parametro se le pasa un array
		array(
			//## El usuario de BlackBoard
			'user'		=>	'es.fuentealba',
			//## La clave del usuario Blackboard
			'password' 	=> 'miclave',
			//## Urls del portal de Blackboard
			'urls'		=> 	array(
								'login'			=>	'http://campusvirtual.duoc.cl/webapps/login/',
								'index' 		=>	'http://campusvirtual.duoc.cl/webapps/portal/tab/_1_1/index.jsp',
								'inboxStats'	=>	'http://campusvirtual.duoc.cl/webapps/blackboard/messaging/course/folderList.jsp?course_id={id}',
								'inbox'			=>	'http://campusvirtual.duoc.cl/webapps/blackboard/messaging/course/messageList.jsp?nav=messages&course_id={id}&folder=inbox'
							)
		)
	);
	//## Obtengo todos los ramos que tengo
	foreach($b->GetSubjects() as $subjectID => $subjectName) {
		echo $subjectID .' => '.$subjectName."<br />";
	}
	//## Obtengo las estadisticas de mensajes nuevos,totales,enviados
	//## Le paso como parametro un subjectID o id de ramo
	print_r($b->GetInboxStats('_45891_1'));
	//## Obtengo los mensajes de entrada de un ramo especifico
	//## Le paso como parametro un subjectID o id de ramo
	print_r($b->GetInboxMsgs('_45891_1'));
?>

Codigo Fuente: BlackBoard.EstebanFuentealba.rar


Espero que les sirva esta clase, pueden editarla o agregarle nuevas funcionalidades,

Saludos!

Categorías:PHP Etiquetas: , , , ,
  1. Pablo Ruiz
    abril 30, 2010 a las 11:23 am

    Muy buen artículo….

    ( Cuando las clases de PHP :P )

    Saludos!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: