今日阅读:
- WebRTC如何泄露我的真实IP?
小结:听说过没见过的泄露方式,因为国内大多数网站还是用访问IP匹配IP库的方式,不会对浏览器指纹做过多的识别。除了博客文章很好的科普了之外,这个网站还能实际检测是否泄露。 - 上海1109路公交车路线查询
小结:上海的公交站命名规则是「这个站所在的路」+「这个站靠近的路」,但是这个1109路真的能看懂在哪一个站下车?
- Leading Discord servers among users worldwide as of December 2023, by number of members
小结:Discord人数排行榜前三位都是ai应用官方群,第一位Midjourney以1750多万的人数秒杀第二位。
今日软件:
- 留痕
这个微信导出软件我之前应该有提到过,今天重新看了下发现更新真的非常多,但是也逐渐变得“商业”起来。不是有付费服务的原因,而是这些如生日祝福、AI画像等功能一看就像是那种讨好用户的追风之举…… - Vtuberいろいろランキング
记录Vtuber每日同接的网站,不过这个网站居然还有一个现场预测同接的小游戏。真是数字厨的厨力放出。
今日代码:
主要在研究如何将网页爬取之后格式化输出,写好了4chan和S1的。
AIForumExplorer
目前主要研究的还是最头疼的格式化,如何提出垃圾html代码然后让ai知道谁在回复谁,不然信息都是乱的,ai也看不懂。
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总结并附带引用返回。
今日见闻:
NaVi 战队 2:1 击败 FaZe 夺得《CS2》PGL 哥本哈根 Major 冠军。
今日废话:
第一批四月动画已经开播了。
Bilibili上唯一一部还是第一集就烂出风格烂出水准的《神は遊戯に飢えている。》
上Bangumi上看了一圈,好多根本就没播的动画因为前作或者看起来“小清新”(抱歉我不如到该怎么形容)就被打高分,还有因为题材为BL等就被刷低分。
原来我看的是Bangumi不是Bilibili啊。