今日阅读:

今日软件:

  • 留痕
    这个微信导出软件我之前应该有提到过,今天重新看了下发现更新真的非常多,但是也逐渐变得“商业”起来。不是有付费服务的原因,而是这些如生日祝福、AI画像等功能一看就像是那种讨好用户的追风之举……
  • Vtuberいろいろランキング
    记录Vtuber每日同接的网站,不过这个网站居然还有一个现场预测同接的小游戏。真是数字厨的厨力放出。

今日代码:

主要在研究如何将网页爬取之后格式化输出,写好了4chan和S1的。
AIForumExplorer
目前主要研究的还是最头疼的格式化,如何提出垃圾html代码然后让ai知道谁在回复谁,不然信息都是乱的,ai也看不懂。

stage1st.py
import requests
import re
import html
 
def extract_json(data):
    extracted_posts = []
    
    # 创建一个pid到number的映射 用于处理引用
    pid_to_number = {post["pid"]: post["number"] for post in data["Variables"]["postlist"]}
    
    for post in data["Variables"]["postlist"]:
        post_no = post["number"]
        author = post["author"]
        resto = []
        pattern = re.compile(r'pid=(\d+)')
        message = post.get("message", "")
        pids = pattern.findall(message)
        for pid in pids:
            if pid in pid_to_number:
                resto.append(pid_to_number[pid])
        com = re.sub('<blockquote>.*?</blockquote>', '', message, flags=re.DOTALL)
        com = re.sub('本帖最后由 .*? 于 \d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{2} 编辑', '', com)
        com = re.sub('—— 来自 .*$', '', com, flags=re.MULTILINE)
        com = re.sub('----发送自 .*$', '', com, flags=re.MULTILINE)
        com = html.unescape(com)
        com = re.sub('<[^<]+?>', '', com)
        com = com.replace("<br>", "\n").replace("<br />", "\n")
        com = re.sub('\n\s*\n', '\n', com)
        extracted_posts.append({"no": post_no, "author": author, "resto": resto, "com": com})
    
    return extracted_posts
 
 
 
def download_json(url):
    try:
        response = requests.get(url)
        response.raise_for_status()  
        data = response.json()
    except requests.RequestException as e:
        print(f"请求出错: {e}")
        return []
    except ValueError as e:
        print(f"解析JSON出错: {e}")
        return []
    return data
 
 
def S1_scraper(thread_id):
    ppp = 40  # 网页端可以获取超过40的回帖不用遍历 不知道为什么API只能获取40条
    url = f"https://bbs.saraba1st.com/2b/api/mobile/index.php?module=viewthread&ppp={ppp}&tid={thread_id}"
    initial_data = download_json(url)
    total_replies = int(initial_data["Variables"]["thread"]["replies"]) + 1
    total_pages = (total_replies + ppp - 1) // ppp  # 向上取整计算总页数
    
    extracted_content = ""
    
    # 遍历每一页
    for page in range(1, total_pages + 1):
        page_url = f"{url}&page={page}"
        page_data = download_json(page_url)
        extracted_data = extract_json(page_data)
        
        for post in extracted_data:
            post_content = f"No:{post['no']}, Author:{post['author']},"
            if post['resto']:
                post_content += f" Reply:{','.join(post['resto'])},"
            post_content += f" Msg:{post['com']}\n"
            extracted_content += post_content
    
    return extracted_content
# 示例使用
# print(S1_scraper(123456))

目前的最佳实践是输出 楼层+发帖人+回复楼层+发帖内容 然后喂给Gemini总结并附带引用返回。 image1

今日见闻:

NaVi 战队 2:1 击败 FaZe 夺得《CS2》PGL 哥本哈根 Major 冠军。

今日废话:

第一批四月动画已经开播了。
Bilibili上唯一一部还是第一集就烂出风格烂出水准的《神は遊戯に飢えている。》
上Bangumi上看了一圈,好多根本就没播的动画因为前作或者看起来“小清新”(抱歉我不如到该怎么形容)就被打高分,还有因为题材为BL等就被刷低分。
原来我看的是Bangumi不是Bilibili啊。