Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.

Nombre de usuario/Email:
  

Contraseña
  





Buscar en los foros

(Búsqueda avanzada)

Estadísticas del foro
» Miembros: 28
» Último miembro: Barneyraita
» Temas del foro: 52
» Mensajes del foro: 71

Estadísticas totales

Usuarios en línea
Actualmente hay 9 usuarios en línea.
» 0 miembro(s) | 8 invitado(s)
Google

Últimos temas
Enumerar - renombrar arch...
Foro: Bash
Último mensaje por: chujalt
09-09-2019, 13:10
» Respuestas: 0
» Vistas: 40
Menú de opciones en bash
Foro: Bash
Último mensaje por: chujalt
09-09-2019, 00:29
» Respuestas: 0
» Vistas: 37
Ejecutar python desde php
Foro: PHP
Último mensaje por: chujalt
24-08-2019, 19:42
» Respuestas: 0
» Vistas: 74
Web scraping con python B...
Foro: Python
Último mensaje por: chujalt
10-08-2019, 20:44
» Respuestas: 0
» Vistas: 112
Web scraping con python y...
Foro: Python
Último mensaje por: chujalt
05-08-2019, 21:13
» Respuestas: 0
» Vistas: 113
Uno mas por aqui
Foro: Presentaciones
Último mensaje por: AdrianSoloLinux
02-04-2019, 15:28
» Respuestas: 2
» Vistas: 923
Herramientas libres
Foro: Charla
Último mensaje por: chujalt
14-01-2019, 23:37
» Respuestas: 5
» Vistas: 1,535
Me presento
Foro: Presentaciones
Último mensaje por: chujalt
22-12-2018, 20:55
» Respuestas: 1
» Vistas: 772
Hola compae !!
Foro: Presentaciones
Último mensaje por: chujalt
27-10-2018, 19:12
» Respuestas: 3
» Vistas: 2,475
Instalar micropython en W...
Foro: Wemos
Último mensaje por: chujalt
23-10-2018, 16:48
» Respuestas: 0
» Vistas: 642

 
  Enumerar - renombrar archivos de directorio en bash
Enviado por: chujalt - 09-09-2019, 13:10 - Foro: Bash - Sin respuestas

Saludos.

Vamos a ver un script en bash el cual ordena los archivos de un directorio, lo que hace es enumerarlos, es decir, mantiene el nombre del fichero pero le pone delante el número de orden, 1-_-unarchivo, 2-_-otroarchivo... etc.

Primero veamos el script y luego comentamos:

Código:
#!/bin/sh
i=1
for f in *.*
do
  renombrar="$i"-_-"${f#*}"
  mv "$f" "$renombrar"
  i=$((i+1))
done


Este script se debe ejecutar en el directorio donde están los archivos a enumerar.

El script enumera todos los archivos del directorio, pero si queremos que, por ejemplo, sólo enumere los archivos con extensión mp3 deberemos cambiar la línea for f in *.* por for f in *.mp3 

Otro ejemplo, vamos a suponer que en ese directorio hay varios tipos de archivos (mp3, mp4, wav) y queremos enumerarlos por separado. Entonces vamos a reservar la serie 1000 para los archivos mp3, la serie 2000 para mp4... etc. Entonces cambiaremos la línea que hemos comentado antes y donde pone i=1 lo cambiaremos por i=1000, para los archivos mp4 cambiaremos for f in *.* por for f in *.mp4 e i=1 por i=2000 y así sucesivamente.

Ahora vamos a suponer que por cualquier razón, por ejemplo que tenemos archivos nuevos y hay que borrar la numeración para luego volver a enumerarlos, entonces ejecutaremos este script:

Código:
#!/bin/sh
for f in *.*
do
  renombrar=${f##*-_-}
  mv "$f" "$renombrar"
done


Esto dejará el archivo con su nombre original, sin la numeración. Acordaros que como está el script quitará la numeración a todos los archivos, si queréis hacerlo en una extensión en concreto deberéis ponerla.

Bueno, ya está, espero que le sirva a alguien.

Saludos.

Imprimir

  Menú de opciones en bash
Enviado por: chujalt - 09-09-2019, 00:29 - Foro: Bash - Sin respuestas

Saludos.

Vamos a hacer un menú de opciones en bash, es un menú bastante sencillo, pero demuestra todo el potencial que tiene.

El script es este:

Código:
#!/bin/bash

MENU="SELECCIONAR UNA OPCION DEL MENU: "
while :
do
  echo -e " \e[101;92m MENU PRINCIPAL \e[0m"
  PS3=$MENU

  select option in "Menu 1" "Menu 2" "Menu 3" "salir"
  do
    case $REPLY in 
      1) # menu 1
         echo -e "\e[30;107m Has pulsado la opcion $option \e[0m"
         sleep 2
         clear
         break
         ;;
      2) # menu 2
         echo -e " \e[30;107m Has pulsado la opcion $option \e[0m"
         sleep 2
         clear
         break
         ;;
      3) # menu 3
         echo -e " \e[30;107m Has pulsado la opcion $option \e[0m"
         sleep 2
         clear
         break
         ;;
      4) # salir
         clear
         break 2  #  sale del script
         ;;
      *) # tecla erronea
         echo -e "\e[1;31mHas pulsado una tecla erronea [${REPLY}]\e[0m"
         sleep 2
         clear
         break
         ;;
    esac
  done
done

exit 0
 

Al ejecutarlo nos saldrá este menú en la ventana del terminal

[Imagen: terminal_1.png]



Como vemos tenemos 4 opciones, menú 1, 2, 3 y la opción de salir. Vamos a pulsar la opción 1


[Imagen: terminal_2.png]



Si pulsamos la opción 4 saldremos del programa y si pulsamos cualquier otra tecla que no sea de las cuatro opciones nos informará que hemos pulsado una tecla errónea y tendremos la oportunidad de volver a seleccionar una opción.

Saludos.

Imprimir

  Ejecutar python desde php
Enviado por: chujalt - 24-08-2019, 19:42 - Foro: PHP - Sin respuestas

Saludos

Vamos a ejecutar un programa python desde php e imprimir las salidas que tengan dicho programa.

Primero el programa python, como veréis es muy sencillo, sólo imprime unas lineas, asigna un valor a una variable y la imprime 

Código:
#! /usr/bin/env python
print ("Soy Python me han llamado desde PHP. Linea 1")
print ("Soy Python me han llamado desde PHP. Linea 2")
print ("Soy Python me han llamado desde PHP. Linea 3")
print ("Soy Python me han llamado desde PHP. Linea 4")
print ("Soy Python me han llamado desde PHP. Linea 5")
print ("Soy Python me han llamado desde PHP. Linea 6")
print ("Soy Python me han llamado desde PHP. Linea 7")
print ("Soy Python me han llamado desde PHP. Linea 8")
print ("Soy Python me han llamado desde PHP. Linea 9")
print ("Soy Python me han llamado desde PHP. Linea 10")

pepe = "Hola soy Pepe"
print (pepe)


Bien, ahora supongamos que queremos imprimir desde php la salida que pone "print ("Soy Python me han llamado desde PHP. Linea 4")". Entonces en nuestro código php deberíamos poner

Código:
<?php
$salida = array(); //contendrá cada linea salida desde la aplicación en Python
exec("python /var/www/html/phppython/contar.py", $salida);
echo $salida[3]."<br>";    }
?>


Lo que nos daría un resultado de 

Cita:Soy Python me han llamado desde PHP. Linea 4

Fijaros que en la última línea php he puesto $salida[3], acordaros que los arrays empiezan por el cero.

Si quisiéramos imprimir todas las salidas del programa python deberíamos hacer un bucle for

Código:
<?php
$salida = array(); //contendrá cada linea salida desde la aplicación en Python
exec("python /var/www/html/phppython/contar.py", $salida);
for($i = 0; $i < count($salida); $i++){
        echo $salida[$i]."<br>";
    }
?>

Lo que nos daría un resultado

Cita:Soy Python me han llamado desde PHP. Linea 1
Soy Python me han llamado desde PHP. Linea 2
Soy Python me han llamado desde PHP. Linea 3
Soy Python me han llamado desde PHP. Linea 4
Soy Python me han llamado desde PHP. Linea 5
Soy Python me han llamado desde PHP. Linea 6
Soy Python me han llamado desde PHP. Linea 7
Soy Python me han llamado desde PHP. Linea 8
Soy Python me han llamado desde PHP. Linea 9
Soy Python me han llamado desde PHP. Linea 10
Hola soy Pepe


Bueno, ya está, espero que le sirva a alguien

Saludos.

Imprimir

  Web scraping con python BeautifulSoup y MySql
Enviado por: chujalt - 10-08-2019, 20:44 - Foro: Python - Sin respuestas

Saludos.

Vamos a recoger los datos que nos interesan de una página web y los vamos a meter en una base de datos MySql para su almacenamiento y posteriormente tratar esos datos como mas nos convenga.

Yo trabajo en entorno linux, pero bajo Windows o MAc debería funcionar igual.

Para poder realizar este trabajo necesitaremos tener instalado MySql en nuestro PC. Además, entre otras librerías tenemos que tener instalada la de BeautifulSoup y el conector a la base de datos MySql

Código:
sudo pip install beautifulsoup4

sudo pip install mysql-connector

En este ejemplo vamos a trabajar con la página de la Bolsa de Madrid, si la quieres ver PULSA AQUI, concretamente en la sección donde nos da la información de las cotizaciones de las empresas del Ibex 35. Esta información se actualiza cada 15 minutos, pero nosotros vamos a ejecutar nuestro script a la hora de cierre para saber como han cerrado las cotizaciones día por día.

Yo he creado una base de datos llamada "ibex35" con una tabla llamada "diario" y en esta tabla 9 campos, id, nombre, fecha, ultimo, diferencia, max, min, volumen y efectivo.

Voy a poner el script completo y luego comentaremos por bloques.

Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from bs4 import BeautifulSoup
import requests
from functools import reduce
import os
import mysql.connector
import datetime
website_url = requests.get("http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000&punto=indice").text
soup = BeautifulSoup(website_url,'lxml')
soup = soup.find('table',{'id':'ctl00_Contenido_tblAcciones'})
rows = soup.findAll("tr")[1:]
headers = {}
thead = soup.findAll("th")
for i in range(len(thead)):
   headers[i] = thead[i].text.strip().lower()
data = []
for row in rows:
   cells = row.find_all("td")
   item = {}    
   for i in headers:
       item[headers[i]] = cells[i].text  
   data.append(item)
pepe = json.dumps (data, indent=4)
diccionario = [
("\\u00fa", "u"),
("\\u00ed", "i"),
("\\u00e1", "a"),
("\\u20ac", "€")  
]
salida = reduce(lambda a, kv: a.replace(*kv), diccionario, pepe)
data = json.loads(salida)
mydb = mysql.connector.connect(
 host="localhost",
 user="usuario",
 passwd="contraseña",
 database="ibex35"
)
mycursor = mydb.cursor()
for device in data:
  fecha = datetime.datetime.strptime(device["fecha"], '%d/%m/%Y')
  sql = "INSERT INTO diario (nombre, fecha, ultimo, diferencia, max, min, volumen, efectivo) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
  val = (device["nombre"], fecha, device["ult."].replace(".", "").replace(",", "."), device["% dif."].replace(".", "").replace(",", "."), device["max."].replace(".", "").replace(",", "."), device["min."].replace(".", "").replace(",", "."), device["volumen"].replace(".", "").replace(",", "."), device["efectivo (miles €)"].replace(".", "").replace(",", "."))
  mycursor.execute(sql, val)
  mydb.commit()
  print(mycursor.rowcount, "Datos de ",device["nombre"]," introducidos correctamente")
print ("Todos los datos han sido introducidos correctamente")



BLOQUE 1

Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from bs4 import BeautifulSoup
import requests
from functools import reduce
import os
import mysql.connector
import datetime
website_url = requests.get("http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000&punto=indice").text
soup = BeautifulSoup(website_url,'lxml')
soup = soup.find('table',{'id':'ctl00_Contenido_tblAcciones'})

En este bloque cargamos todas las librerías necesarias, cargamos la página y metemos en una variable la tabla que nos interesa, concretamente la que tiene id = ctl00_Contenido_tblAcciones.



BLOQUE 2 

Código:
rows = soup.findAll("tr")[1:]
headers = {}
thead = soup.findAll("th")
for i in range(len(thead)):
   headers[i] = thead[i].text.strip().lower()
data = []
for row in rows:
   cells = row.find_all("td")
   item = {}    
   for i in headers:
       item[headers[i]] = cells[i].text  
   data.append(item)
