Archivo

Posts Tagged ‘API’

Comentarios de Facebook (Social Plugin) Administrables

Para poder agregar comentarios de facebook con la posibilidad de moderarlos, es necesario
1.- Crear una aplicación de facebook , lo puedes hacer en éste link:
http://developers.facebook.com/setup/

Ahi pedirá El nombre de la aplicacion o sitio, la url (en mi caso http://estebanfuentealba.net? el «?» permitirá incrustar los comentarios en cualquier dirección del dominio ).

Después nos pedirá un codigo de seguridad y por ultimo nos entregará los datos de la app y un codigo de muestra.

De esos datos necesitaremos la identificación de aplicación.
Para agregar los comentarios a las páginas es necesario los siguientes códigos:

  1. Agregar al tag el siguiente codigo:
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="es" lang="es"> 
  2. En la cabecera de la página agregar :
    <meta property="fb:app_id" content="APPID" />

    Ejemplo:

    <meta property="fb:app_id" content="207075379302808" />
  3. En el cuerpo:
    <div id="fb-root"></div>
    		<script src="http://connect.facebook.net/es_ES/all.js#appId=APPID&amp;xfbml=1"></script>
    		<fb:comments href="URL" num_posts="10" width="500"></fb:comments>
    	 

    Ejemplo:

    <div id="fb-root"></div>
    		<script src="http://connect.facebook.net/es_ES/all.js#appId=207075379302808&amp;xfbml=1"></script>
    		<fb:comments href="http://estebanfuentealba.net/facebookComentario" num_posts="10" width="500"></fb:comments>

Quedará algo asi:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="es" lang="es"> 
	<head profile="http://gmpg.org/xfn/11"> 
		<meta property="fb:app_id" content="207075379302808" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
		<title>FB Comentarios</title>
	</head>
	<body>
		<div id="fb-root"></div>
		<script src="http://connect.facebook.net/es_ES/all.js#appId=207075379302808&amp;xfbml=1"></script>
		<fb:comments href="http://estebanfuentealba.net/facebookComentario" num_posts="10" width="500"></fb:comments>
	</body>
</html>

Demo: http://estebanfuentealba.net/facebookComentario/

Para administrar los comentarios,agregar modedadores, agregar filtros,etc. es posible hacerlo en la misma página que se agregaron los comentarios (Configuración) o en http://developers.facebook.com/tools/comments

Saludos!

Creando Un mini WebService en PHP -> JSON-JSONP

Bueno hoy un poco aburrido hice este pequeño código en PHP para crear un mini WebService JSON-JSONP con base de datos ya creadas.

Para eso usaré una clase muy buena para la Base de datos «mysql-database-class-wrapper«. Para esa clase hice una función que consulta, y los resultados  los muestra como JSON o JSONP, acá la «function»:

#-#############################################
# autor: Esteban Fuentealba
# description: Con esta funcion podrás consultar y devolver el resultado en JSON
# params: Consulta SQL, nombre del callback
# returns: JSON
function query2JSON($sql,$callback='') {
	$rows = $this->fetch_all_array($sql);
	$total_rows=count($rows);
	$i=0;
	$str=$callback."({\r\n\tstatus: \"".(($this->query_id != 0) ? 1 : 0)."\",\r\n\titems: [";
	foreach($rows as $k){
		$j=0;
		$total_colums = count($k);
		$str .= "\r\n\t\t{ ";
		foreach($k as $key => $val) {
			$str .= $key." : \"".$val."\"";
			$j++;
			if($j<$total_colums) $str .= ",";
		}
		$str .= " }";
		$i++;
		if($i<$total_rows) $str .= ",";
	}
	$str .="\r\n\t]\r\n})";
	return $str;
}

Con la clase DataBase.class.php lista ahora vamos a nuestra base de datos y creamos una nueva tabla

CREATE TABLE Method (
			name	VARCHAR(100) PRIMARY KEY,
			tabla	VARCHAR(100),
			sentence	TEXT
		);

Ésta tabla guardará todos los métodos de nuestro WS casero xD.

Ahora vamos con el codigo en PHP , este archivo recibirá los parámetros por el metodo GET y me mostrará los resultados en JSON.

<?PHP
	//###
	//	@Autor	: 	Esteban Fuentealba
	//	@Url	:	https://estebanfuentealba.wordpress.com/
	//	@Email	:	mi [dot] warezx [at] gmail [dot] com
	// Ejemplo:		api.php?method=user.getNombre&id=<rut>
	//###

	//## Configuracion de la Base de datos
	require_once 'config.inc.php';
	//## Clase Base de Datos
	require_once 'class/Database.class.php';
	//## Obtengo los parametros pasados por el metodo GET
	$params	= $_GET;
	//## Si los parametros son mas de 0
	if(count($params) > 0) {
		//## Creo un objeto de Base de datos, con los parametros de configuración
		$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
		$db->connect();
		/*
			CODE
			200 OK
			202	OK pero sin resultados
			404	Method no existe
			405 ERROR Method nombre
		*/
		if($params['method']) {
			/*
				## Corto el parametro method en '.' y asi obtengo:
					- [0] 	nombre de la Tabla
					- [1]	nombre del WebService
			*/
			$data = explode('.',$params['method']);
			if(count($data) == 2) {
				//## Compruebo si el metodo del WS existe en la base de datos
				$rows = $db->query_first("SELECT * FROM Method WHERE tabla='".$data[0]."' AND name='".$data[1]."'");
				if($rows['sentence']) {
					//## Busco y reemplazo los parametros {ejemplo} por los parametros pasados por metodo GET
					preg_match_all('#\{(.[^\}]+)\}#',$rows['sentence'],$r);
					$sentenceSQL = $rows['sentence'];
					foreach($r[1] as $param) {
						$sentenceSQL = str_replace('{'.$param.'}',(is_numeric($params[$param])) ? ((int)$params[$param]) : "'".$db->escape($params[$param])."'",$sentenceSQL);
					}
					if($db->affected_rows>0) {
						//## Consulto la bd segun la sentencia y los resultados los muestro como JSON
						echo $db->query2JSON($sentenceSQL,$params['callback']);
					} else {
						echo '{ status :"ok",code: 202 }';
					}
				} else {
					echo '{ status :"error",code: 406 }';
				}
			} else {
				echo '{ status :"error",code: 405 }';
			}
		} else {
			echo '{ status :"error",code: 404 }';
		}
		$db->close();
	}
?>

Con eso ya podemos Usar nuestro WebService. la forma de uso es la siguiente:
Ejemplo:

api.php?method=tabla.nombreMethod&param1=valor1&callback=holaMundo

Ahora dejaré 3 archivos que hice para testear y agregar WebServices (Usenlos solo para Agregar metodos a los WS y luego los eliminan ya que no están validadas ni limpiadas las consultas)

Primero dejo este archivo PHP que agregara los WS a nuestra base de datos
Archivo: addApi.php

<?PHP
	require_once 'config.inc.php';
	require_once 'class/Database.class.php';
	$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
	$db->connect();
	$name			= $_POST['name'];
	$tabla			= $_POST['tabla'];
	$query			= $_POST['query'];
	$in['name'] 	= $name;
	$in['tabla']	= $tabla;
	$in['sentence']	= $query;
	$db->query_insert('Method',$in);
	$db->close();
?>

Ahora les dejo el archivo que testea las consultas:
Archivo: queryTest.php

<?PHP
	require_once 'config.inc.php';
	require_once 'class/Database.class.php';
	$sql	= $_GET['query'];
	$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
	$db->connect();
	echo $db->query2JSON($sql);
	$db->close();
?>

y por ultimo la pagina con el formulario para crear los webservice

<html>
<head>
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
	<script type="text/javascript">
		$(function() {
			getSQL("SHOW TABLES","json",function(data) {
				$.each(data.items,function(i,it) {
					if(it.Tables_in_api != 'method') {
						$('<option>').attr('value',it.Tables_in_api).append(
							it.Tables_in_api
						).appendTo(
							$('#tables')
						);
					}
				});
			});
			$('#tables').change(function() {
				var thisTable = $(this).val();
				if(thisTable != "-1") {
					var sql = 'SELECT ';
					var fields = new Array();
					getSQL("DESC "+thisTable,"json",function(data) {
						$.each(data.items,function(i,it) {
							fields.push(it.Field);
						});
						sql += fields+" FROM "+thisTable;
						$('#query').val(sql);
					});
				}
			});
			$('#query').keyup(function(event) {
				var url = $('#query').val();
				var re  = /\{(.[^\}]+)\}/g;
				var match;
				var html = $('<fieldset>').append('Parametros:').attr('id','parametros');
				while (match = re.exec(url)) {
					$('<div>').append(
						match[1]+" "
					).append(
						$('<input>').attr('type','text').attr('id','{'+match[1]+'}')
					).appendTo(html);
				}
				$('#params').html(html);
			});
			$('#qTest').click(function() {
				var sql = $('#query').val();
				$.each($('#parametros :input'),function(i,item) {
					sql = sql.replace($(this).attr('id'),$(this).val());
				});
				getSQL(sql,"html",function(data) {
					$('#out').html(data);
				});
			});
			$('#qAdd').click(function() {
				$.post('addApi.php',{
									name: $('#name').val(),
									tabla: $('#tables').val(),
									query: $('#query').val()
				},function(data) {
					$('#boxB').html('OK').hide('slow');
				});
			});
			$('#name').blur(function() {
				getSQL("SELECT * FROM Method WHERE name='"+$(this).val()+"' and tabla='"+$('#tables').val()+"'","json",function(data) {
					if(data.items.length > 0) {
						alert('Method ya existe');
						$('#name').val('');
					}
				});
			});
		});
		function getSQL(sql,type,callback) {
			$.ajax({
				type: "GET",
				url: 'queryTest.php',
				data: 'query='+sql,
				dataType: type,
				success: callback
			});
		}
	</script>
