Advertisement
Guest User

main.py

a guest
Feb 16th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.42 KB | None | 0 0
  1. from tkinter import *
  2. from tkinter.ttk import Separator
  3. import requests
  4. from pyunpack import Archive
  5. from os import remove
  6. from bs4 import BeautifulSoup
  7. import os.path
  8.  
  9. def find_maps(tag):
  10.     url = "https://gamebanana.com/search?query=" + tag + "&game=4660&section=Map" # Ссылка для запроса
  11.  
  12.     soup = BeautifulSoup(requests.get(url).text, 'html.parser') # Находим класс с названиями карт и ссылками на карты со страницы поиска
  13.     names_class = soup.find_all(class_='Identifiers')
  14.  
  15.     names = []
  16.     ids = []
  17.  
  18.     for item in names_class: # Вырезаем названия и id карт
  19.         map = item.find('a')
  20.         names.append(map.contents[0].replace('\n',''))
  21.         link = map.get('href')
  22.         ids.append(link[link.rfind('/')+1:])
  23.  
  24.     return names, ids
  25.  
  26.  
  27. def download_map(id, path):
  28.     info_link = "https://api.gamebanana.com/Core/Item/Data?itemtype=Map&itemid=" + id + "&fields=Files().aFiles()"
  29.     info = requests.get(info_link) # Получаем информацию о файле карты при помощи gb api
  30.  
  31.     info = info.text.split(': ')
  32.     download_link = info[4][:info[4].find(',')].replace('"', '').replace('\\', '') # Получаем ссылку для скачивания
  33.    
  34.     filename = id + ".rar"
  35.  
  36.     file = open(filename, "wb") # Скачиваем архив и записываем его в файл
  37.     rar = requests.get(download_link)
  38.     file.write(rar.content)
  39.     file.close()
  40.  
  41.     Archive(filename).extractall(path) # Распаковываем и удаляем архив
  42.     remove(filename)
  43.  
  44.  
  45. def search_maps():
  46.     global maps, ids
  47.     maps, ids = find_maps(tag.get())
  48.     listbox.delete(0, END)
  49.     for map in maps:
  50.         listbox.insert(END, map)
  51.  
  52.  
  53. def download_maps():
  54.     for map_id in listbox.curselection():
  55.         download_map(ids[map_id], path.get())
  56.        
  57.  
  58. def save_path():
  59.     f = open("path.dat", 'w')
  60.     f.write(path.get())
  61.     f.close
  62.  
  63.  
  64. def init_gui():
  65.     global tag, path, listbox, maps, ids
  66.     window = Tk()
  67.     window.title("CS:GO maps finder and downloader")
  68.  
  69.     scrollbar = Scrollbar(window)
  70.     scrollbar.pack(side=RIGHT, fill=Y)
  71.      
  72.     listbox = Listbox(yscrollcommand=scrollbar.set, width = 40, height=20, font=("Arial",12), selectmode=MULTIPLE)
  73.  
  74.     scrollbar.config(command=listbox.yview)
  75.  
  76.     path = StringVar()
  77.     tag = StringVar()
  78.  
  79.     pathbox = Entry(window, font=("Arial",12), width = 40, textvariable=path)
  80.     tagbox = Entry(window, font=("Arial",12), width = 40, textvariable=tag)
  81.  
  82.  
  83.     if os.path.isfile("path.dat"):
  84.         f =open("path.dat")
  85.         pathtxt = f.read()
  86.         f.close
  87.     else:
  88.         pathtxt = "path to CS:GO maps folder"
  89.  
  90.     pathbox.insert(END, pathtxt)
  91.     tagbox.insert(END, "map search tag")
  92.  
  93.     search_btn = Button(window,text="Search maps", font=("Arial",12), command=search_maps, width = 40)
  94.  
  95.     download_btn = Button(window,text="Download selected", font=("Arial",12), command=download_maps, width = 40)
  96.  
  97.     save_btn = Button(window,text="Save path", font=("Arial",12), command=save_path, width = 40)
  98.  
  99.     tagbox.pack()
  100.     search_btn.pack()
  101.  
  102.     Separator(window).pack(pady=10)
  103.     listbox.pack()
  104.     download_btn.pack()
  105.  
  106.     Separator(window).pack(pady=10)
  107.     pathbox.pack()
  108.     save_btn.pack()
  109.  
  110.     window.resizable(0, 0)
  111.     window.mainloop()
  112.  
  113.  
  114. init_gui()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement