11/9/18

Obtener Certificación de tener Título Universitario

Ir a sede.educacion.gob.es

Pulsar en Buscar trámites.

En texto poner: “Consulta de títulos Universitarios Oficiales”.

Pulsamos Buscar.

Pulsamos Acceso.

En la siguiente página pulsamos Acceder

En DNI/Certificado Electrónico pulsamos Acceder

Vamos a la pestaña Autorizaciones.

En en Acciones pulsar sobre el icono de pdf.

21/2/18

Variables en SqlServer

En ocasiones es cómodo almacenar en una variable un valor si se van a hacer varias consultas. Siempre se puede repetir la consulta original pero a veces no tiene sentido.

Para hacer esto en SqlServer...

declare @idDeTrabajo int;
select @idDeTrabajo = (select id from nuestraTabla where claveAlternativa like 'ED820');--sin paréntesis falla

select * from Telefono where idTrabajo = @idDeTrabajo;
select * from DireccionPostal where idTrabajo = @idTrabajo;

Subtabla separada por comas.

Si queremos facilitar la visualización desde sqlpuro de una relación de uno a muchos, en ocasiones, es conveniente mostrar los datos de esa "subtabla" en un campo. Físicamente se almacena en una tabla separada pero, para visualizar la visualización, la mostramos como un campo.
Explico el ejemplo:
  • Tenemos una relación de muchos a muchos (Productos, Categorias)
  • La pasamos a una relación de uno (Productos) a muchos (Categorías unida con ProductosCategorias)
  • Mostramos la lista de productos con un campo que se extrae de la tabla de la parte muchos.
Con SqlServer se podría hacer como muestra el ejemplo:
SELECT Productos.Nombre, 
 STUFF(
    (SELECT ', '  + Categorias.Categoria
    FROM Categorias
    INNER JOIN ProductosCategorias ON ProductosCategorias.idCategoria = Categorias.idCategoria
    WHERE ProductosCategorias.idProducto = Productos.idProducto
    FOR XML PATH('')),
    1, 2, '') As Categorias
FROM Productos

1/2/18

Powershell. Problema al instalar paquetes npm que incluyen "@" arroba.

npm install @types/chai --save-dev

El comando powershell superior da un error "Símbolo (token) no reconocido en el texto de origen."

El problema está en la "@". En powershell el símbolo @ se usa para definir cosas que siguen como arrays, literales de más de una línea, etc. por lo que no funciona tal y como funcionaría en cmd.exe o shells de linux

Para solucionarlo en Powershell, hemos de poner entre comillas el paquete que incluya la @

npm install "@types/chai" --save-dev

9/1/18

Powershell. Que no trunque las propiedades al mostrarlas.

En ocasiones cuando mostramos algo en powershell, si la propiedad es muy grande la trunca y muestra "..." al final de la misma y perdemos esa parte del dato. Para evitar esto, por ejemplo con rutas largas podemos hacer lo siguiente.
Buscar todos los directorios y ficheros que contengan "Test" y guarda la ruta completa.
dir -Recurse *Test* | select fullname  |Out-File -width 230 .\borrame.test.txt
Los pasos son:

  1. Buscar Test
  2. Selecciona el nombre completo
  3. Lo pasa a un fichero "borrame.test.txt" con una anchura de 230 caracteres (donde en principio suponemos que entrará la cadena)
Si no ponemos el -width 230 se truncaría en el ancho por defecto.

Me edito a mi mismo. Hay una solución mejor.

Si en lugar de "select fullname" escribirmos "% fullname", pasa a la línea siguiente sin problemas. tendríamos:
dir -recurse *.* | % fullname
Nos mostrará todos los ficheros, con la ruta completa y uno por línea, si se pasa de una línea lo pone en 2.
Además si al final ponemos " | clip ". Nos lo copiará al portapapeles.
dir -recurse *.* | % fullname | clip

27/11/17

Scrapping con C#. Listas de Contratación Temporal de la Xunta.

url es la variable con la url a scrapear //valga el palabro

"//td[@align='left']" es una expresión xpath que devolvería los TD con alineación izquierda

Para hacer el scrapping con cSharp usamos ScrapySharp

Hay ejemplo completo en GitHub aquí

Código:

ScrapingBrowser Browser = new ScrapingBrowser();
Browser.UserAgent = new FakeUserAgent("primero", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");
Browser.AllowAutoRedirect = true; // Browser has settings you can access in setup
Browser.AllowMetaRedirect = true;
WebPage PageResult = await Browser.NavigateToPageAsync(new Uri(url));
IEnumerable TDs = PageResult.Html.SelectNodes("//td[@align='left']");
this.lNombre.Clear();
foreach (HtmlNode item in TDs) {
    this.lContenidosTDs.Add(item.InnerText);
}

22/11/17

Comprobación de Consulta das Listas de Vinculación Temporal Decreto 37/2006. Javascrip

Está también en Github

const fileName = "./personas.json";
const Horseman = require("node-horseman");
const cheerio = require('cheerio')
const fs = require('fs');

var horseman = new Horseman();

var Personas = [];
var PersonasAnteriores;
var grabarFichero = false;

function GestionDeParametros(params){
if(params.length == 3){// así es que se envía un parámetro
grabarFichero = true;
}
}
function getPersonas(body) {
var $ = cheerio.load(body);
//$(".taboadatos TD");
var columna = 0;
$('.taboadatos TD').each(function () {
columna++;
if (columna === 1) {
Personas.push($(this).text());
}
if (columna === 4) {
columna = 0;
}

});
if(grabarFichero){
fs.writeFileSync(fileName,JSON.stringify(Personas),'utf-8');
}
var i = 0;
console.log("LISTA DE CAMBIOS DE LAS LISTAS DEL B SEGÚN FICHERO: " + fileName);
console.log("===================================================");
Personas.forEach(element => {
if (element === PersonasAnteriores[i]) {
console.log("" + (i + 1) + ": (IGUALES) " + element);
} else {
console.log("" + (i + 1) + ": (DIFERENTES) " + element + '///' + PersonasAnteriores[i]);
}
i++;
});
}

function ShowPersonas(per) {
console.log(per);
}

function CargarPersonasAnteriores() {
try {
PersonasAnteriores = JSON.parse(fs.readFileSync(fileName, 'utf-8'));
} catch (err) {
console.error(err);
console.error("No existe el fichero generelo con: ***");
}
}

GestionDeParametros(process.argv);
CargarPersonasAnteriores();

horseman
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0")
.open('http://www.xunta.es/rcp/listas/rcp_li05/li05_lista_ambito_sel.jsp?rcpCOD_LISTA=76&rcpCOD_AMBITO=U0000&rcpDES_AMBITO=AMBITO%20AUTON%D3MICO&lang=gl')
.waitForSelector("TD")
.html()
.then(function (body) {
getPersonas(body)
horseman.close();
})
;

20/11/17

Test. Clase de ayuda para envío de pulsaciones de teclas.

SSk: Static Send Keys.

Es un envoltorio para facilitar el uso de la función "SendKeys.SendWait(string keys)" y algunas utilidades más como introducir un tiempo de espera entre pulsación y pulsación. También permite generar apropósito tiempo de espera (Tread.Sleep(miliseconds)) y facilita el envío de algunas teclas especiales.

Se encuentra en github como parte del proyecto Utils pero es, de momento, muy independiente y no necesita nada del resto del proyecto.

https://github.com/IvanCruzFraguela/UtilNs/blob/master/Test/SSk.cs