AddThis Social Bookmark Button
AddThis Feed Button
Bio
Mi avatar Blog de un pequeño informaticú y sus ocurrencias y pequeñas notas de ayuda.
IMGP9800
IMGP9799
IMGP9798
IMGP9797
IMGP9796
Categorias
links
12
May

Enlaces para enviar a las Comunidades

(QR Code)

PHP

Ahora que en la Web 2.0 se han puesto de moda las comunidades de promoción de noticias, todos tenemos que dejar de una manera accesible al usuario la posibilidad de enviar el permalink de nuestra web.

Por lógica también seria útil poder situarlos en nuestro RSS así que crearemos una función que genere el acceso a estos servicios sin repetir código.


Ahora solo faltaría hace la llamada a esa función donde queráis que se incluyan nuestros enlaces. Estos ya están preparados para enviar correctamente, y los iconos podéis copiarlos de esta misma web, con click derecho / guardar imagen como…

Espero que os sea de utilidad.


24
Abr

Como crear un RSS para tu página (y II)

(QR Code)

RSS
Ahora solo falta saber como generaríamos este código XML desde nuestra web de manera automática. Para ello utilizaremos PHP conectado a nuestra base de datos de MySQL (Voy a ponerlo lo mas genérico posible, cada uno, incluido yo, tenemos nuestras funciones de acceso a base de datos, pero así todo el mundo podrá verlo de manera clara).

\r\n Para empezar, el archivo será un .php para que el servidor ejecute nuestro código, pero para ello necesitamos engañar al navegador cambiando el content type del archivo, para que una vez ejecutado se interprete como XML y no como XHTML o HTML.


header("Content-type: text/xml; charset=ISO-8859-1",true);
print "";
?>

Inmediatamente después, comenzaríamos rellenando la información del channel manualmente excepto el <pubDate> que puede automatizarse. La parte interesante llega con los <item>. Haremos una consulta que nos devuelva las ultimas 25 entradas de nuestra página (esta os toca hacerla a vosotros, ya que cada modelo de datos es diferente, y no funcionaria una en general). Será del estilo a esta:


SELECT * FROM POSTS ORDER BY POSTID DESC LIMIT 0,25

Ahora utilizaremos esa consulta para recorrer los resultados generando un <item> por cada fila que nos devuelva. Para ello usaremos la conexión entre PHP y MySQL.\r\n


// Objeto de Conexión
$conexion = mysql_pconnect(\’RUTA_SERVIDOR\’,\’USUARIO\’,\’CONTRASEñA\’);
mysql_select_db(\’NOMBRE_BD\’,$conexion) or die(mysql_error());

// Ejecutar la consulta ($consulta contiene la consulta SQL citada anteriormente)

$resultado = mysql_query($consulta) or die(mysql_error());
// Mientras $resultado siga devolviendo filas creamos un
while ($fila=mysql_fetch_array($resultado)) {
?>

http://www.web.com/index.php?p= AUTOR<AUTORl@web.com>
http://web.com/index.php?p=

]]>

}

?>

Como ya avise antes, hay que tener cuidado con las con las fechas del <pubDate>, para eso utilizo una función que me paso Feeddubas que soluciona ese problemilla convirtiendo la fecha al formato de RFC 822 válido.


function makeDate($date) {
$dm=explode(\’ \’,$date);
$f=explode(\’-\’,$dm[0]);
$h=explode(":",$dm[1]);
return mktime($h[0],$h[1],$h[2],$f[1],$f[2],$f[0]);
}

Con esto ya tendríais la base de vuestro RSS, otras cosas que podéis añadirle, es controlar si se introducen valores por $_GET (rss.php?c=1) para tener RSS que filtre por categorías. Eso ya os lo dejo a vuestro criterio.


20
Abr

Como crear un RSS para tu página (I)

(QR Code)

RSS
Mucha gente que se hace su propia web o blog, independientemente de cual sea su motivo, querrá disponer de los servicios habituales de una web o un blog convencional. Estas utilidades de las que disponen los CMS, son ya casi imprescindibles para el correcto uso y disfrute de las mismas, y por tanto renunciar a un CMS no puede significar renunciar a estos servicios.

Una de las utilidades más necesarias para cualquier página es el RSS o feed. Para los no iniciados, el feed es un documento en formato XML que contiene información, titulares y noticias de una web, de manera que cada vez que se actualiza, el feed también lo hace. Existen muchos programas cuyo propósito es gestionar estos feeds. Es una buena manera de estar al día con las páginas / blogs / planets que sigues habitualmente sin tener que abrirlas todas, y siempre puedes acceder desde ellos a esa noticia / post en concreto para comentar (en el caso de que se pueda) o ver la pagina en tu navegador habitual.

Como se citó anteriormente, el formato de éste documento es XML, por tanto tendremos que ceñirnos a una referencia para que este documento sea standard y así nadie tenga problemas con él, ampliando un poco mas la accesibilidad de nuestra página / blog. Además, la familia de los feeds se divide en dos escuelas mayoritarias, el RSS (0.x, 1.0 y 2.0) y Atom (1.0). Este último nació para tratar de unificar el RSS o RDF y ha acabo siendo un nuevo modelo pese a seguir en desarrollo.

Nosotros vamos a centrarnos en el más común y en principio preferido por la mayoría de los desarrolladores, el RSS 2.0 . Lo primero que tenemos que entender es la estructura básica de nuestro XML.











Este seria el orden habitual de creación del XML para un RSS. Para poder utilizar la mayoría de estas etiquetas, es necesario especificar una serie de doctypes que proveerán al documento de significado. Los más habituales son estos:

xmlns:Sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/" >

Ahora, vamos a ver para qué son las etiquetas. Comenzamos con <channel>, que es un meta-elemento, es decir, va a proporcionar información sobre el feed y sobre la web a la que pertenece. Todos sus subitems estarán relacionados con dicha información.

El siguiente elemento mas importante es <item>, y deberá haber uno completo por cada entrada que se quiera enviar vía RSS. Por lo general entre 5 y 25 entradas. Lo que identifica a un <item> es su <guid>, que es un identificador único que servirá a los agregadores para saber si hay elementos nuevos, además del <pubDate> del <channel>. Si el <guid> ya existe, el agregador lo ignorará (esto es importante de cara a las modificaciones de una entrada).

Hay que tener en cuenta, que el <pubDate> no admite nada mas que fechas en formato RFC 822, por tanto tal vez debamos crearnos una función que devuelva el valor almacenado en ese formato más específico.

La <image> esta formada por tres subitems, <url> (el src de la imagen), <link> (la URL a la que apunta la imagen) y <title> (el texto alternativo o alt). Estos subitems se renderizan en un equivalente al <a href="link"><img src="url" alt="title" /></a>.

Y con ésto ya quedaría claro que es un RSS… En el proximo artículo lo generaremos con PHP y MySQL.

To be continued…


12
Sep

Crear plugins para Windows Live! Writer

(QR Code)

Crear un plugin para Windows Live! Writer puede resultar muy sencillo. Existen dos formas de crear los plugins, una “Simple” donde simplemente mostramos un dialogo donde pedimos los datos que queramos y después creamos el HTML y otro método mas complejo en el cual además proveemos un control para poder editar el contenido que hemos insertado.

Hoy voy a explicar como hacer el plugin más simple. Solo hemos de empezar creando una Biblioteca de clases de .NET, Windows Live! Writer acepta vb.net y c# tanto sobre .NET 1.1 como 2.0 para los plugins

A este proyecto hemos de importarle el ensamblado WindowsLive.Writer.Api.dll que se encuentra el la carpeta de nuestra instalación de Windows Live! Writer e importar el espacio de nombres WindowsLive.Writer.Api, con esto ya tenemos todo listo para empezar a trabajar

 

  1. using System.Windows.Forms;
  2. using WindowsLive.Writer.Api;
  3. namespace HelloWorldPlugin{
  4. [WriterPlugin("605EEA63-B54B-4e6d-A290-F5E9E8229FC1", "Simple Hola Mundo",
  5. ImagePath = "Imagenes.icono.png",
  6. PublisherUrl = "http://www.dubasdey.com",
  7. Description = "Escribe un mensaje en h2.")]
  8. [InsertableContentSource( "Simple Hola Mundo" )]
  9. public class SimpleHelloWorldPlugin : ContentSource{
  10. public SimpleHelloWorldPlugin(){}
  11. public override DialogResult CreateContent(IWin32Window dialogOwner, ref string newContent){
  12. // Creamos el dialogo HelloWorldInsertForm, que contiene
  13. // una caja de texto y la propiedad Message para obteber su valor
  14. HelloWorldInsertForm insertForm = new HelloWorldInsertForm();
  15. DialogResult result = insertForm.ShowDialog();
  16. if(result==DialogResult.OK){ // Si el resultado es OK creamos el contenido
  17. newContent = "<h2>" + insertForm.Message + "</h2>";
  18. }
  19. return result;
  20. }
  21. }
  22. }

 

 

Bien lo primero que vemos en el código son una serie de atributos entre corchetes.
El primero, WriterPlugin, se usa para especificar que es un plugin de WindowsLive.Writer asi como una serie de propiedades del mismo. La primera cadena corresponde a un GUID que identificara &úacute;nicamente al plugin (cada plugin tiene que tener su GUID), después tenemos el nombre del plugin, que es el nombre que tendrá a la vista, la siguiente cadena corresponde a la ruta (dentro del ensamblado) de una imagen PNG de 20×18 píxeles insertada como recurso incrustado que se usara como icono del plugin, los siguientes dos textos corresponden a una URL y una descripción para el Plugin.

 

El siguiente atributo InsertableContentSource solo lleva el nombre del plugin y sirve para indicar que el plugin pertenece a un contenido insertable.

 

Lo siguiente que necesitamos despues de añadir estos atributos a nuestra clase es que la clase herede de ContentSource y sobreescribir como vemos el metodo CreateContent.

 

CreateContent recive 2 parametros, el primero es el manejador de la ventana propietaria, para hacer un dialogo modal a esa ventana y el segundo es un valor de cadena por referencia donde escribiremos el codigo HTML que queramos depositar. Por ultimo el metodo devuelve un DialogResult con el que indicaremos si el usuario acepto las operaciones y cancelo. En esta funcion podremos hacer lo que necesitemos, por ejemplo crear un dialogo para pedir un texto como en el ejemplo y devolver ese texto como Heading 2 reescribiendo la cadena NewContent.