Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import messagebox, ttk
- import sqlite3
- import requests
- import webbrowser
- # Função para inicializar o banco de dados e criar a tabela, se não existir
- def inicializar_db():
- conn = sqlite3.connect('pastes.db')
- cursor = conn.cursor()
- cursor.execute('''
- CREATE TABLE IF NOT EXISTS pastes (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- nome TEXT,
- url TEXT,
- expiracao TEXT
- )
- ''')
- conn.commit()
- conn.close()
- # Função para enviar o código para o Pastebin
- def enviar_paste():
- api_dev_key = 'informar sua chave API no Pastebin' # sua chave de desenvolvedor
- api_paste_code = text_area.get("1.0", tk.END).strip()
- api_paste_name = paste_name_entry.get().strip()
- api_paste_private = '0' # Todas as postagens são públicas
- api_paste_expire_date = 'N' # Sem expiração
- api_paste_format = 'python' # Formato do código
- api_user_key = '' # Deixe em branco para paste como convidado
- if not api_paste_code or not api_paste_name:
- messagebox.showerror("Erro", "Por favor, insira o código e o nome do paste.")
- return
- # URL da API do Pastebin
- url = 'https://pastebin.com/api/api_post.php'
- # Dados para a solicitação POST
- data = {
- 'api_option': 'paste',
- 'api_dev_key': api_dev_key,
- 'api_paste_code': api_paste_code,
- 'api_paste_private': api_paste_private,
- 'api_paste_name': api_paste_name,
- 'api_paste_expire_date': api_paste_expire_date,
- 'api_paste_format': api_paste_format,
- 'api_user_key': api_user_key
- }
- # Enviando a solicitação
- response = requests.post(url, data=data)
- if response.status_code == 200 and "Bad API request" not in response.text:
- # Copiar a URL para a área de transferência
- root.clipboard_clear()
- root.clipboard_append(response.text)
- root.update() # necessário para garantir que a área de transferência seja atualizada
- # Salvar os dados no banco de dados
- salvar_no_db(api_paste_name, response.text, api_paste_expire_date)
- # Exibir a mensagem e permitir clicar para abrir no navegador
- def abrir_link():
- webbrowser.open(response.text)
- messagebox.showinfo("Sucesso", f"Paste criado com sucesso!\nURL: {response.text}")
- abrir_link()
- # Atualizar a Treeview
- atualizar_treeview()
- else:
- messagebox.showerror("Erro", f"Erro ao criar o paste: {response.text}")
- # Função para salvar os dados no banco de dados SQLite
- def salvar_no_db(nome, url, expiracao):
- conn = sqlite3.connect('pastes.db')
- cursor = conn.cursor()
- cursor.execute('INSERT INTO pastes (nome, url, expiracao) VALUES (?, ?, ?)', (nome, url, expiracao))
- conn.commit()
- conn.close()
- # Função para carregar os dados do banco de dados na Treeview
- def atualizar_treeview():
- for item in tree.get_children():
- tree.delete(item)
- conn = sqlite3.connect('pastes.db')
- cursor = conn.cursor()
- cursor.execute('SELECT id, nome, url, expiracao FROM pastes')
- rows = cursor.fetchall()
- for row in rows:
- tree.insert('', tk.END, values=row[1:]) # Excluir o ID ao inserir na Treeview
- conn.close()
- # Função para abrir a URL no navegador ao clicar em um item da Treeview
- def on_treeview_click(event):
- selected_item = tree.selection()
- if selected_item:
- item_values = tree.item(selected_item, 'values')
- url = item_values[1] # A URL está na segunda coluna
- webbrowser.open(url)
- # Função para excluir um registro selecionado
- def excluir_paste():
- selected_item = tree.selection()
- if not selected_item:
- messagebox.showwarning("Aviso", "Nenhum registro selecionado.")
- return
- item_values = tree.item(selected_item, 'values')
- paste_name = item_values[0] # O Nome está na primeira coluna
- confirmacao = messagebox.askyesno("Confirmação", "Tem certeza que deseja excluir este registro?")
- if confirmacao:
- conn = sqlite3.connect('pastes.db')
- cursor = conn.cursor()
- cursor.execute('DELETE FROM pastes WHERE nome = ?', (paste_name,))
- conn.commit()
- conn.close()
- atualizar_treeview()
- messagebox.showinfo("Sucesso", "Registro excluído com sucesso.")
- # Função para centralizar a janela do programa
- def centralizar_janela(root):
- root.update_idletasks()
- largura = root.winfo_width()
- altura = root.winfo_height()
- x = (root.winfo_screenwidth() // 2) - (largura // 2)
- y = (root.winfo_screenheight() // 2) - (altura // 2)
- root.geometry(f"{largura}x{altura}+{x}+{y}")
- # Criando a interface gráfica
- root = tk.Tk()
- root.title("Enviador de Paste para Pastebin")
- # Inicializar o banco de dados
- inicializar_db()
- # Labels e campos de entrada
- tk.Label(root, text="Nome do Paste:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
- paste_name_entry = tk.Entry(root, width=40)
- paste_name_entry.grid(row=0, column=1, padx=5, pady=5)
- tk.Label(root, text="Código/Text do Paste:").grid(row=1, column=0, padx=5, pady=5, sticky="ne")
- text_area = tk.Text(root, height=15, width=60)
- text_area.grid(row=1, column=1, padx=5, pady=5)
- # Botão de envio
- send_button = tk.Button(root, text="Enviar para Pastebin", command=enviar_paste)
- send_button.grid(row=2, column=1, padx=5, pady=5, sticky="e")
- # Botão de exclusão
- delete_button = tk.Button(root, text="Excluir Selecionado", command=excluir_paste)
- delete_button.grid(row=2, column=0, padx=5, pady=5, sticky="w")
- # Treeview para mostrar as URLs e nomes dos pastes
- tree = ttk.Treeview(root, columns=("Nome", "URL", "Expiração"), show="headings")
- tree.heading("Nome", text="Nome")
- tree.heading("URL", text="URL")
- tree.heading("Expiração", text="Expiração")
- tree.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
- # Evento de clique na Treeview
- tree.bind("<Double-1>", on_treeview_click)
- # Carregar dados na Treeview ao iniciar o programa
- atualizar_treeview()
- # Centralizar a janela
- centralizar_janela(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement