• EnglishSpanishGermanFrenchPolishChinese (Traditional)


EnglishSpanishGermanFrenchPolishChinese (Traditional)

Operating systems, scripting, PowerShell and security

Operating systems, software development, scripting, PowerShell tips, network and security

Menú principal
  • Categorías
  • Cursos
  • Libro de PowerShell
  • Lo mejor
  • Lo último
  • Proyectos
  • Contactar
Ir al contenido

Mostrar y generar en tiempo real una tabla HTML con el valor nutricional (azúcares) de todos los fabricantes de un producto encontrado en la tienda online de un supermercado en PowerShell

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
 
$productosconurl = @{}
 
$web = Invoke-WebRequest "https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/naranja/c/W110201?q=%3Arelevance&show=All"
 
foreach($link in ($web.links.href | Group-Object).name){
    if ($link -match "compra-online/bebidas/zumos-de-frutas/naranja" -and $link -notmatch "/c/")
    {
        $urlsanalizar = "https://www.alcampo.es$link"
        $urlsanalizar
        
        $web = Invoke-WebRequest $urlsanalizar
        # Datos nutricionales del producto
        $productos = @{}
        # Extraer los valores nutricionales del producto
        ($web.AllElements | Where Class -eq "productNutritionalInformation valoresNutricionalesTabla").innerHtml | %{
            ($_ -replace "</SPAN> <SPAN ","</SPAN>|<SPAN " -replace "<.*?>" -replace " g" -replace " Kj" -replace " Kcal" -split "`n" | ? {$_.trim() -ne ""} | ? {$_.trim() -notmatch "nutricionales"}).trim()
        } | %{$productos.add($_.split("|")[0],$_.split("|")[1])}
        $pesos = ($web.AllElements | Where Class -eq "productNutritionalInformation valoresNutricionalesTabla tablaInformacionAdicional").innerText | %{
            ($_  -replace "<.*?>" -split "`n" | ? {$_.trim() -ne ""}).trim() -replace "g"
        }
 
        $nombre = ($web.AllElements | Where Class -eq "productDesc").innerText | %{
            $_
        }
        # Añadir los valores nutricionales del producto a la estructura
        0..$pesos.Count | % {if($_%2-eq 0 -and $_ -lt 19){$productos.add($pesos[$_],$pesos[$_+1])}}
        # Calcular el valor nutricional en función de la cantidad del alimento consumido
        $comidacantidad = 100
        $productos.'Peso neto escurrido'
        $productos.Add('Valor energético(Kcal) Neto',($productos.'Valor energético(Kcal)' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Hidatos de carbono Neto',($productos.'Hidratos de carbono' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas Netas',($productos.Grasas / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas saturadas Netas',($productos.'Grasas saturadas' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Azúcares Netos',($productos.Azúcares / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Proteínas Netas',($productos.Proteínas / $productos.'Peso Neto')*$comidacantidad)
        # Mostrar la estructura con los valores nutricionales
        $productos.GetEnumerator() | sort -Property name
 
        $productosconurl.Add($nombre,$productos.Azúcares)
    }
}
 
$contenido = $productosconurl.GetEnumerator() | Select-Object @{n='Producto';e={$_.Key}},@{n='Azúcar';e={[Double]($_.Value)}} | sort Azúcar -Descending | ConvertTo-Html
 
$contenido = $contenido.replace("Azúcar","Az&uacute;car")
 
# Datos URIs, URLs prefijados con los datos: esquema, permiten a los creadores de contenido incorporar pequeños archivos en linea en los documentos
 
# Codificar en Base64
 
$base64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($contenido))
 
Start-Process chrome ("data:text/html;base64," + $base64)

Código web generado en tiempo real y codificado en Base64 para que pueda ser interpretado por Google Chrome

PowerShell
1
data:text/html;base64,PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4gPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPiA8aGVhZD4gPHRpdGxlPkhUTUwgVEFCTEU8L3RpdGxlPiA8L2hlYWQ+PGJvZHk+IDx0YWJsZT4gPGNvbGdyb3VwPjxjb2wvPjxjb2wvPjwvY29sZ3JvdXA+IDx0cj48dGg+UHJvZHVjdG88L3RoPjx0aD5BesO6Y2FyPC90aD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgeSB6YW5haG9yaWEgQVVDSEFOIGJyaWNrIGRlIDEgbGl0cm88L3RkPjx0ZD4xMSwyPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgeSBtYW5nbyBBVUNIQU4gYnJpY2sgZGUgMSBsaXRybzwvdGQ+PHRkPjExLDE8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSBET04gU0lNJiMyMTE7TiBib3RlbGxhIGRlIDEsNSBsaXRyb3M8L3RkPjx0ZD4xMCw0PC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgWlVNT1NPTCBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTAsNDwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBkZSBOYXJhbmphIEdSQU5JTkkgMzMgY2M8L3RkPjx0ZD4xMCwzPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgR1JBTklOSSBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD4xMCwxPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgR1JBTklOSSBib3RlbGxhIGRlIDEsNSBsaXRyb3M8L3RkPjx0ZD4xMCwxPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgQVVDSEFOIGJyaWNrIGRlIDIgbGl0cm9zPC90ZD48dGQ+MTAsMTwvdGQ+PC90cj4gPHRyPjx0ZD5CcmljayB6dW1vIGV4cHJpbWlkbyBkZSBuYXJhbmphIHNpbiBwdWxwYSBET04gU0lNJiMyMTE7TiAyIGxpdHJvczwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgc29qYSB5IG5hcmFuamEgRE9OIFNJTU9OIFNPWSBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBET04gU0lNJiMyMTE7TiBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBzaW4gcHVscGEgRE9OIFNJTSYjMjExO04gYnJpY2sgZGUgMTIsNSBjZW50aWxpdHJvcyBwYWNrIGRlIDQgdWRzLjwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPkJyaWNrIHp1bW8gZGUgbmFyYW5qYSBjb24gcHVscGEgKDEwMCUgbmFyYW5qYSBleHByaW1pZGEpIERPTiBTSU0mIzIxMTtOIDJsPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBkZSBuYXJhbmphIERPTiBTSU0mIzIxMTtOIDFsPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBzaW4gcHVscGEgRE9OIFNJTSYjMjExO04gMSBsaXRybzwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgbmFyYW5qYSB5IHNvamEgZGUgb3JpZ2VuIDEwMCUgdmVnZXRhbCBWSVZFU09ZIGRlIFBhc2N1YWwgMSBsLjwvdGQ+PHRkPjksNzwvdGQ+PC90cj4gPHRyPjx0ZD5CcmljayB6dW1vIGV4cHJpbWlkbyBuYXJhbmphIEFVQ0hBTiAxIGw8L3RkPjx0ZD45LDc8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSBNSU5VVEUgTUFJRCBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD45LDc8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBkZSBuYXJhbmphIGV4cHJpbWlkbyBjb24gcHVscGEgWlVNT1NPTCAxIGxpdHJvPC90ZD48dGQ+OSw0PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZXhwcmltaWRvIGRlIG5hcmFuamEgc2luIHB1bHBhIFpVTU9TT0wgYm90ZWxsYSBkZSA4NSBjZW50aWxpdHJvczwvdGQ+PHRkPjksNDwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGV4cHJpbWlkbyBkZSBuYXJhbmphIGNvbiBwdWxwYSBaVU1PU09MIGJvdGVsbGEgZGUgODUgY2VudGlsaXRyb3M8L3RkPjx0ZD45LDQ8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBkZSBuYXJhbmphIGV4cHJpbWlkYSBzaW4gcHVscGEsIFpVTU9TT0wsIGJyaWNrIGRlIHVuIGxpdHJvLjwvdGQ+PHRkPjksNDwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBkZSBuYXJhbmphIHkgbWFuZ28gR1JBTklOSSBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD45LDI8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBkZSBuYXJhbmphIGR1bGNlIEdSQU5JTkkgMSBsPC90ZD48dGQ+OTwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGVjb2wmIzI0MztnaWNvIGRlIG1hbmdvIHkgbmFyYW5qYSBMQU1CREEgYm90ZWxsYSBkZSAxIGwuPC90ZD48dGQ+OCw5PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgbmFyYW5qYSBmcmVzY2EgU09OQVRVUkFMIDI1MCBNaWxpbGl0cm9zPC90ZD48dGQ+OCw3PC90ZD48L3RyPiA8dHI+PHRkPkJyaWNrIHp1bW8gZGUgbmFyYW5qYSBBVUNIQU4gMSBsPC90ZD48dGQ+OCw0PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgTmFyYW5qYSBKVVZFUiBCb3RlbGxhIDEgbC48L3RkPjx0ZD44LDQ8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSB5IHphbmFob3JpYSBHUkFOSU5JIGJvdGVsbGEgZGUgMSBsaXRybzwvdGQ+PHRkPjgsMzwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGVjb2wmIzI0MztnaWNvIGRlIG5hcmFuamEgTEFNQkRBIGJvdGVsbGEgZGUgMSBsLjwvdGQ+PHRkPjcsMTwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBjb24gc3RldmlhIGRlIG5hcmFuamEgTUlOVVRFIE1BSUQgYm90ZWxsYSBkZSAxIGxpdHJvPC90ZD48dGQ+NSw3PC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgSlVWRVIgMiBsLjwvdGQ+PHRkPjUsNjwvdGQ+PC90cj4gPC90YWJsZT4gPC9ib2R5PjwvaHRtbD4=


Link a la web (para ver la web es necesario pulsar con el botón de la derecha encima del enlace y pulsar en «Abrir enlace en una pestaña nueva»

Publicado el día 18 de julio de 2018

CATEGORÍAS

Nutrición, PowerShell, Web

ETIQUETAS

AllElements, Base64, Chrome, Código, data, foreach, GetEnumerator, Google, Google Chrome, Group-Object, HTML, HTTPS, innerText, Invoke-WebRequest, Jesús Niño, Jesús Niño Camazón, match, Replace, Select-Object, Sort, Split, Start-Process, System.Convert, System.Text.Encoding, Text.Encoding, ToBase64String, Trim, UTF8.GetBytes, value

MÁS

  • Técnico Superior en Desarrollo de Aplicaciones Web
  • Cómo depurar scripts en ISE de Windows PowerShell
  • 11. Gestión del Directorio Activo (nivel intermedio)
  • Mostrar y comparar la cantidad de grasa que tienen los productos de consumo encontrados en la tienda online de un supermercado mediante PowerShell
  • Calcular el valor nutricional de una o varias comidas del día con PowerShell
  • Calcular el valor nutricional de un producto en PowerShell (buscando el producto en la tienda online de un supermercado)