<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
            <title>玖涯博客</title>
            <link>https://blog.nineya.com</link>
                <description>投资未来的人，是忠于现实的人。</description>
        <generator>Halo-Plus 1.1.4</generator>
        <lastBuildDate>Sun, 01 Mar 2026 22:07:15 GMT+08:00</lastBuildDate>
                <item>
                    <title>
                        <![CDATA[MAC安装软著自动提交工具教程]]>
                    </title>
                    <link>https://blog.nineya.com/archives/179.html</link>
                    <description>
                            <![CDATA[<p>玖涯软著AI客户端是一个支持软著自动提交的客户端工具。</p><p>在MAC系统上安装步骤较为复杂，部分用户可能安装会遇到一些困难，可以看这篇文章，按步骤安装。</p><p><img src="https://blog.nineya.com/upload/2026/03/1e5aaf13-1dde-4e50-a0f9-138053a85e0d.png" alt="玖涯软著AI客户端"></p><h2 id="一-下载安装">一、下载安装</h2><p>从 <a href="https://rz.nineya.com/client/">https://rz.nineya.com/client/</a> 获取软著下载链接。</p><p>打开链接，下载 <strong>mac端</strong> 目录下最新版本的安装包，如下图的 1.0.4。</p><p><img src="https://blog.nineya.com/upload/2026/03/d08e1871-d741-4ce1-85fe-4e67702a251f.png" alt="网盘下载客户端"></p><p>下载后双击安装包，进入安装程序。</p><p><img src="https://blog.nineya.com/upload/2026/03/55a3f0e7-9bd5-4bba-90f6-388d04ef5c0a.png" alt="双击安装包"></p><p>把左侧<strong>玖涯软著AI</strong>的应用拖动到右侧，完成安装。</p><p><img src="https://blog.nineya.com/upload/2026/03/9f9eb190-1ded-44d0-8ac1-8990705ad71d.png" alt="拖动完成安装"></p><p>如果你已经安装过，会提示你存在旧版本，点击 <strong>“替换”</strong> 即可。</p><p><img src="https://blog.nineya.com/upload/2026/03/fa57080f-eecb-40e6-a5db-11b4d2328665.png" alt="替换旧版本"></p><h2 id="二-打开程序">二、打开程序</h2><p>因为程序未购买 Apple 的开发者证书，所以安装后第一次启动会显示未打开。</p><p><img src="https://blog.nineya.com/upload/2026/03/e90c4d3a-44f8-42e6-902d-c0d49de1010f.png" alt="程序未打开"></p><p>点击完成按钮，然后打开设置中的<strong>隐私与安全性</strong>。</p><p><img src="https://blog.nineya.com/upload/2026/03/733cf535-f162-46ef-a5c6-61609a81f81c.png" alt="隐私与安全性设置"></p><p>可以看到下面有一条阻止记录，点击仍要打开即可。</p><p>如果没有看到阻止记录，就重新尝试打开一下玖涯软著AI程序，就会出现阻止记录了。<img src="https://blog.nineya.com/upload/2026/03/766d2f78-1e01-4d57-94df-69a96d631c2c.png" alt="仍要打开"></p><p>然后点击“仍要打开”，即可运行玖涯软著AI。</p><p><img src="https://blog.nineya.com/upload/2026/03/2f3313bc-22f3-43e9-b346-48d055930126.png" alt="仍要打开"></p><h2 id="三-最后">三、最后</h2><p>该软件获取地址：<a href="https://rz.nineya.com/client/">https://rz.nineya.com/client/</a></p><p>如果软件使用有任何问题，可以联系客服微信：<strong>rznineya</strong></p><p>体验玖涯软著AI，可以点击左下角查看原文。</p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>玖涯软著AI，专业的AI软著申请工具！</p>]]>
                    </description>
                    <pubDate>Sun, 01 Mar 2026 22:04:47 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[玖涯软著是如何生成高质量软著申请材料？]]>
                    </title>
                    <link>https://blog.nineya.com/archives/178.html</link>
                    <description>
                            <![CDATA[<p>26年开始，软著的审核越来越严，也引入了非正常这个审核概念。</p><p><img src="https://blog.nineya.com/upload/2026/02/86d96eb3-d109-462d-b6d8-34878356267d.png" alt="软著非正常申请治理"></p><p>接下来可能<strong>软著申请、AI生成软著</strong>等的驳回率和成本都会提升。</p><p>但也不用非常悲观，官方的目的是<strong>规范软著申请，而不是为了禁用AI。</strong></p><p><img src="https://blog.nineya.com/upload/2026/02/f66b1151-aad0-44ce-97a8-e51d72b80b63.png" alt="玖涯软著AI"></p><p>更何况，<strong>使用AI开发程序已是常态</strong>，玖涯软著AI平台80%代码都来自AI辅助开发。</p><p>平台也一直在持续优化软著模型，<strong>不是应对审核，而是让生成的内容更加合规，从而提升申请通过率。</strong></p><p>本文回答用户几个关注点，讲讲AI如何生成一篇高质量软著？</p><h2 id="一-程序鉴别材料">一、程序鉴别材料</h2><p><strong>最大的升级是深度结合了AST代码分析+AI智能体代码分析</strong>。</p><p>无论是AI生成的代码，还是上传自有代码都适用！</p><h3 id="1-1-AST分析与比对">1.1 AST分析与比对</h3><p>针对程序鉴别材料，玖涯软著引入了代码AST结构分析。</p><p>并结合代码分析智能体，对<strong>简单的、非核心功能的</strong>实体类、DTO代码进行剔除，提高程序鉴别材料的<strong>业务相关性。</strong></p><p><img src="https://blog.nineya.com/upload/2026/02/3892857e-bef5-4016-bb4a-22faea6bec10.png" alt="代码智能过滤"></p><p>平台大量抓取了<strong>GitHub、Gitlab</strong>开源代码库，建立了超2400w条函数AST特征抽象矩阵。</p><p>在生成程序鉴别材料时进行特征比对，从而预先排除掉可能雷同的代码，尽最大可能避免<strong>软著雷同</strong>。</p><h3 id="1-2-代码生成">1.2 代码生成</h3><p>AI生成的代码逻辑优化，增加了代码迭代轮次，让每个功能都能最完整的实现。</p><p><strong>后续的目标是这份代码能够开发调试，稍微修改后能够正常演示或使用。</strong></p><h2 id="二-文档鉴别材料">二、文档鉴别材料</h2><p>软著的核心是代码，文档材料主要的优化是提高文档和代码的相关性。</p><p>在最新的智能体版本中，代码的每一次<strong>修改迭代</strong>、每一次<strong>分析比对剔除</strong>，都会再次与文档鉴别材料校对。</p><p>最大程度保证代码和文档的功能和描述一致。</p><h2 id="三-生成耗时拉长">三、生成耗时拉长</h2><p>可能很多用户已经发现了，大模型生成材料的速度不断在降低。</p><p><strong>有得有失，功能的优化，牺牲的是更多的大模型Tokens和材料生成时间。</strong></p><p>因为原先很多<strong>并行执行</strong>的生成任务，现在都需要再多次<strong>互相校验</strong>生成结果。</p><p>所以不可避免的，生成时间有所加长，但是我们认为是值得的。</p><p><img src="https://blog.nineya.com/upload/2026/02/595cb174-fb66-420d-95d1-2af7cfcf48bf.png" alt="软著生成耗时"></p><p>目前已经无法在6分钟完成软著生成，最短时限延长到12分钟。</p><p>如果你的软件功能复杂，自主上传的代码量非常巨大，这个时间可能还会再长一些。</p><p><strong>这已经是在充分考虑并行的情况下，所能达到的最快生成速度。</strong></p><h2 id="四-非正常申请">四、非正常申请</h2><p>也许有时候的驳回并非材料因素，还需要再关注一下**“非正常”**这三个字。</p><p>目前我们软著老师对<strong>非正常</strong>的一致解读主要有三个方面：</p><ol><li>小企业/个人，申请非常大型的软著项目，非正常；</li><li>高频申请，远超企业正常的开发能力，非正常；</li><li>提交大量相似的软著申请，且材料简陋，非正常；</li><li>软著行业跨度太大，与主营业务不符，非正常。</li></ol><p><strong>后续想要进行软著矩阵式申请的用户需要多加注意了。</strong></p><p>从平台统计的驳回数据看，矩阵式申请驳回概率远高于正常申请，而且高概率一件驳回全部驳回。</p><h2 id="五-最后">五、最后</h2><p>感谢继续使用玖涯软著的用户和知产同行们。</p><p>体验玖涯软著AI系统，可以前往：<a href="https://rz.nineya.com">https://rz.nineya.com</a></p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>玖涯软著AI，专业的AI软著申请工具！</p>]]>
                    </description>
                    <pubDate>Sat, 28 Feb 2026 10:27:32 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[26年软著审核升级，如何应对，有些雷区不能踩]]>
                    </title>
                    <link>https://blog.nineya.com/archives/177.html</link>
                    <description>
                            <![CDATA[<p>26年软著审核升级，有些雷区不能踩</p><p>一月开始，很多人应该都发现了，审核标准突然严格了好多！</p><p>今天就来聊一聊2026年软著审核的几个新变化，帮大家避坑。</p><h2 id="一-开发痕迹必须保留">一、开发痕迹必须保留</h2><p>过去提交软著材料时，很多人习惯把代码整理得干干净净再提交。</p><p>但现在不太建议这样了！</p><p>26年的审核系统会计算代码的"熵值"，如果发现所有文件创建时间完全一致、没有调试痕迹，直接打标 <strong>"疑似生成式补写"</strong>。</p><p>小玖建议在提交时，可以刻意保留一些注释和未使用的变量，但也避免包含大量无用的代码片段。</p><p>要是被系统标记了，还得补交Git提交记录或开发过程说明，那可就麻烦大了！</p><h2 id="二-操作流程要完整">二、操作流程要完整</h2><p>现在审核系统会模拟用户操作路径来验证代码。</p><p>比如说明书里有登录页、首页、数据看板页的截图，系统就会去代码里找对应的调用链：login() -&gt; success() -&gt; jumpToDashboard() -&gt; DashboardActivity。</p><p>要是代码里缺少某个环节，比如登录成功后没有页面跳转逻辑，直接就会被驳回。</p><p><strong>所以切记要确保每个界面截图都能在代码中找到完整的执行路径。</strong></p><h2 id="三-开源代码要合规">三、开源代码要合规</h2><p>26年新增了开源协议合规性检查，如果项目代码里引用了GPL协议的开源代码，又没有独立重写，<strong>软著申请直接不予受理。</strong></p><p>就算用了Apache-2.0或MIT代码，也得保留原版权声明。</p><h2 id="四-界面代码要对应">四、界面代码要对应</h2><p>这个升级点堪称"黑科技"，专门针对游戏、工业软件等高价值项目。</p><p>系统会提取说明书截图的UI布局结构，然后去代码里找对应的布局文件进行比对。</p><p>要是截图画着精美界面，代码里只有控制台打印，直接判定为虚拟界面不予登记。</p><p><strong>所以用简单代码去申请复杂软件的软著，这招在26年已经不太适用了。</strong></p><h2 id="五-如何应对-">五、如何应对？</h2><p>既然发现问题，自然会有应对策略。</p><p>今年一月份，平台针对新规进行了专项调优。</p><p><img src="https://blog.nineya.com/upload/2026/02/f66b1151-aad0-44ce-97a8-e51d72b80b63.png" alt="玖涯软著AI"></p><p>玖涯软著AI在生成代码时，已经内置了应对新规的功能，能帮你生成符合要求的全套材料。</p><p>和一些基于智能体进行提示词工程开发的平台不同，玖涯软著深入模型层，对底层大模型进行了微调。</p><p><strong>模型天生就具备生成符合软著申请规范代码的能力。</strong></p><p>同时也不是简单的一次性生成代码，生成会对代码和文档进行多轮迭代，以最大程度保证生成代码的独立性。</p><p><strong>截止目前，系统上统计历史总通过率达91%。</strong></p><p><img src="https://blog.nineya.com/upload/2026/02/f6f42205-1a4e-43bd-bff1-08e2351016de.png" alt="驳回原因分析图"></p><h3 id="申请技巧">申请技巧</h3><p>有部分用户一次性买多份软著，同一方向生成多份软著材料，以为增加容错，提高下证率。</p><p><strong>这样是行不通的。‸</strong></p><p>同时大批量申请软著，很可能导致全部申请都被关联驳回。</p><p>这里建议每日申请软著数量不超过3份，这能最大保证通过率。</p><h2 id="三-最后">三、最后</h2><p>欢迎有软著申请需求的用户使用玖涯软著AI：<a href="https://rz.nineya.com/">https://rz.nineya.com/</a></p><p>同时玖涯软著也提供 <strong>省心全包</strong> 和 <strong>软著转让</strong> 服务，欢迎咨询。</p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>玖涯软著AI，专业的AI软著申请工具！</p>]]>
                    </description>
                    <pubDate>Sat, 14 Feb 2026 16:45:30 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[软著自动提交工具，一键提交软著申请]]>
                    </title>
                    <link>https://blog.nineya.com/archives/176.html</link>
                    <description>
                            <![CDATA[<p>最新版本玖涯软著客户端已经内置了<strong>软著自动提交</strong>功能。</p><p>使用客户端一键即可自动提交软著申请，便捷程度拉满。</p><p><img src="https://blog.nineya.com/upload/2026/02/9e21597f-b3c5-48ef-971e-1bbc5cfa0739.png" alt="玖涯软著客户端"></p><p>本文讲解这个软著工具的使用教程。</p><h3 id="一-使用流程">一、使用流程</h3><h3 id="1-1-导入材料">1.1 导入材料</h3><p>点击自动提交界面的 <strong>导入材料</strong> 按钮，打开导入弹窗。</p><p><img src="https://blog.nineya.com/upload/2026/02/9fc1ad86-49fd-4eec-9208-bac24f0aebf6.png" alt="导入材料"></p><p>勾选需要导入的软著材料，点击确认导入。</p><p><img src="https://blog.nineya.com/upload/2026/02/018ba9c3-a4ea-4049-bcd0-217bc28dd9ab.png" alt="确认导入"></p><p>工具自动导入软著到本地，点击材料目录可以看到存储在本地目录的软著申请材料。</p><p><img src="https://blog.nineya.com/upload/2026/02/299dede7-e2fd-450d-b7ef-f03ef5defb61.png" alt="材料目录"></p><h3 id="1-2-选择模式">1.2 选择模式</h3><p>软著提交有 <strong>暂存草稿</strong> 和 <strong>直接提交</strong> 两个模式。</p><p><img src="https://blog.nineya.com/upload/2026/02/876b6137-a33f-494d-bb26-c9b738708e93.png" alt="选择提交模式"></p><p>如果你是给 <strong>登录账号本身</strong> 提交软著申请，也不涉及AI声明等附加证明材料，那么你可以选择 <strong>直接申请</strong>。</p><p>如果你是要给其他人提交软著申请，或者涉及多人合作开发，这类特殊场景。</p><p>那么你应该选择 <strong>暂存草稿</strong>，先自动提交软著申请为草稿，然后编辑草稿修改著作权人等信息。</p><h3 id="1-3-登录账号">1.3 登录账号</h3><p>在进行提交前，你需要登录版权中心的账号。</p><p>程序将自动弹出登录界面，正常登录即可。</p><p><img src="https://blog.nineya.com/upload/2026/02/e7955745-91e3-4588-b1b1-6a03cca8edd2.png" alt="登录账号"></p><h3 id="1-4-自动提交">1.4 自动提交</h3><p>登录成功后，系统将自动提交软著申请。</p><p><img src="https://blog.nineya.com/upload/2026/02/5e08ca9f-215e-4c41-b650-90675099e5d1.png" alt="自动提交"></p><p>提交完成后程序会弹出完成提醒。</p><p>然后你只需打印和上传签章页即可。</p><h2 id="二-本地导入">二、本地导入</h2><p>如果你的软著不是在玖涯软著AI生成的，那么你就要选择 <strong>本地导入</strong>。</p><p><img src="https://blog.nineya.com/upload/2026/02/6aed72c7-3c1c-42dd-804f-1980d9148aae.png" alt="本地导入"></p><h3 id="2-1-JSON导入">2.1 JSON导入</h3><p>一个一个字段填写也是麻烦，所以我们提供了 <strong>JSON导入</strong> 的方式。</p><p>你可以下载json文件示例。</p><p><img src="https://blog.nineya.com/upload/2026/02/2f598908-51e2-4b3b-a152-a7c26b1d6c0e.png" alt="JSON导入"></p><p>你可以借助常见的AI大模型，如Deepseek。</p><p>把 <strong>JSON示例+你的软著信息</strong> 提供给大模型，让大模型给你生成填写好的JSON信息。</p><h3 id="2-2-AI智能填写">2.2 AI智能填写</h3><p>可能JSON导入也有点麻烦？不会写提示词？</p><p>我们把上述的流程嵌入到了软件里，提供了 <strong>AI智能填写功能</strong>。</p><p>把软件概要描述文字内容粘贴进来，AI将智能填写表单内容。</p><p><img src="https://blog.nineya.com/upload/2026/02/2682ad63-90a3-458e-acb7-ff402fda4fc9.png" alt="AI智能填写功能"></p><p>但是调用大模型接口是收费的，所以AI智能填写功能需要2个积分。</p><p>但是新用户在注册时，我们免费赠送了50积分。</p><h3 id="2-3-保留内容">2.3 保留内容</h3><p>不同软件的开发运行环境大体是差不多的。</p><p>一份软著导入完成后，你也可以选择保留表单信息，这样也能减少填写表单的工作量。</p><p><img src="https://blog.nineya.com/upload/2026/02/a53c618c-e698-4707-9b30-63b6f7d17de6.png" alt="保留内容"></p><h2 id="三-最后">三、最后</h2><p>该软件已经正式开放啦，下载地址：<a href="https://rz.nineya.com/client/">https://rz.nineya.com/client/</a></p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>玖涯软著AI，专业的AI软著申请工具！</p>]]>
                    </description>
                    <pubDate>Wed, 11 Feb 2026 21:01:51 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[软著提交系统繁忙问题，终极解决方法来了！]]>
                    </title>
                    <link>https://blog.nineya.com/archives/175.html</link>
                    <description>
                            <![CDATA[<p>最近提交软著，经常性遇到系统繁忙问题，怎么操作也提交不上去。</p><p><img src="https://blog.nineya.com/upload/2025/11/286a56ab-b6ad-46c1-9fe4-ef3d4e763690.png" alt="提交人数过多系统繁忙"></p><p>人工盯着点提交，费时费力不说，一天也提交不上去几件。</p><p>也经常性收到用户反馈这个问题。所以，我们紧急给开发了一个软著自动提交的工具。</p><p><img src="https://blog.nineya.com/upload/2025/11/fc8b3eca-5f92-41a3-8f7a-77989ea381d5.png" alt="软著自动提交工具"></p><h2 id="一-获取软件">一、获取软件</h2><p>软件可以通过玖涯软著AI的官网获取。</p><p>官网地址：<a href="https://rz.nineya.com/">https://rz.nineya.com/</a></p><h2 id="二-使用方法">二、使用方法</h2><p>下载程序exe安装包，双击启动程序即可，无须安装。</p><p><img src="https://img.xiumi.us/xmi/ua/5BieP/i/ba9cec82fe954d82703c92a103ba68b0-sz_55127.png" alt="img"></p><p>需要输入<strong>知识产权平台的登录授权</strong>，即 <strong>authorization_key和authorization_token</strong>两个值。</p><h3 id="2-1-获取授权">2.1 获取授权</h3><p>浏览器打开知识产权官网，登录到软著列表界面。</p><p>浏览器中按<strong>F12</strong>打开开发者工具。</p><p>如果按了之后没有反应，可以在浏览器右上角找到开发者工具，打开开发者界面。</p><p><em>（图示是Chrome，不同浏览器可能略有不同）</em></p><p><img src="https://blog.nineya.com/upload/2025/12/4f183065-7340-46a7-9f03-3945888487c4.png" alt="右上角打开F12"></p><p>开发者工具界面中选择 <strong>“网络”</strong> 页签。</p><p><img src="https://blog.nineya.com/upload/2025/11/828d0663-1fad-4246-a7b3-6139bc5deba4.png" alt="开发者工具"></p><p>点击一下软著列表界面中的 <strong>“查询”</strong> 按钮，可以看到 <strong>“网络”</strong> 页签的列表中多了两条数据。</p><p><img src="https://blog.nineya.com/upload/2025/11/b77e355f-920d-471e-99b9-9d7c384f934b.png" alt="找到软著查询请求"></p><p>选中 <strong>“类型”</strong> 为 <strong>“xhr”</strong> 的那一条，点击，在弹窗中找到<strong>请求标头</strong>。</p><p><img src="https://blog.nineya.com/upload/2025/11/e4ec4783-af7c-4531-8d71-07116977ba18.png" alt="查看请求头"></p><p>找到请求标头中<strong>authorization_key和authorization_token</strong>两个值。</p><h3 id="2-2-自动提交">2.2 自动提交</h3><p>把<strong>authorization_key和authorization_token</strong>两个值填写到自动提交软件里。</p><p><img src="https://blog.nineya.com/upload/2025/11/76ab4b75-613e-4ca4-86fe-630cc193c371.png" alt="填写授权信息"></p><p>点击 <strong>“开始自动提交”</strong> 按钮。</p><p><img src="https://blog.nineya.com/upload/2025/11/6a6c2784-5f73-4682-95c6-20ece0e9c18a.png" alt="开始自动提交"></p><h2 id="三-使用效果">三、使用效果</h2><p><strong>程序会每隔几秒自动提交一次软著申请，直到所有软著提交成功。</strong></p><p><img src="https://blog.nineya.com/upload/2025/11/fc8b3eca-5f92-41a3-8f7a-77989ea381d5.png" alt="软著自动提交工具"></p><p>在提交前要上传签章页，没有签章页的软著无法提交。</p><h2 id="四-最后">四、最后</h2><p>希望本文章对有所帮助。</p><p>软著申请问题，可以关注小玖免费咨询。</p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Tue, 16 Dec 2025 21:07:18 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[用玖涯软著AI生成软著材料，怎么提高申请通过率？]]>
                    </title>
                    <link>https://blog.nineya.com/archives/174.html</link>
                    <description>
                            <![CDATA[<p>玖涯软著AI于24年初发布，至今测试和使用了GPT、Gemini、Claude和Deepseek等多种AI模型，并对开源模型进行调优。</p><p>每个模型有不同的优势，玖涯软著AI的代码、文档材料、demo都有专门的模型负责，从而达到了业内领先的通过率。</p><p><img src="https://blog.nineya.com/upload/2025/11/4c92ab87-d4c9-44c2-9a3a-d6eae7f79103.png" alt="玖涯软著AI首页"></p><p><strong>但开放到市场端使用之后，也发现了一些问题。</strong></p><p>也可以说，用户一些使用方法，是我们软著申请师从未想到的。</p><p>本文就怎么用AI生成高质量软著，最大提高软著通过率，讲解使用技巧。</p><h2 id="一-声明">一、声明</h2><p>首先要申明的是，本文所述的一些问题并不是玖涯软著AI的缺陷，<strong>而是AI生成材料的一些共性问题。</strong></p><p>分享公司内部员工的使用经验，也是为了帮助用户生成一份更高质量的软著材料。</p><h2 id="二-功能描述填写">二、功能描述填写</h2><p>在申请信息填写步骤，切记 <strong>避免软件功能描述过短、乱填或填软件名称等情况。</strong></p><p><img src="https://blog.nineya.com/upload/2025/11/c47f48ba-0198-4c52-9406-f5074acd133a.png" alt="错误软件功能描述"></p><p>正确做法是，输入<strong>软件全称</strong> ，然后点击右侧的 <strong>“AI智能填写”</strong> 按钮。</p><p><img src="https://blog.nineya.com/upload/2025/11/e3b9aba7-b10f-4ef8-9f33-119ff69073e3.png" alt="AI智能填写"></p><p>AI会对软件功能进行分点描述，逻辑清晰，这非常有利于后面的材料生成。</p><p><img src="https://blog.nineya.com/upload/2025/11/606643f7-75af-42ba-9a42-4707274bbf02.png" alt="软著信息填写案例"></p><p>但毕竟只提供了一个软件名字，AI生成的功能描述都是这个软件的标准功能，具有 <strong>通用性</strong> 。</p><p><strong>怎么理解通用性，说简单了就是只要是这个类型的软件，每个软件基本都是这些功能。</strong></p><p>举例如通讯软件，都有私聊、群聊、好友管理等这些功能，这就是功能通用性。</p><p>如果我们加一些特有功能，比如主题皮肤、厘米秀等，这些个性化功能让我们的软件有了自己的个性。</p><p><strong>有特性的软件描述，生成的软著申请材料也会有特性，就更容易通过申请。</strong></p><p>我们可以 <strong>稍微调整一下描述，加入自己的个性化功能。</strong></p><p>修改可以比较随意，瞎扯也没关系。可以自己定义一些功能名称，加入自己随便想的一些功能，总之让自己的软件描述有自己的个性。</p><p><img src="https://blog.nineya.com/upload/2025/11/4e61b619-c3b2-4759-a287-fb6021e5cdfb.png" alt="个性化软件功能描述"></p><p><strong>千万不要多份软著用同一个软著描述，然后提交申请，这可能导致你一份软著都通过不了。</strong></p><h2 id="三-著作权人">三、著作权人</h2><p>可以理解有些用户出于隐私考虑，不想填写真实的著作权人信息。</p><p><strong>建议大家如实填写</strong>，因为著作权人信息会做为生成软著材料的一个要素，在代码和文档材料中体现。</p><p>如果不填写真实著作权人，也不要乱填111111等一系列无意义的内容，随便编个名字就好。</p><p><img src="https://blog.nineya.com/upload/2025/11/9e2b0842-3c3a-48f6-9a23-cd58dd2224a1.png" alt="错误著作权人"></p><p>著作权人信息会在文档材料中明文描述，如果填写的不是真实著作权人，提交前记得 <strong>搜索并全部替换</strong> 为真实的著作权人。</p><p><img src="https://blog.nineya.com/upload/2025/11/9b4e7588-f034-4e2f-8f8f-425a26b07e52.png" alt="文档材料中的著作权人信息"></p><h2 id="四-源码材料删减">四、源码材料删减</h2><p>在最初的版本里，我们只提供了完整的WORD文档格式的源码材料。</p><p>后来有挺多用户反馈认为麻烦，我们就一起提供了刚好60页的PDF文档。</p><p><img src="https://blog.nineya.com/upload/2025/11/60c6f511-a9b6-437f-b20d-c83cc90d3d2a.png" alt="源码PDF文档"></p><p><strong>我们提供了PDF文档，直接提交PDF文档没什么问题，这么做是可以的，正常情况下申请也能通过。</strong></p><p>但我们在给客户做软著代申请时，更多时候会人工删减WORD文档。</p><p>因为代码中会包含实体类、工具类、枚举类这些代码，如果你是程序员，肯定明白这是正常现象。</p><p><strong>但在软著申请时，这些简单的逻辑，没有什么意义。</strong></p><p>我们人工删减时，主要选择看上去简单的逻辑进行删减，减低被判定雷同的概率。</p><p>如下图这种，只有get和set的逻辑就是简单逻辑，可以优先删除。</p><p><img src="https://blog.nineya.com/upload/2025/11/dedf54eb-ca35-473f-a4b2-9ac2e9e9e41a.png" alt="源码材料实体类代码内容"></p><p><strong>如果你略懂代码，想最大提高申请通过率，建议你也可以人工删减源码。</strong></p><h2 id="五-最后">五、最后</h2><p>我们的软著申请师已经熟练使用系统，一些时候很难挖掘普通用户使用上的困境问题。</p><p>既然正式面向市场，就会认真做好每一份材料。如果有其他的意见和建议，欢迎公众号后台留言。</p><p>体验玖涯软著AI系统：<a href="https://rz.nineya.com">https://rz.nineya.com</a></p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>玖涯软著AI，专业的AI软著申请工具！</p>]]>
                    </description>
                    <pubDate>Sat, 29 Nov 2025 00:08:31 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[提交人数过多，软著提交不上去，怎么办？]]>
                    </title>
                    <link>https://blog.nineya.com/archives/173.html</link>
                    <description>
                            <![CDATA[<p>很多同行应该都遇到提交人数过多的问题了吧。</p><p><img src="https://blog.nineya.com/upload/2025/11/286a56ab-b6ad-46c1-9fe4-ef3d4e763690.png" alt="提交人数过多系统繁忙"></p><p>最近临近年末，软著需求高峰期，提交软著难上加难。</p><p>本文分享一个软著自动提交工具，帮助你提交软著申请。</p><p><img src="https://blog.nineya.com/upload/2025/11/fc8b3eca-5f92-41a3-8f7a-77989ea381d5.png" alt="软著自动提交工具"></p><h2 id="一-使用方法">一、使用方法</h2><p>浏览器打开软著官网，进入到软著列表界面。</p><h3 id="1-1-获取授权">1.1 获取授权</h3><p>浏览器按<strong>F12</strong>会进入开发者工具，选择 <strong>“网络”</strong> 页签。</p><p><img src="https://blog.nineya.com/upload/2025/11/828d0663-1fad-4246-a7b3-6139bc5deba4.png" alt="开发者工具"></p><p>点击一下软著列表界面中的 <strong>“查询”</strong> 按钮，可以看到 <strong>“网络”</strong> 页签的列表中多了两条数据。</p><p><img src="https://blog.nineya.com/upload/2025/11/b77e355f-920d-471e-99b9-9d7c384f934b.png" alt="找到软著查询请求"></p><p>选中 <strong>“类型”<strong>为</strong>“xhr”</strong> 的那一条，点击，在弹窗中找到<strong>请求标头</strong>。</p><p><img src="https://blog.nineya.com/upload/2025/11/e4ec4783-af7c-4531-8d71-07116977ba18.png" alt="查看请求头"></p><p>找到请求标头中<strong>authorization_key和authorization_token</strong>两个值。</p><h3 id="1-2-自动提交">1.2 自动提交</h3><p>把<strong>authorization_key和authorization_token</strong>两个值填写到自动提交软件里。</p><p><img src="https://blog.nineya.com/upload/2025/11/76ab4b75-613e-4ca4-86fe-630cc193c371.png" alt="填写授权信息"></p><p>点击 <strong>“开始自动提交”</strong> 按钮。</p><p><img src="https://blog.nineya.com/upload/2025/11/6a6c2784-5f73-4682-95c6-20ece0e9c18a.png" alt="开始自动提交"></p><h2 id="二-使用效果">二、使用效果</h2><p>程序会每隔5秒自动提交一次软著申请，直到所有软著提交成功。</p><p><img src="https://blog.nineya.com/upload/2025/11/fc8b3eca-5f92-41a3-8f7a-77989ea381d5.png" alt="软著自动提交工具"></p><h2 id="三-最后">三、最后</h2><p>希望本文章对有所帮助。</p><p>软著申请问题，可以关注小玖免费咨询。</p><p>玖涯软著AI - 软著自动提交工具地址：<a href="https://rz.nineya.com/auto-submit">https://rz.nineya.com/auto-submit</a></p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Fri, 21 Nov 2025 20:32:34 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[软著材料生成后，怎么提交软著申请？]]>
                    </title>
                    <link>https://blog.nineya.com/archives/172.html</link>
                    <description>
                            <![CDATA[<p>软著小白在使用玖涯软著AI生成材料后，不明白下一步该怎么操作。</p><p>本文详细的讲解生成材料后，申请软著的全部步骤。</p><h2 id="一-下载材料">一、下载材料</h2><p>可以点击<strong>一键下载全部文件</strong>，或者点击单项材料右侧的下载按钮。</p><p><img src="https://blog.nineya.com/upload/2025/11/0d6749f8-d8d4-499d-baab-ae034c1b3eaa.png" alt="软著文档一键下载"></p><p>一键下载会同时打开所有文件的下载链接，如果被浏览器拦截，请选择<strong>始终允许弹出式窗口和重定向</strong>，然后点击<strong>完成</strong>。</p><p><img src="https://blog.nineya.com/upload/2025/11/fab26254-c84d-4b64-a7bc-82e9a3f7228f.png" alt="始终允许弹出式窗口和重定向"></p><p>下载完成后，我们就得到了如下这些文件材料。</p><p><img src="https://blog.nineya.com/upload/2025/11/f2cfbf15-5812-4b6c-8c03-542b26dbe11f.png" alt="软著文档列表"></p><h2 id="二-检查文档">二、检查文档</h2><p>玖涯软著提供的材料都<strong>可以直接提交</strong>，但是出于保险考虑，也可以检查一下文档。</p><h3 id="2-1-检查程序鉴别材料">2.1 检查程序鉴别材料</h3><p>打开程序鉴别材料<strong>PDF文档</strong>，检查代码文件是否超过60页。</p><p><img src="https://blog.nineya.com/upload/2025/11/03383384-4479-4d37-8283-8c9fd9eb5001.png" alt="检查程序鉴别材料"></p><p>如果代码超过60页，可以打开程序鉴别材料<strong>DOCX文档</strong>，然后删除至60页，再转换为PDF源码文件。</p><h3 id="2-2-检查文档鉴别材料">2.2 检查文档鉴别材料</h3><p>打开文档鉴别材料<strong>PDF文档</strong>，检查文档内容或图片是否有错误。</p><p>如果发现问题，可以打开文档鉴别材料<strong>DOCX文档</strong>，然后进行编辑修改。</p><p>如果想调整软件截图，可以打开demo.zip压缩包，然后运行里面的demo文件，重新进行截图。</p><p><img src="https://blog.nineya.com/upload/2025/11/5be292c5-a11f-451b-b2c2-dab228216d96.png" alt="demo文件列表"></p><p>demo入口以文档鉴别材料的功能章节命名，打开章节对应的demo文件即可。</p><h3 id="2-3-联系客服">2.3 联系客服</h3><p>如果生成的文档有不了解或者无法解决的问题，可以联系玖涯软著客服。</p><h2 id="三-提交申请">三、提交申请</h2><p>版权保护中心首页点击<strong>软件登记</strong>按钮。</p><p><img src="https://blog.nineya.com/upload/2025/10/c31453c4-df3d-440b-8db0-30b7cda3d133.png" alt="软著登记"></p><p><img src="https://blog.nineya.com/upload/2025/10/cbf0c189-96ef-4f77-ac00-17eb3cf67dea.png" alt="软著登记申请"></p><p>打开从玖涯软著中下载的申请表，将申请表中的信息<strong>复制</strong>填写到软著申请表单中。</p><p><img src="https://blog.nineya.com/upload/2025/10/e25f6cf9-4b2e-4a1f-bfb4-41904ddb3837.png" alt="填写软著申请表单"></p><p>上传程序鉴别材料和文档鉴别材料。</p><p><img src="https://blog.nineya.com/upload/2025/10/3ace6740-57c2-4f22-8065-da03a7d7d9c1.png" alt="上传鉴别材料"></p><p>打印申请确认签章页，签字扫描上传。</p><p><img src="https://blog.nineya.com/upload/2025/10/b8204c0e-e0b5-4918-96c4-d83e2aa679c0.png" alt="打印申请确认签章页"></p><p>到此软著申请流程全部完成，等待审核完成即可。</p><h2 id="四-最后">四、最后</h2><p>希望本文章对有所帮助。</p><p>软著申请问题，可以关注小玖免费咨询。</p><p>想要使用玖涯软著AI系统，可以点击左下角查看原文。</p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Thu, 13 Nov 2025 01:50:54 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[申请软著，怎么快速整理软件源代码？]]>
                    </title>
                    <link>https://blog.nineya.com/archives/171.html</link>
                    <description>
                            <![CDATA[<p>手机应用市场都要软著或电子版权证书才可以上线。</p><p>有很多朋友自己开发了软件，想自己申请软著，但是整理文档又挺麻烦。</p><p>这里小玖给大家分享一下，整理软著源码文档的教程。</p><p><img src="https://blog.nineya.com/upload/2025/10/840a7a14-709f-4727-b5f6-53a12ef4a012.png" alt="版权保护中心官网"></p><h2 id="一-源码文件要求">一、源码文件要求</h2><p>源码文档审核有以下要求</p><h3 id="1-1-内容要求">1.1 内容要求</h3><p>要求提交连续的代码，可以包含正常的代码注释，但是不能添加大量或者无意义的注释，不能有空白行。</p><h3 id="1-2-格式要求">1.2 格式要求</h3><p><strong>页眉：</strong> 必须在每页页眉的左上角标注软件名称和版本号，例如：玖涯软著AI V1.0</p><p><strong>页眉：</strong> 每页的页脚要求标注页码。</p><p><strong>正文：</strong> 正文要求每页50行，字号一般设置在10-12之间。页面距这些没有明确要求，正常就好。</p><p><img src="https://blog.nineya.com/upload/2025/11/746fbe6d-1b58-4194-9e6d-825d5babb799.png" alt="软著源码文档示例"></p><h3 id="1-3-代码量要求">1.3 代码量要求</h3><p>如果你的代码不足60页，则提交全部代码即可。</p><p>如果源代码超过60页，提交前30页和后30页即可。</p><h2 id="二-源码文件生成">二、源码文件生成</h2><p>源码文件的制作本身上不难，人工做主要还是繁琐。</p><p>可以使用玖涯软著AI的源码整理工具一键生成。</p><p>浏览器打开玖涯软著的源码工具地址：<a href="https://rz.nineya.com/code-organizer">https://rz.nineya.com/code-organizer</a></p><p>输入<strong>软件全称、版本号</strong>，指定<strong>源代码文件后缀</strong>，不同后缀用英文逗号分隔，然后把<strong>主要源码压缩成zip上传</strong>即可。</p><p><img src="https://blog.nineya.com/upload/2025/11/b467a397-1044-43be-b078-dd87c5303752.png" alt="软著源码整理工具"></p><p>点击 <strong>“开始生成材料”</strong> 按钮，等待10秒左右。</p><p>点击下载PDF和DOCX文档即可。</p><p><img src="https://blog.nineya.com/upload/2025/11/e91056c1-e95c-4503-a091-3aa88899db25.png" alt="下载PDF和DOCX文档"></p><p>PDF文件就是整理好的，可以直接提交的源码鉴别材料。</p><p>DOCX文件包含所有的源代码，方便想要自己修改源码材料内容时编辑。</p><p>如果出于隐私原因，不能上传源码材料，可以使用离线版程序。</p><p><img src="https://blog.nineya.com/upload/2025/11/52848d1c-0fb0-46b0-ab29-196184e82242.png" alt="软著源码整理工具下载"></p><p>流程基本上也是一样的。</p><p><img src="https://blog.nineya.com/upload/2025/11/8ccfa15b-73b7-44a0-bfce-3fe9978acef7.png" alt="软著源码整理工具客户端"></p><h2 id="三-最后">三、最后</h2><p>希望本文章对有所帮助。</p><p>软著申请问题，可以关注小玖免费咨询。</p><p>想要使用玖涯软著AI系统，可以点击左下角查看原文。</p><p><img src="https://blog.nineya.com/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Thu, 13 Nov 2025 01:39:23 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[非计算机专业，保姆级申请软著教程]]>
                    </title>
                    <link>https://blog.nineya.com/archives/170.html</link>
                    <description>
                            <![CDATA[<p>软著对认证高新企业、申请人才政策、或者大学加学分都很有用。</p><p>有很多朋友想自己申请软著，但是又不知道怎么申请。</p><p>这里小玖给大家分享一下，保姆级申请软著的流程。</p><p><img src="/upload/2025/10/840a7a14-709f-4727-b5f6-53a12ef4a012.png" alt="版权保护中心官网"></p><h2 id="一-前期准备">一、前期准备</h2><p>在申请软著前，需要完成一些前期准备。</p><h3 id="1-1注册账号">1.1注册账号</h3><p>访问中国版权保护中心官网，注册账号，并完成实名认证。</p><h3 id="1-2-确定软件名称">1.2 确定软件名称</h3><p>确定自己申请软著的软件全称，这个软件名称会显示在软著上。</p><p>这个软件名称不能乱起，要求以<strong>软件、系统、APP、平台</strong>这类的词结尾。</p><p><img src="/upload/2025/10/fee21e35-cf00-447e-a927-b5b6626faed0.png" alt="软著截图"></p><h2 id="二-材料准备">二、材料准备</h2><p>申请软著时需要准备<strong>文档鉴别材料和代码鉴别材料</strong>。</p><p>文档鉴别材料就是软件的设计文档、用户手册、操作手册这些，选其一就可以。</p><p>代码鉴别材料就是软件代码整理成的文件，要求一页50行，需要代码的前30页和结尾30页。</p><h3 id="2-1-玖涯软著AI">2.1 玖涯软著AI</h3><p>没有文档和代码，这是很多人没办法自己申请软著的主要原因。</p><p>说起来这个问题也很好解决，可以借助AI生成软著申请材料。</p><p>如果你需要AI生成软著材料，可以用浏览器打开玖涯软著AI：<a href="https://rz.nineya.com">https://rz.nineya.com</a></p><p>微信扫码登录，新建一个软著申请，输入你想好的<strong>软件全称</strong>，点击右侧的<strong>AI智能填写</strong>按钮。</p><p><img src="/upload/2025/10/7bfcabc8-765c-4f32-9428-bf0dd274073a.png" alt="新建软著申请"></p><p>AI会帮你智能填写软件信息，你只要填写<strong>著作权人</strong>即可，然后点击<strong>立即生成申请材料</strong>按钮。</p><blockquote><p>著作权人就是申请软著的人，可以是个人或公司，不能乱填哦。</p></blockquote><p><img src="/upload/2025/10/b4220d64-88ad-4388-9fca-a6546812b863.png" alt="立即生成申请材料"></p><p>等待<strong>10-20分钟</strong>，软著材料生成完成，点击下载即可。</p><p><img src="/upload/2025/10/03b0ca7b-d685-4eee-9faf-7c5c3af78935.png" alt="软著材料列表"></p><p>玖涯软著会提供程序鉴别材料、文档鉴别材料、著作权登记表和可运行的软件Demo。</p><p>通过这些材料可以就可以直接申请软著。</p><h2 id="三-软著申请">三、软著申请</h2><p>版权保护中心首页点击<strong>软件登记</strong>按钮。</p><p><img src="/upload/2025/10/c31453c4-df3d-440b-8db0-30b7cda3d133.png" alt="软著登记"></p><p><img src="/upload/2025/10/cbf0c189-96ef-4f77-ac00-17eb3cf67dea.png" alt="软著登记申请"></p><p>打开从玖涯软著中下载的申请表，将申请表中的信息<strong>复制</strong>填写到软著申请表单中。</p><p><img src="/upload/2025/10/e25f6cf9-4b2e-4a1f-bfb4-41904ddb3837.png" alt="填写软著申请表单"></p><p>上传程序鉴别材料和文档鉴别材料。</p><p><img src="/upload/2025/10/3ace6740-57c2-4f22-8065-da03a7d7d9c1.png" alt="上传鉴别材料"></p><p>打印申请确认签章页，签字扫描上传。</p><p><img src="/upload/2025/10/b8204c0e-e0b5-4918-96c4-d83e2aa679c0.png" alt="打印申请确认签章页"></p><p>到此软著申请流程全部完成，等待审核完成即可。</p><h2 id="四-最后">四、最后</h2><p>希望本文章对有所帮助。</p><p>软著申请问题，可以关注小玖免费咨询。</p><p>想要使用玖涯软著AI系统，可以点击左下角查看原文。</p><p><img src="/upload/2025/10/3abadf6a-7a45-4e64-8942-58871340a5c1.png" alt="玖涯软著AI公众号二维码"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Thu, 30 Oct 2025 21:27:40 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[软考、PMP和厂商认证考试优惠报班，想做副业也可以合作代理]]>
                    </title>
                    <link>https://blog.nineya.com/archives/169.html</link>
                    <description>
                            <![CDATA[<p>我已经近一年没分享技术文章了。</p><p>为了上班轻松点，也出于对35岁程序员天花板的担忧，所以最近一年多来都在研究副业。</p><p>好在运气还行，副业算是稍微有点起色。</p><p><strong>最近和51CTO谈了培训课程的渠道合作，软考、PMP和厂商认证相关的课程都有。</strong></p><p>如下图这些课程都有代理合作。</p><p><img src="/upload/2025/05/image.png" alt="image"></p><p>课程链接（精品课类目的课程都在渠道合作范围内）：<a href="https://e.51cto.com/?utm_platform">https://e.51cto.com/?utm_platform</a></p><h2 id="一-优惠报班">一、优惠报班</h2><p>如果有粉丝想报考软考、PMP相关的课程，可以找我报名，可以给优惠价。</p><p>51CTO做为专注技术领域的培训机构，技术课程的培训能力还是不错的，比如软考，还有挺多教材都是51CTO这边的老师出的。</p><h2 id="二-代理合作">二、代理合作</h2><p>如果有想做和我一样做副业的粉丝，可以找我代理合作，一起推51CTO的课程。</p><p>我也期望找几个有想法的人一起把量做起来，好和51CTO谈更优惠的分成。</p><h2 id="三-联系方式">三、联系方式</h2><p>QQ：361654768</p><p>微信：nineyaccz</p>]]>
                    </description>
                    <pubDate>Thu, 08 May 2025 22:54:34 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[网盘资源搜索微信机器人搭建方法]]>
                    </title>
                    <link>https://blog.nineya.com/archives/167.html</link>
                    <description>
                            <![CDATA[<p>本文讲解网盘资源搜索的微信机器人搭建方法。</p><p>搭建需要用到指定版本的微信安装包、千寻微信框架和小玖网盘助手三个应用。</p><p>如果你没有安装包，请找小玖提供，小玖微信：nineyaccz</p><h2 id="一-环境部署">一、环境部署</h2><p>部署环境前需要先关闭 windows 防火墙的病毒防护，不然千寻框架会报毒。同样如果有杀毒软件也要关掉。</p><p><img src="/upload/2025/02/image-1740320378879.png" alt="关闭安全防护"></p><h3 id="1-1-安装微信">1.1 安装微信</h3><p>首先需要安装指定 <code>3.9.10.16</code> 版本的微信，不可更新升级，要关闭微信的自动版本升级。</p><blockquote><p>最好先卸载原来的微信再安装，如果有数据不想卸载，可以先尝试覆盖安装。覆盖安装失败的话，就必须要卸载了。</p></blockquote><h3 id="1-2-小玖网盘助手">1.2 小玖网盘助手</h3><p>将小玖网盘助手软件安装包放到一个单独的目录下。</p><p><img src="/upload/2025/02/image.png" alt="小玖网盘助手安装"></p><p>双击启动助手，输入小玖提供的 <code>AccessKey</code> 并点击确认。</p><p><img src="/upload/2025/02/image-1740319538949.png" alt="输入AccessKey"></p><p>点击“回调地址”按钮，复制弹出文本框里的回调地址。</p><p><img src="/upload/2025/02/image-1740320186747.png" alt="复制回调地址"></p><p>到此小玖网盘助手运行成功。</p><h3 id="1-3-安装千寻框架">1.3 安装千寻框架</h3><p>双击启动千寻框架应用，点击“框架设置”配置微信的安装目录和数据存储目录。在<code>HOOK设置</code> 中，选择微信版本 <code>3.9.10.16</code>。</p><p><img src="/upload/2025/02/ae1e1f5ae7a862acea2c269c44a7167.png" alt="千寻微信设置"></p><p>将从小玖网盘助手中复制的回调地址粘贴到回调地址文本框中，然后勾选“启用HTTPAPI”</p><p><img src="/upload/2025/02/19414ab5bcbb92d719aaa2b4e69f1a0.png" alt="千寻HTTPAPI设置"></p><p>进入千寻的微信管理界面，右键“添加微信-随机端口”，然后会启动一个微信账号，正常扫码登录即可。</p><p><img src="/upload/2025/02/d5a2ca7e7f62a69db065d5f1e35d737.png" alt="千寻微信管理"></p><p>然后复制微信列表中的 <code>wxid</code>。</p><h3 id="1-4-管理后台配置">1.4 管理后台配置</h3><p>进入玖涯工具的管理后台：<a href="https://tool.nineya.com/user">https://tool.nineya.com/user</a></p><p>进入“功能配置”菜单的“网盘助手”配置项。</p><p><img src="/upload/2025/02/image-1740323816526.png" alt="配置wxid"></p><p>然后在工具人HttpApi文本框中写入：<a href="http://127.0.0.1:7777/qianxun/httpapi?wxid=wxid_xxxxxxxxx">http://127.0.0.1:7777/qianxun/httpapi?wxid=wxid_xxxxxxxxx</a></p><p>其中，wxid_xxxxxxxxx是刚刚复制的wxid。</p><p>到此已经完成了基础的环境部署。</p><h2 id="二-基础配置">二、基础配置</h2><p>在玖涯工具后台中，需要完成网盘和微信群的基础功能配置。</p><h3 id="2-1-配置管理微信">2.1 配置管理微信</h3><p>管理微信可以给工具人发命令，进行简单的管理操作，工具人会给管理微信发通知消息。</p><p><img src="/upload/2025/06/image.png" alt="配置管理微信"></p><p>拿大号给自己发一条消息，在千寻的运行日志里找到自己的wxid，配置做为管理微信即可。</p><h3 id="2-2-配置微信群">2.2 配置微信群</h3><p>在要进行监听配置的微信群中随便发送一条消息，然后在千寻运行日志中找到该条消息，找到“XXXXXX@chatroom”格式的群wxid。</p><p><img src="/upload/2025/02/6463f76f304323b2a1b725573ecbee0.png" alt="千寻运行日志"></p><p>然后回到玖涯工具管理后台，增加一个微信群组，设置群名称，一个或多个群标签，和刚刚复制的群Wxid。</p><blockquote><p>群标签用于对群进行分组，方便定位哪些群需要进行网盘搜索自动回复。</p></blockquote><p><img src="/upload/2025/02/image-1740324149038.png" alt="配置微信群"></p><h3 id="2-3-配置夸克账号">2.3 配置夸克账号</h3><p>登录夸克网盘PC端网站，创建一个专门用于搜索转存的目录，并打开进入这个目录。</p><p>查看地址栏，复制由数字和小写字母组成的目录fid。</p><p><img src="/upload/2025/02/image-1740324418478.png" alt="复制目录fid"></p><p>按F12打开网页控制台，刷新一下网页，选择一个请求，复制Cookie。</p><p><img src="/upload/2025/02/image-1740324546139.png" alt="复制cookie"></p><p>分别配置到管理后台中，如下：</p><p><img src="/upload/2025/06/image-1749890610034.png" alt="夸克账号配置"></p><p>在自动转存时，允许在文件目录中附加内容，比如附加一些引流文件，示例：<a href="https://pan.quark.cn/s/124809061803">https://pan.quark.cn/s/124809061803</a>，非必须，不配置也可以。</p><blockquote><p>注意，附加内容需要换一个夸克账号配置，夸克<strong>不允许自己转存自己分享的资源</strong>。</p></blockquote><p>如果你需要自动同步网盘分享的文件到系统，可以开启同步分享的按钮。</p><p><img src="/upload/2025/06/image-1749890899397.png" alt="配置搜索"></p><p>配置一个夸克账号做为搜索转存的账号（这个账号需要有SVIP，不然文件一多就转存不了）</p><p>转存多了之后，账号磁盘容易满，可以配置过一段时间自动清除，时间单位为分钟。</p><h3 id="2-4-配置群搜索">2.4 配置群搜索</h3><p><img src="/upload/2025/02/image-1740324965370.png" alt="配置群搜索"></p><p>选择需要参与资源搜索的微信群标签，到此就完成了微信群资源搜索的基础配置。</p><p>默认在搜索成功、搜索失败时有几个文案模板，模板文案允许修改，但是不要修改 #{url}、#{result}等模板标签。</p><h2 id="三-附加功能">三、附加功能</h2><h3 id="3-1-定时消息">3.1 定时消息</h3><p>允许创建一条定时任务，往指定标签的微信群中发送指定消息内容。</p><p><img src="/upload/2025/02/image-1740325147163.png" alt="定时消息"></p><p>定时规则有点复杂，是 <code>分 时 日 月 周</code> 的格式。</p><ul><li><p>‌<strong>分</strong>‌：表示分钟，取值范围为0-59。</p></li><li><p>‌<strong>时</strong>‌：表示小时，取值范围为0-23。</p></li><li><p>‌<strong>日</strong>‌：表示月份中的日期，取值范围为1-31。</p></li><li><p>‌<strong>月</strong>‌：表示月份，取值范围为1-12。</p></li><li><p>‌<strong>周</strong>‌：表示星期几，取值范围为0-7（0或7表示星期天）。</p><p>例如：</p></li><li><p>‌<strong>每天上午10:15执行</strong>‌：<code>15 10 * * *</code></p></li><li><p>‌<strong>每周一至周五上午10:15执行</strong>‌：<code>15 10 * * 1-5</code></p></li><li><p>‌<strong>每月15日上午10:15执行</strong>‌：<code>15 10 15 * *</code></p></li></ul><h3 id="3-2-手动群发消息">3.2 手动群发消息</h3><p>手动往指定标签的几个微信群中群发消息</p><p><img src="/upload/2025/02/image-1740325478294.png" alt="手动群发消息"></p><h3 id="3-3-文案转存">3.3 文案转存</h3><p>自动转存文案中的夸克链接，并替换文案中的链接。</p><p><img src="/upload/2025/02/image-1740325572063.png" alt="文案转存"></p>]]>
                    </description>
                    <pubDate>Sun, 23 Feb 2025 22:20:45 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[网盘拉新付费专栏——制作短剧搜寻文档]]>
                    </title>
                    <link>https://blog.nineya.com/archives/166.html</link>
                    <description>
                            <![CDATA[<p>大家一定经常看到类似下图的短剧搜索文档。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142299433.png" alt="短剧搜索文档"></p><p>这种文档在推广短剧时非常方便，同时也非常常见。</p><p>今天的教程我们就是要做一个这样的文档。</p><p>首先，点击这个链接，先转存下载一个工具软件：<a href="https://pan.quark.cn/s/15b980d4925a">https://pan.quark.cn/s/15b980d4925a</a></p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142339052.png" alt="转存下载工具软件"></p><p><strong>将工具转存到自己的网盘然后下载，教程即刻开始。</strong></p><h2 id="一-创建短剧搜寻文档">一、创建短剧搜寻文档</h2><p>点击链接，打开小玖分享的文档模板：<a href="https://pub.kdocs.cn/t/t1FZJw9ZY18BYUD?from=pc_mymbshare">https://pub.kdocs.cn/t/t1FZJw9ZY18BYUD?from=pc_mymbshare</a></p><p>点击“​<strong>使用模板</strong>​”按钮，就会创建一个智能表格云文档。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142407572.png" alt="使用模板"></p><p>点击“​<strong>配置</strong>​”→“​<strong>个性化</strong>​”，可以修改搜索界面的描述。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142447168.png" alt="修改搜索界面描述"></p><p>返回云文档界面，右键重命名，将文档命名为自己的名字。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142492745.png" alt="重命名文档"></p><p>点击“​<strong>分享</strong>​”按钮，权限选择“​<strong>所有人可查看</strong>​”，最后复制分享链接。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142584139.png" alt="复制分享链接"></p><p>用分享链接打开，就可以看到我们的短剧云文档了，且除了我们自己以外，都是<strong>只读</strong>权限。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142671620.png" alt="查看分享文档"><br>到这里，我们已经完成了一个短剧搜寻的空文档的创建。</p><h2 id="二-转存短剧资源">二、转存短剧资源</h2><p>这一步，就要用到上一篇文章分享的 <strong>夸克批量转存分享工具。</strong></p><p>点击“​<strong>载入短剧猫资源</strong>​”，就可以载入短剧资源，共计一万多条。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142734921.png" alt="载入短剧猫资源"><br>载入完成后，我们按上一篇文章的教程，把资源转存到我们的网盘。</p><p>数据太多，一次性转存需要耗时很久，可以缩小转存和分享延迟提交转存速度（<strong>单位是毫秒，1000毫秒=1秒</strong>）</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142776788.png" alt="调整分享延迟"></p><p>有时候可能网盘空间不够，或者时间充足，无法一次性把一万多条全部转存。</p><p>找到工具所在目录下的“​<strong>导入数据.txt</strong>​”文件，这里面就是载入的短剧资源。</p><p>我们可以把这个文件移动出来，然后按行数分成多份，分批转存。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142841591.png" alt="导入数据.txt"><br>转存并分享完成后，我们以<strong>本地数据库格式</strong>导出，最终我们会得到一个文件分享列表文件。</p><p>到此，我们已经有了短剧资源了。</p><h2 id="三-数据导入搜寻表">三、数据导入搜寻表</h2><h3 id="3-1-安装软件">3.1 安装软件</h3><p>安装最开始网盘分享的那个 Notepad++ 软件。</p><p>使用 Notepad++ 打开导出的文件。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142892588.png" alt="安装Notepad++"></p><h3 id="3-2-链接转换">3.2 链接转换</h3><p>这里可以电脑打开“​<strong>小红薯文案助手</strong>​”，用 <strong>网盘链接转换工具</strong> 进行一下链接转换。</p><p>目前工具支持最长 ​<strong>2万个字符</strong>​，需要 ​<strong>分批转换</strong>​，如果觉得麻烦，可以直接跳过这一步。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728142962173.png" alt="链接转换"></p><h3 id="3-3-文档格式调整">3.3 文档格式调整</h3><p>按“​<strong>CTRL+F</strong>​”可以打开一个小窗口，点击“​<strong>替换</strong>​”页签。</p><p>查找目标输入“​^(.*)\|(.*)$”，替换为输入“​$1\t$2\t$2”，最下方查找模式选择“​<strong>正则表达式</strong>​”。</p><p>最后点击“​<strong>全部替换</strong>​”按钮。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728143052544.png" alt="全部替换"></p><p>这时候，文档将被格式化为如下格式，首行是资源标题，后面跟着两个一样的资源分享链接。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728143086238.png" alt="格式化后的文档"></p><h3 id="3-4-复制导入">3.4 复制导入</h3><p>全选复制格式化后的文档。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728143368197.png" alt="全选复制"><br>打开短剧库文档中的“​<strong>资源表</strong>​”。</p><p>点击“​+​”号新建一个空白行，选中​<strong>第一个单元格</strong>​（不要出现光标，仅选中）</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728143166461.png" alt="选中第一个单元格"></p><p>粘贴复制的资源内容，将全部被插入到资源库中。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728143210868.png" alt="插入到资源库"></p><h2 id="四-最后">四、最后</h2><p>通过以上步骤，即可完成短剧资源表的创建。</p><p>小玖感觉这样也够用了，资源也不会频繁去新增和变更。</p><p>如果还需要对接微信机器人啥的，可以在社群里问问，这个工具是社群里的朋友开发的，但是微信机器人部分 <strong>不免费</strong>。</p><p>其实，一份文档也足够了。</p><p>另外，Notepad++ 很好用，如果熟练了使用正则，能够有效的提升一些文档处理工作的效率。</p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Sat, 05 Oct 2024 23:48:38 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[网盘拉新付费专栏——夸克网盘批量转存分享]]>
                    </title>
                    <link>https://blog.nineya.com/archives/165.html</link>
                    <description>
                            <![CDATA[<p>本文介绍的是，夸克网盘批量转存并分享，效率提升工具。</p><p>今天，小玖手把手带大家批量转存资料。</p><p>首先，我们需要借助一个资料转存的工具，可以从下面这个链接获取：<a href="https://pan.quark.cn/s/f4a02c29eaf4">https://pan.quark.cn/s/f4a02c29eaf4</a></p><p><img src="https://blog.nineya.com/upload/2024/10/image.png" alt="夸克网盘工具"></p><p><strong>将工具转存到自己的网盘然后下载，教程即刻开始。</strong></p><h2 id="一-熟悉工具">一、熟悉工具</h2><p>工具需要通过一个叫 <strong>cookie</strong> 的值进行登录，该值的输入位置如下。</p><p>点击“登录”按钮，登录成功，下面会显示一个文件列表。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140374741.png" alt="登录相关功能"></p><p><strong>转存fid</strong> 是用于存放转存文件的目录的fid，在转存文件前点击一个目录即可选中。</p><p><strong>导入列表</strong> 用于导入需要转存的网盘文件链接。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140450207.png" alt="转存相关功能"></p><h2 id="二-Cookie登录">二、Cookie登录</h2><p>打开浏览器，登录夸克网盘，然后按 ​<strong>F12</strong>​，网页右侧会打开一个这样的开发者界面。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140524660.png" alt="开发者界面"></p><p>刷新一下网页，可以看到右侧的开发者界面会出现很多条数据。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140566668.png" alt="开发者界面数据"></p><p>随便选一个 <strong>花扣号标记</strong> 的数据，点击查看详情，找到一个名为 <strong>cookie</strong> 的数据项，将值全部拷贝下来。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140617574.png" alt="拷贝Cookie"></p><p>值粘贴到对应的文本框，点击“​<strong>登录</strong>​”，然后就会出现夸克的目录列表。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728140661719.png" alt="登录夸克"></p><h2 id="三-选择转存目录">三、选择转存目录</h2><p>双击转存的 ​<strong>目标存储目录</strong>​，下面的 <strong>转存fid</strong> 会出现对应的值。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141311368.png" alt="选择转存目录"></p><h2 id="四-导入数据">四、导入数据</h2><p>准备一个导入用的 ​<strong>数据文件</strong>​，文件 <strong>一行一个</strong> 夸克分享链接。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141410934.png" alt="导入数据文件"></p><p>点击“​<strong>导入列表</strong>​”按钮，选中准备好的数据文件，下面会出现用于导入的链接列表，然后点击“​<strong>转存并分享</strong>​”。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141456848.png" alt="转存并分享步骤"></p><p><strong>然后等全部转存并分享完成就可以了。</strong></p><p><strong>需要注意，如果你的账号没有会员，一些过大、过多的文件可能无法转存，会失败。</strong></p><h2 id="五-获取结果">五、获取结果</h2><p>全部转存并分享完成后，点击“​<strong>分享记录获取</strong>​”，然后点击“​<strong>循环获取</strong>​”，能够获取当前账号的分享列表。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141514912.png" alt="获取转存结果"></p><p>分享列表中右键，点击“​<strong>导出本地数据库格式</strong>​”，就可以在程序同目录生成一个分享结果的文件。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141559222.png" alt="导出本地数据库格式"></p><p>导出的文件格式如下。</p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141602234.png" alt="导出的文件内容"></p><h2 id="六-最后">六、最后</h2><p>下一篇，分享怎么用这个工具做一个短剧搜索文档，把短剧搞起来。</p><p>效果如链接：<a href="https://kdocs.cn/l/csKDl25CUT5o">https://kdocs.cn/l/csKDl25CUT5o</a></p><p><img src="https://blog.nineya.com/upload/2024/10/image-1728141643957.png" alt="短剧搜寻文档"></p><p>欢迎，再见，告辞！</p>]]>
                    </description>
                    <pubDate>Sat, 05 Oct 2024 23:24:17 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[内幕！没有特长的普通人，通过网盘居然赚到了第一桶金！]]>
                    </title>
                    <link>https://blog.nineya.com/archives/164.html</link>
                    <description>
                            <![CDATA[<p>通过网盘赚钱其实很简单，<strong>正常使用网盘，分享网盘里的资料文件，就可以赚钱。</strong></p><p><strong>因为你通过网盘分享文件，别人来转存，无形中就给网盘平台带来了用户。</strong> 这个网盘副业就是让网盘平台付费，你带来了多少用户，网盘平台就给你结算多少钱。</p><p>分享文件内容没有限制，任意文件都可以，只要有人<strong>转存</strong>或<strong>下载</strong>，就有钱（0.2-0.7元不等）。如果那个人是<strong>新用户</strong>，还能额外有一份钱（5-10元不等）。如果他还开了会员，那还可以分佣（25%-50%部分）。</p><blockquote><p>以前经常分享文件的友友，是不是感觉自己错过了一个亿！</p></blockquote><p>小玖平时就会在 CSDN 、博客等地方分享一些编程资料和文件，登记网盘拉新后，没怎么操作就已经赚到 <code>47.8</code> 米了。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901271638.png" alt="网盘拉新收入"></p><h2 id="一-怎么入局">一、怎么入局</h2><p>网盘相信大家都会用，这里小玖分享如何通过网盘拉新平台获得收益。</p><p>大家可以在这个链接注册网盘拉新平台：<a href="https://dt.bd.cn/#/pages/login/register?invite_code=669788">https://dt.bd.cn/#/pages/login/register?invite_code=669788</a></p><p>注册完成后，将自己的网盘账号绑定为拉新账号即可，主流有夸克、UC和百度网盘。</p><blockquote><p>已经注册完成了跳过这里，直接看后面的“网盘套路分享”</p></blockquote><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901336877.png" alt="网盘拉新列表"></p><p>目前小玖做的是夸克和百度网盘，点击申请推广码绑定自己的网盘账号，如果有不懂的地方可以看视频教程。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901475125.png" alt="申请推广码"></p><p>申请时要填的信息比较多，但实际审核都不严格。这里小玖主要介绍一下几个比较不好填的内容。</p><ol><li><p>分享方式</p><p>根据自己实际情况，如果有运营网站、小红书等，就选择对应的选项，如果没有，就选“社群/私域”或者“其他”。</p></li><li><p>粉丝数/用户数</p><p>这个选项可以填自己抖音粉丝、群聊人数等等，随便就好，什么数值高填什么。</p></li><li><p>自媒体主页截图：</p><p>有抖音等自媒体账号的可以填自媒体账号，没有自媒体账号的群聊主页截图一张就行。</p></li></ol><p>提交申请后等待审核通过就行。</p><p>然后就是扶持政策，可以领会员、网盘扩容等，具体政策可以看下面这张图。</p><blockquote><p>应该是自动到账的，不需要操作。</p></blockquote><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723902026276.png" alt="网盘拉新领会员"></p><h2 id="二-套路分享">二、套路分享</h2><p>做网盘这个副业，其实就是分享文件。有套路走，文件分享的更顺滑。</p><p>这里分享几个简单的套路。</p><h3 id="2-1-影视-短剧分享">2.1 影视/短剧分享</h3><p>一些最新上映的电影、电视剧，可以从网上找到资源，然后转存到网盘，通过B站、贴吧和微博等平台分享，流量非常可观。一天随随便便拉一百多个转存，单靠转存就能有好几十快。</p><p>最近短剧也非常火，也可以找热门短剧分享，也是一样的逻辑。</p><p><img src="https://blog.nineya.com/upload/2024/08/image-20240823233119687.png" alt="影视文件分享"></p><h3 id="2-2-卖资源">2.2 卖资源</h3><p>逻辑很简单，就是在某宝、咸鱼等平台上上架网盘资源，价格嘛可以定低点，有人来买就把网盘链接给他，我们主要赚他们来网盘转存文件的钱。</p><p>这个思维就很广泛了，可以卖考研资料、PS原画学习、自媒体运营资料和行业考试资料等等……网盘平台和顾客的钱两头赚。</p><blockquote><p>也可以加各种学习交流群，分享资料时大家热情都很高的。</p></blockquote><p><img src="https://blog.nineya.com/upload/2024/08/image-20240823234507422.png" alt="售卖网盘资源"></p><h3 id="2-3-游戏分享">2.3 游戏分享</h3><p>相信大家都玩过dao版游戏吧？特别是Steam上的那些单机大制作，可以在各个游戏平台分享游戏安装包。</p><p>游戏安装包一般很大，随便好几个G，这个方式非常容易吸引用户开网盘会员，赚的更多。多分享热门游戏，一天轻轻松松上百块。</p><p><img src="https://blog.nineya.com/upload/2024/08/image-20240823234535901.png" alt="游戏资源分享"></p><h2 id="三-教程资料">三、教程资料</h2><p>有的人可能缺乏可以分享的教程资料，这里小玖把自己多年来收集的资料汇总了，有需要的宝子可以通过下面这个链接自取。</p><p>我用夸克网盘分享了「分享」，点击链接即可保存。打开「夸克APP」，无需下载在线播放视频，畅享原画5倍速，支持电视投屏。<br>链接：<a href="https://pan.quark.cn/s/5f9a614a0179">https://pan.quark.cn/s/5f9a614a0179</a></p><p>其实还有百度网盘的资料，但是看过上一篇文章的朋友都知道，百度网盘的资料太多，分享没一会就被和谐了。</p><p>所以想要资料的可以关注微信公众号，发送“​<strong>网盘群</strong>​”进网盘拉新资源交流群，里面可以互相分享资料。</p><p><strong>然后给公众号发送影片名称，可获取最新上映的影片。</strong></p><p><img src="https://blog.nineya.com/upload/2024/08/image-20240817215622076.png" alt="公众号二维码"></p>]]>
                    </description>
                    <pubDate>Sat, 24 Aug 2024 00:33:52 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[震惊！炸裂！天哪！！网盘拉新真的是普通人做副业的最佳选择！]]>
                    </title>
                    <link>https://blog.nineya.com/archives/163.html</link>
                    <description>
                            <![CDATA[<p>小玖研究副业好久了，也做过很多副业，第一次觉得一个副业这么简单！</p><p>以前，写小说（差文笔）、小说推文（被限流没流量）、抖音（不会做视频）、开网店（一件代发有坑）。</p><p>现在，做网盘拉新，不用投入，白嫖网盘会员。</p><h2 id="一-项目介绍">一、项目介绍</h2><p>所谓网盘拉新，简单来说，就是给夸克、百度等各大网盘拉用户。</p><p>而我们要做的就是，在 <strong>拉新平台登记</strong>，然后 <strong>在网盘上分享文件。</strong></p><p>分享文件内容没有限制，任意文件都可以，只要有人<strong>转存</strong>或<strong>下载</strong>，就有钱（0.2-0.7元不等）。如果那个人是<strong>新用户</strong>，还能额外有一份钱（5-10元不等）。</p><p>除了有钱，还可以<strong>免费领网盘会员</strong>，告别网盘空间不足、下载速度慢的烦恼。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723900454597.png" alt="夸克网盘会员"></p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723902268585.png" alt="百度网盘会员"></p><p>对于我们网盘用户来说，没必要特地去做什么操作，只需要正常使用网盘就可以。</p><p>有人下载你分享的文件，就有钱；没人下载，也可以白嫖会员。</p><p>小玖平时就会在 CSDN 、博客等地方分享一些编程材料和文件，上星期登记网盘拉新后，已经赚到 <code>47.8</code> 米了。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901271638.png" alt="网盘拉新收入"></p><h2 id="二-怎么操作">二、怎么操作</h2><p>分享文件大家都会，这里小玖就赘述，主要还是分享网盘拉新平台。</p><p>大家可以在这个链接注册网盘拉新平台：<a href="https://dt.bd.cn/#/pages/login/register?invite_code=669788">https://dt.bd.cn/#/pages/login/register?invite_code=669788</a></p><p>注册完成后，将自己的网盘账号绑定为拉新账号即可，主流有夸克、UC和百度网盘。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901336877.png" alt="网盘拉新列表"></p><p>目前小玖做的是夸克和百度网盘，点击申请推广码绑定自己的网盘账号，如果有不懂的地方可以看视频教程。</p><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723901475125.png" alt="申请推广码"></p><p>申请时要填的信息比较多，但实际审核都不严格。这里小玖主要介绍一下几个比较不好填的内容。</p><ol><li><p>分享方式</p><p>根据自己实际情况，如果有运营网站、小红书等，就选择对应的选项，如果没有，就选“社群/私域”或者“其他”。</p></li><li><p>粉丝数/用户数</p><p>这个选项可以填自己抖音粉丝、群聊人数等等，随便就好，什么数值高填什么。</p></li><li><p>自媒体主页截图：</p><p>有抖音等自媒体账号的可以填自媒体账号，没有自媒体账号的群聊主页截图一张就行。</p></li></ol><p>提交申请后等待审核通过就行。</p><p>然后就是扶持政策，可以领会员、网盘扩容等，具体政策可以看下面这张图。</p><blockquote><p>应该是自动到账的，不需要操作。</p></blockquote><p><img src="https://blog.nineya.com/upload/2024/08/QQ_1723902026276.png" alt="网盘拉新领会员"></p><h2 id="三-教程资料">三、教程资料</h2><p>有的人有内容可以分享，有的人可能缺乏可以分享的教程资料，这里小玖把自己多年来收集的资料汇总了，有需要的宝子可以通过下面这个链接自取。</p><p>通过网盘分享的文件：我的学习<br>链接: <a href="https://pan.baidu.com/s/1FMzBT8hW5XO58CNvlNhNzg?pwd=gg8t">https://pan.baidu.com/s/1FMzBT8hW5XO58CNvlNhNzg?pwd=gg8t</a> 提取码: gg8t<br>--来自百度网盘超级会员v1的分享</p><p>更多咨询和分享，宝子可扫码关注我的微信公众号。<strong>给公众号发送影片名称，可获取最新上映的影片。</strong></p><p><img src="https://blog.nineya.com/upload/2024/08/image-20240817215622076.png" alt="公众号二维码"></p><p>然后也建了个副业群，有需要的宝子扫码进。</p><p><img src="/upload/2024/08/644d4e77561119a1170d4db46e98e397_720.jpg" alt="副业资源同享群"></p>]]>
                    </description>
                    <pubDate>Sat, 17 Aug 2024 22:08:13 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[使用 Squid 搭建 Http 代理服务器隐藏 IP]]>
                    </title>
                    <link>https://blog.nineya.com/archives/162.html</link>
                    <description>
                            <![CDATA[<p>在一些情况下，需要变更自己的访问 IP，可以通过 <code>Squid</code> 搭建代理服务器实现。</p><p>本文使用的是 <code>CentOS 7.6</code> 系统。</p><h2 id="一-部署-Squid">一、部署 Squid</h2><p>安装 <code>Squid</code>。</p><pre><code>yum install squid -y</code></pre><p>启动服务。</p><pre><code>systemctl start squid</code></pre><h2 id="二-访问控制">二、访问控制</h2><p>总有刁民想害郑，疯狂访问朕的HTTP代理服务，所以需要进行一下访问控制。</p><p><img src="/upload/2024/08/QQ_1722629264286.png" alt="境外IP大量访问代理服务"></p><p>使用 <code>vim</code> 打开 <code>/etc/squid/squid.conf</code> 配置文件。</p><ol><li><p>端口默认是 <code>3128</code>，建议修改一下。</p><pre><code>http_port 3128</code></pre></li><li><p>新增 <code>acl</code> 策略<br><code>acl</code> 策略主要有以下几种：</p><pre><code># 配置访问源ip，采用子网掩码的方式，可以指定网段acl home src xxx.xxx.xx.xx/xx​# 配置访问目标ip，采用子网掩码的方式，可以指定网段acl home dst xxx.xxx.xx.xx/xx​# 配置访问目标端口acl home port xxx​# 配置访问目标域名acl home dstdomain .xxxx.com​# 配置访问目标网站，支持正则，-i表示不区分大小写acl home url_regex -i ^https://​# 配置访问目标路径，支持正则，-i表示不区分大小写acl home url_regex -i \.html$​# 配置访问时间，MTWHF为星期的首字母acl home time MTWHF 08:30-17:30​# 配置客户机最大连接数acl home maxconn 20</code></pre></li><li><p>应用 <code>acl</code> 策略</p><pre><code># 禁止该acl策略http_access deny xxx​# 允许该acl策略http_access allow xxx​# 同时选择多个acl是与的关系http_access allow xxx yyy​# 对acl不匹配的请求进行控制http_access allow !xxx</code></pre></li><li><p>重启服务</p><pre><code># 检查配置squid -k parse​# 重启服务systemctl restart squid</code></pre></li></ol><h2 id="三-隐藏-IP">三、隐藏 IP</h2><p>通过以上配置后，服务可以实现 HTTP 代理，但是并不能隐藏客户端IP。</p><p>要隐藏客户端 IP，需要关闭代理的两个请求头，在配置文件中添加如下配置：</p><pre><code># 高密配置，不暴露源iprequest_header_access Via deny allrequest_header_access X-Forwarded-For deny all</code></pre>]]>
                    </description>
                    <pubDate>Sat, 03 Aug 2024 22:48:37 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[2024年云服务器部署迁移流程]]>
                    </title>
                    <link>https://blog.nineya.com/archives/161.html</link>
                    <description>
                            <![CDATA[<p>能用容器，优先用容器，方便下次迁移。</p><h2 id="一-基础应用部署">一、基础应用部署</h2><h3 id="1-1-Docker-部署">1.1 Docker 部署</h3><ol><li><p>安装需要的软件包</p><pre><code class="language-bash">sudo yum install -y yum-utils device-mapper-persistent-data lvm2</code></pre></li><li><p>设置 Docker 软件源</p><pre><code class="language-bash">sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</code></pre></li><li><p>查看仓库中可用的 Docker 版本</p><pre><code class="language-bash">yum list docker-ce --showduplicates | sort -r</code></pre></li><li><p>安装最新稳定版 Docker</p><pre><code class="language-bash">sudo yum install docker-ce</code></pre></li><li><p>启动并加入开机启动</p><pre><code class="language-bash">sudo systemctl start dockersudo systemctl enable docker</code></pre></li><li><p>验证安装是否成功(有client和service两部分表示docker安装启动都成功了)</p><pre><code class="language-bash">docker version</code></pre></li><li><p>配置镜像源</p><p><code>vi /etc/docker/daemon.json</code> 创建文件，添加如下配置内容。</p><pre><code class="language-json">{    "registry-mirrors": [        "http://hub-mirror.c.163.com",        "https://registry.docker-cn.com",        "https://docker.mirrors.ustc.edu.cn"    ]}</code></pre><p>重启 Docker 服务，查看 Docker 信息。</p><pre><code class="language-bash"># 重启服务systemctl restart docker# 查看docker信息docker info</code></pre></li><li><p>安装 Docker-Compose</p><p>将 <code>docker-compose-linux-x86_64</code> 文件拷贝到 <code>/usr/local/bin/docker-compose</code>，并设置可执行权限。</p><pre><code class="language-bash"># 拷贝cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose# 设置可执行权限chmod +x /usr/local/bin/docker-compose</code></pre></li></ol><h3 id="1-2-JDK11-部署">1.2 JDK11 部署</h3><pre><code class="language-bash"># 安装jdk11带开发工具yum -y install java-11-openjdk-devel</code></pre><h3 id="1-3-Git-部署">1.3 Git 部署</h3><ol><li><p>安装 Git</p><pre><code class="language-bash">yum install -y git</code></pre></li><li><p>配置SSH登录Github</p><pre><code class="language-bash"># 设置name和email，输入如下命令git config --global user.name "用户名"git config --global user.email "你的邮箱"# 创建秘钥ssh-keygen -t rsa -C "你的邮箱"# 取得SSHcd ~/.sshcat id_rsa.pub</code></pre></li><li><p>登录 <code>GitHub</code> 网页，依次点击 <code>settings&gt;&gt;SSH and GPG keys</code>，新建秘ssh钥将获取到的ssh复制进去。</p></li></ol><h3 id="1-4-Nginx-部署">1.4 Nginx 部署</h3><blockquote><p>部署 nginx 1.22.1 版本</p></blockquote><ol><li><p>解压安装包</p><pre><code class="language-bash">tar -zxvf nginx-1.22.1.tar.gz</code></pre></li><li><p>安装编译环境 、pcre软件包、openssl、zlib</p><pre><code class="language-bash">yum -y install gcc gcc-c++  pcre pcre-devel openssl openssl-devel zlib zlib-devel</code></pre></li><li><p>编译安装</p><pre><code class="language-bash">cd nginx-1.22.1# 预编译，安装目录为/opt/nginx./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_v2_module --with-stream# 编译并安装make &amp;&amp; make install# 检查是否编译正确，如果返回值是 0，就是执行成功；0 以外的值，就是失败。echo $?# 软连接二进制文件到命令目录ln -s /opt/nginx/sbin/nginx /usr/local/sbin/nginx</code></pre></li><li><p>从原服务器拷贝 <code>nginx.conf</code> 配置到指定的配置目录</p></li><li><p>启动与关闭</p><pre><code class="language-bash"># 启动命令nginx# 重新加载配置nginx -s reload# 关闭命令nginx -s stop</code></pre></li></ol><h3 id="1-5-Acme-sh-部署">1.5 Acme.sh 部署</h3><ol><li><p>拷贝原服务器的 .acme.sh 到与原服务器相同的目录。</p></li><li><p>强制从新签发证书，或者签发证书，确保证书签发逻辑还可用。</p><pre><code class="language-bash"># 没有证书时签发证书./acme.sh  --issue  --dns dns_ali -d *.nineya.com -d nineya.com --debug# 有证书时强制重新签发证书./acme.sh  --renew  --dns dns_ali -d *.nineya.com -d nineya.com --force --debug</code></pre></li><li><p>安装证书到制定路径。</p><pre><code class="language-bash"># 创建路径mkdir -p /opt/ca/*.nineya.com# 安装./acme.sh --install-cert -d *.nineya.com \--key-file       /opt/ca/*.nineya.com/key.pem  \--fullchain-file /opt/ca/*.nineya.com/cert.pem \--reloadcmd     "nginx -s reload"</code></pre></li><li><p>添加自动续签定时任务。</p><pre><code class="language-bash"># 编辑定时任务crontab -e# 添加如下内容0 10 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" &gt; /dev/null</code></pre></li></ol><h3 id="1-6-MySQL-部署">1.6 MySQL 部署</h3><p>通过 <code>Docker-Compose</code> 迁移原服务器的 <code>MySQL</code> 服务。</p><ol><li><p>拷贝 <code>mysql</code> 目录到 <code>/opt/mysql</code> 路径。</p></li><li><p>运行容器。</p><pre><code class="language-bash">docker-compose up -d</code></pre></li></ol><h3 id="1-7-Redis-部署">1.7 Redis 部署</h3><p>通过 <code>Docker-Compose</code> 迁移原服务器的 <code>Redis</code> 服务。</p><ol><li><p>拷贝 <code>redis</code> 目录到 <code>/opt/redis</code> 路径。</p></li><li><p>运行容器。</p><pre><code class="language-bash">docker-compose up -d</code></pre></li></ol><h2 id="二-应用服务部署">二、应用服务部署</h2><h3 id="2-1-首页部署">2.1 首页部署</h3><ol><li>从原服务器中拷贝 <code>/opt/home</code> 静态文件目录。</li><li>拷贝原服务器的 <code>nginx</code> 中 <code>home.conf</code> 配置文件到新服务器上 <code>nginx</code> 的安装目录。</li><li>执行 <code>nginx -s reload</code>。</li></ol><h3 id="2-2-倒计时网页部署">2.2 倒计时网页部署</h3><ol><li>从原服务器中拷贝 <code>/opt/xb </code> 静态文件目录。</li><li>拷贝原服务器的 <code>nginx</code> 中 <code>xb.conf</code> 配置文件到新服务器上 <code>nginx</code> 的安装目录。</li><li>执行 <code>nginx -s reload</code>。</li></ol><h3 id="2-3-博客部署">2.3 博客部署</h3><ol><li><p>从原服务器中拷贝 <code>~/.halo-plus</code> 文件目录。</p></li><li><p>从原服务器中拷贝 <code>~/install/blog</code> 目录执行安装程序。</p><pre><code class="language-bash"># 执行配置检查./install -c# 安装./install# 检查版本./blog -v# 启动服务./blog start</code></pre></li><li><p>拷贝原服务器的 <code>nginx</code> 中 <code>blog.conf</code> 配置文件到新服务器上 <code>nginx</code> 的安装目录。</p></li><li><p>执行 <code>nginx -s reload</code>。</p></li></ol><h3 id="2-4-极光建站官网部署">2.4 极光建站官网部署</h3><ol><li>从原服务器中拷贝 <code>/opt/aurora</code> 文件目录。</li><li>执行 <code>nohup ./aurora &amp;</code> 启动服务。</li><li>拷贝原服务器的 <code>nginx</code> 中 <code>aurora.conf</code> 配置文件到新服务器上 <code>nginx</code> 的安装目录。</li><li>执行 <code>nginx -s reload</code>。</li></ol><h3 id="2-5-逸趣留学部署">2.5 逸趣留学部署</h3><ol><li>从原服务器中拷贝 <code>/opt/yiqu</code> 文件目录。</li><li>执行 <code>nohup ./aurora &amp;</code> 启动服务。</li><li>拷贝原服务器的 <code>nginx</code> 中 <code>aurora.conf</code> 配置文件到新服务器上 <code>nginx</code> 的安装目录。</li><li>执行 <code>nginx -s reload</code>。</li></ol><h2 id="三-运维脚本部署">三、运维脚本部署</h2><h3 id="3-1-运维脚本">3.1 运维脚本</h3><ol><li>同步 <code>https://github.com/nineya/linux-shell/</code> 仓库</li><li>根据 <code>README</code> 文档部署各个脚本。</li></ol><h3 id="3-2-博客数据备份">3.2 博客数据备份</h3><ol><li><p>从原服务器拷贝 <code>/opt/backup</code> 目录到新的服务器。</p></li><li><p>添加计划任务为每天凌晨2点备份数据。</p><pre><code class="language-bash">0 2 * * * /opt/backup/backup.sh</code></pre></li></ol>]]>
                    </description>
                    <pubDate>Sun, 02 Jun 2024 01:11:26 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[GO 的 Web 开发系列（八）—— Gin 自定义 Html 渲染实现多租户的模板设计]]>
                    </title>
                    <link>https://blog.nineya.com/archives/153.html</link>
                    <description>
                            <![CDATA[<p>本文主要解决在多租户场景下的模板渲染问题。</p><p>正常情况下 Gin 配置的所有模板都属于同一个模板组合，相同名称的模板将相互覆盖。在未通过 <code>define</code> 指定模板名称时，同名模板文件也将相互覆盖。自定义函数中也无法区分租户，这将非常不方便我们进行多租户的模板渲染处理。通过自定义 HTML 渲染器，将一一解决这些问题。</p><h2 id="一-Gin-源码分析">一、Gin 源码分析</h2><p>Gin 通过 <code>router.LoadHTMLGlob</code> 或 <code>router.LoadHTMLFiles</code> 函数初始化 HTML 模板，这两个函数的源码如下。</p><pre><code class="language-go">// LoadHTMLGlob loads HTML files identified by glob pattern// and associates the result with HTML renderer.func (engine *Engine) LoadHTMLGlob(pattern string) {left := engine.delims.Leftright := engine.delims.Right    // 初始化模板templ := template.Must(template.New("").Delims(left, right).Funcs(engine.FuncMap).ParseGlob(pattern))if IsDebugging() {debugPrintLoadTemplate(templ)engine.HTMLRender = render.HTMLDebug{Glob: pattern, FuncMap: engine.FuncMap, Delims: engine.delims}return}engine.SetHTMLTemplate(templ)}// LoadHTMLFiles loads a slice of HTML files// and associates the result with HTML renderer.func (engine *Engine) LoadHTMLFiles(files ...string) {if IsDebugging() {engine.HTMLRender = render.HTMLDebug{Files: files, FuncMap: engine.FuncMap, Delims: engine.delims}return}    // 初始化模板templ := template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).Funcs(engine.FuncMap).ParseFiles(files...))engine.SetHTMLTemplate(templ)}</code></pre><p>可以看到，这里面区分了 <code>DEBUG</code> 模式，DEBUG 模式的渲染器是 <code>render.HTMLDebug</code>，他将在每次渲染是重新创建模板，从而使模板修改能够实时生效。</p><p><strong>DEBUG 渲染器：</strong></p><p><code>HTMLDebug</code> 渲染器与生产渲染器没有本质不同，只是将创建 <code>template</code> 模板的步骤放在了执行渲染时。执行渲染的接口源码如下：</p><pre><code class="language-go">// Instance (HTMLDebug) returns an HTML instance which it realizes Render interface.func (r HTMLDebug) Instance(name string, data any) Render {   return HTML{      // 重新创建模板      Template: r.loadTemplate(),      Name:     name,      Data:     data,   }}</code></pre><p><strong>生产渲染器：</strong></p><p>生产渲染器通过 <code>engine.SetHTMLTemplate(templ)</code> 函数初始化渲染器，初始化时将 <code>template</code> 模板作为参数传入。</p><pre><code class="language-go">// SetHTMLTemplate associate a template with HTML renderer.func (engine *Engine) SetHTMLTemplate(templ *template.Template) {if len(engine.trees) &gt; 0 {debugPrintWARNINGSetHTMLTemplate()}engine.HTMLRender = render.HTMLProduction{Template: templ.Funcs(engine.FuncMap)}}</code></pre><p>在执行渲染时将取出模板，重复使用。</p><pre><code class="language-go">// Instance (HTMLProduction) returns an HTML instance which it realizes Render interface.func (r HTMLProduction) Instance(name string, data any) Render {return HTML{Template: r.Template,Name:     name,Data:     data,}}</code></pre><p>通过 Gin 源码可知，Gin 封装了渲染器 <code>engine.HTMLRender</code>，实际上并未对 <code>template</code> 模板做太多的功能封装，直接使用 <code>template</code> 模板的接口进行模板渲染。</p><p>所以，进行多租户设计时，我们自定义 <code>engine.HTMLRender</code> 渲染工具，内部创建多个 <code>template</code> 模板，即可解决多租户模板混合的问题。</p><p>自定义函数无法区分租户问题也只需要在初始化模板前，给函数传入租户编号即可。</p><p>但要进一步解决同名模板文件也将相互覆盖，就必须看 <code>template</code> 的源码了。</p><h2 id="二-Template-源码分析">二、Template 源码分析</h2><p>通过 Gin 源码的分析，我们可知 <code>template</code> 模板通过 <code>ParseGlob</code> 或 <code>ParseFiles</code> 函数创建模板实例。</p><pre><code class="language-go">func (t *Template) ParseGlob(pattern string) (*Template, error) {return parseGlob(t, pattern)}// parseGlob is the implementation of the function and method ParseGlob.func parseGlob(t *Template, pattern string) (*Template, error) {if err := t.checkCanParse(); err != nil {return nil, err}    // 读取文件filenames, err := filepath.Glob(pattern)if err != nil {return nil, err}if len(filenames) == 0 {return nil, fmt.Errorf("html/template: pattern matches no files: %#q", pattern)}    // 渲染这些文件return parseFiles(t, readFileOS, filenames...)}func (t *Template) ParseFiles(filenames ...string) (*Template, error) {return parseFiles(t, readFileOS, filenames...)}// parseFiles is the helper for the method and function. If the argument// template is nil, it is created from the first file.func parseFiles(t *Template, readFile func(string) (string, []byte, error), filenames ...string) (*Template, error) {if err := t.checkCanParse(); err != nil {return nil, err}if len(filenames) == 0 {// Not really a problem, but be consistent.return nil, fmt.Errorf("html/template: no files named in call to ParseFiles")}for _, filename := range filenames {        // 读取文件名和文件内容name, b, err := readFile(filename)if err != nil {return nil, err}s := string(b)// First template becomes return value if not already defined,// and we use that one for subsequent New calls to associate// all the templates together. Also, if this file has the same name// as t, this file becomes the contents of t, so//  t, err := New(name).Funcs(xxx).ParseFiles(name)// works. Otherwise we create a new template associated with t.        // 为该模板文件新建模板空间（define），此处指定名称为文件名        // 同名文件互相覆盖的原因var tmpl *Templateif t == nil {t = New(name)}if name == t.Name() {tmpl = t} else {tmpl = t.New(name)}        // 初始化模板_, err = tmpl.Parse(s)if err != nil {return nil, err}}return t, nil}</code></pre><p>从上述源码可见， <code>ParseGlob</code> 只是比 <code>ParseFiles</code> 函数多了个读取模板文件的步骤，实际上都是通过 <code>parseFiles</code> 函数进行模板初始化。</p><p>通过 <code>parseFiles</code> 函数可知，初始化模板空间时将模板文件名做为名称，这也是模板文件相互覆盖的原因。</p><h2 id="三-问题解决">三、问题解决</h2><p>自定义 <code>template</code> 模板初始化流程，解决函数无法获取租户信息问题、同名文件互相覆盖问题。</p><pre><code class="language-go">// 用于存储租户信息的自定义函数结构体type BaseFunc struct {Site *table.Site}// 为租户创建模板func loadHTMLGlob(site *table.Site, delimLeft, delimRight string) *template.Template {    // 创建函数结构体，传入租户参数 site，所有函数都可以获取到该租户参数    // 解决函数无法获取租户信息问题Func := _func.BaseFunc{Site: site}funcMap := template.FuncMap{"MenuTree":           Func.MenuTree,"TimeFormat":         Func.TimeFormat,"TimeAgo":            Func.TimeAgo,"CategoryByParentId": Func.CategoryByParentId,"FormSchema":         Func.FormSchema,"PostByLatest":       Func.PostByLatest,"Pagination":         Func.Pagination,"Add":                Func.Add,"Html":               Func.Html,"Br":                 Func.Br,"Default":            Func.Default,"Switch":             Func.Switch,}templ := template.New("").Delims(delimLeft, delimRight).Funcs(funcMap)// 取得租户的模板文件路径themeTemplatePath, _ := filepath.Abs(utils.GetThemePath(site.Id, site.ThemeId) + "/templates")    // 读取该租户路径下的文件，取得一个map，key为文件全路径，value为文件在 themeTemplatePath 的子路径themeFileMap := FilePathList(themeTemplatePath)for file, name := range themeFileMap {b, _ := os.ReadFile(file)        // name 用作模板空间的名称，带上了模板路径，避免同名文件互相覆盖问题template.Must(templ.New(name).Parse(string(b)))}return templ}</code></pre><p>新建结构体，实现 <code>engine.HTMLRender</code> 接口，为每一个租户指定一个 <code>template</code> 模板，避免多租户模板混合。</p><pre><code class="language-go">type SiteHtmlRender struct {    // 一个租户id对应一个模板templateMap map[int64]*template.TemplatedelimLeft   stringdelimRight  string}// 指定渲染函数的类型为 response.HtmlResponse，从中取得租户信息，选择渲染模板func (s *SiteHtmlRender) Instance(name string, data any) render.Render {resp := data.(*response.HtmlResponse)return render.HTML{Template: s.templateMap[resp.Site.Id],Name:     name,Data:     data,}}// 初始化渲染器func HtmlRenderAndDelims(engine *gin.Engine, delimLeft, delimRight string) {// 为 global.SiteMap 集合中的每个租户初始化一个模板templateMap := make(map[int64]*template.Template, len(global.SiteMap))for _, site := range global.SiteMap {templateMap[site.Id] = loadHTMLGlob(site, delimLeft, delimRight)}htmlRender := &amp;SiteHtmlRender{templateMap: templateMap,delimLeft:   delimLeft,delimRight:  delimRight,}    // 将模板设置到 engine.HTMLRender，使其生效engine.HTMLRender = htmlRender}</code></pre><h2 id="四-更多扩展">四、更多扩展</h2><p>关键代码如上述章节，但其实通过自定义 <code>SiteHtmlRender</code> 函数还可以实现更多的功能定制。</p><p>如，实现某个租户的模板刷新：</p><pre><code class="language-go">func (s *SiteHtmlRender) Refresh(site *table.Site) {s.templateMap[site.Id] = loadHTMLGlob(site, s.delimLeft, s.delimRight)}</code></pre><p>如，自定义一个模板渲染接口，方便自己后续使用：</p><pre><code class="language-go">func (s *SiteHtmlRender) Render(siteId int64, templateName string, param any) (string, error) {buf := new(bytes.Buffer)err := s.templateMap[siteId].ExecuteTemplate(buf, templateName, param)if err != nil {return "", err}return buf.String(), nil}</code></pre>]]>
                    </description>
                    <pubDate>Thu, 11 Apr 2024 11:15:15 GMT+08:00</pubDate>
                </item>
                <item>
                    <title>
                        <![CDATA[GO 的 Web 开发系列（七）—— 数据库所有字段必须全部 not null]]>
                    </title>
                    <link>https://blog.nineya.com/archives/157.html</link>
                    <description>
                            <![CDATA[<p>实现接口功能后，需要在接口中通过数据库操作，实现 Web 系统的业务功能。而 Go 因为其一些特性，数据类型和数据库的适配存在一些问题，需要在数据库开发设计时提前考虑。</p><blockquote><p>想起一件事，以前有个外包的朋友告诉我，数据库所有字段必须全部 <code>not null</code>，这是公司规范！</p></blockquote><p>以前觉得这个规范很离谱，使用了 Go 之后发觉设置为 <code>not null</code> 确实可以避免很多麻烦。</p><h2 id="一-默认值问题">一、默认值问题</h2><p>Go 的默认值对于其他语言的开发来说可能有些不适，举例几个常见数值的默认值。</p><p>String 默认值：</p><ul><li>GO：空字符串</li><li>Java：null</li><li>MySQL：null</li></ul><p>int 默认值：</p><ul><li>Go：0</li><li>Java：0</li><li>MySQL：null</li></ul><p>boolean 默认值：</p><ul><li>Go：false</li><li>Java：false</li><li>MySQL：null</li></ul><p>通过以上默认值对比，可以发现问题，MySQL 所有数据类型都可以支持 null 值，而编程语言上却不支持。</p><p>这就导致一个问题，编程语言上的数据值如何和数据库的值对应？</p><p>在 <code>Java</code> 开发中，针对 null 值问题可以使用包装类，如 <code>Integer</code>、<code>Boolean</code> 等，这也是最成熟简单的解决方案。</p><p>在 Go 中可以通过指针支持 null，也可以通过数据库包提供的 <code>sql.NullString</code>、<code>sql.NullBool</code> 等类型来实现 null 值的适配。</p><p>但是这两种 null 值适配方案实现的不是很好，有一些解决起来挺麻烦的缺陷。</p><p>有人发现，null 貌似很多时候也没啥用。于是，出现了一些人，将数据库的 <code>not null</code> 选上，将默认值设置得和 Go 语言的默认值一样，以此解决默认值不一致问题。</p><p>那到底要不要保留 null 值呢？</p><h2 id="二-保留-null-值">二、保留 null 值</h2><p>数据库保留 null 值时面临的第一个问题就是，怎么把 null 值传给数据库，这就需要用到指针，因为指针是支持 nil 值的。</p><p>如下示例代码，<code>Name</code> 属性使用的 <code>string</code> 类型，默认值为空字符串，不支持 null。</p><p><code>Team</code> 属性使用的 <code>*string</code> 类型，默认值为 nil，支持空值。但是无法使用 <code>binding</code> 做参数校验，在 nil 值时 <code>binding</code> 校验会报错。</p><pre><code class="language-go">type UpdateAttachmentParam struct {  Id   int64   `json:"id"`  Name string  `json:"name" xorm:"VARCHAR(255) notnull" binding:"lte=255"`   Team *string `json:"team" xorm:"VARCHAR(255)"`}</code></pre><p>然后就是取值问题，直接使用 <code>string</code>、<code>bool</code> 类型取值时，遇到空值将抛出异常。如果是用结构体取值，则继续使用指针即可。如果只取某个字段（如上示例的 <code>Team</code> 字段），实测 <code>[]*string</code> 是不能成功取出空值的，指针会被忽略。</p><p>而且在 <code>xorm</code> 框架中 <code>sql.NullString</code> 实体不会被识别，只会被当做普通结构体处理，所以这个方法也不能优雅取值。只能先通过结构体取值，后做类型转换。</p><p><img src="https://blog.nineya.com/upload/2024/02/image-1707704649698.png" alt="sql.NullString 截图"></p><p><strong>优点：</strong></p><ul><li>支持数据库空值；</li></ul><p><strong>缺点：</strong></p><ul><li>字段需要用指针参数类型，不能使用 <code>binding</code> 参数校验；</li><li>单独取可能空值的字段不好取值，需要额外处理。</li></ul><h2 id="三-不保留-null-值">三、不保留 null 值</h2><p>不保留空值时，在 ORM 映射上就简单了许多，没有什么需要注意的地方，主要问题在于空值处理上。</p><p><code>xorm</code> 框架中不会更新默认值，如果用户将一个数据更新为默认值（如删除用户简介为空字符串），那么更新将不会生效。</p><p>解决方法是通过 <code>AllCols</code> 或 <code>Cols</code> 函数将字段指定为强制更新，如此可以实现强制更新某些字段。</p><p>但是这样处理依旧不是非常好。举例如接口收到一个空字符串字段，程序无从分辨是用户主动传的空字符串，还是没有用户传值（用户不期望更新该参数）。这就需要程序在设计时约定好，比如用户不期望更新参数时也必须传原始值，造成了额外的麻烦。</p><p><strong>优点：</strong></p><ul><li>简单，在 JSON 序列化时也支持通过 <code>omitempty</code> 忽略默认值；</li></ul><p><strong>缺点：</strong></p><ul><li>对于允许设置为默认值的字段，在接口设计上必须设计好空值传值问题，避免空值和默认值混淆；</li></ul><h2 id="四-方案选用">四、方案选用</h2><p>针对以上两种设计思路，小玖选择了第二种，不保留 null 值，简化 ORM 映射上的问题。</p><p>对于允许设置为默认值的字段，数据更新时分两种情况：</p><p>如果更新接口要求传输全量数据，则使用 <code>AllCols</code> 函数强制更新所有字段；</p><p>如果更新接口只传部分数据，对允许设置为空/默认值的字段，使用指针接收（避免前端传空值也被初始化为默认值），数据指针不为 nil 就会更新。</p><h2 id="五-感想">五、感想</h2><p>在看一些 Go 的开源系统时，小玖也见过一些比较“秀”的操作：</p><p>有部分系统前端将需要更新的字段名称传给后端，从而指定后端更新哪些字段（也许有 SQL 注入的风险？）</p><p>有部分系统通过 map 代替结构体行数据的传输，避免默认值的情况。</p><p>这其实并不是一个非常复杂的技术难题，只是要考虑到怎么设计对开发上会更加优雅。</p>]]>
                    </description>
                    <pubDate>Sun, 17 Mar 2024 22:07:22 GMT+08:00</pubDate>
                </item>
    </channel>
</rss>