Categorías
hoy aprendí ...

… a bajar videos de IG

Tengo algunos videos guardados de artistas marciales en una colección de Instagram que quería usar como referencia para un proyecto de historieta que estoy realizando. Ante la dificulta de poner pausa y avanzar/retrocedes cuadro a cuadro en las partes que me interesaba analizar me puse a investigar la forma de bajar los videos.

Me encuentro que existen servicios web que se encargan de hacerlo pero la verdad es que prefiero no usarlos y además tienen la restricción de que el video tiene que ser de un posteo público.

En otros sitios más tech (dev.to, stackoverflow)comentan que se puede por medio de inspeccionar el código fuente y buscar la URL del MP4. El problema era que esas recomendaciones eran de hace unos años y hoy (2021) no funcionan de manera tan directa, ya que las URL del elemento <video> apunta a un CDN con un una URL blob y chorizo de parámetros. Incluso hay uno que opta por utilizar el VLC para descargar el streaming del video.

La pista que daban los sitios tech era ir a INSTAGRAM al posteo del video por navegador web y ver en el panel de DEV del navegador (F12) la solapa RED (NETWORK) los peticiones y respuestas del servidor filtrando por la extensión mp4.

Al momento de recargar la página para ver las peticiones empiezan a aparecer muchas peticiones mp4, correspondientes a las diferentes resoluciones disponibles de video (aunque sólo se carga una) y también las correspondientes al audio por separado (si es que hubiera, como en la mayoría de los videos).

Hice la prueba de copiar la URL de uno de los MP4 y pegarla para que el navegador empezara a cargar algo pero inmediatamente aparecía un error «No se encontró el video con formato y tipo MIME soportados». ¡Qué desilusión! Pero testarudo de mi me puse a tratar de entender los parámetros de la URL:

(la siguiente URL la he editado con XXXXX para preservar la privacidad del video)

instagram.feze12-1.fna.fbcdn.net/v/t50.2886-16/XXXXXXXXX_XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXX_n.mp4?_nc_ht=instagram.feze12-1.fna.fbcdn.net&_nc_cat=111&_nc_ohc=lhApsAN-thMAX91AbD7&edm=AABBvjUBAAAA&ccb=7-4&oh=af57857dbcb53d99d00d05bcc6dac772&oe=60C76940&_nc_sid=83d603&bytestart=1562297&byteend=1602089

Me puse a probar eliminar algunos y empecé por el final, ya que eran los únicos que tenían algún significado concreto: byteStart y byteEnd, y ¡oh sorpresa!… ¡Funcionó!

EL ASUNTO pasa por copiar alguna de esas URL en una nueva pestaña y borrar los 2 últimos parámetros: &bytestart=XXXXXX&byteend=XXXXXXX

Las XXXXX son unos números de timing que pueden ser cualquier cosa y no afectan.

El navegador empieza entonces la carga del video (o audio) y entonces uno puede hacer «Archivo > Guardar» y descargar el video completo.

OTRO ASUNTO: no hay ninguna pista (o por lo menos no la descubrí) de cual URL en el panel de RED corresponde a qué resolución de video, o si corresponde al audio, así que toca probar.

Recomendaciones:

  • tener el panel de desarrollador abierto en la solapa RED.
  • tener sólo cargado el posteo del video (ir al link específico)
  • detener el video inmediatamente de la carga, porque con cada loop, el panel de RED empieza a llenar nuevas URL de peticiones.

Y chau!

Nota mental: esto da para hacer un user script de navegador con un botón.


Actualización 21:01

Era lógico que alguien ya lo había hecho a ese user script: https://greasyfork.org/es/scripts/406535-instagram-download-button

Gracias!

Categorías
hoy aprendí ...

… a agregar un botón de compartir

Amiguito SHARE para meter como link y que en dispositivo lance las opciones de compartir.

if(navigator.share !== undefined) {
    document.addEventListener('DOMContentLoaded', e => {
      var shareBtn = document.querySelector('div.share a');
      shareBtn.addEventListener('click', clickEvent => {
        clickEvent.preventDefault();
        navigator.share({title: document.title, text: window.location.href, url: window.location.href})
          .then(() => console.log('Successful share'),
           error => console.log('Error sharing:', error));
      });
    });
}

Esta joyita la encontré en https://paul.kinlan.me/navigator.share. ¡Gracias!

Le hice una modificación para tratar de incorporarlo en el plugin Storefront Product Share combinando algo de PHP y agregando:

		<div class="storefront-product-sharing">
			<ul>
				<li class="twitter"><a href="<?php echo esc_url( $twitter_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Share on Twitter', 'storefront-product-sharing' ); ?></a></li>
				<li class="facebook"><a href="<?php echo esc_url( $facebook_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Share on Facebook', 'storefront-product-sharing' ); ?></a></li>
				<li class="pinterest"><a href="<?php echo esc_url( $pinterest_url ); ?>" target="_blank" rel="noopener noreferrer"><?php _e( 'Pin this product', 'storefront-product-sharing' ); ?></a></li>
				<li class="email"><a href="<?php echo esc_url( $email_url ); ?>"><?php _e( 'Share via Email', 'storefront-product-sharing' ); ?></a></li>
        <li class="share-redes"><a href="#"><i class="fas fa-share-alt-square"></i> Compartir</a></li>
			</ul>
		</div>
    <script>
      if(navigator.share !== undefined) {
        document.addEventListener('DOMContentLoaded', e => {
          var shareBtn = document.querySelector('.share-redes a');
          shareBtn.addEventListener('click', clickEvent => {
            clickEvent.preventDefault();
            navigator.share({
              title: '<?php echo $product_title; ?>', 
              text: '<?php echo $product_url; ?>', 
              url: '<?php echo $product_url; ?>'
            })
            .then(() => console.log('Successful share'),
            error => console.log('Error sharing:', error));
          });
        });
      } else {
        console.log('Share API no soportado');
        var shareBtn  = document.querySelector('.share-redes');
        shareBtn.textContent = '';
      }
    </script>

Categorías
hoy aprendí ...

… a complicar las cosas en una hoja de cálculo

Necesitaba indicar una celta de manera «dinámica», es decir, formando el nombre dependiendo de la combinación del contenido de otras celdas.

Lo que tenía es una serie de datos encolumnados y totales parciales cada cierta cantidad regular de celdas. Me interesaba tener luego un resumen de esos totales parciales para confeccionar una tabla.

Por ejemplo: en la la página datos tiene la columna A y cada 20 filas hay un total parcial, entonces en la tabla de resumen (que está en otra hoja llamada resumen) la celda en fila 1 tiene que tomar los datos de $datos.A20, la fila 2 tiene que tomar los datos de $datos.A40, y así.

La solución que encontré es utilizar la función ADDRESS que permite indicar el nombre usando datos. Buscando ejemplos prácticos encontré https://forum.openoffice.org/es/forum/viewtopic.php?f=21&t=8091

Encontré esto otro que podría resultar interesante también aunque no lo puse en práctica: https://help.libreoffice.org/6.1/es/text/scalc/guide/value_with_name.html

Otra cosa interesante es: https://blog.open-office.es/calc/lista-desplegable-condicionada-en-openoffice-libreoffice-calc

Me falta completar con la solución que usé

Categorías
hoy aprendí ...

… a redimensionar varias imágenes con un script bash

Y tenía que procesar varias imágenes escaneadas para bajarles el tamaño de las dimensiones y archivo.

Con ImageMagick en Linux esto se logra con un script bash que recorra los archivos en una carpeta. Me topé con esta solución que me pareció bastante sencilla, hay que hacer algunas cosas previas de manera ‘manual’ pero funciona.

El script trabaja y busca las imágenes sobre una carpeta que se indica dentro del script, con lo que hay que personalizarlo. Tener la precaución de que las imágenes sean copias, porque las reemplaza.

#!/usr/bin/env bash
# Purpose: batch image resizer
# Source: https://guides.wp-bullet.com
# Author: Mike

# absolute path to image folder
FOLDER="/var/www/wp-bullet.com/wp-content/uploads"

# max width
WIDTH=540

# max height
HEIGHT=300

#resize png or jpg to either height or width, keeps proportions using imagemagick
#find ${FOLDER} -iname '*.jpg' -o -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

#resize png to either height or width, keeps proportions using imagemagick
#find ${FOLDER} -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

#resize jpg only to either height or width, keeps proportions using imagemagick
find ${FOLDER} -iname '*.jpg' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

# alternative
#mogrify -path ${FOLDER} -resize ${WIDTH}x${HEIGHT}% *.png -verbose

Gracias:

https://guides.wp-bullet.com/batch-resize-images-using-linux-command-line-and-imagemagick/

Y chau.

Categorías
miArte

Mis comienzos en la historieta – Robotito

Robotito no fue la primera historieta que hice pero si la primera que encaré como una serie.

TL;DR: empecé a dibujar historietas porque tenía muchas ganas e hice un serie con 13 historias. Al final del posteo las pueden ver.

Lo que sigue es una experiencia de arqueología y reminiscencia tratando de ordenar un poco y entender qué sucedió en aquella época, así que no puedo asegurar ninguna tipo de exactitud.

Se lo dedico a toma mi familia porque en esa época hice lo que hice gracias a ellos. La culpa es de ustedes!


No tengo anotado el año, pero todo me hace pensar que fue durante 1990 1989 (gracias madre por hacerme recordar) que al iniciar las clases en mi último año de primaria (7º grado en aquel entonces) comencé a dibujar las historietas usando media hoja de la carpeta de matemáticas con birome en plena clase o en los ratos libres en el colegio.

En el curso eramos 3 o 4 que nos disputábamos el título de mejor dibujante, copiando los personajes de los dibujos animados de robots del momento en los años anteriores: Mazinger Z, Transformes, Gobots, Dai Apolon, Robotech, entre otros. Pero ninguno había hecho una historieta todavía, y yo venía de unas vacaciones de verano muy productivas en términos de imaginación inventando historias y juegos con mis hermanas y hermano juntos a mis primos y primas de San Juan y Córdoba, así que comencé a contar las historias de Robotito, fruto de aventuras y juegos de la época dorada de cualquier niño preadolescente.

Robotito nace a partir de unos robots chiquitos y casi minimalistas que armábamos con mi primo Osvaldo, usando unos juegos de encastre muy simple llamado Mis cilindritos (acabo de ver en Mercado Libre que se consiguen todavía, chan!), y habíamos comenzado a dibujarlos ese verano.

Tratando de mantener el personaje los más simple posible para que resultara más fácil le repetición del mismo empecé a incorporar las cosas que veía en las historietas que leía hasta ese momento: Patoruzú, Patoruzito, Isidoro, Afanancio, Jaimito, Super Hijitus, las tiras que aparecían en Billiken y Anteojito, las tiras de los diarios Clarín en casa, La Voz del Interior (Córdoba) y La Voz Diario de Cuyo (San Juan).

Secuencias «casi de animación», vistas superiores, intentos de perspectivas, cuadros de texto de narrador en off, suspense! Todo de modo directo, sin boceto ni nada, de cabeza a la pileta.

Lo cierto que el primer capítulo fue un éxito entre mis compañeros y pronto estuve fotocopiando para repartirlo al curso, lo cual me incentivó a hacer el segundo capítulo, creo que al día siguiente. Los recuerdos son muy vagos.

El argumento era muy sencillo, crear otro villano y que este tratara de tener éxito donde el anterior no (¡gracias Mazinger Z!), así fue que empecé a «inventar» más personajes que tuvieran alguna característica propia.

Para poner en contexto: 1989 fue el estreno de Batman de Tim Burton y para cebar el público habían estado pasando la serie de Batman con Adam West todo el año (y siguieron después), así que mi segundo villano pienso que se inspiró en El Guasón interpretado por César Romero.

Para el tercer capítulo ya tenía «logo» de Robotito, o por lo menos una forma «original» de escribir el nombre en la presentación.

Aunque lo iba cambiando un poco entre capítulo y capítulo.

A partir del capítulo 4 ya la historia se extendía al otro lado de la hoja, y empezaba a incorporar más «inspiraciones» e influencias del momento: El inspector Gadget la rompía con todos los artilugios del sombrero, así que Robotito tenía que tener eso también. Y se nota que habrán pasado una de La Guerra de las Galaxias porque puse mi propia batalla de sables láser.

Mientras el catálogo de villanos crecía también, alimentándose de Robotech y Mazinger Z.

No tengo recuerdo ni puedo imaginar con qué frecuencia hacía cada capítulo, pero si que fue algo continuo, con pocos días de diferencia entre cada capítulo. Estaba cebado: había logrado hacer una serie de historietas con personajes y era un éxito en mi entorno. Llegué a realizar 13 capítulos, este último especial de 4 hojas, aunque la primera hoja sólo sobrevivió hasta hoy como fotocopias y el capítulo 8 se perdió. El nº 10 fue un especial más que una historieta, donde intenté dar algunas respuestas acerca del «mundo» de Robotito.

Incluso llegué a pensar una moneda para se mundo de robotitos, y también metía personajes de relleno con comentarios inspirado en Mortadelo y Filemón Francisco Ibáñez.

Mientras realizaba la serie de Robotito también practicaba dibujar mis personajes favoritos, pero no tengo guardado nada de eso.

Con la práctica fui mejorando e incorporando recursos gráficos y detalles. Intenté hacer una remake del primer capítulo pero lo dejé inconcluso. Había comenzado a hacerle cambios y pensar otras ideas. Creo que no quise avanzar con esos cambios. Había intentado también un remake del capítulo 13 que también dejé por la mitad.

Al verano siguiente, en el ’90, ya estaba preparando más historietas de otros personajes basados en videojuegos, tanto de la Atari 2600 que tuve como de los fichine y más películas.

Nos habíamos mudado de casa y comencé a ir al Centro Cultural Julián Centeya, en San Cristobal, donde con mis hermanos hacíamos varios talleres. A mitad del ’90 aparece en la cartelera que se iniciaba el taller de historieta, dictado por El Marinero Turco. No tuve vuelta atrás con el dibujo y la historieta a partir de ese momento. Pero eso lo dejo para futuros posteos, la carpeta de recuerdo recién se está abriendo.