Cómo distribuir contenido sin utilizar un feed de noticias

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.

Usando la carga de JQuery ()

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.

Una solución del lado del servidor

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.

¿Por qué usar JQuery??

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..

Imágenes y anclajes

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.

 

Primero seleccionamos todos Los elementos y los recorren, extrayendo el atributo href y luego anteponiéndolo al dominio elegido. También podríamos, si queremos agregar un atributo para abrir todos los enlaces en ventanas nuevas, etc. En segundo lugar, seleccionamos todos Elementos y una vez más ciclo a través de ellos extrayendo el atributo de fuente, etc..

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.

Estilo de nuestro contenido

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