Muchos sitios web ofrecen formatos de sindicación como RSS, JSON o servicios basados en XML para permitir la fácil entrega de contenido. ¿Pero qué sucede cuando un sitio web no ofrece uno de estos servicios? ¿Cómo se distribuye el contenido de un sitio web que no ofrece un servicio de noticias? Esto es lo que me propuse resolver..
Recibí un proyecto últimamente de un cliente con un resumen y resumen del sitio web y los objetivos que desean lograr. Junto con este resumen, había notas que indicaban que eran una compañía de bienes raíces y publicaban regularmente propiedades en un sitio web de bienes raíces bien conocido y deseaban poder distribuir su contenido en este sitio externo en su propio sitio web sin tener que actualizar ambos sitios. El problema: este conocido sitio de bienes raíces no ofrecía un servicio de sindicación o API para que los desarrolladores accedieran a sus listados.
Después de buscar en Internet, descubrí que la mayoría de las soluciones a este problema eran poco elegantes y la mayoría de las veces eran específicas del navegador o ineficaces. Decidí codificar mi propia solución utilizando la popular biblioteca de javascript JQuery.
Para acceder a la información de otro sitio web, necesitaba utilizar las funciones AJAX de la biblioteca JQuery.
Si está familiarizado con JQuery, lo anterior no debería ser demasiado difícil de entender. Estamos utilizando la función de carga AJAX para cargar el contenido de una página web en un elemento con id #content. La solución parecía demasiado fácil, pero lamentablemente el problema, como pronto se dará cuenta, es que el código solo funcionará en Internet Explorer 6 o 7. La razón de esto pronto se hizo evidente: todos los demás navegadores bloquean la carga de sitios web desde dominios alternativos. Debido a la configuración de seguridad local. Esto significa que solo podemos cargar páginas relativas, no URL absolutas.
Busqué una solución a este problema en línea y para mi consternación, la mayoría de las personas tenían la impresión de que no era posible pasar por alto la configuración de seguridad local de la mayoría de los navegadores o era una tarea demasiado complicada que no valía la pena. Esto es cuando descubrí la librería cURL..
cURL es bastante útil porque le permite comunicarse con otros servidores utilizando URL y protocolos web estándar como HTTP, HTTPS o SSL. Usando cURL pude crear un bypass para nuestro problema de seguridad local al cargar en todo el sitio web a un servidor de URL local..
Este código inicia el objeto cURL desde una URL externa: el beneficio es que la URL se carga en el servidor en lugar de en el cliente. La configuración de seguridad del servidor en el entorno PHP es mucho más flexible que la configuración de seguridad local de la mayoría de los navegadores modernos. Después de iniciar el objeto cURL, simplemente imprimimos todo el contenido de la URL. Si ahora guardamos este documento como 'curl.php' en nuestro servidor web, ahora tenemos un archivo local que se cargará en todo el contenido del sitio web de nuestra URL externa..
Volvamos a nuestro código original y pongamos nuestras modificaciones:
Nuestra secuencia de comandos ahora es compatible con todos los navegadores y no se realiza mediante el uso de hacks de seguridad locales poco ortodoxos.
Ahora puede preguntarse cuáles son las ventajas de trabajar con este documento en JQuery en comparación con solo manipular nuestro documento utilizando PHP. La razón principal de mi elección al usar JQuery es la capacidad de usar sus selectores de estilo CSS para elegir el contenido de nuestra página que realmente deseamos sindicar, como lo siguiente:
En lugar de cargar todo el documento, ahora solo cargamos el contenido de un elemento con id #content. Vamos a llegar a los beneficios de esto más adelante en el artículo..
Después de jugar un poco con esto, es posible que note el siguiente gran problema. Aunque hemos logrado sindicar un contenido de sitios externos, todos los enlaces e imágenes relativos ya no funcionan.. Otra razón para trabajar en JQuery.. Usando la función JQuery each () podemos crear un bucle que recorre todos y elementos que capturan el atributo HREF o SRC actual y anteponen el dominio externo en él.
Ahora, el problema en este punto en el que nos encontramos es ¿dónde integramos nuestro nuevo código en nuestro código existente? El problema con el que me topé originalmente era que, sin importar dónde lo pusiera, el marcado externo no se cargó lo suficientemente rápido para que nuestro código cambie el dominio para que entre en vigencia después del hecho. La solución consiste en combinar los dos en una solución JQuery bastante elegante..
$ ("documento"). ready (function () $ ("# content"). load ("curl.php #content", , function () $ ("a"). each (function (i ) Var href = $ (this) .attr ('href'); var new_href = domain + href; $ (this) .attr ('href', new_href););
$ ("img"). each (function (i) var src = $ (this) .attr ('src'); var new_src = domain + src; $ (this) .attr ('src', new_src); ); ); );
La función de carga tiene dos propiedades más que puede tomar, una de ellas son las variables que desea enviar a su URL externa. Por ejemplo, podría estar intentando recuperar datos de los resultados de un formulario POST. La otra propiedad es una función de devolución de llamada o qué hacer una vez que la función load () haya finalizado. En nuestro caso, esto es perfecto: colocamos nuestro código en la función de devolución de llamada que evita que se ejecute hasta que carguemos completamente en nuestra página externa.
Como puede ver ahora, ahora podemos simplemente acceder a cualquier elemento del contenido de nuestra página desde otro sitio web. Esto es muy practico
para no solo distribuir contenido como noticias, sino cualquier contenido actualizado dinámicamente.
Ahora que hemos podido extraer nuestro contenido, el siguiente paso muestra la superioridad en el uso de este código en lugar de decir un
$ ("documento"). ready (function () $ ("# content"). load ("curl.php #content", , function () …
En este caso solo estamos seleccionando un
Ahora vamos a agregar algunos estilos a nuestra página usando CSS.
body, a font-family: 'Tahoma'; color: #fff; color de fondo: # 000; tamaño de fuente: 12px; #content width: 600px; #content small, #content span, #content .more-link display: none; #content img float: left; margen derecho: 5px; #contenido h1
tamaño de fuente: 14px;
Este CSS tiene más que ver con demostrar algunas características importantes que ser estéticamente atractivo. Algunas cosas importantes a tener en cuenta en este momento es que debemos recordar asignar estilos exactamente a las etiquetas que estamos viendo en el estilo - I.E. no peinar todo Etiquetas: solo queremos estilizar los que están en #content Otra cosa que podemos hacer para que nuestro sindicato de noticias ocupe menos espacio en nuestra pantalla es modificar las imágenes. Esto se podría hacer usando CSS, pero en lugar de eso quiero demostrar cómo usar JQuery para modificar la fuente de la imagen. Vamos a modificar nuestra JQuery para usar la función attr () para modificar la fuente de nuestra imagen a una en nuestro propio servidor: un botón de enlace bonito y pequeño. Ahora modifiquemos ligeramente nuestro CSS para hacer que nuestra imagen flote bien hacia la izquierda. Ahora, usando solo el contenido sindicado de la página de inicio de Net Tuts +, hemos logrado crear un sindicato de noticias con un estilo completamente diferente al sitio original. Lo que puede notar cuando usa este código es que a JQuery le lleva un tiempo procesar y cargar el sitio externo. Una buena característica para agregar es una barra de carga para el #contenido La forma más fácil de hacer nuestra barra de carga es colocar una imagen de barra de carga dentro de nuestro #contenido Ahora tenemos una pequeña aplicación que mostrará una imagen de precarga hasta que nuestro contenido esté listo para mostrar.. Si bien el precargador es una buena característica, no reemplaza el código optimizado. En este tutorial, estamos usando JQuery para elegir qué elementos debemos seleccionar o no cuando, de hecho, la solución óptima más rápida sería hacerlo en nuestro código PHP. Esto, sin embargo, está fuera del alcance de este tutorial.. Ahí lo tenemos, una solución simple que utiliza las funciones AJAX de JQuery y la biblioteca cURL de PHP que nos permite distribuir contenido externo. Esta es una solución simple si necesita contenido de un sitio web externo. Como ya he dicho, aunque la sencilla sintaxis de JQuery y los selectores de CSS nos brindan la conveniencia de diseñar y seleccionar lo que queremos del lado del cliente, esto no está optimizado para la velocidad. Lo mejor sería que elimináramos las etiquetas que no deseamos usando Expresiones regulares en PHP. También me gustaría señalar que uno de los errores más comunes es ser demasiado específico en el estilo; recuerde que no tiene control sobre si el creador de contenido cambia las etiquetas y las clases que usan, siempre es mejor diseñar los elementos generales que se usarán comúnmente. Otra cosa que vale la pena tener en cuenta es que este tutorial está destinado a generar un sindicador de contenido; no está diseñado para ser utilizado como "raspador" del contenido del sitio. Si va a implementar esto en un proyecto comercial, asegúrese de tener el permiso del titular de los derechos de autor para usar el contenido de su página.. Modificar imágenes usando JQuery
... $ ("# content img"). Each (function (i) var src = $ (this) .attr ('src'); var new_src = domain + src; $ (this) .attr ('href', new_src);); $ ("# content img"). attr ('src', 'link.png'); ); );
#content img float: left; margen derecho: 5px;
Precargador
...
Mi servicio de sindicación de contenido
... Conclusión