| import os | |
| import json | |
| import requests | |
| COMMENTS_LIMIT = 30 | |
| DEFAULT_ENDPOINT = "https://q6-p.hf.space" | |
| def read_dotenv_value(path, key): | |
| try: | |
| with open(path, "r") as env_file: | |
| for line in env_file: | |
| line = line.strip() | |
| if not line or line.startswith("#") or "=" not in line: | |
| continue | |
| k, v = line.split("=", 1) | |
| if k == key: | |
| return v | |
| except FileNotFoundError: | |
| return None | |
| return None | |
| def get_phpsessid(): | |
| phpsessid = os.getenv("PHPSESSID") | |
| if phpsessid: | |
| return phpsessid | |
| env_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".env")) | |
| phpsessid = read_dotenv_value(env_path, "PHPSESSID") | |
| if phpsessid: | |
| return phpsessid | |
| raise RuntimeError("PHPSESSID is not set in the environment or .env") | |
| def get_endpoint(): | |
| endpoint = os.getenv("PIXIF_ENDPOINT") | |
| if endpoint: | |
| return endpoint.rstrip("/") | |
| env_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".env")) | |
| endpoint = read_dotenv_value(env_path, "PIXIF_ENDPOINT") | |
| if endpoint: | |
| return endpoint.rstrip("/") | |
| return DEFAULT_ENDPOINT | |
| def fetch_comments(post_ids, phpsessid, endpoint, limit=COMMENTS_LIMIT): | |
| payload = {"post_ids": post_ids, "phpsessid": phpsessid, "limit": limit} | |
| response = requests.post(f"{endpoint}/comments", json=payload, timeout=300) | |
| response.raise_for_status() | |
| data = response.json() | |
| comments = data.get("comments", data) | |
| if not isinstance(comments, dict): | |
| raise RuntimeError("Unexpected response from comments endpoint.") | |
| return comments | |
| def parse_indexes(inputs): | |
| indexes = [] | |
| for inp in inputs: | |
| if "-" in inp: | |
| start, end = map(int, inp.split("-")) | |
| indexes.extend(range(start - 1, end)) | |
| elif inp.isdigit(): | |
| indexes.append(int(inp) - 1) | |
| return indexes | |
| def main(): | |
| os.chdir(os.path.dirname(os.path.abspath(__file__))) | |
| os.makedirs("comments", exist_ok=True) | |
| valid = [f for f in os.listdir() if f.endswith(".txt")] | |
| for idx, file in enumerate(valid): | |
| print(f"{idx + 1}: {file}") | |
| if not valid: | |
| print("No .txt files found in the Client directory.") | |
| return | |
| inputs = input("Enter the index of the file: ").split() | |
| indexes = parse_indexes(inputs) | |
| phpsessid = get_phpsessid() | |
| endpoint = get_endpoint() | |
| for index in indexes: | |
| if index < 0 or index >= len(valid): | |
| continue | |
| group_name = valid[index].rsplit(".", 1)[0] | |
| with open(valid[index], "r") as f: | |
| raw_ids = f.read().split() | |
| post_ids = [int(post_id) for post_id in raw_ids if post_id.isdigit()] | |
| if not post_ids: | |
| continue | |
| try: | |
| fetched = fetch_comments(post_ids, phpsessid, endpoint) | |
| except Exception as exc: | |
| print(f"Failed to fetch comments for {group_name}: {exc}") | |
| fetched = {} | |
| comments_by_post = {str(post_id): fetched.get(str(post_id), []) for post_id in post_ids} | |
| output_path = os.path.join("comments", f"{group_name}.json") | |
| with open(output_path, "w", encoding="utf-8") as f: | |
| json.dump(comments_by_post, f, indent=2, ensure_ascii=False) | |
| print(f"Saved comments to {output_path}") | |
| if __name__ == "__main__": | |
| main() | |