lunes, 28 de octubre de 2013

Código para crear automáticamente el SiteMap de nuestra página web

No es un secreto ni nada nuevo que para lograr un buen SEO una página debe contar con ciertos elementos técnicos mínimos que, de estar ausentes, le truncan cualquier posibilidad de posicionamiento en Google; entre estos elementos los archivos sitemap.xml y urllist.txt con ya parte estándar del código de cualquier página web pensada para lograr un buen SEO.

Si bien esto no es una novedad como tampoco la existencia de múltiples aplicaciones que nos ayudan a crear el sitemap de manera fácil y rápida, lo que si es un quebradero de cabeza para muchos programadores es mantener al día estos archivos porque si bien es cierto que los mapas del sitio son importantes para el SEO, más relevante aún es la generación de contenidos para las páginas y, conforme aumenta el contenido, también aumenta el número de enlaces, páginas y elementos que deben incluirse en el sitemap y el urllist, es decir, estos archivos deben generarse regularmente para mantenerlos al día y en concordancia con la estructura real de la página, de lo contrario serán inútiles.

Ante esta situación muchos optan por refrescar regularmente tanto el sitemap.xml como el urllist.txt, aunque válido, este método tiene la desventaja de ser inconstante, depender de una o varias personas que podrían olvidarse de hacerlo debido a otras tareas más urgentes y a la vez sobrecarga a los equipos de desarrollo porque hacer un sitemap no es cosa compleja pero cuando la tarea se traslada a 20 o 30 mensuales ya la cosa cambia.

A fin de ayudar a los equipos de programación a mantener al día los sitemap de sus páginas en Tu Web Venezuela hemos desarrollado un código de acceso libre (lo pueden usar cunado gusten, sólo copien y peguen) que hará el trabajo mucho más fácil y rápido.

Sólo debe crearse un archivo llamado autositemap.php el cual guardaremos en una de las carpetas de nuestro sitio web (debe recordarse bien la ruta ya que la usaremos luego); en este archivo copiar y pegar el código que se presenta a continuación y, finalmente, crear un Cron Jobs en nuestro hosting que ejecute el script regularmente; aquí es muy importante recordar la ruta del archivo autositemap.php ya que es indispensable incluirlo en el Cron Jobs para que se ejecute.

La frecuencia con la que se configura el Cron depende de la frecuencia de actualización de la página, en general con ejecutar el script una vez por semana es suficiente para mantener al día y en concordancia con los contenidos de la web tanto el sitemap como el urllist.

En esencia el script funciona de la siguiente manera:

1- Identifica si existe o no archivo sitemap.xml
2- Si no existe crea el archivo
3- Navega por el sitio web realizando "scrapping" y recolectando todos los enlaces
4- Escribe el código del archivo sitemap y lo guarda automáticamente en la carpeta raíz del espacio de hosting
5- Decodifica el sitemap y lo convierte en texto plano
6- Escribe el archivo urllist.txt guardándolo en la carpeta raíz del hosting
7- Concluye operación

Este sencillo script ahorrará horas de trabajo, mantendrá los mapas del sitio web actualizados y no consumirá casi recursos del servidor.

A continuación el código que debe incluirse para implementar el script, es importante sustituir los segmentos de código marcados en amarillo con la información de la página web donde se está implementando el script:

<?
    $file = "sitemap.xml"; // output file
    $url = "http://tusitioweb.com/"; // url to scan  
    $extension = ".php"; // cambiar por .html si la página no está programada en php
    $freq = "monthly"; // google scan frequency
    $priority = "0.5"; // site priority   

function Path ($p)
{
    $a = explode ("/", $p);
    $len = strlen ($a[count ($a) - 1]);
    return (substr ($p, 0, strlen ($p) - $len));
}

function GetUrl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

function Scan($url)
{
    global $scanned, $pf, $extension, $skip, $freq, $priority;
   
    echo "scan url $url\n";

    array_push ($scanned, $url);
    $html = GetUrl ($url);
    $a1 = explode ("<a", $html);

    foreach ($a1 as $key => $val)
    {
$parts = explode (">", $val);
$a = $parts[0];
$aparts = explode ("href=", $a);

$hrefparts = explode (" ", $aparts[1]);
$hrefparts2 = explode ("#", $hrefparts[0]);

$href = str_replace ("\"", "", $hrefparts2[0]);
if ((substr ($href, 0, 7) != "http://") &&
  (substr ($href, 0, 8) != "https://") &&
  (substr ($href, 0, 6) != "ftp://"))
{
   if ($href[0] == '/')
$href = "$scanned[0]$href";
   else
$href = Path ($url) . $href;
}
if (substr ($href, 0, strlen ($scanned[0])) == $scanned[0])
{
   $ignore = false;
   if (isset ($skip))
foreach ($skip as $k => $v)
   if (substr ($href, 0, strlen ($v)) == $v)
$ignore = true;
 
   if ((!$ignore) &&
(!in_array ($href, $scanned)) &&
(strpos ($href, $extension) > 0)
)
   {
fwrite ($pf, "<url>\n  <loc>$href</loc>\n" .
    "  <changefreq>$freq</changefreq>\n" .
    "  <priority>$priority</priority>\n</url>\n");
echo $href. "\n";
Scan ($href);
   }
}
    }
}

    $pf = fopen ($file, "w");
    if (!$pf)
    {
echo "cannot create $file\n";
return;
    }

    fwrite ($pf,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset
      xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"
      xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
      xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">
<!-- created with Plop PHP Google Sitemap Generator 0.2 www.plop.at -->

<url>
  <loc>$url/</loc>
  <changefreq>daily</changefreq>
</url>
");

    $scanned = array();
    Scan ($url);
   
    fwrite ($pf, "</urlset>\n");
    fclose ($pf);
?>
<?
$lines = file('sitemap.xml');
$allMatches = array();

foreach ( $lines as $line_number => $line ) {
 $line = trim($line);
 preg_match_all('/(?<=\<loc\>)(.*?)(?=\<\/loc\>)/U', $line, $matches,PREG_SET_ORDER);
 if($matches){
  if ( $matches[0][0] != '' ) {
   $allMatches[] = $matches[0][0];
  };
 };
};

$list = '';
foreach ( $allMatches as $url ) {
 $list .= $url."\n";
};
$fh = fopen('urllist.txt', "w+");
fwrite($fh, $list);
fclose($fh);

// print out list to provide some feedback...
echo $list; ?>

Unas pocas líneas de código que facilitan mucho mantener actualizados tanto sitemap como urllist, además muy fácil de implementar ya que sólo es necesario cambiar una sóla línea de código.

Agradecemos a  Elmar Hanlhofer (http://www.plop.at)  y Emanuel Ulses cuyas contribuciones originales fueron empleadas para desarrollar este script.

sábado, 12 de octubre de 2013

Como incluir Citas en tu página web, Etiquetas HTML para citar

Los contenidos son la base de la web 3.0, cada día se busca más y mejor contenido toda vez que Google premia la originalidad de los textos para su posicionamiento sin embargo no es posible escribir todo el material de un página web desde de cero, siempre es necesaria la contribución de otros autores para fundamentar el planteamiento que se realiza en el texto así en las páginas web como en los textos, es necesario citar otras fuentes que le permitan al lector conocer el origen de la información y a la vez sustentan a tenor de Cita Bibliográfica la validez del contenido.

En otras ocasiones como el caso de un concepto, no es recomendable reescribirlos, parafrasearlo ni interpretarlo, los conceptos deben ser copiados textualmente para que no pierdan validez pero ... ¿no considerará Google (u otro buscador) esto como contenido duplicado?, la respuesta es NO siempre que se coloque la cita y la fuente de donde se obtuvo el concepto; en la literatura impresa esto está bien estandarizado e incluso existen técnicas bien definidas para incluir citas bibliográficas en el texto, al pie de página o al final de la publicación, por su parte en las publicaciones on-line si bien existen las herramientas para crear citas las mismas no son utilizadas de una manera generalizada, bien por ignorancia o bien por no existir un consenso global sobre el uso de citas en los contenidos digitales.

Lo recomendable al crear contenidos es sin duda alguna la originalidad pero, para darle rigor y validez, citar una o más fuentes es totalmente recomendable, la manera correcta de hacerlo es empleando las etiquetas HTML diseñadas para tal fin es decir, las etiquetas <q> </q> y <blockquote> </blockquote>

La etiqueta <q> y su respectiva etiqueta de cierre </q> se utilizan cuando se incluye una cita textual corta (una frase u oración) en la línea del texto que se escribe, por ejemplo:

Entrando en la conferencia, mientras se discutía sobre la sustentabilidad de los combustibles fósiles el Dr. Gutiérrez afirmó "debemos cambiar a energía verde para garantizar la sustentabilidad", con esta frase se generó un gran debate

La cita corresponde al texto resaltado en amarillo y la forma correcta de escribir el código html sería:

<p> Entrando en la conferencia, mientras se discutía sobre la sustentabilidad de los combustibles fósiles el Dr. Gutiérrez afirmó <q>debemos cambiar a energía verde para garantizar la sustentabilidad</q>, con esta frase se generó un gran debate</p>

Nótese que no se colocaron las comillas (") al principio y final de la cita ya que le etiqueta <q>  las agrega automáticamente.

Ahora bien, si la cita es más larga (dos o más párrafos) por lo que se requieren saltos de línea la etiqueta a utilizar será <blockquote>, un ejemplo sería:

Durante su exposición sobre la amistad el ponente trajo a colación a Julio Cortazar quien en su poema Los Amigos decía:

"En el tabaco, en el café, en el vino,
al borde de la noche se levantan 
como esas voces que a lo lejos cantan
sin que se sepa qué, por el camino.

Livianamente hermanos del destino, 
dióscuros, sombras pálidas, me espantan
las moscas de los hábitos, me aguantan 
que siga a flote entre tanto remolino."

Y así concluyó su conferencia

Una vez más el texto resaltado en amarillo corresponde a la cita, la forma correcta de escribirlo en HTML será:

<p>Durante su exposición sobre la amistad el ponente trajo a colación a Julio Cortazar quien en su poema Los Amigos decía:<br><br>

"<blockquote>En el tabaco, en el café, en el vino,
al borde de la noche se levantan 
como esas voces que a lo lejos cantan
sin que se sepa qué, por el camino.<br><br>

Livianamente hermanos del destino, 
dióscuros, sombras pálidas, me espantan
las moscas de los hábitos, me aguantan 
que siga a flote entre tanto remolino.</blockquote>"<br><br>

Y así concluyó su conferencia</p>

En este elemento hay que notar que las comillas (") deben colocarse manualmente ya que la etiqueta <blockquote> no las agrega; queda a criterio de quien escribe colocarlas dentro o fuera de la etiqueta, esta elección no modificará para nada el resultado final.

Ahora bien; hasta el momento sólo hemos hecho que el elemento sea reconocido en la línea de código como una cita pero ¿dónde está la fuente?, ¿de dónde hemos tomado el texto?; aquí entra en juego un atributo fundamental de ambas etiquetas; el atributo cite

Al agregar el atributo cite a las etiquetas vamos a incluir una ruta hacia el URL de donde hemos tomado el texto, esto es particularmente útil cuando se copian textos textuales de otra página web como por ejemplo:

La definición de masa es "La masa, en física, es una medida de la cantidad de materia que posee un cuerpo.1 Es una propiedad intrínseca de los cuerpos que determina la medida de la masa inercial y de la masa gravitacional. La unidad utilizada para medir la masa en el Sistema Internacional de Unidades es el kilogramo (kg). Es una magnitud escalar."

Una vez más la cita resaltada en amarillo, a continuación la forma de escribirlo en HTLM citando la fuente:

<p>La definición de masa es <q cite="http://es.wikipedia.org/wiki/Masa">La masa, en física, es una medida de la cantidad de materia que posee un cuerpo.1 Es una propiedad intrínseca de los cuerpos que determina la medida de la masa inercial y de la masa gravitacional. La unidad utilizada para medir la masa en el Sistema Internacional de Unidades es el kilogramo (kg). Es una magnitud escalar.</q></p>

Con la etiqueta estructurada de esta forma le decimos a los robots de los buscadores que ese texto es una cita, que fue tomada de otra página web y a la vez le indicamos de donde procede.

En los casos donde la cita sea tomada de un medio que no esté en línea como un libro o una revista, se puede colocar el texto entre las etiquetas correspondientes y hacer una referencia textual al final de la cita como en el siguiente ejemplo:

Siempre ha sido difícil establecer el momento justo donde se pasa de niño a adulto según, el Dr. Fernando Rísquez I, "La diferencia entre un niño y un adulto (como lo he dicho en mi libro Conceptos de Psicodinamia) es que un niño no puede esperar y un adulto sabe esperar" *

* Tomado de: "Diálogos con Médicos y Paciente", Dr. Fernando Rísquez I.; pp. 347

El asterisco (*) y la cita son colocadas manualmente y eso evita que caigamos (involuntariamente) en un plagio de otro autor; la forma correcta de escribir el código para esta cita en HTML sería:

<p>Siempre ha sido difícil establecer el momento justo donde se pasa de niño a adulto, según el Dr. Fernando Rísquez I, <q>La diferencia entre un niño y un adulto (como lo he dicho en mi libro Conceptos de Psicodinamia) es que un niño no puede esperar y un adulto sabe esperar</q> *<br><br>

* Tomado de: "Diálogos con Médicos y Paciente", Dr. Fernando Rísquez I.; pp. 347</p>

Esta forma de escribir el código cuando se citan textos si bien dará un poco más de trabajo en la codificación, tiene la ventaja de evitar el plagio, no caer en contenidos duplicados, indicarle a los robots de búsqueda el origen del texto no original y a la vez darle mérito a quien nos ha ayudado con sus escritos previos para componer nuestros propios textos.

Los contenidos en internet avanzan a pasos agigantados y la era del copy/paste ha pasado a la historia, de aquí en más para que las publicaciones tengan validez y sean bien posicionadas deberán ser originales, bien fundamentadas y sustentadas por las citas a las fuentes de origen.

jueves, 10 de octubre de 2013

Como identificar de que ciudad y país proviene un correo electrónico

A diario recibimos en nuestro correo electrónico promociones, publicidad e incluso ofertas de trabajo, ante estos correos muchas veces cabe la pregunta: ¿son legítimos estos correos?, ¿de dónde provienen?, ¿esta oferta es válida para mi zona geográfica?

La respuesta a estas interrogantes puede deducirse con cierta facilidad si conocemos de donde proviene el correo; con un aumento enorme del correo publicitario, el spam y otras técnicas que inundan nuestro correo electrónico a diario saber de que parte del mundo procede un email puede ayudarnos a tomar decisiones sobre su legitimidad.

En otras ocasiones saber de que país del mundo proviene un correo sirve para saber si no están engañando, por ejemplo, un trabajador dice que está de comisión fuera de la ciudad y nos envía reportes a diario por correo; pero ... de verdad está donde nos dice o trata de engañarnos; ubicando la zona geográfica de origen
del IP de los correos podemos determinar con bastante exactitud la ubicación geográfica desde donde se originaron los correos.

El IP es un número de identificación único compuesto por 4 grupos de números separado por puntos como por ejemplo 86.188.1.127; cada máquina tiene un IP propio (que puede ser fijo o variable), hay millones de IP organizados por grupos de países y ciudades por lo tanto con las herramientas adecuadas podemos saber exactamente la ubicación geográfica de la máquina desde donde se envió un correo.

Lo primero que hay que saber es ubicar el IP de origen del correo; esta información está presente en todo correo electrónico pero no a la vista en el mensaje por lo que hay que usar ciertas técnicas para ubicar el IP en el correo; normalmente es muy fácil de hacer aunque el proceso puede variar un poco dependiendo del operador de correo electrónico que se use, aquí encontrará una guía para saber el IP de un correo con distintas plataformas de Correo Electrónico.

Para saber el IP de origen debemos buscar un fragmento de todo ese código similar a estos (el IP está resaltado en rojo para facilitar su ubicación), debe recordarse que la presentación del código puede variar según el programa con el que se abre el email:

Received: from mail-qy0-f182.google.com ([209.85.216.182]:34447)
X-Originating-IP: [5.159.242.245]

Una vez que tenemos el IP de origen del mensaje el resto del proceso es muy fácil; usando la herramienta Gratis de Tu Web Venezuela sólo se copia el IP en la casilla correspondiente y se hace click en Procesar; en cuestión de milisegundos sabremos con bastante precisión la ciudad y país de origen del mensaje; la herramienta es online y no es necesario ni registro ni instalación de componentes en su máquina.


A partir de ahora ya puede ubicar el origen de cualquier correo electrónico, no podrán engañarle ni decir que se está en un sitio cuando de verdad se está en otro, este método será útil para el 90% del correo recibido, existen situaciones donde deben tomarse consideraciones especiales como en el caso de correos enviados desde una máquina a la cual se tiene acceso remoto, es decir la máquina está en un punto A y el usuario en un punto B pero con capacidad de operar remotamente (a distancia) la máquina ubicada en A; en este caso el IP de origen de los correos será el de la ubicación de la máquina y no la del usuario que puede estar en cualquier parte del mundo; en estos casos el método no nos sirve para ubicar a la persona pero por fortuna esta situación no se da con mucha frecuencia.




jueves, 3 de octubre de 2013

Precauciones al cargar tu SmartPhone a través del cable USB

Cuando estamos en casa o en la oficina recargar el smartphone no requiere mucha ciencia, o tenemos el cargador a la mano o conectamos el teléfono al PC a través de USB y ¡voilá! cargamos sin problemas; los inconvenientes surgen cuando estamos fuera de nuestro entorno habitual (en oficinas ajenas, hoteles, aeropuertos, etc) y como es habitual hemos olvidado el cargador; en estos casos conectar el teléfono a un puerto USB puede ser la salvación pero ... ¡cuidado! al hacer esto se podría estar poniendo en peligro la seguridad de los datos guardados en el teléfono.

Muchos smartphones (teléfonos inteligentes) sincronizan automáticamente cuando se conectan a un puerto USB de manera que si tenemos la desventura de conectar nuestro teléfono a una computadora que pertenece a alguien con malas intenciones simplemente le estamos abriendo la puerta de nuestros datos voluntariamente; en otros casos el dueño de la computadora o laptop puede tener muy buenas intenciones pero ignorar que en su máquina existe algún tipo de troyano diseñado para teléfonos inteligentes simplemente "esperando" que se establezca esa conexión USB con el teléfono para saltar al mismo y comenzar a usar aplicaciones, enviar mensajes o iniciar conversaciones sin el consentimiento y en general sin el conocimiento del dueño del dispositivo móvil.

El problema de estos troyanos residentes en las computadoras esperando "abordar" un teléfono que se conecte por el puerto USB estriba en que los antivirus y antimalware convencionales, diseñados para sistemas operativos de computadoras, no identifican el malware como tal dado que el mismo está diseñado para operar en el sistema operativo de los teléfonos por lo que no es una amenaza para el PC y por lo tanto no es ni detectado ni mucho menos eliminado por los programas de protección para las computadoras y portátiles.

Como si todo esto no fuera suficiente también está el riesgo de los puntos de recarga; centros que parecen ser el Nirvana de quien busca desesperadamente donde conectar su celular; si bien estos centros de recarga son legítimos y seguros casi siempre, algunos de ellos podrían ser falsos puntos de recarga, es decir, una conexión a un PC oculto disimulada como un área de recarga de celulares; al conectarse y comenzar a cargar el celular casi de manera automática el responsable del falso centro de recarga tendrá acceso a muchos de los datos que están en el teléfono; está técnica de ingeniería social es conocida en los países de habla inglesa como "juice jack", una traducción aproximada al español sería "secuestro por carga", siendo definida esta técnica como ofrecer carga (juice) a un usuario de teléfono inteligente para acceder (sin su consentimiento) a los datos de su teléfono (jack (diminutivo de hijack) = secuestro)

Para protegernos de este riesgo potencial es necesario tomar ciertas medidas simples:

- No olvidar nunca el cargador del teléfono, esto anula cualquier intento de Juice Jack

- En caso de tener que cargar el teléfono desde un punto de carga o un pc desactivar primero la función de autosincronización

- Conectar el teléfono, en la medida de lo posible, sólo a computadoras o laptops seguros (las del mismo dueño del teléfono inteligente son las idóneas)

- En caso de emergencia y cuando todo lo demás falló (generalmente por despiste nuestro) tener a la mano un cable USB que trasmita sólo carga, es decir, los pines de transferencia de datos no existen en este tipo de cable, popularmente se conocen como "condones usb" y son una alternativa para evitar que algún mal intencionado tenga acceso a los datos de nuestro teléfono inteligente.