</head>
<body>
<form>
	<fieldset>
		WebService Name:
		<select id="tables">
			<option value="-1">Tablas:</option>
		</select>.<input type="text" id="name" />
	</fieldset>
	<fieldset>
		WebService Query:
		<textArea id="query" style="width: 100%; height: 50px;"></textArea>
	</fieldset>
	<div id="params"></div>
	<input id="qTest" type="button" value="Test Query" />
	<input id="qAdd" type="button" value="Agrega WebService" />
</form>
<div id="box">
	<textArea id="out" style="width: 100%; height: 500px;"></textArea>
</div>
<div id="boxB"></div>
</body>
</html>

Acá les dejo una ScreenShot del sistema montado en mi netbook.

Selecciono la tabla, le agrego un nombre a mi Method , ingreso la consulta SQL y testeo. La consulta SQL puede tener Parametros , ejemplo en la ScreenShot definí un parametro entre llaves {id}, ese parametro lo asignaré cuando llame al WebService api.php.Dejo el Ejemplo de la llamada al WebService en la siguiente Imagen:

En la tabla user tenía 2 registros la id=1 pertenece al usuario caca Bueno ese es un ejemplo básico, ustedes pueden darle el uso que quieran.

Espero que les sirva esta pequeña aplicación. solo es una idea y la primera versión, debe tener muchos errores pero si alguien quiere aportar con alguna idea o mejora estará bien.

