2024 年终 - 致谢幕
前奏
本来没想写年终的,但最近很多糟糕的事情都一并发生了,加上昨晚搞自动化刷鱼翅被加辣直接封禁了3天,禁言状态让我对自己也有了很多思考,起了离开的动念,顺带做一个年终回顾
着重提一下,并不是因为加辣,我从来都不是感情用事的人,一直认为,越是在事情紧迫的时候放纵情感,越容易做出事后后悔的事情,所以这个事情跟加辣无关,只是刚好给了我一个空间可以想想自己的事情
其实早就想走了,在鱼排的日子占用了我不少时间,虽然我总归能找到各种摸鱼的办法,但应该远没有鱼排能更消磨时间了,我的书架上堆满了很多新书,都是这几年买的,如果回家之后只想躺平,那么把书带到公司趁摸鱼的时候把它们看完或许是最好的选择,当初买书也是为了实现理想中的自己,一直摸鱼确实不太行
之前就想走结果走了大半年又跑回来了😂
(杭州近期拍摄照片镇楼)
铺垫
2024在鱼排其实没有太多记忆,毕竟摸鱼嘛,天天聊天打屁有什么记忆,乐
不过收获还是有的,我平时用perl比较多,一直想转去python,但说实在的用习惯之后切换语言总归没有那么顺畅,虽然它们之间真的很像,是鱼排拯救了我的py😭 如果不是为了在鱼排实现自动化的和机器人各种玩耍,我还不会这么天天玩py,精进甚深,颇感欣慰
今年最大的事大概是我换了一次工作,这次更换非同以往,工作六年下来我换工作也算频繁的,基本做到了一年一换,但那更多是在思考自己是否真正热爱工作内容
我是生物专业出身,和鱼排调性不是很搭(笑),众所周知,生物行业是四大天坑之一,其坑在于国内生物的暗弱,这是一个典型高投入高风险的行业,百万千万的仪器在实验室里比比皆是,而配齐这些仅仅只是开始,没有这些东西甚至连实验都无法开展,初创成本就高出太多,但成果却少得可怜,生物的一大特性就是,不稳定,“一切皆有可能”,这不是一句假话,曾经看过搞笑算法之奇迹算法,其原理就是等待计算机因为被宇宙射线等因素发生0/1互换,从而完成的算法,但在生物领域,这种“奇迹”每天每分每秒都在上演,研发成果不可控,复现差,初创公司一个产品能推向市场平均需要十年时间,而生物产品又不能简单上市,就算千辛万苦研发出产品,还要到处找合作医院做一期二期三期临床实验,医院大多都嫌麻烦不肯好好做,完了还需要药监局进行场地检查审批,各种记录、措施必须一应俱全,十年时间导致的人员变动、仪器变换等,使得药监审批成了生物公司的超级大考,死在这一步的产品、公司数不胜数,高投入高风险低产出
因此,生物公司普遍做不大、做不强,生物行业从业人员也是普遍工资低、发展前景渺茫,又因为高技术性成为了唯学历论的行业,所以,前几年每年都在更换从业方向,历经分子、病理、测序,直到前年,才终于确定学程序走生信的路
那么今年的更换出于什么原因呢?工资,我第一次因为工资原因离职而不是我想找一个我喜欢的方向
很高兴现在的公司给了一个不错的薪资,让我上班颇为愉快,这也是我决心离开的一个点,工资高了,也不能像以前那样轻描淡写,少摸点鱼多学学,真能多点钱,也能完成自己一向来的心愿,做我心目中的自己,至少能出发不是?
另外今年也没什么正经相亲,毕竟快30大魔法师了,略过吧
高潮
好我的事讲完了,这部分是我这一年在鱼排玩自动化的分享,算是我在鱼排一年的收获?(笑)直接给代码,不过注意最近鱼排更换了连接方式,增加了不同节点,这部分我还没来得及写,鱼油可以自行修改,添加想要的功能,用python写的,关键模块为websocket
#!/usr/bin/env python
import re
from datetime import datetime # 获取时间
from websocket import create_connection, WebSocketApp
import shelve # 持久化存储键值
import json
import requests
import hashlib
import time
import os
import random
# 当前运行路径
path = os.getcwd()
abs_path = os.path.split(os.path.realpath(__file__))[0]
user = "abspath"
password = "xxxxx"
# 从持久化数据读取api
api_file = abs_path + "/api_file.db"
db = shelve.open(api_file) # 打开数据库文件
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
'Accept': 'application/json',
}
# 获取时间
def get_time():
# 获取当前时间
now = datetime.now()
# 格式化时间输出,只包含小时、分钟和秒
current_time = now.strftime("%H:%M:%S")
return current_time
# 获取md5加密后登录密码
def get_key(user, password):
global headers
# 要加密的字符串
string = password
# 创建一个md5加密对象
md5_object = hashlib.md5()
# 更新加密对象,这里需要确保输入的是字节串
md5_object.update(string.encode('utf-8'))
# 获取加密后的16进制字符串
md5_hexdigest = md5_object.hexdigest()
# 目标URL
url = 'https://fishpi.cn/api/getKey'
# 要发送的JSON数据
json_data = {
'nameOrEmail': user,
'userPassword': md5_hexdigest
}
# 发送POST请求,自动将字典转换为JSON格式的字符串
response = requests.post(url, json=json_data, headers=headers)
# 获取返回的JSON内容
json_content = response.json()
if json_content['code'] == 0:
apiKey = json_content["Key"]
with open(f'{abs_path}/yupai_key.txt', 'w') as f:
print(user, apiKey, sep="\t", file=f)
return apiKey
# 检查apiKey是否可用
def check_key(apiKey):
global headers
# 目标URL
url = 'https://fishpi.cn/api/user?apiKey='
full_url = url + apiKey
response = requests.get(full_url, headers=headers)
# 获取返回的JSON内容
json_content = response.json()
return json_content
# 领取昨日活跃奖励
def get_active(apiKey):
global headers
url = 'https://fishpi.cn/activity/yesterday-liveness-reward-api?apiKey='
full_url = url + apiKey
response = requests.get(full_url, headers=headers)
# 获取返回的JSON内容
json_content = response.json()
return json_content['sum']
# 输出蓝色粗体文字
def print_blue(text):
print("\033[1;34m" + text + "\033[0m")
# 输出红色粗体文字
def print_red(text):
print("\033[1;31m" + text + "\033[0m")
# 输出绿色粗体文字
def print_green(text):
print("\033[1;32m" + text + "\033[0m")
# 登录信息
def when_open(ws):
print_green("鱼排聊天室已连接")
# 关闭信息
def when_close(ws, status_code, close_msg):
print('断开连接成功')
# 错误信息
def on_error(ws, error):
print("Error: " + str(error))
# 发送聊天室信息
def send_info(apiKey, to_info):
global headers
url = 'https://fishpi.cn/chat-room/send'
now_week = datetime.now().weekday()
# 要发送的JSON数据
json_data = {
'apiKey': apiKey,
'client': "Python/1.0",
"content": to_info
}
# 发送POST请求,自动将字典转换为JSON格式的字符串
response = requests.post(url, json=json_data, headers=headers)
json_content = response.json()
print(json_content)
# 获取私信
def get_private_letter():
global headers,md5_pass
time.sleep(2) # 等待2秒私信反应
# 目标URL
url = 'https://fishpi.cn/chat/get-message?apiKey='
full_url = url + md5_pass + "&toUser=sevenSummer&page=1&pageSize=5"
response = requests.get(full_url, headers=headers)
# 获取返回的JSON内容
response_dict = response.json()
items = response_dict.get('data', [])
for item in items:
...
# 接收ws回复信息
def on_message(ws, message):
get_msg = json.loads(message)
if get_msg['type'] == "revoke": next # 信息被撤回的标志,不输出
if get_msg['type'] == "customMessage": next # 高级尊贵的土豪入场信息,不输出
# 打印信息中的时间
info_time = get_msg.get('time',get_time())
# 获取在线人员信息
if get_msg['type'] == "online":
print_green(f"{info_time} ","")
print_green("已接受到在线人员信息")
elif get_msg['type'] == "msg": # 聊天室信息
# 将换行信息转为一行
get_msg_text = get_msg['md'].replace("\n", " ")
# 精简样式
get_msg_text = re.sub(r'<\/?span.*?>','',get_msg_text)
# 打印时间
print_green(f"{info_time} ","")
# 打印昵称信息
print_blue(f"{get_msg['userNickname']}({get_msg['userName']}) ")
# 打印信息本体
print(f" {get_msg_text}")
md5_pass = db.get(user, '99')
check_json = check_key(md5_pass)
if check_json['code'] == -1:
print(f"{user} 密钥失效,重新获取,间隔5秒发起请求")
time.sleep(5)
md5_pass = get_key(user, password)
db[user] = md5_pass # 修改数据库中密钥值
print_green(f"当前用户: {user}")
# 领取昨日活跃
user_active = get_active(md5_pass)
if user_active == -1:
print("昨日活跃积分已领取或不存在活跃")
else:
print(f"领取昨日活跃积分: {user_active}")
# 连接聊天室
now_time = get_time()
print_blue(f"{now_time} 连接聊天室")
wss_url = "wss://fishpi.cn/chat-room-channel?apiKey=" + md5_pass
try:
ws = WebSocketApp( # 连接URL
wss_url,
on_open=when_open, # 开启连接
on_message=on_message, # 接收信息
on_close=when_close, # 关闭连接
on_error=on_error # 错误信息
)
# 启动WebSocket客户端
ws.run_forever()
except KeyboardInterrupt: # 使用Ctrl+C中断时执行
# 手动断开连接
when_close(ws)
print("手动断开")
# 关闭数据库
db.close()
谢幕
好吧其实写这总结的时候还是在想会不会被放出来?会不会被放出来?会不会被放出来?
写了一上午还是没有被放出来,看来还是我心不够坚定,风白闭门思过去了
什么时候会回来呢?等我看完了那一书架的书,学业有成之时吧,不然就是我背弃人生了
事已至此,属于风白的时间结束了,感谢看到这里的鱼油
(要不爆个照?)
走吧,走远点——走够地球直径,就回来了不是?
你可以没有记忆,但是我们有
毕竟我们小时候可没那么天才的想法
要是想的话,爆个照吧
这样我脑补时候更生动
不过,
无论如何
无论你走哪儿去
无论啥时候
鱼排他妈的可是一直都在这儿
你要走就搞快点,快点走,还能快点绕够一圈儿!