Advertisement
r1rk

[Ver3.0 Supported GUI] FRESH HTTP(s)Proxy collection program by Python

Apr 11th, 2025 (edited)
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.55 KB | Source Code | 0 0
  1. # This program does not support languages other than Japanese. Please do not be offended.
  2. # You can run this program to get a list of up to about 300,000 or more proxies.
  3.  
  4. import tkinter as tk
  5. from tkinter import ttk, messagebox
  6. from datetime import datetime, timedelta
  7. import requests
  8. import threading
  9. import re
  10. import json
  11. import os
  12.  
  13. ALL_PROXIES = set()
  14.  
  15. def get_past_dates(days=31):
  16.     today = datetime.utcnow()
  17.     return [(today - timedelta(days=i)).strftime("%Y-%m-%d") for i in range(days)]
  18.  
  19. def fetch_checkerproxy(date):
  20.     try:
  21.         url = f"https://api.checkerproxy.net/v1/landing/archive/{date}"
  22.         res = requests.get(url, timeout=10)
  23.         if res.status_code == 200:
  24.             data = res.json()
  25.             proxies = data['data'].get('proxyList', [])
  26.             return proxies, True
  27.         else:
  28.             return [], False
  29.     except:
  30.         return [], False
  31.  
  32. def extract_from_text_url(url):
  33.     try:
  34.         res = requests.get(url, timeout=10)
  35.         return re.findall(r'\b(?:\d{1,3}\.){3}\d{1,3}:\d+\b', res.text)
  36.     except:
  37.         return []
  38.  
  39. def extract_from_json_url(url, ip_key="IP", port_key="PORT"):
  40.     try:
  41.         res = requests.get(url, timeout=10)
  42.         data = res.json()
  43.         proxies = []
  44.         for entry in data.get("LISTA", []):
  45.             ip = entry.get(ip_key)
  46.             port = entry.get(port_key)
  47.             if ip and port:
  48.                 proxies.append(f"{ip}:{port}")
  49.         return proxies
  50.     except:
  51.         return []
  52.  
  53. def collect_proxies(log_widget, progress_bar, progress_label):
  54.     global ALL_PROXIES
  55.     ALL_PROXIES = set()
  56.     now = datetime.now().strftime("%Y-%m-%d_%H-%M")
  57.     folder = "proxies_tool_result"
  58.     if not os.path.exists(folder):
  59.         os.makedirs(folder)
  60.  
  61.     filename_txt = os.path.join(folder, f"httpProxies_{now}.txt")
  62.     filename_json = os.path.join(folder, f"httpProxies_{now}.json")
  63.  
  64.     dates = get_past_dates(31)
  65.     skipped_dates = []
  66.  
  67.     log_widget.insert(tk.END, "=== CheckerProxyの取得を開始します。 ===\n")
  68.     for i, date in enumerate(dates):
  69.         proxies, success = fetch_checkerproxy(date)
  70.         if success and proxies:
  71.             ALL_PROXIES.update(proxies)
  72.             log_widget.insert(tk.END, f"{date} の取得完了。 ({len(proxies)}件)\n")
  73.         else:
  74.             skipped_dates.append(date)
  75.             log_widget.insert(tk.END, f"{date} は取得できませんでした。\n")
  76.         progress_bar["value"] = (i + 1) / len(dates) * 50
  77.         progress_label.config(text=f"{int(progress_bar['value'])}%")
  78.         log_widget.yview_moveto(1)
  79.         log_widget.update()
  80.  
  81.     log_widget.insert(tk.END, "\n=== 他ソースからの取得を開始します。 ===\n")
  82.  
  83.     proxy_sources = [
  84.         "https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS.txt",
  85.         "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt",
  86.         "https://raw.githubusercontent.com/mmpx12/proxy-list/master/http.txt",
  87.         "https://api.openproxylist.xyz/http.txt",
  88.         "https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt",
  89.         "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt",
  90.         "https://raw.githubusercontent.com/shiftytr/proxy-list/master/proxy.txt",
  91.         "https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt",
  92.         "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt",
  93.         "https://rootjazz.com/proxies/proxies.txt",
  94.         "https://proxyspace.pro/http.txt",
  95.         "https://alexa.lr2b.com/proxylist.txt",
  96.         "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt"
  97.        
  98.     ]
  99.  
  100.     offset = 50 / len(proxy_sources)
  101.     for idx, url in enumerate(proxy_sources):
  102.         log_widget.insert(tk.END, f"{url} から取得中...\n")
  103.         proxies = extract_from_text_url(url)
  104.         ALL_PROXIES.update(proxies)
  105.         progress_bar["value"] += offset
  106.         progress_label.config(text=f"{int(progress_bar['value'])}%")
  107.         log_widget.yview_moveto(1)
  108.         log_widget.update()
  109.  
  110.     log_widget.insert(tk.END, f"\n=== 合計取得件数: {len(ALL_PROXIES)} 件 ===\n")
  111.  
  112.     with open(filename_txt, "w") as f:
  113.         f.write("\n".join(sorted(ALL_PROXIES)))
  114.  
  115.     with open(filename_json, "w") as f:
  116.         json.dump(sorted(ALL_PROXIES), f, indent=2)
  117.  
  118.     log_widget.insert(tk.END, f"\n保存完了: {filename_txt}, {filename_json}\n")
  119.     log_widget.yview_moveto(1)
  120.     log_widget.update()
  121.  
  122.     stop_btn.pack(pady=5)
  123.     stop_btn.config(state="normal")
  124.  
  125. def stop_application():
  126.     root.quit()
  127.  
  128. def start_collection():
  129.     threading.Thread(target=collect_proxies, args=(log_text, progress, progress_label), daemon=True).start()
  130.  
  131. root = tk.Tk()
  132. root.title("proxies_collect_tool")
  133. root.geometry("640x480")
  134.  
  135. label = tk.Label(root, text="HTTP(s) Proxy収集ツール", font=("Meiryo", 14, "bold"))
  136. label.pack(pady=10)
  137.  
  138. progress = ttk.Progressbar(root, length=500, mode='determinate')
  139. progress.pack(pady=5)
  140.  
  141. progress_label = tk.Label(root, text="0%", font=("Meiryo", 10))
  142. progress_label.place(relx=0.5, rely=0.3, anchor="center")
  143.  
  144. btn = tk.Button(root, text="Go!", command=start_collection, font=("Meiryo", 12))
  145. btn.pack(pady=5)
  146.  
  147. log_text = tk.Text(root, height=20, wrap=tk.WORD)
  148. log_text.pack(fill=tk.BOTH, padx=10, pady=10, expand=True)
  149.  
  150. stop_btn = tk.Button(root, text="終了", command=stop_application, font=("Meiryo", 12), state="disabled")
  151.  
  152. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement