关于运营大型 Galgame 资源站的一些想法

终点已死,大多数 galgame 资源站都关站避风头。要一个足够强大的资源站。这是一些想法,希望对有运营资源站想法的人能够起到帮助。

对政治不抱有幻想

有句话说,政治这个东西,如果你不找上它,那它就会找上你。

对终点论坛站长被捕表示哀悼的同时,可曾有进一步的深思?所谓愚蠢的现世报就是如此。既然选择作别人案板上的肉,那被切碎吃掉的时候,就不要抱怨命运不公。可曾想,你流出的泪水,都是曾经进到脑子里的水。

终点站长对政治没有清醒的认识,盲目相信中国会对他在国内开设论坛的行为忽略不管,并且存在侥幸心理。甚至,他们助纣为虐,在论坛中开启言论审查,甚至支持实名制。其后果就是,他们所支持的实名制和他们所支持的国产品牌把他们送进了监狱。

一个人公开的行为应该与他的政治立场一致,如若不然,则腹背受敌。既然要做 Galgame 资源站,就应该清楚地认识到,这种行为在中国是违法的,是随时可能受到制裁的。所以,对抗中国审查与监管是不可避免的。

中国正在努力追赶遥遥领先的朝鲜,这是显而易见的事实。我们甚至无法确定,是否有一天,会因为审查与专制而再也无法在中国国内玩到 Galgame。

前端与后端的选择

SSR 架构实际上是一个不错的选择。在套上 Cloudflare 之后,静态页面可以被有效缓存,因此可以获得与 CS 架构相当的并发忍受能力。但 SSR 的主要优点还是增加爬虫编写难度。

后端存储显然应该用 Onedrive 这种可以方便白嫖的存储,不然 1 天 1T 流量,VPS/VDS 会带宽不够且流量不够,对象存储费用惊人。容量倒不是大问题。不过,就算是 Ondrive,也需要多个账号负载均衡,不然会超出 API 调用限制。Onedrive 的一个优点就是国内至少是可以连通的,虽然速度可能不高。

Onedrive 的 Token 应该被缓存,否则并发较高时,会因为同时异步调用微软 API 太多而内存溢出。缓存策略为尽量保证用户可以在一个 Token 过期前下载完成。

缓存可以通过 Redis 等数据库实现,定时任务是比较容易的。

大量资源的组织

组织大量资源是很费力的。参考 BT 站和 E-hentai,使用规范的资源命名方式可以有效整理资源和提升检索能力。

一个建议的资源命名方式为

(系列名)[会社名 1][会社名 2][会社名 n] 元の日本名(中文名 1)(中文名 2)(中文名 4)[平台名]{汉化组等信息}

其中,系列名、中文名和汉化组信息可以没有。

这个命名方式可以用正则表达式识别,因此在不使用数据库存 tag 的情况下,如果需要也可以直接根据名称分析。参考代码如下

import re

# 示例字符串
example = "(系列名)[会社名 1][会社名 2][会社名 n] 元の日本名(中文名 1)(中文名 2)(中文名 4)[平台名]{汉化组等信息}"

# 正则表达式
pattern = r'\((.*?)\)?(\[(.*?)\])+(.*?)\((.*?)\)(\[(.*?)\])?\{(.*?)\}?'

# 解析字符串
match = re.match(pattern, example)

if match:
    # 提取数据
    series = match.group(1)
    publishers = match.group(3).split('][')
    jp_name = match.group(4).strip()
    cn_names = match.group(5).split(')(')
    platform = match.group(7)
    comment = match.group(8)

    # 创建对象
    result = {
        "series": series if series else None,
        "publisher": publishers,
        "jpName": jp_name,
        "cnName": cn_names,
        "platform": platform if platform else None,
        "comment": comment if comment else None
    }
else:
    result = None

print(result)

当资源足够庞大时,为了方便检索,以及跑各种各样的算法,可以爬取 vndb,将 galgame 信息存储于本地。这种做法可以实现类似 E-hentai 的发达的标签检索能力,以及基于图结构的推荐算法与热度算法。

资源存储

显然需要在多个 Onedrive 中存储完全相同的内容,除此以外,还需要在某个可靠云盘(例如 MEGA)中或者本地异地存储。

一个人把数据放在本地是不安全的,这是因为可能会发生各种意外事故而丢失全部数据。为此,需要让相隔很远的多个人都存相同的数据,实现异地容灾。

本地存储的介质是一个问题,硬盘价格比较昂贵,存储所有 Galgame 所需要的硬盘大约为 12TB,这么大容量的硬盘是比较昂贵的,大概需要 1 千多人民币。如果有条件,也可使用廉价的磁带作为存储介质。但不能使用二手硬盘,尽管二手硬盘便宜,但不知道什么时候就数据丢失了。

存储在网盘的开销是不小的。如果只存储在 Onedrive,有可能会因为订阅失效和封号而丢失全部资源。

成本

采用 Onedrive 方案按理来说没多少成本,但用的人多了难免会出各种维护成本和服务器成本。——但,用的人多了,就代表回收成本的机会多了。

一个及格的 Galgame 资源站不应该设置下载门槛,更不应该收费下载。合理的抵消成本的方式是接受捐助和广告。

接受捐助有一定风险,因为可能需要用到国内的支付方式。而广告,只要用的人多了,就会有人求着去做广告的。

不过,在分发广告时,应该注意,不能影响用户体验。

先到这里,后面可能会添加