Advertisement
MizunoBrasil

Pastebin (envia pelo programa a postagem para o pastebin)

Jan 9th, 2025
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.14 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import messagebox, ttk
  3. import sqlite3
  4. import requests
  5. import webbrowser
  6.  
  7. # Função para inicializar o banco de dados e criar a tabela, se não existir
  8. def inicializar_db():
  9.     conn = sqlite3.connect('pastes.db')
  10.     cursor = conn.cursor()
  11.     cursor.execute('''
  12.        CREATE TABLE IF NOT EXISTS pastes (
  13.            id INTEGER PRIMARY KEY AUTOINCREMENT,
  14.            nome TEXT,
  15.            url TEXT,
  16.            expiracao TEXT
  17.        )
  18.    ''')
  19.     conn.commit()
  20.     conn.close()
  21.  
  22. # Função para enviar o código para o Pastebin
  23. def enviar_paste():
  24.     api_dev_key = 'informar sua chave API no Pastebin'  # sua chave de desenvolvedor
  25.     api_paste_code = text_area.get("1.0", tk.END).strip()
  26.     api_paste_name = paste_name_entry.get().strip()
  27.     api_paste_private = '0'  # Todas as postagens são públicas
  28.     api_paste_expire_date = 'N'  # Sem expiração
  29.     api_paste_format = 'python'  # Formato do código
  30.     api_user_key = ''  # Deixe em branco para paste como convidado
  31.  
  32.     if not api_paste_code or not api_paste_name:
  33.         messagebox.showerror("Erro", "Por favor, insira o código e o nome do paste.")
  34.         return
  35.  
  36.     # URL da API do Pastebin
  37.     url = 'https://pastebin.com/api/api_post.php'
  38.  
  39.     # Dados para a solicitação POST
  40.     data = {
  41.         'api_option': 'paste',
  42.         'api_dev_key': api_dev_key,
  43.         'api_paste_code': api_paste_code,
  44.         'api_paste_private': api_paste_private,
  45.         'api_paste_name': api_paste_name,
  46.         'api_paste_expire_date': api_paste_expire_date,
  47.         'api_paste_format': api_paste_format,
  48.         'api_user_key': api_user_key
  49.     }
  50.  
  51.     # Enviando a solicitação
  52.     response = requests.post(url, data=data)
  53.  
  54.     if response.status_code == 200 and "Bad API request" not in response.text:
  55.         # Copiar a URL para a área de transferência
  56.         root.clipboard_clear()
  57.         root.clipboard_append(response.text)
  58.         root.update()  # necessário para garantir que a área de transferência seja atualizada
  59.  
  60.         # Salvar os dados no banco de dados
  61.         salvar_no_db(api_paste_name, response.text, api_paste_expire_date)
  62.  
  63.         # Exibir a mensagem e permitir clicar para abrir no navegador
  64.         def abrir_link():
  65.             webbrowser.open(response.text)
  66.  
  67.         messagebox.showinfo("Sucesso", f"Paste criado com sucesso!\nURL: {response.text}")
  68.         abrir_link()
  69.  
  70.         # Atualizar a Treeview
  71.         atualizar_treeview()
  72.     else:
  73.         messagebox.showerror("Erro", f"Erro ao criar o paste: {response.text}")
  74.  
  75. # Função para salvar os dados no banco de dados SQLite
  76. def salvar_no_db(nome, url, expiracao):
  77.     conn = sqlite3.connect('pastes.db')
  78.     cursor = conn.cursor()
  79.     cursor.execute('INSERT INTO pastes (nome, url, expiracao) VALUES (?, ?, ?)', (nome, url, expiracao))
  80.     conn.commit()
  81.     conn.close()
  82.  
  83. # Função para carregar os dados do banco de dados na Treeview
  84. def atualizar_treeview():
  85.     for item in tree.get_children():
  86.         tree.delete(item)
  87.  
  88.     conn = sqlite3.connect('pastes.db')
  89.     cursor = conn.cursor()
  90.     cursor.execute('SELECT id, nome, url, expiracao FROM pastes')
  91.     rows = cursor.fetchall()
  92.     for row in rows:
  93.         tree.insert('', tk.END, values=row[1:])  # Excluir o ID ao inserir na Treeview
  94.     conn.close()
  95.  
  96. # Função para abrir a URL no navegador ao clicar em um item da Treeview
  97. def on_treeview_click(event):
  98.     selected_item = tree.selection()
  99.     if selected_item:
  100.         item_values = tree.item(selected_item, 'values')
  101.         url = item_values[1]  # A URL está na segunda coluna
  102.         webbrowser.open(url)
  103.  
  104. # Função para excluir um registro selecionado
  105. def excluir_paste():
  106.     selected_item = tree.selection()
  107.     if not selected_item:
  108.         messagebox.showwarning("Aviso", "Nenhum registro selecionado.")
  109.         return
  110.  
  111.     item_values = tree.item(selected_item, 'values')
  112.     paste_name = item_values[0]  # O Nome está na primeira coluna
  113.  
  114.     confirmacao = messagebox.askyesno("Confirmação", "Tem certeza que deseja excluir este registro?")
  115.     if confirmacao:
  116.         conn = sqlite3.connect('pastes.db')
  117.         cursor = conn.cursor()
  118.         cursor.execute('DELETE FROM pastes WHERE nome = ?', (paste_name,))
  119.         conn.commit()
  120.         conn.close()
  121.         atualizar_treeview()
  122.         messagebox.showinfo("Sucesso", "Registro excluído com sucesso.")
  123.  
  124. # Função para centralizar a janela do programa
  125. def centralizar_janela(root):
  126.     root.update_idletasks()
  127.     largura = root.winfo_width()
  128.     altura = root.winfo_height()
  129.     x = (root.winfo_screenwidth() // 2) - (largura // 2)
  130.     y = (root.winfo_screenheight() // 2) - (altura // 2)
  131.     root.geometry(f"{largura}x{altura}+{x}+{y}")
  132.  
  133. # Criando a interface gráfica
  134. root = tk.Tk()
  135. root.title("Enviador de Paste para Pastebin")
  136.  
  137. # Inicializar o banco de dados
  138. inicializar_db()
  139.  
  140. # Labels e campos de entrada
  141. tk.Label(root, text="Nome do Paste:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
  142. paste_name_entry = tk.Entry(root, width=40)
  143. paste_name_entry.grid(row=0, column=1, padx=5, pady=5)
  144.  
  145. tk.Label(root, text="Código/Text do Paste:").grid(row=1, column=0, padx=5, pady=5, sticky="ne")
  146. text_area = tk.Text(root, height=15, width=60)
  147. text_area.grid(row=1, column=1, padx=5, pady=5)
  148.  
  149. # Botão de envio
  150. send_button = tk.Button(root, text="Enviar para Pastebin", command=enviar_paste)
  151. send_button.grid(row=2, column=1, padx=5, pady=5, sticky="e")
  152.  
  153. # Botão de exclusão
  154. delete_button = tk.Button(root, text="Excluir Selecionado", command=excluir_paste)
  155. delete_button.grid(row=2, column=0, padx=5, pady=5, sticky="w")
  156.  
  157. # Treeview para mostrar as URLs e nomes dos pastes
  158. tree = ttk.Treeview(root, columns=("Nome", "URL", "Expiração"), show="headings")
  159. tree.heading("Nome", text="Nome")
  160. tree.heading("URL", text="URL")
  161. tree.heading("Expiração", text="Expiração")
  162. tree.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
  163.  
  164. # Evento de clique na Treeview
  165. tree.bind("<Double-1>", on_treeview_click)
  166.  
  167. # Carregar dados na Treeview ao iniciar o programa
  168. atualizar_treeview()
  169.  
  170. # Centralizar a janela
  171. centralizar_janela(root)
  172.  
  173. root.mainloop()
  174.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement