Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This program does not support languages other than Japanese. Please do not be offended.
- # You can run this program to get a list of up to about 300,000 or more proxies.
- import tkinter as tk
- from tkinter import ttk, messagebox
- from datetime import datetime, timedelta
- import requests
- import threading
- import re
- import json
- import os
- ALL_PROXIES = set()
- def get_past_dates(days=31):
- today = datetime.utcnow()
- return [(today - timedelta(days=i)).strftime("%Y-%m-%d") for i in range(days)]
- def fetch_checkerproxy(date):
- try:
- url = f"https://api.checkerproxy.net/v1/landing/archive/{date}"
- res = requests.get(url, timeout=10)
- if res.status_code == 200:
- data = res.json()
- proxies = data['data'].get('proxyList', [])
- return proxies, True
- else:
- return [], False
- except:
- return [], False
- def extract_from_text_url(url):
- try:
- res = requests.get(url, timeout=10)
- return re.findall(r'\b(?:\d{1,3}\.){3}\d{1,3}:\d+\b', res.text)
- except:
- return []
- def extract_from_json_url(url, ip_key="IP", port_key="PORT"):
- try:
- res = requests.get(url, timeout=10)
- data = res.json()
- proxies = []
- for entry in data.get("LISTA", []):
- ip = entry.get(ip_key)
- port = entry.get(port_key)
- if ip and port:
- proxies.append(f"{ip}:{port}")
- return proxies
- except:
- return []
- def collect_proxies(log_widget, progress_bar, progress_label):
- global ALL_PROXIES
- ALL_PROXIES = set()
- now = datetime.now().strftime("%Y-%m-%d_%H-%M")
- folder = "proxies_tool_result"
- if not os.path.exists(folder):
- os.makedirs(folder)
- filename_txt = os.path.join(folder, f"httpProxies_{now}.txt")
- filename_json = os.path.join(folder, f"httpProxies_{now}.json")
- dates = get_past_dates(31)
- skipped_dates = []
- log_widget.insert(tk.END, "=== CheckerProxyの取得を開始します。 ===\n")
- for i, date in enumerate(dates):
- proxies, success = fetch_checkerproxy(date)
- if success and proxies:
- ALL_PROXIES.update(proxies)
- log_widget.insert(tk.END, f"{date} の取得完了。 ({len(proxies)}件)\n")
- else:
- skipped_dates.append(date)
- log_widget.insert(tk.END, f"{date} は取得できませんでした。\n")
- progress_bar["value"] = (i + 1) / len(dates) * 50
- progress_label.config(text=f"{int(progress_bar['value'])}%")
- log_widget.yview_moveto(1)
- log_widget.update()
- log_widget.insert(tk.END, "\n=== 他ソースからの取得を開始します。 ===\n")
- proxy_sources = [
- "https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS.txt",
- "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt",
- "https://raw.githubusercontent.com/mmpx12/proxy-list/master/http.txt",
- "https://api.openproxylist.xyz/http.txt",
- "https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt",
- "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt",
- "https://raw.githubusercontent.com/shiftytr/proxy-list/master/proxy.txt",
- "https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt",
- "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt",
- "https://rootjazz.com/proxies/proxies.txt",
- "https://proxyspace.pro/http.txt",
- "https://alexa.lr2b.com/proxylist.txt",
- "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt"
- ]
- offset = 50 / len(proxy_sources)
- for idx, url in enumerate(proxy_sources):
- log_widget.insert(tk.END, f"{url} から取得中...\n")
- proxies = extract_from_text_url(url)
- ALL_PROXIES.update(proxies)
- progress_bar["value"] += offset
- progress_label.config(text=f"{int(progress_bar['value'])}%")
- log_widget.yview_moveto(1)
- log_widget.update()
- log_widget.insert(tk.END, f"\n=== 合計取得件数: {len(ALL_PROXIES)} 件 ===\n")
- with open(filename_txt, "w") as f:
- f.write("\n".join(sorted(ALL_PROXIES)))
- with open(filename_json, "w") as f:
- json.dump(sorted(ALL_PROXIES), f, indent=2)
- log_widget.insert(tk.END, f"\n保存完了: {filename_txt}, {filename_json}\n")
- log_widget.yview_moveto(1)
- log_widget.update()
- stop_btn.pack(pady=5)
- stop_btn.config(state="normal")
- def stop_application():
- root.quit()
- def start_collection():
- threading.Thread(target=collect_proxies, args=(log_text, progress, progress_label), daemon=True).start()
- root = tk.Tk()
- root.title("proxies_collect_tool")
- root.geometry("640x480")
- label = tk.Label(root, text="HTTP(s) Proxy収集ツール", font=("Meiryo", 14, "bold"))
- label.pack(pady=10)
- progress = ttk.Progressbar(root, length=500, mode='determinate')
- progress.pack(pady=5)
- progress_label = tk.Label(root, text="0%", font=("Meiryo", 10))
- progress_label.place(relx=0.5, rely=0.3, anchor="center")
- btn = tk.Button(root, text="Go!", command=start_collection, font=("Meiryo", 12))
- btn.pack(pady=5)
- log_text = tk.Text(root, height=20, wrap=tk.WORD)
- log_text.pack(fill=tk.BOTH, padx=10, pady=10, expand=True)
- stop_btn = tk.Button(root, text="終了", command=stop_application, font=("Meiryo", 12), state="disabled")
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement