Software Mi propio software para guardar Bookmarks

  • Autor de tema Autor de tema Miembro eliminado 6516 Jorge2019
  • Fecha de inicio Fecha de inicio

Miembro eliminado 6516 Jorge2019

Hola shurmanillos,

Hace poco abrí un hilo sobre el tema de guardar enlaces en modo pro, para mí llega a ser un problema considerable cuando tengo que guardar mucho contenido y clasificarlo debidamente. La participación por parte de los foreros me encantó, aportando programitas que vosotros usáis y complementando el hilo. Tenemos una buena comunidad, nos apoyamos entre nosotros. Semos los mejores. Os dejo por aquí el hilo.


Pero hay algo que me ralla, siempre me ha rallado. Todos esos programas, los que yo aporté y los que mencionasteis vosotros, mantiene comunicación con servidores externos para proporcionar el servicio. Realmente es muy dificil comprobar qué clase de información están mandando a esos servidores, imagino que servicios de telemetría, actualizaciones y demás. Pero no me mola un pelo, no me hace gracia que un servicio gratuito monitoree la manera en la que uso su programa. Por lo que me he puesto a trabajar en mi propio manager de bookmarks. Algo básico y de uso sencillo para guardar cantidades ingentes de bookmarks sin que tenga comunicación con servidores externos. Todo se guarda en el pc de uno. No tendrá sincronización con otros dispositivos mediante cuentas, ni mierdas de esas. Algo privado como dios manda.

Ya lo estoy terminando. Escrito en python y con un frontend feo y básico. Permite guardar enlaces y clasificarlos con tags.



A los interesados les puedo pasar el proyecto sin problema. Se agradecer sus aportes para completar el software, se escuchan sugerencias. Y ni que decir tiene, quien quiera modificarlo tiene mi bendición.

Ale, a correr

-----------------------------------------
Actualización
Descarga el programa con este enlace

Contiene el script en python y un ejecutable

Lo he pasado por virustotal.com y por alguna razón detecta un troyano, vamos no me jodas
podéis comprobar el código vosotros mismes
debe tratarse de un falso positivo

------------------------------------------
el código comentado

 
Última edición por un moderador:
Hola shurmanillos,

Hace poco abrí un hilo sobre el tema de guardar enlaces en modo pro, para mí llega a ser un problema considerable cuando tengo que guardar mucho contenido y clasificarlo debidamente. La participación por parte de los foreros me encantó, aportando programitas que vosotros usáis y complementando el hilo. Tenemos una buena comunidad, nos apoyamos entre nosotros. Semos los mejores. Os dejo por aquí el hilo.


Pero hay algo que me ralla, siempre me ha rallado. Todos esos programas, los que yo aporté y los que mencionasteis vosotros, mantiene comunicación con servidores externos para proporcionar el servicio. Realmente es muy dificil comprobar qué clase de información están mandando a esos servidores, imagino que servicios de telemetría, actualizaciones y demás. Pero no me mola un pelo, no me hace gracia que un servicio gratuito monitoree la manera en la que uso su programa. Por lo que me he puesto a trabajar en mi propio manager de bookmarks. Algo básico y de uso sencillo para guardar cantidades ingentes de bookmarks sin que tenga comunicación con servidores externos. Todo se guarda en el pc de uno. No tendrá sincronización con otros dispositivos mediante cuentas, ni mierdas de esas. Algo privado como dios manda.

Ya lo estoy terminando. Escrito en python y con un frontend feo y básico. Permite guardar enlaces y clasificarlos con tags.



A los interesados les puedo pasar el proyecto sin problema. Se agradecer sus aportes para completar el software, se escuchan sugerencias. Y ni que decir tiene, quien quiera modificarlo tiene mi bendición.

Ale, a correr
Me gusta, buen aporte. Mi pregunta es, tiene que correr sobre in servidor local o le arreas con un ejecutable y ya esta?.
 
VEI VITO A MANOLO POR AQUÍ?
MAAAAAAAANOOOOOOOOOOLOOOOOOOOOOOOOOOOOOOO
IMG_3931.gif
 
Me gusta, buen aporte. Mi pregunta es, tiene que correr sobre in servidor local o le arreas con un ejecutable y ya esta?.
Ejecutable
Tendrías que compilarlo para hacer un .exe para Windows
Eso ya lo dejo a elección de cada uno
Mi objetivo es que se pueda comprobar el código y que se vea que no hace cosas raras
 
Ejecutable
Tendrías que compilarlo para hacer un .exe para Windows
Eso ya lo dejo a elección de cada uno
Mi objetivo es que se pueda comprobar el código y que se vea que no hace cosas raras
Osea que las hace, eh piratilla? Jajajajaja.
 
Código:
import tkinter as tk  # Importa la biblioteca tkinter y la renombra como tk
import tkinter.simpledialog as tk_simpledialog  # Importa el módulo simpledialog de tkinter y lo renombra como tk_simpledialog
import webbrowser  # Importa el módulo webbrowser para abrir enlaces web
import pickle  # Importa el módulo pickle para la serialización de datos

