tagged.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import os
  2. import io
  3. import ssl
  4. import uuid
  5. import time
  6. import tkinter
  7. from urllib import request
  8. from PIL import Image, ImageTk
  9. class Tk:
  10. def __init__(self, url, imagePath=None):
  11. if imagePath is None or imagePath == "":
  12. imagePath = os.path.join(os.path.dirname(os.path.abspath(__file__)), "tagged")
  13. self.imgTk = None
  14. self.imgByte = None
  15. self.imagePath = imagePath
  16. self.url = url
  17. self.tk = tkinter.Tk()
  18. self.tk.title("TAG")
  19. self.tk.geometry("300x200")
  20. self.tk.columnconfigure(0, weight=1)
  21. self.tk.columnconfigure(1, weight=1)
  22. self.tk.rowconfigure(0, weight=1, minsize=80)
  23. self.tk.rowconfigure(1, weight=1, minsize=20)
  24. self.tk.rowconfigure(2, weight=1, minsize=20)
  25. self.image = tkinter.Label(self.tk)
  26. self.image.grid(row=0, column=0, rowspan=2, columnspan=2)
  27. self.entry = tkinter.Entry(self.tk, width=10)
  28. self.entry.grid(row=1, column=0, sticky="se")
  29. self.buttonOK = tkinter.Button(self.tk, text="OK", bd=3, command=self.tagOK)
  30. self.buttonOK.grid(row=1, column=1, sticky="sw")
  31. self.buttonNext = tkinter.Button(self.tk, width=15, text="NEXT", bd=3, command=self.tagNext)
  32. self.buttonNext.grid(row=2, column=0, columnspan=2)
  33. self.tk.bind('<Return>', self.pressKey)
  34. self.tk.bind('<Down>', self.pressKey)
  35. self.tagNext()
  36. self.tk.mainloop()
  37. def pressKey(self, key):
  38. if key.keysym in ["Down"]:
  39. self.tagNext()
  40. elif key.keysym in ["Return"]:
  41. self.tagOK()
  42. def tagOK(self):
  43. try:
  44. self.buttonOK.config(state="disabled", relief="sunken")
  45. text = self.entry.get().strip()
  46. assert len(text) > 0 and len(self.imgByte) > 128
  47. name = str("{}_{}.jpg").format(text, uuid.uuid4().hex)
  48. if not os.path.exists(self.imagePath):
  49. os.makedirs(self.imagePath)
  50. file = os.path.join(self.imagePath, name)
  51. fp = open(file=file, mode="wb")
  52. fp.write(self.imgByte)
  53. fp.close()
  54. except Exception as e:
  55. pass
  56. finally:
  57. self.buttonOK.config(state="active", relief="raised")
  58. self.tagNext()
  59. def tagNext(self):
  60. try:
  61. self.buttonNext.config(state="disabled", relief="sunken")
  62. imgByte = self.download(url=self.url)
  63. if isinstance(imgByte, bytes):
  64. self.imgByte = imgByte
  65. with io.BytesIO() as buffer:
  66. buffer.write(imgByte)
  67. buffer.seek(0)
  68. self.imgTk = ImageTk.PhotoImage(Image.open(buffer))
  69. self.image.config(image=self.imgTk)
  70. except Exception as e:
  71. pass
  72. finally:
  73. self.entry.delete(0, tkinter.END)
  74. self.buttonNext.config(state="active", relief="raised")
  75. self.tk.update()
  76. def download(self, url: str):
  77. while '{UUID}' in url or '{TIME}' in url or '{TIME13}' in url:
  78. if '{UUID}' in url:
  79. url = url.replace('{UUID}', str(uuid.uuid4()), 1)
  80. elif '{TIME}' in url:
  81. url = url.replace('{TIME}', str(int(time.time())), 1)
  82. elif '{TIME13}' in url:
  83. url = url.replace('{TIME13}', str(int(time.time() * 1000)), 1)
  84. else:
  85. break
  86. hdr = {
  87. "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0",
  88. "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  89. "Accept-Language": "en-US",
  90. "Accept-Encoding": "",
  91. }
  92. try:
  93. ssl_context = ssl.create_default_context()
  94. ssl_context.check_hostname = False
  95. ssl_context.verify_mode = ssl.CERT_NONE
  96. req = request.Request(url=url, headers=hdr)
  97. with request.urlopen(req, context=ssl_context) as response:
  98. assert response.getcode() == 200
  99. content = response.read()
  100. return content
  101. except Exception as e:
  102. content = None
  103. return content
  104. if __name__ == "__main__":
  105. url = "https://api-global.adspower.net/sys/user/passport/get-verify-img?verify_uuid={UUID}&random={UUID}"
  106. tk = Tk(url=url)