| 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() |
|
|