class LinkStorageApp:
    def __init__(self, master):  # Método constructor de la clase
        self.master = master  # Establece la ventana principal como atributo
        self.master.title("AllTag by J19")  # Establece el título de la ventana principal

        self.links = {}  # Inicializa un diccionario para almacenar los enlaces
        self.tags = {}  # Inicializa un diccionario para almacenar las etiquetas

        self.load_data()  # Carga los datos guardados anteriormente

        self.create_widgets()  # Crea los widgets en la interfaz de usuario

    def load_data(self):  # Método para cargar datos previamente guardados
        try:
            with open("link_storage_data.pickle", "rb") as file:  # Intenta abrir el archivo de datos
                self.links, self.tags = pickle.load(file)  # Carga los datos de los enlaces y etiquetas
        except FileNotFoundError:  # Captura la excepción si el archivo no se encuentra
            pass  # Continúa sin hacer nada si no se encuentra el archivo

    def save_data(self):  # Método para guardar los datos
        with open("link_storage_data.pickle", "wb") as file:  # Abre el archivo para escribir en modo binario
            pickle.dump((self.links, self.tags), file)  # Guarda los datos de enlaces y etiquetas en el archivo

    def create_widgets(self):  # Método para crear los widgets en la interfaz de usuario
        self.master.configure(bg="#1E1E1E")  # Configura el color de fondo de la ventana principal
        
        # Botón para agregar un nuevo enlace
        self.add_link_button = tk.Button(self.master, text="Add Link", command=self.add_link, bg="#4E4E4E", fg="white")
        self.add_link_button.pack()  # Empaqueta el botón en la ventana principal

        self.tag_buttons_frame = tk.Frame(self.master, bg="#1E1E1E")  # Crea un marco para las etiquetas
        self.tag_buttons_frame.pack(fill=tk.X)  # Empaqueta el marco en la ventana principal

        # Configura la barra de desplazamiento horizontal
        self.scrollbar_x = tk.Scrollbar(self.master, orient="horizontal", command=self.canvas.xview)
        self.scrollbar_x.pack(side=tk.BOTTOM, fill=tk.X)

        # Configura la barra de desplazamiento vertical
        self.scrollbar_y = tk.Scrollbar(self.master, orient="vertical", command=self.canvas.yview)
        self.scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)

        # Configura el lienzo y la ventana deslizante
        self.canvas = tk.Canvas(self.master, bg="#1E1E1E")
        self.canvas.pack(fill=tk.BOTH, expand=True)
        self.canvas.configure(xscrollcommand=self.scrollbar_x.set, yscrollcommand=self.scrollbar_y.set)
        self.canvas.bind("<Configure>", self.on_canvas_configure)

        # Crea un marco para los enlaces
        self.frame = tk.Frame(self.canvas, bg="#1E1E1E")
        self.canvas.create_window((0, 0), window=self.frame, anchor="nw")  # Crea una ventana en el lienzo

        self.populate_tags()  # Llena el marco con las etiquetas

    def populate_tags(self):  # Método para llenar el marco con las etiquetas
        for tag in self.tags:  # Itera sobre las etiquetas almacenadas
            self.create_tag_button(tag)  # Crea un botón para cada etiqueta

    def on_canvas_configure(self, event):  # Método para configurar el lienzo cuando cambia de tamaño
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))  # Ajusta la región de desplazamiento del lienzo

    def add_link(self):  # Método para agregar un nuevo enlace
        link = tk_simpledialog.askstring("Add Link", "Enter URL:")  # Solicita al usuario que ingrese una URL
        if link:  # Si se proporciona una URL
            tag = tk_simpledialog.askstring("Add Tag", "Enter Tag:")  # Solicita al usuario que ingrese una etiqueta
            if tag:  # Si se proporciona una etiqueta
                if tag not in self.tags:  # Si la etiqueta no está en el diccionario de etiquetas
                    self.tags[tag] = "#%06x" % (hash(tag) & 0xFFFFFF)  # Genera un color hexadecimal para la etiqueta
                    self.create_tag_button(tag)  # Crea un botón para la etiqueta
                self.links[link] = tag  # Agrega el enlace y su etiqueta al diccionario de enlaces
                self.display_links()  # Muestra los enlaces en la interfaz de usuario
                self.save_data()  # Guarda los datos actualizados

    def create_tag_button(self, tag):  # Método para crear un botón de etiqueta
        tag_button = tk.Button(self.tag_buttons_frame, text=tag, command=lambda t=tag: self.filter_by_tag(t), bg=self.tags[tag], fg="black")
        tag_button.pack(side=tk.LEFT, padx=5, pady=5)  # Empaqueta el botón en el marco de etiquetas

    def display_links(self):  # Método para mostrar los enlaces en la interfaz de usuario
        for widget in self.frame.winfo_children():  # Destruye los widgets existentes en el marco
            widget.destroy()

        row = 0  # Inicializa la fila del primer enlace
        for link, tag in self.links.items():  # Itera sobre los enlaces y sus etiquetas
            label = tk.Label(self.frame, text=link, compound=tk.LEFT,
                             cursor="hand2", bg="#1E1E1E", fg="white")  # Crea una etiqueta para el enlace
            label.bind("<Button-1>", lambda e, url=link: self.open_link(url))  # Vincula la etiqueta a la función de abrir enlace
            label.grid(row=row, column=0, sticky="w")  # Coloca la etiqueta en el marco

            tag_label = tk.Label(self.frame, text=tag, bg=self.tags[tag], fg="white")  # Crea una etiqueta para la etiqueta
            tag_label.grid(row=row, column=1, sticky="w")  # Coloca la etiqueta en el marco
            row += 1

    def filter_by_tag(self, tag):  # Método para filtrar enlaces por etiqueta
        for widget in self.frame.winfo_children():  # Destruye los widgets existentes en el marco
            widget.destroy()

        row = 0  # Reinicia el contador de filas
        for link, link_tag in self.links.items():  # Itera sobre los enlaces y sus etiquetas
            if link_tag == tag:  # Si la etiqueta del enlace coincide con la etiqueta seleccionada
                label = tk.Label(self.frame, text=link, compound=tk.LEFT,
                                 cursor="hand2", bg="#1E1E1E", fg="white")  # Crea una etiqueta para el enlace
                label.bind("<Button-1>", lambda e, url=link: self.open_link(url))  # Vincula la etiqueta a la función de abrir enlace
                label.grid(row=row, column=0, sticky="w")  # Coloca la etiqueta en el marco

                tag_label = tk.Label(self.frame, text=link_tag, bg=self.tags[link_tag], fg="white")  # Crea una etiqueta para la etiqueta
                tag_label.grid(row=row, column=1, sticky="w")  # Coloca la etiqueta en el marco
                row += 1  # Incrementa el contador de filas

    def open_link(self, url):  # Método para abrir un enlace en el navegador web
        webbrowser.open_new(url)

