Funciones para realizar una descripcion Xsm del sitemap de un sitio web utilizando las especificaciones de Google. Pone la misma prioridad para todas las paginas, ya que la prioridad es un valor relativo entre las paginas del sitio web, no frente a otros webs. Xsm son las siglas de Xsm Site Map, originalmente a las funciones de esta libreria se las identifico por Xml, pero se cambio por ser Xml un termino muy general.
Variables de control
Text XsmPriText XsmFrqSet XsmTypText XsmExcConstantes
Text XsmHeaText XsmEndText XsmUrlFunciones
Set XsmDateRepTab(Date dteFil)Real XsmDir(Text xsmFil, Text dirPth, Text urlDom)//////////////////////////////////////////////////////////////////////////////
Text XsmPri = "0.5"; // Da igual 1 que 0 es relativo entre las paginas
//////////////////////////////////////////////////////////////////////////////
PutDescription("Prioridad, valor relativo entre paginas.", XsmPri);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmFrq = "weekly"; // daily, weekly, monthly, ...
//////////////////////////////////////////////////////////////////////////////
PutDescription("Frecuencia de actualizacion del sitio web.", XsmFrq);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set XsmTyp = [["html", "pdf"]]; // Tipos Htm y Pdf
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tipos de ficheros que se transmiten.", XsmTyp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmExc = "/seed/"; // Exclusion
//////////////////////////////////////////////////////////////////////////////
PutDescription("Directorio en el que no se busca, el de semillas.", XsmExc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmHea =
"<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>
<url>
<loc>DOM</loc>
<priority>"+XsmPri+"</priority>
<lastmod>YEA-MTH-DAYTHOU:MIN:SEC+00:00</lastmod>
<changefreq>"+XsmFrq+"</changefreq>
</url>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla para la cebecera del sitemap en Xml.", XsmHea);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmEnd = "
</urlset>"; // Parece que no se quiere el último salto de línea
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto final de un sitemap, etiqueta de cierre Xml.", XsmEnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmUrl = "
<url>
<loc>URL</loc>
<priority>"+XsmPri+"</priority>
<lastmod>YEA-MTH-DAYTHOU:MIN:SEC+00:00</lastmod>
<changefreq>"+XsmFrq+"</changefreq>
</url>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla para la url de un fichero Xml de sitemap.", XsmUrl);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set XsmDateRepTab(Date dteFil) // Fecha con segundo de un fichero
//////////////////////////////////////////////////////////////////////////////
{
// 123456789.123456789.
// y2005m07d20h17i40s35.00
Text dteTxt = FormatDate(dteFil, "%cy%Ym%md%d%uh%hi%is%s");
[[ SetOfText("YEA", Sub(dteTxt, 2, 5)),
SetOfText("MTH", Sub(dteTxt, 7, 8)),
SetOfText("DAY", Sub(dteTxt, 10, 11)),
SetOfText("HOU", Sub(dteTxt, 13, 14)),
SetOfText("MIN", Sub(dteTxt, 16, 17)),
SetOfText("SEC", Sub(dteTxt, 19, 20)),
SetOfText("'", Char(34) )
]]
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla de reemplazamientos para las fechas.",
XsmDateRepTab);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real XsmDir(Text xsmFil, // Fichero de salida
Text dirPth, // Directorio a explorar
Text urlDom) // Dominio con /, ie. http://www.omrforms.es/
//////////////////////////////////////////////////////////////////////////////
{
Text WriteLn("Output file: "+xsmFil+"\n"+
"Input path: "+dirPth+"\n"+
"Domain: "+urlDom);
Set setDir = EvalSet(XsmTyp, Set(Text filExt) // htm, html, pdf,...
{
Text WriteLn("Get files for: "+filExt);
DirExtAll(dirPth, filExt, TRUE, TRUE)
});
Set getDir = BinGroup("<<", setDir);
Text WriteLn("Init Xml site map");
Text WriteFile(xsmFil, ReplaceTable(XsmHea, // Domain and date
[[ [["DOM",urlDom]] ]] << XsmDateRepTab(Now)));
Text WriteLn("Exclusions, not "+XsmExc);
Set getSel = Select(getDir, Real(Text pth) { !TextFind(pth, XsmExc) });
Set filCic = EvalSet(getSel, Real(Text filPth)
{
Text filUrl = Replace(filPth, "web/", urlDom);
Date filDte = FileTime(filPth);
Set repTab = XsmDateRepTab(filDte) <<
[[
[[ "URL", filUrl ]]
]];
Text AppendFile(xsmFil, ReplaceTable(XsmUrl, repTab));
TRUE
});
Text AppendFile(xsmFil, XsmEnd);
Text WriteLn("Xml site map: "+F(Card(filCic))+" pages");
Card(filCic)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crea un sitemap con el contenido de un directorio, retorna el numero de
ficheros includos en el sitemap.",
XsmDir);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FILE : xsm.tol
// AUTHOR : http://www.asolver.com
// PURPOSE : Funciones para realizar una descripcion Xsm del sitemap de un
// sitio web utilizando las especificaciones de Google.
// Pone la misma prioridad para todas las paginas, ya que la prioridad es un
// valor relativo entre las paginas del sitio web, no frente a otros webs.
// Xsm son las siglas de Xsm Site Map, originalmente a las funciones de esta
// libreria se las identifico por Xml, pero se cambio por ser Xml un termino
// muy general.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CONTROLS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmPri = "0.5"; // Da igual 1 que 0 es relativo entre las paginas
//////////////////////////////////////////////////////////////////////////////
PutDescription("Prioridad, valor relativo entre paginas.", XsmPri);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmFrq = "weekly"; // daily, weekly, monthly, ...
//////////////////////////////////////////////////////////////////////////////
PutDescription("Frecuencia de actualizacion del sitio web.", XsmFrq);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set XsmTyp = [["html", "pdf"]]; // Tipos Htm y Pdf
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tipos de ficheros que se transmiten.", XsmTyp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmExc = "/seed/"; // Exclusion
//////////////////////////////////////////////////////////////////////////////
PutDescription("Directorio en el que no se busca, el de semillas.", XsmExc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmHea =
"<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>
<url>
<loc>DOM</loc>
<priority>"+XsmPri+"</priority>
<lastmod>YEA-MTH-DAYTHOU:MIN:SEC+00:00</lastmod>
<changefreq>"+XsmFrq+"</changefreq>
</url>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla para la cebecera del sitemap en Xml.", XsmHea);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmEnd = "
</urlset>"; // Parece que no se quiere el último salto de línea
//////////////////////////////////////////////////////////////////////////////
PutDescription("Texto final de un sitemap, etiqueta de cierre Xml.", XsmEnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text XsmUrl = "
<url>
<loc>URL</loc>
<priority>"+XsmPri+"</priority>
<lastmod>YEA-MTH-DAYTHOU:MIN:SEC+00:00</lastmod>
<changefreq>"+XsmFrq+"</changefreq>
</url>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Semilla para la url de un fichero Xml de sitemap.", XsmUrl);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set XsmDateRepTab(Date dteFil) // Fecha con segundo de un fichero
//////////////////////////////////////////////////////////////////////////////
{
// 123456789.123456789.
// y2005m07d20h17i40s35.00
Text dteTxt = FormatDate(dteFil, "%cy%Ym%md%d%uh%hi%is%s");
[[ SetOfText("YEA", Sub(dteTxt, 2, 5)),
SetOfText("MTH", Sub(dteTxt, 7, 8)),
SetOfText("DAY", Sub(dteTxt, 10, 11)),
SetOfText("HOU", Sub(dteTxt, 13, 14)),
SetOfText("MIN", Sub(dteTxt, 16, 17)),
SetOfText("SEC", Sub(dteTxt, 19, 20)),
SetOfText("'", Char(34) )
]]
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla de reemplazamientos para las fechas.",
XsmDateRepTab);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real XsmDir(Text xsmFil, // Fichero de salida
Text dirPth, // Directorio a explorar
Text urlDom) // Dominio con /, ie. http://www.omrforms.es/
//////////////////////////////////////////////////////////////////////////////
{
Text WriteLn("Output file: "+xsmFil+"\n"+
"Input path: "+dirPth+"\n"+
"Domain: "+urlDom);
Set setDir = EvalSet(XsmTyp, Set(Text filExt) // htm, html, pdf,...
{
Text WriteLn("Get files for: "+filExt);
DirExtAll(dirPth, filExt, TRUE, TRUE)
});
Set getDir = BinGroup("<<", setDir);
Text WriteLn("Init Xml site map");
Text WriteFile(xsmFil, ReplaceTable(XsmHea, // Domain and date
[[ [["DOM",urlDom]] ]] << XsmDateRepTab(Now)));
Text WriteLn("Exclusions, not "+XsmExc);
Set getSel = Select(getDir, Real(Text pth) { !TextFind(pth, XsmExc) });
Set filCic = EvalSet(getSel, Real(Text filPth)
{
Text filUrl = Replace(filPth, "web/", urlDom);
Date filDte = FileTime(filPth);
Set repTab = XsmDateRepTab(filDte) <<
[[
[[ "URL", filUrl ]]
]];
Text AppendFile(xsmFil, ReplaceTable(XsmUrl, repTab));
TRUE
});
Text AppendFile(xsmFil, XsmEnd);
Text WriteLn("Xml site map: "+F(Card(filCic))+" pages");
Card(filCic)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crea un sitemap con el contenido de un directorio, retorna el numero de
ficheros includos en el sitemap.",
XsmDir);
//////////////////////////////////////////////////////////////////////////////
con-Q.tv construye las páginas del sitio y newsletter Con-Q.tv
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio