Laburo España: 250.000 ofertas de empleo

Sábado, 14 de enero de 2006

C++/CLR: otro ejemplo de screen scrapping

Les presento cómo leer la estadística de WebStats4U directamente sobre un contador de rendimiento de Windows.

Trabajar con C++/CLR es muy interesante. La mayoría de las ataduras con que me constreñía C# se liberan y uno puede retomar un camino de más de 12 años en el lenguaje de preferencia.
Aquí otro ejemplo de screen scrapping (el de teléfonos en Páginas Doradas era en VB.NET). En este caso se trata de tomar las visitas del día desde WebStats4U y pasar el valor obtenido a un contador de Windows, de los que se pueden consultar con el visor de Rendimiento.
Por supuesto, sólo se necesita el compilador de C++ que viene con la descarga de la plataforma .NET, o bien con Visual C++ Express, ambos gratuitos. ¡Para que lo disfruten!
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text::RegularExpressions;
using namespace System::Diagnostics;

#define COUNTERCATEGORYNAME L"Site Statistics"
#define COUNTERNAME L"Page views"

int main(array ^args)
{
try {
// crear la categoría y el contador
if (!PerformanceCounterCategory::Exists(COUNTERCATEGORYNAME)) {
PerformanceCounterCategory::Create(COUNTERCATEGORYNAME,
L"WebStats4U statistics",
PerformanceCounterCategoryType::SingleInstance,
COUNTERNAME,
L"Visits to the page");
}
// abrir el contador
PerformanceCounter ^ pcount =
gcnew System::Diagnostics::PerformanceCounter(COUNTERCATEGORYNAME, COUNTERNAME, false);
// preparar la expresión regular
Regex^ rex = gcnew Regex(L"Page views today]*?>(\\d+)",
RegexOptions::Compiled);
for (;;) {
// obtener la página
HttpWebRequest^ req = (HttpWebRequest ^)WebRequest::Create(L"http://purl.org/net/rerum.stats");
req->UserAgent = System::Reflection::Assembly::GetExecutingAssembly()->FullName;
WebResponse^ resp = req->GetResponse();
Stream^ rs = resp->GetResponseStream();
TextReader^ rdr = gcnew StreamReader(rs);
// tomar las visitas
int visitas = int::Parse(rex->Match(rdr->ReadToEnd())->Groups[1]->ToString());
pcount->RawValue = visitas;
Console::WriteLine(L'.');
// esperar un poco para no sobrecargar al servidor
System::Threading::Thread::Sleep(10000);
}
}
catch(Exception^ ex) {
Console::WriteLine(ex->Message);
}
return 0;
}

Por: Ignacio Nicolás Rodríguez | Tecnología | Comentarios (0) | Referencias (0)

Comentarios

Comentar


Recordar datos

LaInformacion.com lainformacion.com - Medio Oficial de los Premios Bitacoras 2009