def main():  # Función principal
    root = tk.Tk()  # Crea una instancia de la clase Tk para la ventana principal
    app = LinkStorageApp(root)  # Crea una instancia de la clase LinkStorageApp con la ventana principal como argumento
    root.protocol("WM_DELETE_WINDOW", app.save_data)  # Configura el protocolo para guardar datos al cerrar la ventana
    root.mainloop()  # Inicia el bucle principal de la aplicación

if __name__ == "__main__":  # Verifica si el script se ejecuta directamente
    main()  # Llama a la función principal
 
Hola shurmanillos,

Hace poco abrí un hilo sobre el tema de guardar enlaces en modo pro, para mí llega a ser un problema considerable cuando tengo que guardar mucho contenido y clasificarlo debidamente. La participación por parte de los foreros me encantó, aportando programitas que vosotros usáis y complementando el hilo. Tenemos una buena comunidad, nos apoyamos entre nosotros. Semos los mejores. Os dejo por aquí el hilo.


Pero hay algo que me ralla, siempre me ha rallado. Todos esos programas, los que yo aporté y los que mencionasteis vosotros, mantiene comunicación con servidores externos para proporcionar el servicio. Realmente es muy dificil comprobar qué clase de información están mandando a esos servidores, imagino que servicios de telemetría, actualizaciones y demás. Pero no me mola un pelo, no me hace gracia que un servicio gratuito monitoree la manera en la que uso su programa. Por lo que me he puesto a trabajar en mi propio manager de bookmarks. Algo básico y de uso sencillo para guardar cantidades ingentes de bookmarks sin que tenga comunicación con servidores externos. Todo se guarda en el pc de uno. No tendrá sincronización con otros dispositivos mediante cuentas, ni mierdas de esas. Algo privado como dios manda.

Ya lo estoy terminando. Escrito en python y con un frontend feo y básico. Permite guardar enlaces y clasificarlos con tags.



A los interesados les puedo pasar el proyecto sin problema. Se agradecer sus aportes para completar el software, se escuchan sugerencias. Y ni que decir tiene, quien quiera modificarlo tiene mi bendición.

Ale, a correr

-----------------------------------------
Actualización
Descarga el programa con este enlace

Contiene el script en python y un ejecutable

Lo he pasado por virustotal.com y por alguna razón detecta un troyano, vamos no me jodas
podéis comprobar el código vosotros mismes
debe tratarse de un falso positivo

------------------------------------------
el código comentado

Súbelo mejor a github.com y comparte el repo. Buen aporte!
 
@Zollkron lo hice en una hora
Vamos que le faltan cosas de cojones
Y tendrá fallos por un tubo
 
Volver
Arriba