lately scripted
• jartigag
Este verano me he dedicado en gran parte a escribir código. Principalmente he programado para el proyecto de Typosquatting que presentaré como mi TFG, pero también he tirado algunas líneas en forma de scripts (todos publicados en mi Github) que voy a comentar brevemente.
/índice:
trenca-TT
Un script para recoger los Trending Topics de Twitter. Lo empecé con la idea de poder usarlo para el proyecto de mi TFG, en la fase de
monitorización de dominios de marcas comerciales en redes sociales.
En su versión actual, pide los TTs de las localizaciones indicadas en woeids.json a través de la API de
Twitter, y los almacena en un fichero JSON o en una base de datos SQLite. Se puede ejecutar una vez o de manera continua (en principio,
SLEEP_INTERVAL=15*60
segundos), y el número de TTs o el de localizaciones puede limitarse con los argumentos -n
y -l
.
Por primera vez, he usado la librería sqlite3
en Python.
tools.py
Una simple interfaz de línea de comandos para acceder a algunas herramientas y enlaces útiles que he
recopilado. Se muestran ordenadas y clasificadas por categorías y subcategorías,
de manera que con pulsar cuatro teclas se instala y ejecuta (#wip) la herramienta escogida, o bien se abre la aplicación online deseada.
Como quería poder seleccionar entre las opciones ofrecidas de forma ágil, organicé las URLs en un JSON con dos listas por subcategoría (enlaces a
Github y enlaces externos) y cargué el fichero de la siguiente manera:
index = json.load(open("tools.json"),object_pairs_hook=OrderedDict)
Así, con tres for
anidados podía imprimir todos los elementos enumerados y gracias a OrderedDict
mantenía el orden de los elementos dentro del
diccionario index
.
También descubrí que se puede abrir un link en el navegador con webbrowser.open_new_tab('t.co')
, e “instalar” (gracias a git clone
) con
subprocess.run(["git","clone",url+".git",tool])
. Lo más difícil es definir una función run_tool()
que ejecute cualquier herramienta, en el
lenguaje y con el nombre que sea.
genBTC
Para entender algunos detalles de Bitcoin, empecé por sus fundamentos criptográficos. Primero leí sobre las direcciones de
Bitcoin y busqué cómo implementar sin librerías el
ECDSA, mediante el cual se obtiene una clave pública K
a partir de una
clave privada k
1 y la operación K=k×G
sobre una curva
elíptica. Luego aprendí a convertir
esa clave pública en una dirección de Bitcoin con codificación Base58Check. También quise probar
a convertir la clave privada en formato WIF y este en un código QR que pudiera escanear
con una app-cartera de BTCs.
@ekaitz_zarraga me indicó el libro Mastering
Bitcoin, una referencia técnica muy útil si te interesa conocer en
profundidad el funcionamiento de esta criptomoneda.
1.^ Una clave privada válida para Bitcoin es esencialmente un número aleatorio de 256 bits de entropía y menor que n≃1077<2256. Por comparar, se estima que el universo observable tiene 1080 átomos.
un poco de webdev con clojure
De tanto ver solo buenas palabras sobre Clojure, cuando me topé con este
libro pensé que era la oportunidad de iniciarme en este lenguaje
que es todo listas entre paréntesis 😂
Este es el repositorio menos desarrollado de los aquí presentes, pero como empecé sobre los ejemplos propios del
libro es fácil que alguien que lo coja con más ganas qeu yo pueda aprovecharlo.
pinger&sender
Estos dos scripts, fruto de un par de ratos muy breves, fueron adaptaciones de algunas líneas de código que había visto por ahí.
Con pinger.py buscaba si se había producido algún cambio en una página de Moodle (lo que implicaba que se habían subido las notas), y en
tal caso enviaba una alerta a través de un bot de Telegram. sender.py está extraído de email-osint-ripper
(@Quantika14), con el fin de comprobar si alguno de los emails de una lista está registrado en
Linkedin. En ambos casos usé BeautifulSoup
. Aparte de usar la librería de telegram
, en pinger.py hice peticiones con cookies mediante
urllib
, mientras que en sender.py tuve que usar mechanize
y cookielib
para hacer las peticiones, enviar el formulario de login con POST y a la
vez evitar el posible bloqueo de Linkedin.
Cualquiera puede modificar rápidamente este código para su reutilización. Yo los escribí para solventar una necesidad puntual, pero sobre todo porque
me daban pie para hacer un terrible juego de palabras 😉
[Mastodon] [Twitter] [Telegram]