pepe = json.dumps (data, indent=4)  

En este bloque con todos los datos almacenados de la tabla creamos un json con la estructura cabecera tabla / valor, eso por cada fila de la tabla.



BLOQUE 3 

Código:
diccionario = [
("\\u00fa", "u"),
("\\u00ed", "i"),
("\\u00e1", "a"),
("\\u20ac", "€")  
]
salida = reduce(lambda a, kv: a.replace(*kv), diccionario, pepe)
data = json.loads(salida)
mydb = mysql.connector.connect(
 host="localhost",
 user="usuario",
 passwd="contraseña",
 database="ibex35"
)
mycursor = mydb.cursor()
for device in data:
  fecha = datetime.datetime.strptime(device["fecha"], '%d/%m/%Y')
  sql = "INSERT INTO diario (nombre, fecha, ultimo, diferencia, max, min, volumen, efectivo) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
  val = (device["nombre"], fecha, device["ult."].replace(".", "").replace(",", "."), device["% dif."].replace(".", "").replace(",", "."), device["max."].replace(".", "").replace(",", "."), device["min."].replace(".", "").replace(",", "."), device["volumen"].replace(".", "").replace(",", "."), device["efectivo (miles €)"].replace(".", "").replace(",", "."))
  mycursor.execute(sql, val)
  mydb.commit()
  print(mycursor.rowcount, "Datos de ",device["nombre"]," introducidos correctamente")
print ("Todos los datos han sido introducidos correctamente")

En este bloque lo primero que hacemos, como la página web tiene acentos y python no es amigo de ellos, ha escrito símbolos raros en las palabras que tenían acentos, cambiamos esos símbolos por las sílabas pero sin los acentos.
Volvemos a cargar en json, conectamos con la base de datos y hacemos un bucle for para hacer insert por cada fila de la tabla.

Nótese que debemos de hacer varios "replace" pues la información de la página nos da los miles en puntos y los decimales con comas, cosa que no admite la base de datos mysql, por lo que quitamos los puntos y las comas las transformamos en puntos. También transformamos el campo fecha en tipo "date".

Bueno, ya está, espero que le sirva a alguien.

Saludos.

Imprimir

  Web scraping con python y selenium
Enviado por: chujalt - 05-08-2019, 21:13 - Foro: Python - Sin respuestas

Saludos.

Vamos a utilizar python y selenium (que es una librería de python) para loguearnos y escribir un post en un foro, todo ello de manera automática.

El script está probado en este mismo foro y funciona perfectamente, aunque en el que se publica aquí he puesto una dirección ficticia.

Lo que vamos a necesitar es, además de tener python instalado, instalarnos la librería selenium

Código:
sudo pip install selenium

y tener el controlador geckodriver, lo podeís bajar de AQUÍ.

Este trabajo está hecho bajo entorno linux y hay que tener ciertas nociones de html porque selenium busca entre los tags para poder trabajar. Lo que busca son elementos por name, id, texto del enlace, texto parcial del enlace, xpath, CSS, tagname y Classname.

Voy a poner en script completo y luego iremos linea por linea.

Código:
#!/usr/bin/env python    
from selenium import webdriver
import time
driver = webdriver.Firefox(executable_path='/home/chujalt/geckodriver')
driver.get('https://paginaweb.com')
link = driver.find_element_by_link_text('Iniciar sesión').click()
time.sleep(2)
driver.find_element_by_id('quick_login_username').send_keys("Pepito")
driver.find_element_by_id('quick_login_password').send_keys("contraseña_de_Pepito")
driver.find_element_by_name('submit').click()
time.sleep(5)
driver.find_element_by_link_text('Chistes').click()
time.sleep(2)
driver.find_element_by_class_name('new_thread_button').click()
time.sleep(5)
driver.find_element_by_name('subject').send_keys("Chiste de Pepito")
driver.find_element_by_xpath("//iframe").send_keys("Hola, este es mi primer chiste")
driver.find_element_by_name('submit').click()
time.sleep(2)
driver.close()

Importamos webdriver de selenium
Código:
from selenium import webdriver

Importamos Time
Código:
import time

Vamos a trabajar con Firefox y le decimos donde está el ejecutable geckodriver
Código:
driver = webdriver.Firefox(executable_path='/home/chujalt/geckodriver')

Le decimos la página web a abrir
Código:
driver.get('https://paginaweb.com')

Buscamos un enlace que tenga el texto "Iniciar sesión" y que lo pulse
Código:
link = driver.find_element_by_link_text('Iniciar sesión').click()

Esperamos 2 segundos a que se cargue la página de autentificación
Código:
time.sleep(2)

En el formulario, la id de la caja de texto donde va el usuario es "quick_login_username" y le enviamos nuestro usuario
Código:
driver.find_element_by_id('quick_login_username').send_keys("Pepito")

En el formulario, la id de la caja de texto donde va la contraseña es "quick_login_password" y le enviamos nuestra contraseña
Código:
driver.find_element_by_id('quick_login_password').send_keys("contraseña_de_Pepito")

En el formulario, el botón de enviar el name es "submit" y hacemos click en él
Código:
driver.find_element_by_name('submit').click()

Esperamos 5 segundos a que la autentificación se realice y se vuelva a cargar la página
Código:
time.sleep(5)

Vamos a postear un chiste, por lo que vamos a ir a la sección chistes, buscamos un enlace con el texto "Chistes" y hacemos click en él
Código:
driver.find_element_by_link_text('Chistes').click()

Esperamos 2 segundos a que se cargue la sección chistes
Código:
time.sleep(2)

El botón para crear un nuevo hilo es una class con el nombre "new_thread_button" lo buscamos y hacemos click en él
Código:
driver.find_element_by_class_name('new_thread_button').click()

Esperamos 5 segundos a que se cargue la caja para hacer los post
Código:
time.sleep(5)

En la caja para hacer posts, la caja de texto para poner el título del post tiene el name "subject", lo buscamos y enviamos el título
Código:
driver.find_element_by_name('subject').send_keys("Chiste de Pepito")

El post en si está en un iframe, lo buscamos por el path, que puede ser absoluto o relativo (es este caso relativo), y le enviamos el texto
Código:
driver.find_element_by_xpath("//iframe").send_keys("Hola, este es mi primer chiste")

Hacemos click en el botón de envío cuyo name es submit
Código:
driver.find_element_by_name('submit').click()

Esperamos 2 segundos para que se realice la grabación del post
Código:
time.sleep(2)

Y cerramos el navegador y la aplicación
Código:
driver.close()

Con esto habremos conseguido identificarnos y realizar un post.
Saludos.

Imprimir

  Uno mas por aqui
Enviado por: AdrianSoloLinux - 30-03-2019, 17:21 - Foro: Presentaciones - Respuestas (2)

Buena a todos. Me presento soy Adrian, encantado de estar por aqui.
Un saludo y nos leemos por el foro

Imprimir

  Herramientas libres
Enviado por: Swadm - 11-01-2019, 03:32 - Foro: Charla - Respuestas (5)

Hola a todos,

Aún no he tenido tiempo para aportar, sin embargo, quería conocer un poco sobre las herramientas libres que utilizan.

Actualmente me he adentrado en administración de servidores (gnu/linux) y estoy migrando máquinas virtuales KVM a PROXMOX. Ésto me ha parecido ventajoso en el sentido de que se puede formar un cluster y mover las máquinas virtuales (incluso contenedores LXC) en caliente sin tanta preocupación. La administración se convierte algo más sencilla de realizar, incluso a la hora de extender volúmenes lógicos.

También, he estado utilizando mucho docker en microservicios para independizarme del servicio en sí y obtener de manera persistente la configuración y volúmenes.

Me encantaría conocer qué herramientas libres utilizan, qué perspectivas tienen sobre las mencionadas y espero que puedan cuestionar mi visión sobre las mismas.

Saludos!

Imprimir

  Me presento
Enviado por: Swadm - 21-12-2018, 00:43 - Foro: Presentaciones - Respuestas (1)

Hola,
llegué a esta pequeña comunidad mientras estaba investigando y decidí quedarme. En cuanto a mi persona, puedo decir que mi placer se encuentra en probar software libre y adquirir nuevos conocimientos.
Espero compartir algunos conocimientos que pueden ser útiles y debatir sobre temas relacionados al mundo de la informática.

Saludos!  Sonrisa
Swadm

Imprimir