jueves, 16 de mayo de 2019

Día 11 - Miércoles 15 de mayo 2019

Últimas revisiones

Integración de la biblioteca al código

   Hoy recibí el código de mi compañera de equipo y se realizaron algunas correcciones para ajustarlo al cógido actual y las demás funciones. Para que los videos de la biblioteca se pudieran reproducir tuve que agregar la dirección y la fuente en los atributos del video. Hubo complicaciones a la hora de hacer que se pudiera ejecutar el boton de siguiente video en la biblioteca, pero al final se pudo resolver adecuadamente.

Conclusiones

   Lo más difícil de esta parte fue el tener que adecuar los parámetros de ambos códigos para que no se repitieran nombres de funciones o variables. Además de tener en cuenta  todo lo que es el método que utiliza la otra persona. Creo que es importante mantener la comunicación del avance del proyecto en el transcurso de este.

Día 10 - Martes 14 de mayo 2019

Revisiones de funcionalidad

'Try' y 'except' 

    Al querer modificar el nombre de un video, eliminarlo o agregarlo a una lista, primero hay que seleccionar el video para después pulsar el botón con la funcionalidad que desee. En caso de pulsar un botón sin haber seleccionado un ítem en la consola de python saldrá un error de índice. Para arreglar este error se usará los comandos vistos en la clase de programación el día de hoy, 'try' y 'except' que significan intentar y excepto, respectivamente. Al hacer esto cada vez que ocurra la excepción 'IndexError' se tirará una ventana de error, el cual comunica al usuario que no ha seleccionado ningún elemento.
 

Límite de solicitudes del API de YouTube

   El API de youtube tiene un límite de pedidos que se pueden realizar en un día, que es de 10000, por lo tanto alcanzados este límite, no se podrán realizar búsquedas de videos y tampoco funcionarán las sugerencias. Este error provoca que el proceso se detenga y los que no son dependientes del API, como por ejemplo el reproductor o la búsqueda de videos en biblioteca, también dejan de hacer su labor por este error. A pesar de esto no creo que sea realmente urgente arreglar este error, ya que solo ocurre cuando se alcanza este límite de solicitudes.

Día 9 - Lunes 13 de mayo 2019

Sugerencias

   Para las sugerencias utilicé el mismo buscador de youtube para así imprimir los resultados en el cuadro de la ventana de sugerencias. Al parecer existe una forma para buscar los videos relacionados por medio del ID del video, pero no me sirvió de esa manera, además de que si lo hacía de ese modo, no podría dar sugerencias para los videos de fuente local. Así que opté por hacer las búsquedas por medio del titulo del video. Tuve que hacer una función de curselection para que pudiera seleccionar y reproducir el video dentro de la ventana de sugerencias. Esta ventana se abre automáticamente cada vez que se reproduce un video, como pensé que podría llegar a ser molesto le adherí un botón de cerrar, aunque esta ventana se cierra cuando se selecciona el botón de cerrar del reproductor. Hubo un problema relacionado con la función de siguiente video debido a que cuando se reproduce un video de sugerencias, pero se quiere ver el próximo video de la lista de sugerencias, este sigue en la lista de búsqueda, así que modifiqué la función para que se sustituyera la lista de búsqueda con la de sugerencias.

Día 8 - Domingo 12 de mayo 2019

Reproduccción en cola

   Para que los videos tanto de las listas como de la biblioteca y los resultados de búsqueda se pudiesen reproducir en cola, agregué un dos botones, uno de siguiente video y otro de último video visualizado. En función de guardar el e último video cree una lista dentro del código, así al escoger ver el último video este solo tendría que preguntarle a la lista por el último elemento agregado, solo que, si es el primer video que se está reproduciendo y en la lista no hay elementos anteriores, este botón no se activará. En el comando de siguiente video, lo que hice fue suma uno más al indice actual lo que haría que buscara en las listas el video que está en la posición siguiente al video actual. Pero para poder reproducir videos sin seleccionarlo manualmente hay que tomar en cuenta que los videos tienen diferentes fuentes y métodos para iniciarse, por esto definí varias variables universales las cuales guardarían la información acerca de su fuente, si es de youtube o local, y su origen, si vienen de la ventana de búsque, de listas o de la biblioteca.

pack()

   Para mejorar la estética de los botones en las ventanas investigué acerca del modo de ajuste pack().
Este es muy útil a la hora de situar elemento en un espacio más reducido, como cuadros o ventanas de soporte, que contienen muchos elementos, pero por su tamaño es difícil situar estos con place(). Este presenta comandos para facilitar su manejo, como 'side'; el cual sirve para definir en que lado del espacio va a estar, 'ipadx' y 'ipady'; que son para definir el espacio interno del elemento, por ejemplo si dentro del elemento hay una palabra este ajuste hace que la palabra puede tener más distancia de los bordes del elemento, la 'y' se refiere al ámbito vertical y la 'x' al horizontal, y 'padx' y 'pady'; este tiene un efecto similar al 'ipadx' o 'ipady', solamente que este afecta al exterior del elemento, la distancia que este tendría de los demás elementos a su alrededor.

Enlace:

https://effbot.org/tkinterbook/pack.htm


miércoles, 15 de mayo de 2019

Día 7 - Sábado 11 de mayo 2019

Reproductor de video

   Gracias a la ayuda de mi hermano, realicé un código para reproducir los videos de youtube en la interfaz gráfica. También, codifiqué una ventana en la cual se reproduciría el video con botones de salir, abrir, reproducir, pausar, detener y volumen. Esos botones estarían puestos en un cuadro para que la interfaz de reproducción de video sea más estética. Había también una barra para determinar el tiempo del video que deseaba ver, pero al no servir sin importar los arreglos que realicé, opté por eliminarla del código. Al cerrar el video por medio del botón cerrar que está por defecto, el video seguía reproduciéndose, por esto aunque no se pudiera ver en la pantalla, se podía escuchar el audio de este, por lo tanto, cree un botón en la ventada de reproducción,  la cual cerraría la ventana y detendría el video.

Eliminar elementos del xml

   Para eliminar elementos del xml empleo una función la cual coge el video por medio de getchildren. Al principio no me había dado cuenta de esto, pero cuando elimino un elemento, aparece una advertencia en el python shell el cual dice que esta acción de get choldren va a ser eliminada en futuras versiones. Luego de eso investigué acerca de otras formas de eliminar elementos del xml, pero al parecer esa es la mejor opción. Así que mientras sirva, no voy a cambiar esa parte del código.

Enlaces para reproductor de video:

https://linuxconfig.org/how-to-play-audio-with-vlc-in-python
http://git.videolan.org/?p=vlc/bindings/python.git;a=blob;f=examples/tkvlc.py;h=55314cab09948fc2b7c84f14a76c6d1a7cbba127;hb=HEAD

Día 6 - Viernes 10 de mayo 2019

Listas de videos y xml

   Por medio del código que realizó mi compañera reconocí la necesidad de hacer uso del 'xml'. Este es un tipo de archivo parecido al html, contiene información de texto que es de fácil acceso para los programas. Con este conocimiento pude realizar las listas de videos, en estas se van a poder agregar los videos buscados de youtube a las listas y, a su vez, guardarlos en un archivo xml para que esta información no se pierda al cerrar la corrida del programa.

Curselection y bind

   el comando curselection sirve para seleccionar elementos que se encuentran en una listbox y bind es para elegir la forma en la que se va a dar esa selección. Curselection puede actuar de manera independiente, así  que la utilicé para elegir los videos que se van a querer agregar e ingresarlos por medio de un botón que desplegaría la ventana de listas para posteriormente elegir la lista a la que se le va a agregar el video.
   Bind es un comando muy interesante y útil a la hora de tratar con interfaces gráficas, para brindarle al usuario una mayor comodidad. Este cuenta con diferentes opciones para seleccionar objetos tales como: doble click, click derecho, click izquierdo, boton de enter, etc. Pero al no haber seleccionado ningún elemento y pulsar el botón agregar esto de como resultado un error, el cuál me gustaría corregir.

Enlace formas de utilizar el bind:

https://www.python-course.eu/tkinter_events_binds.php

Día 5 - Domingo 7 de mayo 2019

Imprimir el titulo del video en la listbox de tkinter

   Al intentar imprimir los títulos de los videos de youtube en la listbox de tkinter salía un error de '_tkinter.TclError'. Este decía que un caracter del título estaba fuera del rango permitido por el Tcl, que es un intérprete de lenguaje. En función de resolver esta falla lo que tuve que hacer fue una condicional en la cual se evaluara el número del caracter con ord(), el cual lo convierte a su equivalente en número decimal, y verificar que este estuviese en el rango de 0 a 65535, que es el límite del Tcl. Si no estaba dentro de este rango, sustituí el elemento con un asterisco (*). Este error se produce probablemente porque en el título se encuentra un emoji o algo parecido que está fuera del reconocimiento del Tcl.

Día 4 - Sábado 4 de mayo 2019

Buscar videos de youtube en tkinter

   Para encontrar el método para importar los resultados de las búsquedas en youtube fui a la página que se encuentra en el documento que contiene las especificaciones del proyecto. El enlace lleva a la página en donde se encuentra el API de youtube. Ahí pude encontrar fácilmente la forma para ingresar la búsqueda del tkinter en youtube. Además investigué acerca de la información que se obtiene al buscar un video de youtube por medio del video del canal 'Indian Pythonista'

Enlace del video:
https://www.youtube.com/watch?v=b_jOJNUD350

Enlace en donde encontre el código para las búsquedas de youtube:
 https://developers.google.com/youtube/v3/code_samples/python

   He  descubierto la manera para que pueda abrir el navegador desde tkinter, el problema es que no sé cómo reeproducir videos de youtube en la interfaz.

Día 3 - Jueves 2 de mayo 2019

Bases de conocimiento

  Con el material recibido de la tutoría de taller de programación, decidí empezar a experimentar cómo hacer los elementos para la interfaz gráfica. Al principio no entendía por qué no se agregaban las herramientas a la ventana pero descubrí que era debido a que no estaba poniéndolos dentro del 'mainloop', y al final resolví ese problema.

EasyGUI

  Para utilizar los comandos para abrir un archivo es necesario tener descargada la librería de easy GUI. Esto se puede hacer por medio del pip. En esta librería hay otras comandos como guardar archivo, ventana con botones, etc.

Día 2 - Miércoles 1 de mayo 2019

Especificaciones del trabajo

API

Son las siglas para ''Application Programming Interface'', es un conjunto de reglas y especificaciones en código que las aplicaciones pueden seguir para comunicarse entre ellas, quiere decir que sirve de interfaz para comunicar aplicaciones con aplicaciones, así como la interfaz que ayuda a comunicar la software con el usuario. 


Día 1 - Lunes 22 de mayo 2019

Proyecto Programado 2 GUI

¿Tkinter o PyQt5?

Para poder empezar a formar el código para hacer la interfaz gráfica primero debíamos decidir qué librería utilizar. En la tutoría que nos dieron hoy de taller nos presentaron principalmente dos opciones Tkinter, que es uno que ya viene instalado en Python, o PyQt5, el cual debemos de descargar por nosotros mismos para poder hacer uso de este. El Tkinter al parecer tiene un lenguaje más manejable, mientras que el PyQt5 posee una herramienta de diseño de ventana lo que lo hace más fácil de configurar en el sentido estético de la aplicación. Al ver unos cuantos videos en YouTube, decidimos hacer el proyecto en Tkinter.

Día 3 - Domingo 2 de junio 2019

Buscar tweets.   Al buscar un tweet manda una etiqueta como una cadena de caracteres dependiendo de si desea bucar carreras o logros. Lue...