Saludos!.

Demo WebService :

Codigo de Fuente WebService: Webservice.EstebanFuentealba.rar

Categorías: PHP Etiquetas: , , , , , , ,

Servicios para Twitter [Noticias / ChileComparte.cl ]

Dias sin escribir, plagado con proyectos ,certámenes y trabajos xD …

Y vuelvo para presentar estos 3 servicios que hice en PHP con la API de Twitter

Las 2 Primeras son para mantenerse informado minuto a minuto, con las noticias de Radio Cooperativa y CNN Chile

Links:

Noticias Cooperativa: http://twitter.com/coperativa_news

Noticias CNN Chile: http://twitter.com/cnn_chile_news

 

El ultimo servicio es para ver los últimos temas de ChileComparte sección Mp3z

Link:

ChileComparte Mp3z: http://twitter.com/chilecompartemp

 

Saludos!

Imeem.com [ PHP + Imeem API = Buscador de Mp3s ]

Bueno aqui un codigo para hacer un buscador de mp3s usando la api de una red social donde se pueden almacenar distintos archivos multimedia, en este caso buscaremos mp3s alojados en imeem.com.

1).- Debemos registrarnos en esa web, es gratuito y solo tenemos que entrar AQUI y rellenar los datos.

2).- Ya registrados podremos entrar al programa DEVELOPERS donde solo debemos CREAR una aplicacion , llenar los campos con el nombre de la aplicacion, si es para paginas externas o para la red social ( elegimos externas ) y subir un icono.

3).- Al crearnos nuestra Aplicacion , nos entregara un codigo API KEY y Secret , Estos datos seran necesarios para poder correr la aplicacion ( Es parecido a la API de Facebook ).

4).- Con eso ya estamos listos para empezar a crear nuestro codigo. Imeem cuenta con una CONSOLA para testear las consultas de los metodos disponibles, para nuestro fin ocuparemos el metodo «mediaSearch» que recibe los parametros :

query La Busqueda que deceamos.
mediaType El tipo multimedia que puede ser music, video, o photo.
offset Es algo para la paginacion, por defecto es 0
numResults Numero de resultados que retorna, maximo 100.

Adiferencia de facebook, Imeem no cuenta con una Libreria PHP para la conexion con la web, por lo que nosotros tendremos que crear una. Para eso usaremos la Clase Sockets que postie hace unos dias atrás, esta servia para conectarse con paginas remotas usando PHP.

Debemos obtener la pagina:


http://www.imeem.com/api/xml/mediaSearch?&query=<query>&mediaType=<mediaType>&offset=<offset>&numResults=<numResults>&version=1.0&apiKey=<apikey>&sig=<sig>

Tenemos Casi todos los datos, solo nos falta el parametro sig «signature«, ese tenemos que conseguirlo de la siguiente manera:

Cada imeem API solicitud debe ser autenticada mediante el suministro de los siguientes parámetros:

sig = La firma se construye de acuerdo con el siguiente algoritmo: Todos los parámetros de la petición son el formato como una cadena en forma arg=val, ordenados alfabéticamente por el argumento, y concatenados. La cadena resultante es entonces el prefijo con el nombre de método y postfixed con el secreto. Por último un hash md5 se genera para la cadena. El hash md5 se convierte en la firma parámetro que se envía con la solicitud.

Al abrir la url con los datos requeridos nos respondera con un xml que contiene el codigo de la peticion mas todos los items de resultados a la busqueda. Un item contiene todos estos datos:

<type>El tipo de Multimedia</type>
<title>Titulo del Mp3</title>
<artist>Artista del Mp3s</artist>
<album/>
<description/>
<genre>El genero Musical</genre>
<duration>Duracion en segundos</duration>
<isSample>Bolean si es un sample</isSample>

<iconUrl>
Un Icono del Mp3s
</iconUrl>
<musicEmbedUrl>Una Url con el Flash+mp3 Listo para escuchar</musicEmbedUrl>
ETC …

Aqui podemos usar algun Xml Parse para extraer la informacion mas facilmente o hacerlo manualmente usando expresiones regulares.

Aqui les dejo el Codigo:

sk_write("GET ".$api_url." HTTP/1.1\r\nHost: www.imeem.com\r\nConnection: close\r\n\r\n");
//Pondremos una variable para solo capturar el cuerpo de la pagina y no las cabeceras
$Nocabeceras = false;
$contenido_web = '';
while (!feof($s-&gt;sk_fp()))
{
//leimos la respuesta del servidor a nuestra peticion
$contenido = $s-&gt;sk_get();
if ($Nocabeceras) { $contenido_web .= $contenido; }
if ($contenido == "\r\n") { $Nocabeceras = true; }
}
//imprimimos el contenido
echo $contenido_web;
$s-&gt;sk_close();
} else {
echo 'ERROR: No Pudo Conectar';
}
?&gt;

Aqui un ejemplo que hice con este mismo codigo pero ocupando simplexml

Ejemplo: Click aqui para ver el ejemplo.

Saludos, espero que les sirva.

pd: la clase SocketsClass.php la pueden sacar de AQUI

Categorías: PHP Etiquetas: , ,