<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>CWorld&#39;s Blog</title>
  
  <subtitle>Stay hungry, Stay foolish. 求知若愚，虚怀若谷</subtitle>
  <link href="https://blogv2.cworld.top/atom.xml" rel="self"/>
  
  <link href="https://blogv2.cworld.top/"/>
  <updated>2024-04-29T04:43:39.780Z</updated>
  <id>https://blogv2.cworld.top/</id>
  
  <author>
    <name>CWorld</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Vim 的一些键位知识</title>
    <link href="https://blogv2.cworld.top/post/vim-key/"/>
    <id>https://blogv2.cworld.top/post/vim-key/</id>
    <published>2023-12-15T19:00:02.000Z</published>
    <updated>2024-04-29T04:43:39.780Z</updated>
    
    <content type="html"><![CDATA[<p>用了几年 Vim 有了一些心得，故有此文。</p><span id="more"></span><p>从第一次尝试使用 Vim，到现在不管啥环境都要装个 Vim 插件，也差不多有三年多了。正如俗话所说“万事开头难”嘛，我和大多数的 Vim 初学者一样，也遇到了一段别扭且艰难的学习期。不过好在 Vim 已经让我尝到了一些甜头，这最终使我习惯并喜欢上了这套“反人类”的编辑逻辑。所以这一期就来总结一下 Vim 的一些键位知识，也可以当成教程学习学习。</p><p>此外关于我个人的使用上，在用 NeoVim、VSCodeVim 以及 IdeaVim，三家都很好用。不过目前我还只打算开源 NeoVim 的配置，有兴趣的可以看看我的配置仓库：<a href="https://github.com/cworld1/nvim-config" target="_blank">CWorld NVim Config - Github</a></p><h2 id="最基础的内容">最基础的内容<a title="#最基础的内容" href="#最基础的内容"></a></h2><h3 id="简单的光标移动">简单的光标移动<a title="#简单的光标移动" href="#简单的光标移动"></a></h3><p>首先是最基础的光标移动。你可能会发现基础的上下左右还能用，但请保持习惯，除了编辑模式下一般不要去碰它。</p><ul><li>上：<code>k</code></li><li>下：<code>j</code></li><li>左：<code>h</code></li><li>右：<code>l</code></li></ul><p>食指作为更加灵活的那个手指，放在下移光标上，能够更频繁敏捷地持续下移光标。</p><h3 id="简单的开始输入">简单的开始输入<a title="#简单的开始输入" href="#简单的开始输入"></a></h3><p>进入输入模式：</p><ul><li>向光标位置输入：<code>i</code> (insert mode)</li><li>向光标后一个字符的位置输入：<code>a</code> (append)</li><li>从这一行开头位置输入：<code>I</code> (insert at eol)</li><li>从这一行末尾位置输入：<code>A</code> (append at eol)</li><li>单独向下创建一行输入：<code>o</code> (open below)</li><li>单独向上创建一行输入：<code>O</code> (open above)</li></ul><blockquote><p>还有个冷门的：<code>s</code> 删除当前字符并进入输入模式。</p></blockquote><p>使用 Esc 退出该模式。</p><h3 id="编辑器的常见操作">编辑器的常见操作<a title="#编辑器的常见操作" href="#编辑器的常见操作"></a></h3><ul><li>删除一个字符：<code>x</code> (delete char)</li><li>删除前一个字符：<code>X</code> (delete backspace)</li><li>撤销：<code>u</code> (undo)</li><li>返回撤销操作：<code>c-r</code> (redo)（意为 Ctrl + r，后同）</li></ul><h3 id="编辑器的文件基本操作">编辑器的文件基本操作<a title="#编辑器的文件基本操作" href="#编辑器的文件基本操作"></a></h3><ul><li><p>保存：<code>:w</code></p><blockquote><p>强制保存：<code>:w!</code></p></blockquote></li><li><p>退出当前窗口：<code>:q</code></p><blockquote><ul><li>强制退出：<code>:q!</code></li><li>退出所有窗口：<code>:qa</code></li></ul></blockquote></li></ul><p>这样的一个字符命令通常能够连在一起，比如：<code>:wq</code>、<code>:qa!</code>。输入完命令后记得按回车执行。</p><h2 id="vim-进阶功能">Vim 进阶功能<a title="#vim-进阶功能" href="#vim-进阶功能"></a></h2><h3 id="更方便的光标移动">更方便的光标移动<a title="#更方便的光标移动" href="#更方便的光标移动"></a></h3><p>行内跳转：</p><p>使用 <code>w</code> (next word) 或者 <code>e</code> (end word) 向后移动一个词语，其中 <code>w</code> 总是会移动到单词开头，<code>e</code> 总是移动到单词结尾。任何标点字符都会作为分割。<code>b</code> (prev word) 则可以以同样的方式前移。注意这个跳转能跨行。</p><blockquote><p><code>gw</code> / <code>ge</code> 也可以实现回跳，但是两个键也太麻烦了。<br>大写的对应按键也有奇效，但是一般不用，这里不展开。</p></blockquote><ul><li>前往行首：0 (“hard” bol)</li><li>前往行第一个非空字符：^ (“soft” bol)（你也可以用 0 和 w 配合使用达到同样的效果，不用按住 Shift）</li><li>前往行末：$ (eol)</li></ul><p>既能行内也能行外的跳转：</p><ul><li><p>从各种括号的一头跳到另一头：<code>%</code></p></li><li><p>重复执行以便快速移动：数字 + hjkl</p><blockquote><p>默认情况下侧栏的行号总是显示相对的，所以在跳转行时可以看一眼侧栏相对行号快速跳转。大多数 IDE 都支持这个设定。以 Vim 配置为例：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">set</span> <span class="keyword">number</span> relativenumber</span><br></pre></td></tr></table></figure><p>此外向下移动光标还有：数字 + 回车。</p></blockquote></li></ul><p>行外跳转：</p><ul><li><p>快速跳转上一个/下一个空行：<code>&#123;</code> 和 <code>&#125;</code> 。</p></li><li><p>下翻 1/2 页：<code>c-d</code></p></li><li><p>上翻 1/2 页：<code>c-u</code></p></li><li><p>下翻 1/1 页：<code>c-f</code></p></li><li><p>下翻 1/1 页：<code>c-b</code></p><blockquote><p>还有个没啥用的：</p><ul><li>下滚动一行：<code>c-e</code></li><li>上滚动一行：<code>c-y</code></li></ul></blockquote></li></ul><p>对于全文跳转：</p><ul><li>前往整个内容顶部：<code>gg</code> 或者 <code>[[</code> 或者 <code>:0</code> 或者 <code>:1</code></li><li>前往整个内容底部：<code>G</code> 或者 <code>]]</code> 或者 <code>:$</code></li></ul><p>一个很方便的快捷键：</p><ul><li>将当前编辑行置于视图中间：<code>zz</code></li></ul><h3 id="快速地选择内容">快速地选择内容<a title="#快速地选择内容" href="#快速地选择内容"></a></h3><p>进入选择模式：</p><ul><li><p>正常选择（Visual）：<code>v</code></p><blockquote><p>按下时你就已经选择了当前的一个字母。</p></blockquote></li><li><p>行选择（Visual Line）：<code>V</code></p><blockquote><p>按下时你就已经选择了该行。</p></blockquote></li><li><p>块选择（Visual Block）：<code>c-v</code></p></li></ul><p>使用 Esc 退出该模式。</p><h3 id="更多样地选择内容">更多样地选择内容<a title="#更多样地选择内容" href="#更多样地选择内容"></a></h3><p>进入选择模式后，你可以使用正常的光标移动技巧，以及一些更加灵活的选择方式：</p><ul><li><p>选择单词（从光标到下一个符号/空格，包括符号）：<code>w</code> (word)</p></li><li><p>选择当前单词：<code>iw</code> (in word)</p></li><li><p>选择当前单词（包括下一个符号/空格）：<code>aw</code> (around word)</p><blockquote><p>同理，可将 <code>w</code> 换成别的，比如：</p><ul><li>大写单词 <code>W</code> (WORD)</li><li>以逗号句号感叹号等收尾的句子（没有的话就是全段了）：<code>s</code> (sentence)</li><li>段落：<code>p</code> (paregraph)</li><li>引号：<code>&quot;</code>、<code>'</code></li><li>括号：<code>[]</code>、<code>()</code> 等。</li></ul></blockquote></li></ul><h3 id="修改内容">修改内容<a title="#修改内容" href="#修改内容"></a></h3><p>仅修改当前光标所在的这一个字符：<code>r</code> (replace mode)</p><blockquote><p>进阶玩法：配合选择模式，先选择内容，再使用 r，可以替换选择范围内的所有内容为新字符。</p></blockquote><p>一些必须要配合的命令：</p><ul><li><p>修改选择内容并进入 insert 模式：<code>c</code> (change)</p><blockquote><p>可以先选择内容后使用，也可配合选择一起使用，如 <code>ciw</code>、<code>cap</code>、<code>c3j</code> 等。</p><p>修改本行内光标后的所有内容可用 <code>C</code></p></blockquote></li><li><p>删除选择内容：<code>d</code>（delete）</p><blockquote><p>使用方法同上，如 <code>diw</code>、<code>cap</code> 等。不过如果是先选择后删除的话，<code>x</code> 也是一样的（Vim 特色之都可以实现）。</p><p>删除本行内光标后的所有内容可用 <code>D</code></p></blockquote></li><li><p>复制选择内容：<code>y</code> (yank)</p><blockquote><p>复制本行也可以用 <code>Y</code></p></blockquote></li><li><p>缩进选择内容：<code>&gt;</code> 以及反缩进 <code>&lt;</code>。这个命令可以重复表示缩进/反缩进多少格，如：<code>3&gt;</code>。</p></li></ul><p>此外还可以：</p><ul><li>重复输入两次以便快速使用，效果为作用于该行整行，相当于 V + 对应命令。目前已知的命令包括：<code>cc</code>、<code>dd</code>、<code>yy</code>、<code>&gt;&gt;</code>、<code>&lt;&lt;</code>。</li><li>搭配数字实现对于多少汗的重复，如 <code>y3y</code>、<code>3yy</code>。已知可用的命令同上。</li></ul><h3 id="复制与粘贴">复制与粘贴<a title="#复制与粘贴" href="#复制与粘贴"></a></h3><p>在你进行复制、字符替换、删除、选择修改、覆盖粘贴时，均会将原作用内容同时复制到你的剪贴板。</p><p>这个剪贴板是独立于你的操作系统的，你可以通过下面的配置将其连接：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">set</span> clipboard+=unnamed</span><br></pre></td></tr></table></figure><p>粘贴命令：</p><ul><li>当前位置后面粘贴内容：<code>p</code> (paste after)</li><li>当前位置前面粘贴内容：<code>P</code> (paste before)</li></ul><blockquote><p>通常是你在复制整行后，粘贴时注意粘贴位置在前或后会比较方便。</p><p>当你选择了部分内容时，本次粘贴会覆盖选择内容（当然正常编辑器都是这样）。</p></blockquote><h2 id="vim-深入功能">Vim 深入功能<a title="#vim-深入功能" href="#vim-深入功能"></a></h2><h3 id="行内跳转">行内跳转<a title="#行内跳转" href="#行内跳转"></a></h3><ul><li>跳转到行内下一个字符：<code>f</code> + 跳转字符 (find char)</li><li>跳转到行内上一个字符：<code>F</code> + 跳转字符 (“back” find ch)</li></ul><blockquote><p>以及：</p><ul><li>跳转到行内下一个字符（但是光标往前挪一个）：<code>t</code> + 跳转字符 (find char)</li><li>跳转到行内上一个字符（但是光标往后挪一个）：<code>T</code> (“back” find ch)</li></ul><p>但是不知道有什么用。？</p></blockquote><p>可配合 <code>c</code>、<code>d</code>、<code>y</code> 命令。使用 <code>;</code> 可以持续执行上面说的这个跳转操作，只要当前 buffer 没有被关闭就能一直保存跳转字符的记录，随时可用。而 <code>,</code> 则做相反方向的查找。</p><h3 id="查找">查找<a title="#查找" href="#查找"></a></h3><ul><li>向后优先查找内容：<code>/</code> + 对应内容。输入回车后启用查找模式。</li><li>向前优先查找内容：<code>?</code> + 对应内容。</li></ul><blockquote><p>一些相关的 Vim 配置：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&quot; 在输入搜索时逐步匹配并高亮显示匹配的文本</span></span><br><span class="line"><span class="keyword">set</span> incsearch</span><br><span class="line"><span class="comment">&quot; 在搜索时忽略大小写</span></span><br><span class="line"><span class="keyword">set</span> ignorecase</span><br><span class="line"><span class="comment">&quot; 将搜索匹配的文本高亮显示</span></span><br><span class="line"><span class="keyword">set</span> hlsearch</span><br></pre></td></tr></table></figure></blockquote><p>注：</p><ul><li><p>使用 <code>n</code> (next) 或 <code>N</code> (prev) 跳转所有匹配项。</p></li><li><p>使用 <code>#</code> (prev ident) 和 <code>*</code> (next ident) 跳转要求更严格，要求每次出现的前后为空白字符或标点符号。不过这两个键还担任了一个小功能：选择想要查找的文段，然后按下这两个的一个就可以快速启动查找。</p></li><li><p>查找支持正则表达式，例如 <code>/vim$</code> 匹配行尾的 “vim”。需要查找特殊字符需要转义，例如 <code>/vim\$</code> 匹配 “vim$”。</p></li><li><p>如果你不喜欢默认忽略大小写，但是有时候又想用，可以尝试在查找模式中加入指令：<code>\c</code> 表示大小写不敏感查找，<code>\C</code> 表示大小写敏感查找。如：<code>/foo\c</code></p></li><li><p>高亮显示匹配内容当然很棒！但是取消高亮命令 <code>:nohl</code> 就很不方便了。我一般的解决方案是：</p><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">nnoremap</span> <span class="symbol">&lt;Esc&gt;</span> :nohl<span class="symbol">&lt;CR&gt;</span></span><br></pre></td></tr></table></figure><p>将这个命令映射到 Esc 键。</p></li></ul><h3 id="替换">替换<a title="#替换" href="#替换"></a></h3><p><code>:s</code>（substitute）命令用来查找和替换字符串。语法：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">:&#123;作用范围&#125;s/&#123;目标&#125;/&#123;替换&#125;/&#123;替换标志&#125;</span><br></pre></td></tr></table></figure><p>作用范围：</p><ul><li>指定行：如 <code>5s</code>、<code>+2s</code>。<code>.s</code>表示当前行，可省略为<code>s</code></li><li>指定行到行：如 <code>5,12s</code>。结合起来使用就可以表示接下来/这之前多少行，如 <code>.,+2s</code></li><li>全文：<code>%s</code></li><li>选择模式下选择范围内：<code>'&lt;,'&gt;s</code>（选择模式下 Vim 会帮你补全关键字）</li></ul><p>替换标志：</p><ul><li><p>不写则只替换第一个。</p></li><li><p>全局替换：<code>g</code></p></li><li><p>手动提示确认：<code>c</code></p><p>使用后会有提示：<code>replace with bar (y/n/a/q/l/^E/^Y)?</code></p><p>其中 <code>y</code> 表示替换，<code>n</code> 表示不替换，<code>a</code> 表示替换所有，<code>q</code> 表示退出查找模式，<code>l</code> 表示替换当前位置并退出。<code>E</code> 与 <code>Y</code> 是光标移动快捷键。</p></li><li><p>大小写敏感：<code>i</code> 表示大小写不敏感查找，<code>I</code> 表示大小写敏感。如：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">:%s/foo/bar/i</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">等效于搜索模式中的\c（不敏感）或\C（敏感）：</span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">:%s/foo\c/bar</span></span><br></pre></td></tr></table></figure></li></ul><blockquote><p>上述替换标志可以结合使用，如 <code>:%s/foo/bar/gc</code></p></blockquote><!-- ### 文件操作将当前文件中的第 3~9 行复制并写到新文件 f01 中：[ :3,9w f01 ] --><h2 id="vim-特色功能">Vim 特色功能<a title="#vim-特色功能" href="#vim-特色功能"></a></h2><h3 id="实用小功能">实用小功能<a title="#实用小功能" href="#实用小功能"></a></h3><ul><li><p>跳转到指定行：<code>:</code> + 行号</p><blockquote><p>或者使用行号 + <code>gg</code>（Vim 特色之都可以实现）</p></blockquote></li><li><p>转置字母大小写：<code>~</code></p><blockquote><p>也可以通过选择以后按 <code>u</code> 改为小写、<code>U</code> 改为大写实现（Vim 特色之都可以实现）</p><p>也可以使用 <code>g</code> 这个转置，将 <code>gu</code>、<code>gU</code> 或者 <code>g~</code> 与选择操作拼接起来。</p></blockquote></li><li><p>数字增减：自增为 <code>c-a</code>，自减为 <code>c-x</code></p><blockquote><p>快速生成数列可以使用 <code>:put=range(0,10,2)</code>，好像语法跟 Python 是一样的。最后一个参数为 1 时可省略。</p><p>此外这个增减不仅可以适用于数字，还可以是八进制、十六进制、bin 和 alpha（我们 Vim 玩家真是增增又减减啊）</p></blockquote><p>后文还有讲多行递增/递减。</p></li><li><p>内容排序：<code>:sort</code>。反向排序使用 <code>:sort!</code></p><p>可以结合作用范围使用：如 <code>:3,16sort</code>。该功能可能在 CSS 属性排序很好用</p><blockquote><p>此外还有：</p><ul><li>删除重复行：<code>:sort u</code></li><li>仅使用数字排序 <code>:sort n</code></li></ul></blockquote></li><li><p>多光标：使用 <code>c-v</code> 进入 Visual Block 模式，将光标选中移动到指定位置后：</p><ul><li>同时在每行选择内容开头插入：<code>I</code></li><li>同时在每行选择内容末尾追加：<code>A</code></li><li>同时编辑：<code>c</code></li><li>同时删除：<code>d</code> 或者 <code>x</code></li><li>同时修改为同一字符：<code>r</code></li><li>数字递进自增/自减：先选中数字列，<code>g</code>，然后 <code>c-a</code> 或者 <code>c-x</code></li></ul></li><li><p>合并行，将下一行或者选中行通过空格连接，而不是回车：<code>J</code> (join)</p><blockquote><p>如果你不喜欢空格可以用 <code>gJ</code> 转置。</p></blockquote></li><li><p>关闭自动换行后的“行内”上下移动光标：<code>gk</code>、<code>gj</code></p></li><li><p>删除行：<code>:&#123;作用范围&#125;g/&#123;包含关键词&#125;/d</code></p><p>反选删除行：<code>:&#123;作用范围&#125;g!/&#123;关键词&#125;/d</code> 或 <code>:&#123;作用范围&#125;v/&#123;关键词&#125;/d</code></p><p>大部分时候结合正则可能更好用，如：<code>:g/^\s*$/d</code> 表示删除空白行</p></li></ul><h3 id="实用大功能">实用大功能<a title="#实用大功能" href="#实用大功能"></a></h3><p>实在太先进了，极大提高你工作效率的独家秘技，所以我要叫它“大功能”（乐）</p><ul><li><p>标记：<code>m</code> + 自定义字母 (mark)</p><p>之后使用 ` + 自定义字母跳转到标记。</p></li><li><p>宏录制：<code>q</code> + 自定义字母 (record macro)</p><p>再按一次 <code>q</code> 结束。之后使用 <code>@</code> + 自定义字母播放录制的操作宏。可配合数字实现重复执行播放。</p></li></ul><h2 id="最后的话">最后的话<a title="#最后的话" href="#最后的话"></a></h2><p>嗯… 文章有亿点长了。如果实在不喜欢记这些东西，并且真的感觉 Vim 很反人类的话，建议停止尝试。适合自己的才是最好的。</p><p>最后给一个一图流链接吧，个人感觉这个写的还蛮不错的。</p><p><a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html" target="_blank">Graphical vi-vim Cheat Sheet and Tutorial</a></p><p><img src="post/vim-key/vi-vim-cheat-sheet.png" alt="vi-vim-cheat-sheet" loading="lazy" class="φbp"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;用了几年 Vim 有了一些心得，故有此文。&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Vim" scheme="https://blogv2.cworld.top/tags/Vim/"/>
    
  </entry>
  
  <entry>
    <title>NodeJS 的一些相关技术</title>
    <link href="https://blogv2.cworld.top/post/nodejs/"/>
    <id>https://blogv2.cworld.top/post/nodejs/</id>
    <published>2023-07-19T13:24:36.000Z</published>
    <updated>2024-04-29T04:43:39.740Z</updated>
    
    <content type="html"><![CDATA[<p>Node.js® is an open-source, cross-platform JavaScript runtime environment.</p><span id="more"></span><h2 id="nvm">nvm<a title="#nvm" href="#nvm"></a></h2><p>无论选择在 Windows 还是在 WSL 上安装，安装 Node.js 时还要作出其他选择。 建议使用版本管理器，因为版本变更速度非常快。 你可能需要根据所使用的不同项目的需求在多个版本的 Node.js 之间进行切换。 Node 版本管理器（通常称为 nvm）是安装多个版本的 Node.js 的最常见方法。 我们将演练安装 nvm 的步骤，然后使用它来安装 Node.js。</p><h3 id="安装-nvm">安装 nvm<a title="#安装-nvm" href="#安装-nvm"></a></h3><p>要安装或更新 nvm，应运行安装脚本。为此，您可以手动下载并运行该脚本，或者使用以下 cURL 或 Wget 命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash</span><br></pre></td></tr></table></figure><p>运行上述任一命令都会下载并运行脚本。该脚本将 nvm 仓库克隆到 <code>~/.nvm</code>，并尝试将以下代码片段中的源代码追加到正确的配置文件（<code>~/.bash_profile</code>、<code>~/.zshc</code>、<code>~/.profile</code> 或 <code>~/.bashrc</code>）中。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> NVM_DIR=<span class="string">&quot;<span class="variable">$HOME</span>/.nvm&quot;</span></span><br><span class="line">[ -s <span class="string">&quot;<span class="variable">$NVM_DIR</span>/nvm.sh&quot;</span> ] &amp;&amp; \. <span class="string">&quot;<span class="variable">$NVM_DIR</span>/nvm.sh&quot;</span>  <span class="comment"># This loads nvm</span></span><br><span class="line">[ -s <span class="string">&quot;<span class="variable">$NVM_DIR</span>/bash_completion&quot;</span> ] &amp;&amp; \. <span class="string">&quot;<span class="variable">$NVM_DIR</span>/bash_completion&quot;</span>  <span class="comment"># This loads nvm bash_completion</span></span><br></pre></td></tr></table></figure><p><img src="nodejs/Pasted_image_20230129235827.png" alt="Alt text" loading="lazy" class="φbp"></p><h3 id="验证-nvm">验证 nvm<a title="#验证-nvm" href="#验证-nvm"></a></h3><p>使用命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">command</span> -v nvm</span><br></pre></td></tr></table></figure><p>或者，<code>nvm -v</code> 也许是个不错的检查方式。</p><p><img src="nodejs/Pasted_image_20230130000053.png" alt="Alt text" loading="lazy" class="φbp"></p><blockquote><p>在 Linux 上，运行安装脚本后，如果您在键入 <code>command -v nvm</code> 后收到 <code>nvm: command not found</code> 或看不到来自终端的反馈，只需关闭当前终端，并重新打开新终端，然后再次尝试验证即可。 或者，您可以在命令行上为不同的 shell 运行以下命令：</p><ul><li><em>bash</em>: <code>source ~/.bashrc</code></li><li><em>zsh</em>: <code>source ~/.zshrc</code></li><li><em>ksh</em>: <code>. ~/.profile</code></li></ul><p>嗯…希望你能看懂我在说什么。</p></blockquote><h3 id="nvm-用法">nvm 用法<a title="#nvm-用法" href="#nvm-用法"></a></h3><p>想要下载、编译和安装最新版本的 node，你可以直接执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nvm install node <span class="comment"># &quot;node&quot; is an alias for the latest version</span></span><br><span class="line">nvm install --lts <span class="comment"># 使用 LTS 版本更适合生产应用程序，避免问题</span></span><br></pre></td></tr></table></figure><p>安装一个特定版本的 node：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nvm install 14.7.0 <span class="comment"># or 16.3.0, 12.22.1, etc</span></span><br></pre></td></tr></table></figure><p>你安装的第一个版本会被设置为默认版本。所有新的终端将使用默认版本的 node 作为起始。你也可以使用 <code>nvm default v18.13.0</code> 切换。卸载对应版本请使用：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nvm uninstall --version 18.13.0</span><br></pre></td></tr></table></figure><p>使用命令 <code>ls-remote</code> 会列出所有 nvm 能够提供的 node 版本。列表会比较长，你可以使用 <code>vxx</code> 关键字简单过滤：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nvm ls-remote v18</span><br></pre></td></tr></table></figure><p>然后在任何新的 shell 里使用安装的版本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nvm use node</span><br><span class="line">nvm use v18.13.0</span><br></pre></td></tr></table></figure><p>或者单纯一次性的使用某个版本运行一下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nvm run node --version</span><br></pre></td></tr></table></figure><p>以及别忘了 <code>which</code> 命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nvm <span class="built_in">which</span> 12.22</span><br></pre></td></tr></table></figure><p><img src="nodejs/Pasted_image_20230130001335.png" alt="Alt text" loading="lazy" class="φbp"></p><h3 id="移除-nvm">移除 nvm<a title="#移除-nvm" href="#移除-nvm"></a></h3><p>nvm 固然好用，但接下来讲的另外一个工具也许能让你怦然心动，恰巧是 nvm 的优秀替代品。如果你需要换到接下来的工具或者其他工具，也可尝试移除 nvm。</p><p>首先移除整个库（也就是之前提到的 <code>.nvm</code>）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -rf <span class="string">&quot;<span class="variable">$NVM_DIR</span>&quot;</span></span><br></pre></td></tr></table></figure><p>然后前往你的配置文件（也就是之前提到的如 <code>.zshrc</code> 文件），移除对应的环境变量声明文本（大概长下边这样）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> NVM_DIR=<span class="string">&quot;<span class="variable">$HOME</span>/.nvm&quot;</span></span><br><span class="line">[ -s <span class="string">&quot;<span class="variable">$NVM_DIR</span>/nvm.sh&quot;</span> ] &amp;&amp; \. <span class="string">&quot;<span class="variable">$NVM_DIR</span>/nvm.sh&quot;</span> <span class="comment"># This loads nvm</span></span><br><span class="line">[[ -r <span class="variable">$NVM_DIR</span>/bash_completion ]] &amp;&amp; \. <span class="variable">$NVM_DIR</span>/bash_completion</span><br></pre></td></tr></table></figure><h2 id="fnm">fnm<a title="#fnm" href="#fnm"></a></h2><p><a href="https://github.com/Schniz/fnm" target="_blank">fnm</a>（Fast Node Manager）基于 Rust 开发，是不是还没用就感觉到它的快了，哈哈~<br>同时，它是跨平台的，支持 macOS、Linux、Windows。</p><h3 id="安装">安装<a title="#安装" href="#安装"></a></h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -fsSL https://fnm.vercel.app/install | bash</span><br></pre></td></tr></table></figure><p>如果你像笔者这样报错的话，可能是缺失了 <code>unzip</code>，直接安装一下即可：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install unzip</span><br></pre></td></tr></table></figure><p><img src="nodejs/Pasted_image_20230130003738.png" alt="Alt text" loading="lazy" class="φbp"></p><h3 id="验证-fnm">验证 fnm<a title="#验证-fnm" href="#验证-fnm"></a></h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">command</span> -v fnm</span><br><span class="line"></span><br><span class="line"><span class="comment"># 或者使用这一句</span></span><br><span class="line">fnm --version</span><br></pre></td></tr></table></figure><h3 id="fnm-用法">fnm 用法<a title="#fnm-用法" href="#fnm-用法"></a></h3><p>Quick start：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 1. 安装最新的 LTS 版本</span></span><br><span class="line">fnm install --lts</span><br><span class="line"><span class="comment"># Installing Node v18.13.0 (arm64)</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 2. 设置为全局默认版本</span></span><br><span class="line">fnm default 18</span><br><span class="line"></span><br><span class="line"><span class="comment"># 3. 尽情使用吧～</span></span><br><span class="line">node -v</span><br></pre></td></tr></table></figure><p><img src="nodejs/Pasted_image_20230130004314.png" alt="Alt text" loading="lazy" class="φbp"></p><p>一些常用指令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装其他版本</span></span><br><span class="line">$ fnm install 16</span><br><span class="line"></span><br><span class="line"><span class="comment"># 在当前 Shell 使用指定版本</span></span><br><span class="line">$ fnm use 16</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看本地已安装的版本</span></span><br><span class="line">$ fnm <span class="built_in">ls</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看官方已发布的所有版本</span></span><br><span class="line">$ fnm ls-remote | grep v16</span><br><span class="line"></span><br><span class="line"><span class="comment"># 速度慢的时候，可以切换到国内源</span></span><br><span class="line">$ fnm install 16 --node-dist-mirror=https://npmmirror.com/mirrors/node</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;Node.js® is an open-source, cross-platform JavaScript runtime environment.&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="NodeJS" scheme="https://blogv2.cworld.top/tags/NodeJS/"/>
    
    <category term="nvm" scheme="https://blogv2.cworld.top/tags/nvm/"/>
    
    <category term="fnm" scheme="https://blogv2.cworld.top/tags/fnm/"/>
    
  </entry>
  
  <entry>
    <title>ChatGPT 深度使用与日用方案</title>
    <link href="https://blogv2.cworld.top/post/chatgpt/"/>
    <id>https://blogv2.cworld.top/post/chatgpt/</id>
    <published>2023-03-27T14:07:32.000Z</published>
    <updated>2024-04-29T04:43:39.676Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前置准备">前置准备<a title="#前置准备" href="#前置准备"></a></h2><p>ChatGPT 是一个基于 GPT-3.5-turbo 的聊天机器人，它可以通过简单的 API 调用来实现与人类的对话。</p><p>关于如何注册 OPENAI，网上的方法已经很多了，这里不再赘述。这里简单讲解一下如何拿到 ChatGPT 的 API。</p><p>在 <a href="https://chatgpt.com/" target="_blank">ChatGPT</a> 上注册成功账号后，在 <a href="https://chatgpt.com/api" target="_blank">API</a> 页面中，点击 <code>Get API Key</code> 按钮，即可获得你的 API Key。</p><p><img src="post/chatgpt/Snipaste_2023-03-27_15-00-35.png" alt="Get ChatGPT API Key" loading="lazy" class="φbp"></p><h2 id="其他办法">其他办法<a title="#其他办法" href="#其他办法"></a></h2><p>继续深入讲解如何利用你的 API Key 前，先简单讲述一下其他方法：</p><p>通过网站：</p><ol><li><a href="https://chatbot.theb.ai/#/chat" target="_blank">BAI Chat</a> 就是一个干净免费的网站，完全可以直接使用，并且具备速通能力。</li><li><a href="http://k.kliuu.xyz/index.php/2023/03/19/kliuu/" target="_blank">Kliuu ChatGPT</a> 是一个个人搭建的版本，同样有速通能力，但被限制最多输入 30 字符，最多回复 220 字符。</li></ol><p>通过 Telegram：</p><ol><li><a href="https://t.me/littleb_gptBOT" target="_blank">BAI</a> 就是上边提到的 BAI Chat 的 Telegram 版本，速度还算快，体验不错。</li><li><a href="https://t.me/TheB_AI_Bot" target="_blank">BAI White</a> BAI Chat 的镜像版本。</li><li><a href="https://t.me/OpenAI_GPT_Chatbot" target="_blank">ChatGPT OpenAI Bot</a> 甚至提供语音发送回复，但有 10 秒冷却（等于没有）。</li></ol><h2 id="chatgpt-与-telegram">ChatGPT 与 Telegram<a title="#chatgpt-与-telegram" href="#chatgpt-与-telegram"></a></h2><p>如果你对隐私、速度、安全或者单纯自定义有一定的要求，可以尝试自己搭建 Telegram 机器人，拥有更多的灵活度和更快的响应。更多信息详见 Github 项目 <a href="https://github.com/TBXark/ChatGPT-Telegram-Workers" target="_blank">TBXark/ChatGPT-Telegram-Workers</a>，下面也简单讲解一下部署流程。</p><div class="φbt"><ul><li><p>创建 Telegram 机器人</p><p>首先，你需要一个 Telegram 账号，然后在 <a href="https://t.me/BotFather" target="_blank">BotFather</a> 上创建一个机器人，按照提示操作即可。</p></li><li><p>部署 Workers</p><ol><li>在 <a href="https://dash.cloudflare.com/sign-up/workers" target="_blank">Cloudflare Workers</a> 上注册账号</li><li>点击右上角的 Create a Service</li><li>进入新建的 workers，选择 Quick Edit，将 <a href="https://github.com/TBXark/ChatGPT-Telegram-Workers/blob/master/dist/index.js" target="_blank">…/dist/index.js</a> 代码复制到编辑器中，保存。</li></ol><p><img src="post/chatgpt/Snipaste_2023-03-27_15-17-14.png" alt="Alt text" loading="lazy" class="φbp"></p></li><li><p>配置环境变量</p><p>前往你的 Workers,点击右上角的 Setting -&gt; Variables，设置下述变量。</p><blockquote><p>带 * 的为必设置，带 ^ 的为推荐设置</p></blockquote><div class="φbq"><div class="φbs"><table><thead><tr><th>变量名</th><th>简述</th><th>默认值</th><th>特殊说明</th></tr></thead><tbody><tr><td>*API_KEY</td><td>OpenAI API Key</td><td><code>null</code></td><td></td></tr><tr><td>*TELEGRAM_AVAILABLE_TOKENS</td><td>支持多个 Telegram Bot Token</td><td><code>null</code></td><td>多个 Token 用<code>,</code>分隔</td></tr><tr><td>*CHAT_WHITE_LIST</td><td>聊天 ID 白名单</td><td><code>null</code></td><td>多个 ID 用<code>,</code>分隔，不知道 ID，和<a href="https://t.me/username_to_id_bot" target="_blank">机器人</a>聊一句就能返回</td></tr><tr><td>I_AM_A_GENEROUS_PERSON</td><td>关闭白名单，允许所有人访问</td><td><code>false</code></td><td>鉴于很多人不想设置白名单，或者不知道怎么获取 ID，所以设置这个选项就能允许所有人访问， 值为<code>true</code>时生效</td></tr><tr><td>AUTO_TRIM_HISTORY</td><td>自动清理历史记录</td><td><code>true</code></td><td>为了避免 4096 字符限制，将消息删减</td></tr><tr><td>MAX_HISTORY_LENGTH</td><td>最大历史记录长度</td><td><code>20</code></td><td><code>AUTO_TRIM_HISTORY开启后</code> 为了避免 4096 字符限制，将消息删减</td></tr><tr><td>CHAT_MODEL</td><td>open ai 模型选择</td><td><code>gpt-3.5-turbo</code></td><td></td></tr><tr><td>SYSTEM_INIT_MESSAGE</td><td>系统初始化信息</td><td><code>你是一个得力的助手</code></td><td>默认机器人设定</td></tr><tr><td>SYSTEM_INIT_MESSAGE_ROLE</td><td>系统初始化信息角色</td><td><code>system</code></td><td>默认机器人设定</td></tr><tr><td>^ENABLE_USAGE_STATISTICS</td><td>开启使用统计</td><td><code>false</code></td><td>开启后，每次调用 API 都会记录到 KV，可以通过<code>/usage</code>查看</td></tr><tr><td>HIDE_COMMAND_BUTTONS</td><td>隐藏指令按钮</td><td><code>null</code></td><td>把想要隐藏的按钮写入用逗号分开<code>/start,/system</code>, 记得带上斜杠,修改之后得重新<code>init</code></td></tr><tr><td>DEBUG_MODE</td><td>调试模式</td><td><code>false</code></td><td>目前可以把最新一条消息保存到 KV 方便调试</td></tr><tr><td>*WORKERS_DOMAIN</td><td>Workers 域名</td><td><code>null</code></td><td>例如 workers_name.username.workers.dev</td></tr></tbody></table></div></div></li><li><p>配置 KV 数据库</p><ol><li>前往侧栏的 Workers -&gt; KV，点击右上角的 <code>Create a Namespace</code>, 名字随便取, 但是绑定的时候必须设定为<code>DATABASE</code></li><li>点击右上角的 Setting -&gt; Variables</li><li>在 <code>KV Namespace Bindings</code> 中点击 <code>Edit variables</code></li><li>点击 <code>Add variable</code></li><li>设置名字为<code>DATABASE</code> 并选择刚刚创建的 KV 数据</li></ol></li><li><p>初始化</p><ol><li>运行 <code>https://workers_name.username.workers.dev/init</code> 自动绑定 telegram 的 webhook 和设定所有指令</li><li>开始新对话,使用<code>/new</code>指令开始,之后每次都会将聊天上下文发送到 ChatGPT</li><li>使用<code>/setenv KEY=VALUE</code>指令修改用户配置,例如<code>SETENV SYSTEM_INIT_MESSAGE=现在开始是喵娘,每句话已喵结尾</code></li><li>使用 <code>/role 角色名 SYSTEM_INIT_MESSAGE=现在开始是猫娘，每句话以喵结尾</code> 可以创建一个新角色，并使用 <code>~角色名 聊天内容</code> 调用。</li></ol></li></ul></div><h2 id="chatgpt-与-ama">ChatGPT 与 AMA<a title="#chatgpt-与-ama" href="#chatgpt-与-ama"></a></h2><p>AMA（Ask Me Anything）原本指一种在线问答形式，这里只是一个 ChatGPT 第三方客户端，支持 Android 和 iOS。</p><ul><li>Android: <a href="https://play.google.com/store/apps/details?id=com.bytemyth.ama" target="_blank">Google Play Store</a></li><li>iOS: <a href="https://apps.apple.com/cn/app/ama-ask-me-anything/id6446135619" target="_blank">App Store</a></li></ul><p>如果你还想获得速通能力，可以尝试自己设置 API Server（原理就是反代官方 API 接口）（感谢 <a href="https://googles.plus/2023/03/24/shi-yong-cloudflare-workers-jie-jue-openai-he-chatgpt-de-api-wu-fa-fang-wen/#!" target="_blank">sfc9982’s blog</a> 提供的思路）。</p><p>与上文相同，你需要在 Cloudflare Workers 上部署一个 Worker。相关注册等流程上文讲过这里不再赘述。</p><div class="φbt"><ul><li><p>注意部署内容有发生改变，你需要填入以下内容：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="variable constant_">TELEGRAPH_URL</span> = <span class="string">&quot;https://api.openai.com&quot;</span>;</span><br><span class="line"></span><br><span class="line"><span class="title function_">addEventListener</span>(<span class="string">&quot;fetch&quot;</span>, <span class="function">(<span class="params">event</span>) =&gt;</span> &#123;</span><br><span class="line">  event.<span class="title function_">respondWith</span>(<span class="title function_">handleRequest</span>(event.<span class="property">request</span>));</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">handleRequest</span>(<span class="params">request</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> url = <span class="keyword">new</span> <span class="title function_">URL</span>(request.<span class="property">url</span>);</span><br><span class="line">  url.<span class="property">host</span> = <span class="variable constant_">TELEGRAPH_URL</span>.<span class="title function_">replace</span>(<span class="regexp">/^https?:\/\//</span>, <span class="string">&quot;&quot;</span>);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">const</span> modifiedRequest = <span class="keyword">new</span> <span class="title class_">Request</span>(url.<span class="title function_">toString</span>(), &#123;</span><br><span class="line">    <span class="attr">headers</span>: request.<span class="property">headers</span>,</span><br><span class="line">    <span class="attr">method</span>: request.<span class="property">method</span>,</span><br><span class="line">    <span class="attr">body</span>: request.<span class="property">body</span>,</span><br><span class="line">    <span class="attr">redirect</span>: <span class="string">&quot;follow&quot;</span>,</span><br><span class="line">  &#125;);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(modifiedRequest);</span><br><span class="line">  <span class="keyword">const</span> modifiedResponse = <span class="keyword">new</span> <span class="title class_">Response</span>(response.<span class="property">body</span>, response);</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 添加允许跨域访问的响应头</span></span><br><span class="line">  modifiedResponse.<span class="property">headers</span>.<span class="title function_">set</span>(<span class="string">&quot;Access-Control-Allow-Origin&quot;</span>, <span class="string">&quot;*&quot;</span>);</span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> modifiedResponse;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>点击编辑器右下角的 “Save and deploy” 按钮部署该代码，在弹出的对话框中继续选择 “Save and deploy” 确认部署。</p></li><li><p>在 Cloudflare Workers 的管理界面中，点击 “Triggers” 选项卡，然后点击 “Custom Domians” 中的 “Add Custom Domain” 按钮以绑定自己的域名（为的是防止免费提供的域名本身被拒绝速通，如果你能用也可以不设置）。</p></li><li><p>测试：将官方的 <a href="https://api.openai.com/v1/chat/completions" target="_blank">https://api.openai.com/v1/chat/completions</a> 换为自己的域名（如 <a href="https://mydomain.com/v1/chat/completions" target="_blank">https://mydomain.com/v1/chat/completions</a> ），如果打开收到结果如：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;error&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;message&quot;</span><span class="punctuation">:</span> <span class="string">&quot;You didn&#x27;t provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you&#x27;re accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://platform.openai.com/account/api-keys.&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;invalid_request_error&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;param&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">null</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;code&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">null</span></span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>说明你部署反代成功。只需填入 AMA 的设置中的 API Server 即可。</p></li></ul></div><h2 id="chatgpt-与-purewriter">ChatGPT 与 PureWriter<a title="#chatgpt-与-purewriter" href="#chatgpt-与-purewriter"></a></h2><p>PureWriter 中文名纯纯写作，是一款优秀的写作工具，支持 Windows、Android 平台（但 Windows 功能比较残缺），这里以 Android 版（也只有这个支持）为例。</p><p>下载：<a href="https://writer.drakeet.com" target="_blank">Pure Writer 官网</a></p><p>在设置中可输入 ChatGPT 的 API Key 即可快速启用。注意纯纯写作不支持自定义 API Server，没有办法速通。</p><p><img src="post/chatgpt/6129538924557743150_119.jpg" alt="Pure Writer" loading="lazy" class="φbp"></p><p>除了 “时光机” 界面外，还能在打字界面调用，有效提升写作效率。当然你也可以单纯当作一款 ChatGPT 客户端。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前置准备&quot;&gt;前置准备&lt;a title=&quot;#前置准备&quot; href=&quot;#前置准备&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ChatGPT 是一个基于 GPT-3.5-turbo 的聊天机器人，它可以通过简单的 API 调用来实现与人类的对话。&lt;/p&gt;
&lt;p&gt;关于如何注册 OPEN</summary>
      
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="GPT-3.5-turbo" scheme="https://blogv2.cworld.top/tags/GPT-3-5-turbo/"/>
    
    <category term="Python" scheme="https://blogv2.cworld.top/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>Alist 自建0成本部署</title>
    <link href="https://blogv2.cworld.top/post/deploy-alist/"/>
    <id>https://blogv2.cworld.top/post/deploy-alist/</id>
    <published>2022-12-15T02:06:47.000Z</published>
    <updated>2024-04-29T04:43:39.680Z</updated>
    
    <content type="html"><![CDATA[<p>Alist 是一款支持多种存储的目录文件列表程序，后端基于 <code>gin</code>，前端使用 <code>react</code>。</p><span id="more"></span><p>这里提供 Alist 官方的传送门：<a href="https://github.com/alist-org/alist" target="_blank">Github</a> | <a href="https://pan.nn.ci/" target="_blank">Demo</a> | <a href="https://alist.nn.ci/zh/" target="_blank">文档</a></p><p>不过本节将重点讨论使用 Render 部署 Alist 的方法。</p><h2 id="fork-仓库">Fork 仓库<a title="#fork-仓库" href="#fork-仓库"></a></h2><p>首先，我们需要 Fork 一份 Alist-render 的仓库。（不会的自己使用搜索引擎）</p><p>Alist 仓库地址：<a href="https://github.com/alist-org/alist-render" target="_blank">Github</a></p><h2 id="修改配置">修改配置<a title="#修改配置" href="#修改配置"></a></h2><p>前往 fork 的仓库，修改 render.yaml 内的 <code>repo</code> 配置为自己的仓库地址。</p><h2 id="创建数据库">创建数据库<a title="#创建数据库" href="#创建数据库"></a></h2><p>Alist 需要一个数据库，可选 sqlite3、mysql、postgres。这里选用提供免费服务的 <a href="https://www.elephantsql.com/" target="_blank">ElephantSQL</a>。</p><p>进入官网：<a href="https://www.elephantsql.com/" target="_blank">ElephantSQL</a>，点击位于页面中央的 <code>Get a managed database today</code></p><p><img src="post/deploy-alist/62a5ea8d2548b.png" alt="" loading="lazy" class="φbp"></p><p>选择海龟样子的 <code>Free</code> 计划</p><p><img src="post/deploy-alist/62a5eab45c34f.png" alt="" loading="lazy" class="φbp"></p><p>会进入登陆页面，可以使用 Github 进行授权登陆。之后会来到控制台，我们选择绿色的 <code>Create New Instance</code> 创建一个新的数据库。名称和 Tag 随意填写，方案是默认的 Free 方案。</p><p><img src="post/deploy-alist/1671194703990.png" alt="" loading="lazy" class="φbp"></p><p>接下来的地区可以随意选择，优先选择高亮的地区；如我选的 <code>AP-East-1 (Hong Kong)</code>。这样我们就获得了一个免费的 <code>postgres</code> 类型的数据库。注意详情页的如下配置，后面会用到。</p><p><img src="post/deploy-alist/1671195753013.png" alt="" loading="lazy" class="φbp"></p><h2 id="render-部署">Render 部署<a title="#render-部署" href="#render-部署"></a></h2><p>进入官网：<a href="https://render.com/" target="_blank">Render</a>，点击右上角的 <code>GET STARTED</code> 注册账号。</p><p>注册完成后，点击右上角的 <code>New +</code>，选择 <code>Web Service</code>，并在授权 Github 时连接刚刚 Fork 的 Alist 仓库。</p><p><img src="post/deploy-alist/1671195753256.png" alt="" loading="lazy" class="φbp"></p><p>下一步先随便取个名字，然后拉到底部点击 <code>Advanced</code>，录入需要的环境变量。</p><p><img src="post/deploy-alist/1671196295276.png" alt="" loading="lazy" class="φbp"></p><div class="φbq"><div class="φbs"><table><thead><tr><th style="text-align:center">变量参数</th><th style="text-align:center">示例参数</th><th style="text-align:center">数据库详情页对应</th><th style="text-align:center">说明</th></tr></thead><tbody><tr><td style="text-align:center">DB_HOST</td><td style="text-align:center"><a href="http://queenie.db.elephantsql.com">queenie.db.elephantsql.com</a></td><td style="text-align:center">Server</td><td style="text-align:center">数据库地址</td></tr><tr><td style="text-align:center">DB_NAME</td><td style="text-align:center">bkqgx</td><td style="text-align:center">User &amp; Default database</td><td style="text-align:center">数据库名字</td></tr><tr><td style="text-align:center">DB_PASS</td><td style="text-align:center">5CqBjEVZWdaaad2333aadadadadN3Clo</td><td style="text-align:center">Password</td><td style="text-align:center">数据库密码</td></tr><tr><td style="text-align:center">DB_PORT</td><td style="text-align:center">5432</td><td style="text-align:center"></td><td style="text-align:center">数据库端口</td></tr><tr><td style="text-align:center">DB_SSL_MODE</td><td style="text-align:center">disable</td><td style="text-align:center"></td><td style="text-align:center">SSL 模式</td></tr><tr><td style="text-align:center">DB_TYPE</td><td style="text-align:center">postgres</td><td style="text-align:center"></td><td style="text-align:center">数据库类型</td></tr><tr><td style="text-align:center">DB_USER</td><td style="text-align:center">bkqgx</td><td style="text-align:center">User &amp; Default database</td><td style="text-align:center">数据库用户名</td></tr><tr><td style="text-align:center">PORT</td><td style="text-align:center">8080</td><td style="text-align:center"></td><td style="text-align:center">端口</td></tr></tbody></table></div></div><details><summary>关于 DB_SSL_MODE</summary><p>用于给数据连接提供 SSL 加密保护。其中：</p><ul><li>sqlite3 数据库：请忽略该参数</li><li>mysql 数据库：参数有 <code>true</code>, <code>false</code>, <code>skip-verify</code>, <code>preferred</code>, 选一个填</li><li>postgres 数据库：参数有 <code>disable</code>，<code>allow</code>，<code>prefer</code>，<code>require</code>，<code>verify-full</code>，选一个填</li></ul><p>我用的 postgres 数据库填的是 <code>disable</code>，也就是没用 SSL；大家按需选择即可。</p></details><p>注：为了提升访问速度，建议额外配置环境变量 <code>CDN</code> 为 <code>https://npm.elemecdn.com/alist-web@【NPM官网查到的最新版本号】/dist/</code>，能一定程度上加快网页打开速度。</p><h2 id="保持唤醒">保持唤醒<a title="#保持唤醒" href="#保持唤醒"></a></h2><p>由于 Render 15 分钟没访问会休眠，所以我们可以注册一个 <a href="https://uptimerobot.com/" target="_blank">Uptimerobot</a> 或 <a href="https://www.checklyhq.com/" target="_blank">Checklyhq</a> 类似的这种监视网站，添加一个监控，24 小时定时访问 render 上的项目，render 就不会休眠了。</p><blockquote><p>Render 原本的免费计划是每月允许总共使用 750 小时，似乎是不计流量的，就部署一个项目来说完全够用。但是 render 官方宣布定价将从 2023 年 1 月 1 日开始更改，从每月使用 750 小时，改为了每月免费带宽 100GB 的流量。</p></blockquote><h2 id="问题解决">问题解决<a title="#问题解决" href="#问题解决"></a></h2><p>由于搭建的人开始变多，Render 官方也开始对 Alist 项目进行限制，导致部分人无法正常部署。解决方案：</p><ul><li>修改自己的仓库名，避免出现 Alist 字眼；</li><li>将 <code>render.yaml</code> 中的 <code>repo</code> 配置为自己的仓库地址。</li></ul><p>最后感谢 <a href="https://www.zxma.top/" target="_blank">檐牙</a> 提供的<a href="https://www.zxma.top/posts/438365eb" target="_blank">参考</a>。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Alist 是一款支持多种存储的目录文件列表程序，后端基于 &lt;code&gt;gin&lt;/code&gt;，前端使用 &lt;code&gt;react&lt;/code&gt;。&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Alist" scheme="https://blogv2.cworld.top/tags/Alist/"/>
    
  </entry>
  
  <entry>
    <title>米哈游游戏（原神/崩坏3）自动签到</title>
    <link href="https://blogv2.cworld.top/post/mihoyo-helper/"/>
    <id>https://blogv2.cworld.top/post/mihoyo-helper/</id>
    <published>2022-04-17T17:10:14.000Z</published>
    <updated>2024-04-29T04:43:39.736Z</updated>
    
    <content type="html"><![CDATA[<p>这是一个关于 <a href="https://github.com/y1ndan/genshinhelper2" target="_blank">原神签到小助手</a> 的指导教程。</p><span id="more"></span><p>写这个文档，是因为开发者自己写的文档太乱了。我也花了很长时间才彻底看懂。。</p><h2 id="项目相关">项目相关<a title="#项目相关" href="#项目相关"></a></h2><blockquote><p>genshinhelper 从 v2.0.0 开始，分为 genshinhelper2 和 genshin-checkin-helper 两个项目，同时分离出 onepush 推送包。</p></blockquote><h3 id="前言">前言<a title="#前言" href="#前言"></a></h3><p>原神是少有的游戏本体和签到福利分离的游戏，玩家为了签到还要额外下载米游社 App。</p><p>平心而论，目前的每日签到奖励真的不咋地，都知道是蚊子腿。事实上，你完全可以选择无视签到，不签也没啥大的损失；或者选择手动签到，但这样的话哪天忘记打卡了就很头疼。</p><p>为了原石、摩拉和紫色经验书等签到奖励，这个项目应运而生，可以实现自动每日签到。</p><h3 id="简介">简介<a title="#简介" href="#简介"></a></h3><p><code>genshinhelper</code>（原神签到小助手），前身为 <code>genshin-impact-helper</code>，可以自动化为你获取原神每日福利。</p><h3 id="功能支持">功能支持<a title="#功能支持" href="#功能支持"></a></h3><ul><li>支持订阅推送</li><li>支持多个账号以及一个账号下的多个角色</li><li>米游社原神/崩坏 3 的每日签到</li><li>米游社的米游币获取任务</li><li>原神超话功能 活动监测 + 领兑换码 + 多方推送</li><li>支持原神多种服务器（天空岛/世界树/America/Europe/Asia/SAR）</li><li>原神微信积分商城签到</li><li>云原神时长活动签到</li></ul><h3 id="源码">源码<a title="#源码" href="#源码"></a></h3><ul><li><p>genshinhelper2（<a href="https://github.com/y1ndan/genshinhelper2" target="_blank">Github</a> | <a href="https://gitlab.com/y1ndan/genshinhelper2" target="_blank">Gitlab</a>）- 签到相关的封装库，不能开箱即用。</p></li><li><p><a href="https://gitlab.com/y1ndan/genshin-checkin-helper" target="_blank">genshin-checkin-helper</a> - 签到主程序。</p></li><li><p><a href="https://github.com/y1ndan/onepush" target="_blank">onepush</a> - 一个简单易用的推送包。</p></li></ul><h2 id="运行方式与环境搭建">运行方式与环境搭建<a title="#运行方式与环境搭建" href="#运行方式与环境搭建"></a></h2><p><img src="post/mihoyo-helper/runway-choose.jpg" alt="" loading="lazy" class="φbp"></p><details><summary>方案 1 终端运行</summary><p>终端运行 <code>genshinhelper</code> or <code>python -m genshinhelper</code>可以直接运行签到脚本。</p></details><details><summary>方案 2 云函数运行（推荐）</summary><blockquote><p>注意：<code>v1.5.0+</code> 版本增加了随机延迟功能，默认为 10-300s。故云函数的<code>执行超时时间</code>应设置为大于变量中的 <code>MAX_SLEEP_SECS</code>（最大休眠秒数）。</p></blockquote><p>这里以腾讯云函数为例。阿里云方法类似。</p><p><a href="https://wwa.lanzoui.com/b07mk6dla" target="_blank">云函数版文件下载</a> 密码：ed03</p><p>前往 <a href="https://console.cloud.tencent.com/scf/" target="_blank">云函数 SCF 管理控制台</a> --&gt;<code>函数服务</code>–&gt;<code>新建</code>–&gt;<code>自定义创建</code>–&gt;<code>基础配置</code>–&gt;<code>本地上传zip包</code>–&gt;<code>上传</code>–&gt;<code>本地上传zip包</code>–&gt; 选择下载的<code>genshinhelper-xxx-serverless.zip</code>压缩包–&gt;<code>完成</code></p><p><img src="post/mihoyo-helper/new-server.png" alt="" loading="lazy" class="φbp"></p><p>前往<code>genshinhelper</code>–&gt;<code>函数管理</code>–&gt;<code>函数配置</code>–&gt;<code>编辑</code></p><p><img src="post/mihoyo-helper/edit-config.png" alt="" loading="lazy" class="φbp"></p><p>此处可以编辑环境变量。同时建议修改<code>执行超时时间</code>为<code>600</code>秒。</p><p><img src="post/mihoyo-helper/add-variables.png" alt="" loading="lazy" class="φbp"></p><p>前往<code>genshinhelper</code>–&gt;<code>触发管理</code>–&gt;<code>新建触发器</code>–&gt; 按下图进行配置。当然你也可以添加一个 <code>API 网关</code>，方便手动强制执行。</p><p><img src="post/mihoyo-helper/triggers.png" alt="" loading="lazy" class="φbp"></p></details><details><summary>方案 3 Docker 运行</summary><p>使用以下命令拉取镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull yindan/genshinhelper</span><br></pre></td></tr></table></figure><p>你也可以在 <a href="https://registry.hub.docker.com/r/yindan/genshinhelper/" target="_blank">Docker Hub</a> 上找到该仓库。</p><p>在下列命令中， <code>COOKIE_MIHOYOBBS</code> 代表环境变量名字， <code>&lt;COOKIE_MIHOYOBBS&gt;</code> 代表 <code>COOKIE_MIHOYOBBS</code> 对应的值；<code>DISCORD_WEBHOOK</code> 同理。</p><blockquote><p>应当注意，这里的 <code>COOKIE_MIHOYOBBS</code>和 <code>DISCORD_WEBHOOK</code>只是教程使用的例子，并非必须字段。<br>如果你是国际服则应该配置 <code>COOKIE_HOYOLAB</code>而不是 <code>COOKIE_MIHOYOBBS</code>；不使用 Discord 推送，可以不配置 <code>DISCORD_WEBHOOK</code>。</p></blockquote><ul><li>基本使用</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name=genshinhelper \</span><br><span class="line">-e COOKIE_MIHOYOBBS=<span class="string">&quot;&lt;COOKIE_MIHOYOBBS&gt;&quot;</span> \</span><br><span class="line">-e DISCORD_WEBHOOK=<span class="string">&quot;&lt;DISCORD_WEBHOOK&gt;&quot;</span> \</span><br><span class="line">--restart always \</span><br><span class="line">yindan/genshinhelper:latest</span><br></pre></td></tr></table></figure><ul><li>高级使用</li></ul><p>Docker 会在每天早上 <code>6:00</code> 触发签到任务。可以使用 <code>CRON_SIGNIN</code> 参数自定义触发时间。</p><p>例如触发时间使用的是北京时间：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name=genshinhelper \</span><br><span class="line">-e COOKIE_MIHOYOBBS=<span class="string">&quot;&lt;COOKIE_MIHOYOBBS&gt;&quot;</span> \</span><br><span class="line">-e DISCORD_WEBHOOK=<span class="string">&quot;&lt;DISCORD_WEBHOOK&gt;&quot;</span> \</span><br><span class="line">-e CRON_SIGNIN=<span class="string">&quot;0 7 * * *&quot;</span> \</span><br><span class="line">--restart always \</span><br><span class="line">yindan/genshinhelper:latest</span><br></pre></td></tr></table></figure><p>如果你想使用 <code>config.json</code> 配置文件（这部分会在 <code>配置</code>章节讲解），则可以使用以下命令映射文件夹。</p><p>假设你的配置文件位于 <code>/etc/genshin/config.json</code>。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker run -d --name=genshinhelper \</span><br><span class="line">-v /etc/genshin:/app/genshincheckinhelper/config \</span><br><span class="line">--restart always \</span><br><span class="line">yindan/genshinhelper:latest</span><br></pre></td></tr></table></figure><ul><li>常用命令</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看日志</span></span><br><span class="line">$ docker logs -f genshinhelper --<span class="built_in">tail</span> 100</span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启</span></span><br><span class="line">$ docker restart genshinhelper</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更新</span></span><br><span class="line">$ docker pull yindan/genshinhelper</span><br><span class="line">$ docker <span class="built_in">rm</span> -f genshinhelper</span><br><span class="line"><span class="comment"># 之后依据基本使用或高级使用重新部署</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 卸载</span></span><br><span class="line">$ docker <span class="built_in">rm</span> -f genshinhelper</span><br><span class="line">$ docker image <span class="built_in">rm</span> genshinhelper</span><br></pre></td></tr></table></figure></details><details><summary>方案 4 使用 PyPI Package 运行</summary><p>使用 <a href="https://pypi.org/project/genshinhelper/" target="_blank">pypi 包</a> 进行安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install genshinhelper</span><br></pre></td></tr></table></figure><p>你需要先在主机中添加环境变量，或者使用 <code>pip show genshinhelper</code> 查看包的安装位置，找到并编辑 <code>config.json</code> 配置文件。</p><p>如果你已经完成前置要求，使用以下命令运行项目:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python -m genshinhelper</span><br></pre></td></tr></table></figure></details><h2 id="配置与操作">配置与操作<a title="#配置与操作" href="#配置与操作"></a></h2><h3 id="配置项">配置项<a title="#配置项" href="#配置项"></a></h3><p>其实就是云函数里面的环境变量或者其他方式下的 Config 文件。</p><p>下面的配置项并非每一项都要填写，根据需要填即可。</p><div class="φbq"><div class="φbs"><table><thead><tr><th style="text-align:left">变量名</th><th style="text-align:center">默认值</th><th style="text-align:left">描述</th></tr></thead><tbody><tr><td style="text-align:left">LANGUAGE</td><td style="text-align:center">en</td><td style="text-align:left">项目语言。目前支持中文(zh)和英文(en)。</td></tr><tr><td style="text-align:left">MAX_SLEEP_SECS</td><td style="text-align:center">300</td><td style="text-align:left">最大休眠秒数。自 v1.5.0 添加了运行前随机延迟，设置此参数可自定义延迟，秒数应该＞ 10</td></tr><tr><td style="text-align:left">RANDOM_SLEEP_SECS_RANGE</td><td style="text-align:center">0-300</td><td style="text-align:left">随机延迟休眠秒数范围。设置成&quot;0-0&quot;为取消延迟</td></tr><tr><td style="text-align:left">RUN_ENV</td><td style="text-align:center">prod</td><td style="text-align:left">是否延迟执行。设置为任意非默认值即可跳过随机延迟</td></tr><tr><td style="text-align:left">CHECK_IN_TIME</td><td style="text-align:center"></td><td style="text-align:left">（云函数无需配置此项）每日签到时间，只运行环境的时间有关。对于 Docker 可以用 TZ=Asia/Shanghai 设置时区</td></tr><tr><td style="text-align:left">CHECK_RESIN_SECS</td><td style="text-align:center"></td><td style="text-align:left">（云函数无需配置此项）原神原粹树脂检测间隔秒数</td></tr><tr><td style="text-align:left">ONE_PUSH</td><td style="text-align:center"></td><td style="text-align:left">设置消息推送</td></tr><tr><td style="text-align:left">COOKIE_MIHOYOBBS</td><td style="text-align:center"></td><td style="text-align:left">米游社里原神签到需要的 Cookie 值</td></tr><tr><td style="text-align:left">COOKIE_BH3</td><td style="text-align:center"></td><td style="text-align:left">崩坏 3 签到需要的 Cookie 值</td></tr><tr><td style="text-align:left">COOKIE_MIYOUBI</td><td style="text-align:center"></td><td style="text-align:left">米游社执行任务获取米游币需要的 Cookie 值</td></tr><tr><td style="text-align:left">COOKIE_HOYOLAB</td><td style="text-align:center"></td><td style="text-align:left">HoYoLAB 里原神签到需要的 Cookie 值</td></tr><tr><td style="text-align:left">COOKIE_WEIBO</td><td style="text-align:center"></td><td style="text-align:left">微博超话自动签到需要的 Cookie 值，形如 <code>aid=xxx;gsid=xxx;s=xxx;from=xxx</code></td></tr><tr><td style="text-align:left">COOKIE_KA</td><td style="text-align:center"></td><td style="text-align:left">超话活动追踪\获取兑换码需要的 Cookie 值，形如 <code>SUB=xxx;SUBP=xxx</code></td></tr><tr><td style="text-align:left">CLOUD_GENSHIN</td><td style="text-align:center"></td><td style="text-align:left">云原神签到得时长需要的 Cookie 值</td></tr><tr><td style="text-align:left">COOKIE_RESIN_TIMER</td><td style="text-align:center"></td><td style="text-align:left">原神原粹树脂检测需要的 Cookie 值</td></tr><tr><td style="text-align:left">SHOPTOKEN</td><td style="text-align:center"></td><td style="text-align:left">原神微信积分商城的 token 值（通过抓包获取）</td></tr></tbody></table></div></div><blockquote><p>Cookie 相关配置项都可以填写多个账号。不同账号的 Cookie 值之间用<code>#</code>分隔，如：<code>cookie1#cookie2#cookie3</code></p></blockquote><h3 id="配置文件">配置文件<a title="#配置文件" href="#配置文件"></a></h3><p>对于云函数就是环境变量，所以无需配置文件。</p><p>例如只配置原神签到福利和 Discord 推送，那么配置文件除了保持完整也可以写成：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;COOKIE_MIHOYOBBS&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;DISCORD_WEBHOOK&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="获取-cookie">获取 Cookie<a title="#获取-cookie" href="#获取-cookie"></a></h3><p>你可以通过书签法执行 JS 代码。</p><p>JS 代码如下：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">javascript</span>: (<span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">  <span class="keyword">let</span> domain = <span class="variable language_">document</span>.<span class="property">domain</span>;</span><br><span class="line">  <span class="keyword">let</span> cookie = <span class="variable language_">document</span>.<span class="property">cookie</span>;</span><br><span class="line">  <span class="title function_">prompt</span>(<span class="string">&quot;Cookies: &quot;</span> + domain, cookie);</span><br><span class="line">&#125;)();</span><br></pre></td></tr></table></figure><p>你可以直接在开发者工具的 Console 面板直接粘贴运行，也可以将下面的链接收藏为书签（电脑拖拽到书签栏，手机需要手动添加）：</p><p><a href="javascript:(function(){let domain=document.domain;let cookie=document.cookie;prompt('Cookies: '+domain, cookie)})();">获取 Cookie</a></p><h2 id="签到相关详解">签到相关详解<a title="#签到相关详解" href="#签到相关详解"></a></h2><h3 id="原神、崩坏-3、米游社签到">原神、崩坏 3、米游社签到<a title="#原神、崩坏-3、米游社签到" href="#原神、崩坏-3、米游社签到"></a></h3><p>对于 <code>COOKIE_MIHOYOBBS</code>、<code>COOKIE_BH3</code>、<code>COOKIE_MIYOUBI</code> 的 Cookie 值抓取，都可以直接前往米游社网站 <a href="https://bbs.mihoyo.com/ys/" target="_blank">https://bbs.mihoyo.com/ys/</a> 或 <a href="https://bbs.mihoyo.com/bh3/%E3%80%82" target="_blank">https://bbs.mihoyo.com/bh3/。</a></p><p>如果是 HoYoLAB，请前往 <a href="https://webstatic-sea.mihoyo.com/ys/event/signin-sea/index.html?act_id=e202102251931481&amp;lang=en-us" target="_blank">https://webstatic-sea.mihoyo.com/ys/event/signin-sea/index.html?act_id=e202102251931481&amp;lang=en-us</a> 页面抓取并填入 <code>COOKIE_HOYOLAB</code>。</p><blockquote><p>上述 Cookie 应包含 <code>account_id</code> 和 <code>cookie_token</code> 两个字段。如果没有，建议使用浏览器的无痕/访客/隐私模式重新登陆访问。</p></blockquote><h3 id="微博超话签到">微博超话签到<a title="#微博超话签到" href="#微博超话签到"></a></h3><p><code>COOKIE_WEIBO</code> 参数需要在 <strong>微博国际版 APP</strong> 内抓包取得。抓包时使用微博的搜索功能就能轻松获得相应请求，但请注意抓包地址为 https。</p><p>地址形如：<code>https://api.weibo.cn/2/xxxxxx?aid=xxx&amp;c=weicoabroad&amp;from=123&amp;gsid=_xxx&amp;i=xxx&amp;lang=zh_CN&amp;s=xxx&amp;ua=iPhone12%2C1_iOS14.0.1_Weibo_intl._4330_cell&amp;v_p=59</code></p><p>在抓包结果请求头（地址 query 参数）里提取出 aid、s、gsid 和 from 参数，组合成形如 <code>&quot;aid=xxx; s=xxx;gsid=xxx;from=xxx&quot;</code>的形式填入。</p><p><code>COOKIE_KA</code> 用来追踪超话活动和自动提取兑换码。事实上会在抓取 <code>COOKIE_WEIBO</code> 的时候会一起被抓取到。注意 Cookie 需要<code>SUB</code>和<code>SUBP</code>两个字段。填写形式同 <code>COOKIE_WEIBO</code>。</p><p>详细抓取教程可参考视频：<a href="https://b23.tv/3cj7vG" target="_blank">微博国际版 iOS 抓包教程</a></p><h2 id="推送相关详解">推送相关详解<a title="#推送相关详解" href="#推送相关详解"></a></h2><p>在配置中，设置 <code>ONEPUSH</code> 变量开启推送。不支持同时使用多个推送。默认配置/格式如下：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;params&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>实际填写时请浓缩至一行，形如 <code>&#123;&quot;notifier&quot;:&quot;&quot;,&quot;params&quot;:&#123;&quot;markdown&quot;:false&#125;&#125;</code>。如果是本地配置，请使用单引号包裹。</p><p><code>ONEPUSH</code> 根配置：</p><ul><li>notifier：推送名字，如 <code>bark</code>、<code>dingtalk</code>、<code>discord</code>、<code>pushplus</code>、<code>qmsg</code>、<code>serverchan</code>、<code>serverchanturbo</code>、<code>telegram</code>、<code>wechatworkapp</code>、<code>wechatworkbot</code>、<code>custom</code> 等。</li><li>params：推送参数，如 <code>markdown</code>、<code>required</code>、<code>secret</code> 等。</li></ul><p>如使用 Discord Bot：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;discord&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;webhook&quot;</span><span class="punctuation">:</span><span class="string">&quot;https://discord.com/api/webhooks/xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><details><summary>详细配置说明</summary><blockquote><p>下列参数如果 required 字段包含 ‘title’ 或 ‘content’，ONEPUSH 变量中都不需要设置。例如 serverchan 不需要设置 ‘title’。<br>此外 custom 方式暂时不支持推送签到结果。</p></blockquote><ul><li>bark</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;bark&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span><span class="attr">&quot;key&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>custom</li></ul><p>该方式比较复杂：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;method&quot;</span><span class="punctuation">:</span> <span class="string">&quot;post&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;retcode_key&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;retcode_value&quot;</span><span class="punctuation">:</span> <span class="number">200</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;data_type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;data&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;merge_title_and_desp&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_sub_title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_desp&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>| 配置项               | 描述                                                                                                                                                                                                    |<br>| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ---------------- |<br>| method               | 必填，请求方式。默认：post                                                                                                                                                                              |<br>| url                  | 必填，完整的自定义推送链接                                                                                                                                                                              |<br>| data                 | 选填，发送的 data。默认为空，可自行添加额外参数                                                                                                                                                         |<br>| retcode_key          | 必填，响应体返回的状态码的 key                                                                                                                                                                          |<br>| retcode_value        | 必填，响应体返回的状态码的 value                                                                                                                                                                        |<br>| data_type            | 选填，发送 data 的方式，可选 params                                                                                                                                                                     | json | data，默认：data |<br>| merge_title_and_desp | 选填，是否将标题（应用名 + 运行状态）和运行结果合并。默认：false                                                                                                                                        |<br>| set_data_title       | 必填，推送方式 data 中消息标题的 key                                                                                                                                                                    |<br>| set_data_sub_title   | 选填，推送方式 data 中消息正文的 key。有的推送方式正文的 key 有次级结构，需配合 set_data_title 构造子级，与 set_data_desp 互斥。例如：企业微信中，set_data_title 填 text，set_data_sub_title 填 content |<br>| set_data_desp        | 选填，推送方式 data 中消息正文的 key。例如：server 酱的为 desp，与 set_data_sub_title 互斥，两者都填则本项不生效                                                                                        |</p><p>例如写一个 ServerChan 的自定义推送。</p><p>查看文档得到 ServerChan 推送所需要的信息：</p><ul><li>需要的 <code>url</code>形式为：<code>https://sc.ftqq.com/&#123;SCKEY&#125;.send</code></li><li>发送的 <code>data</code>形式为：<code>&#123;'text': test','desp':desp&#125;</code></li><li>消息发送成功响应体为：<code>&#123;'errno': 0, 'errmsg': 'OK'&#125;</code></li></ul><p>自定义推送配置如下：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;method&quot;</span><span class="punctuation">:</span> <span class="string">&quot;post&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://sc.ftqq.com/&#123;直接填写你的SCKEY&#125;.send&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;data&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span><span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;retcode_key&quot;</span><span class="punctuation">:</span> <span class="string">&quot;errno&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;retcode_value&quot;</span><span class="punctuation">:</span> <span class="number">0</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;data_type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;data&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;merge_title_and_desp&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;test&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_sub_title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;set_data_desp&quot;</span><span class="punctuation">:</span> <span class="string">&quot;desp&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>dingtalk</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;dingtalk&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;token&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">,</span>secret<span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>discord</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;discord&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;webhook&quot;</span><span class="punctuation">:</span><span class="string">&quot;https://discord.com/api/webhooks/xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>pushplus</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;pushplus&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;token&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>qmsg</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;qmsg&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span><span class="attr">&quot;key&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>serverchan</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;serverchan&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;sckey&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>serverchanturbo</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;serverchanturbo&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;sctkey&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>telegram</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;telegram&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">false</span></span><span class="punctuation">,</span><span class="attr">&quot;token&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">,</span><span class="attr">&quot;userid&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>wechatworkapp</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;wechatworkapp&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;corpid&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">,</span><span class="attr">&quot;corpsecret&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">,</span><span class="attr">&quot;agentid&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>wechatworkbot</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ONEPUSH=<span class="punctuation">&#123;</span><span class="attr">&quot;notifier&quot;</span><span class="punctuation">:</span><span class="string">&quot;wechatworkbot&quot;</span><span class="punctuation">,</span><span class="attr">&quot;params&quot;</span><span class="punctuation">:</span><span class="punctuation">&#123;</span><span class="attr">&quot;markdown&quot;</span><span class="punctuation">:</span><span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span><span class="attr">&quot;key&quot;</span><span class="punctuation">:</span><span class="string">&quot;xxxxxx&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></details>]]></content>
    
    
    <summary type="html">&lt;p&gt;这是一个关于 &lt;a href=&quot;https://github.com/y1ndan/genshinhelper2&quot; target=&quot;_blank&quot;&gt;原神签到小助手&lt;/a&gt; 的指导教程。&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Python" scheme="https://blogv2.cworld.top/tags/Python/"/>
    
    <category term="Mihoyo" scheme="https://blogv2.cworld.top/tags/Mihoyo/"/>
    
    <category term="Serverless" scheme="https://blogv2.cworld.top/tags/Serverless/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 主题之 Inside 拓展篇</title>
    <link href="https://blogv2.cworld.top/post/hexo-inside/"/>
    <id>https://blogv2.cworld.top/post/hexo-inside/</id>
    <published>2022-02-14T23:15:28.000Z</published>
    <updated>2024-04-29T04:43:39.732Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://github.com/ikeq/hexo-theme-inside" target="_blank">Inside</a> 是一款采用 SPA 打造的轻量级和功能丰富的 Hexo 主题。然而整体上作者采用了较为开放的丰富的自定义模式，所以很多功能都需要手动调整。</p><h2 id="hexo-内部调整">Hexo 内部调整<a title="#hexo-内部调整" href="#hexo-内部调整"></a></h2><p>个人建议不要设置时区，因为设置了反而不好用。</p><p>这里给出一些重要的配置项：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">language:</span> <span class="string">zh-Hans</span> <span class="comment"># 主题的配置写法</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">/post/:title/</span> <span class="comment"># 个人在这里相对喜欢这种简单的格式</span></span><br><span class="line"><span class="attr">skip_render:</span> [<span class="string">&quot;css/*&quot;</span>, <span class="string">&quot;js/*&quot;</span>] <span class="comment"># 便于在仓库内置各类文件</span></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repository:</span> <span class="string">git@github.com:&lt;用户名&gt;/&lt;仓库&gt;.git</span> <span class="comment"># 这种写法更不容易报错</span></span><br><span class="line">  <span class="attr">branch:</span> <span class="string">&lt;分支&gt;</span></span><br></pre></td></tr></table></figure><h2 id="inside-主题配置">Inside 主题配置<a title="#inside-主题配置" href="#inside-主题配置"></a></h2><ul><li><p>想要像我那样侧栏用户名有漂亮的字体，配置应该额外调整：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">appearance:</span></span><br><span class="line">  <span class="comment"># ...</span></span><br><span class="line">  <span class="attr">font:</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">//fonts.googleapis.com/css?family=Lobster|Baloo+Bhaijaan|Inconsolata|Josefin+Sans|Montserrat</span></span><br><span class="line">    <span class="attr">base:</span> <span class="string">&quot;Josefin Sans&quot;</span></span><br><span class="line">    <span class="attr">logo:</span> <span class="string">&quot;Lobster&quot;</span> <span class="comment"># 就是这款字体</span></span><br><span class="line">    <span class="attr">menu:</span> <span class="string">&quot;Baloo Bhaijaan&quot;</span></span><br></pre></td></tr></table></figure></li><li><p>想要在社交按钮栏加上自定义的按钮，需要单独引入 svg 图标。比如添加一个酷安的按钮：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">sns:</span></span><br><span class="line">  <span class="comment"># ...</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">title:</span> <span class="string">酷安</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://www.coolapk.com/u/1384771</span></span><br><span class="line">    <span class="attr">template:</span> <span class="string">|</span></span><br><span class="line">      <span class="string">&lt;svg</span> <span class="string">t=&quot;1644654153078&quot;</span> <span class="string">class=&quot;icon&quot;</span> <span class="string">viewBox=&quot;0</span> <span class="number">0</span> <span class="number">1922 </span><span class="number">1024</span><span class="string">&quot; version=&quot;</span><span class="number">1.1</span><span class="string">&quot; xmlns=&quot;</span><span class="string">http://www.w3.org/2000/svg&quot;</span> <span class="string">p-id=&quot;1687&quot;</span> <span class="string">data-darkreader-inline-fill=&quot;&quot;</span> <span class="string">width=&quot;18&quot;</span> <span class="string">height=&quot;18&quot;&gt;&lt;path</span> <span class="string">d=&quot;M513.810604</span> <span class="string">0c308.858273</span> <span class="number">0</span> <span class="number">602.991192</span> <span class="number">297.820939</span> <span class="number">602.991192</span> <span class="number">297.</span><span class="string">820939l-132.287657</span> <span class="number">102.</span><span class="string">890399S723.386322</span> <span class="number">178.321089</span> <span class="number">513.810604</span> <span class="number">178.</span><span class="string">321089c-143.391802</span> <span class="number">0</span><span class="number">-329.062206</span> <span class="number">104.787859</span><span class="number">-329.062206</span> <span class="number">323.556901</span> <span class="number">0</span> <span class="number">213.250375</span> <span class="number">136.029126</span> <span class="number">334.594235</span> <span class="number">330.906216</span> <span class="number">334.</span><span class="string">594235C1023.05127</span> <span class="number">836.485587</span> <span class="number">1203.216369 </span><span class="number">0</span> <span class="number">1363.15081 </span><span class="string">0c104.787859</span> <span class="number">0</span> <span class="number">175.047303</span> <span class="number">244.772252</span> <span class="number">297.820938</span> <span class="number">450.406065</span> <span class="number">147.06646</span> <span class="number">246.349014</span> <span class="number">261.475239</span> <span class="number">472.814793</span> <span class="number">261.47524</span> <span class="number">481.660695</span> <span class="number">0</span> <span class="number">49.641277</span><span class="number">-46.380854</span> <span class="number">91.919878</span><span class="number">-79.479494</span> <span class="number">91.</span><span class="string">919878S1206.891026</span> <span class="number">577.255229</span> <span class="number">1206.891026 </span><span class="number">577.</span><span class="string">255229l148.910469-108.462516</span> <span class="number">189.345061</span> <span class="number">128.</span><span class="string">679812L1359.476153</span> <span class="number">259.</span><span class="string">230358c-57.912596</span> <span class="number">57.899234</span><span class="number">-336.424882</span> <span class="number">764.769642</span><span class="number">-834.628215</span> <span class="number">764.</span><span class="string">769642C329.970848</span> <span class="number">1023.986638 </span><span class="number">0</span> <span class="number">880.581473</span> <span class="number">0</span> <span class="number">500.047343</span> <span class="number">0</span> <span class="number">284.952958</span> <span class="number">162.687093</span> <span class="number">0</span> <span class="number">513.810604</span> <span class="string">0z&quot;</span> <span class="string">p-id=&quot;1688&quot;&gt;&lt;/path&gt;&lt;/svg&gt;</span></span><br></pre></td></tr></table></figure></li><li><p>在侧栏配置上，名称前面加上 Emoji 看起来会更加美观：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line"><span class="string">🏠</span> <span class="attr">Home:</span> <span class="string">/</span></span><br><span class="line"><span class="string">🔍</span> <span class="attr">Search:</span> <span class="string">/search</span></span><br><span class="line"><span class="string">🔗</span> <span class="attr">Link:</span> <span class="string">/link</span></span><br><span class="line"><span class="string">🧑‍💻</span> <span class="attr">About:</span> <span class="string">/about</span></span><br></pre></td></tr></table></figure></li></ul><h2 id="自动-ci-部署">自动 CI 部署<a title="#自动-ci-部署" href="#自动-ci-部署"></a></h2><p>这里采用 Star 数较高的一个自动 <a href="https://github.com/sma11black/hexo-action" target="_blank">Github Action</a> ，提到了整个流程。如果不太懂，也可以参考别人的一些教程。这里提几个点：</p><ul><li>运行命令 <code>$ ssh-keygen -t rsa -C &quot;username@example.com&quot;</code> 时会提示一些选项，建议全部按回车默认选项。这会在你的用户名文件夹根目录下生成一个 <code>.ssh</code> 文件夹，得到两个文件，其中带.pub 后缀的为公钥，另一个为私钥。两者可以填在同一个仓库不同分支，也可以填在不同的仓库。</li><li>Github Actions 的配置文件应该在项目根目录下的 <code>.github</code> &gt; <code>workflows</code> ，默认名称为 <code>main.yml</code> ，当然你也可以随意命名。将整个项目一起上传上去，Github Actions 会自动执行并生成渲染文件。</li><li>自定义域名应该在项目的 <code>source</code> 目录中放一个 CNAME 文件。</li></ul><h2 id="评论系统">评论系统<a title="#评论系统" href="#评论系统"></a></h2><h3 id="waline-+-leancloud-+-vercel">Waline + Leancloud + Vercel<a title="#waline-+-leancloud-+-vercel" href="#waline-+-leancloud-+-vercel"></a></h3><p>Waline 基于 Valine，是一个干净纯粹但功能丰富的评论系统框架。它支持 Markdown 语法，支持自定义表情、部分文字、配色、精选，以及后台管理、邮件自动发送等功能。</p><h3 id="文档">文档<a title="#文档" href="#文档"></a></h3><p><a href="https://waline.js.org/" target="_blank">Waline 官网</a></p><p><a href="https://github.com/walinejs/waline" target="_blank">Waline on Github</a></p><h3 id="配置上手">配置上手<a title="#配置上手" href="#配置上手"></a></h3><p>除官网给出部分，博客这边配置也非常重要。由于 Inside 主题是直接通过变量达成夜间模式的切换的，所以就宣告着 Waline 自身夜间模式的报废。当然这并不影响夜间模式的效果。下面是我的配置。</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">position:</span> <span class="string">comments</span></span><br><span class="line">  <span class="attr">template:</span> <span class="string">|</span></span><br><span class="line"><span class="string">    &lt;div id=&quot;waline&quot;&gt;评论正在努力加载中...&lt;/div&gt;</span></span><br><span class="line"><span class="string">    &lt;script&gt;</span></span><br><span class="line"><span class="string">      Waline.init(&#123;</span></span><br><span class="line"><span class="string">        el: &#x27;#waline&#x27;,</span></span><br><span class="line"><span class="string">        serverURL: &#x27;&lt;你的Vercel的url&gt;&#x27;,</span></span><br><span class="line"><span class="string">        locale: &#123;placeholder:&#x27;欢迎评论~&#x27;&#125;,</span></span><br><span class="line"><span class="string">        comment: true,</span></span><br><span class="line"><span class="string">        pageview: true,</span></span><br><span class="line"><span class="string">        emoji: [</span></span><br><span class="line"><span class="string">          &#x27;https://blog.cworld.top/src/img/bilibili&#x27;,</span></span><br><span class="line"><span class="string">          &#x27;https://blog.cworld.top/src/img/weibo&#x27;,</span></span><br><span class="line"><span class="string">        ],</span></span><br><span class="line"><span class="string">      &#125;);</span></span><br><span class="line"><span class="string">    &lt;/script&gt;</span></span><br><span class="line"><span class="string">    &lt;link href=&quot;/css/comment.min.css&quot; rel=&quot;stylesheet&quot;&gt;</span></span><br></pre></td></tr></table></figure><p>其中页面/文章访问数的功能完全仅用于统计数据，暂时不打算做效果呈现。Leancloud 可以轻松查询到。Emoji 则采用了较为经典的微博和 B 站表情。</p><p>评论样式内容较多而且为了方便维护，故单独引用文件。</p><p>文件这里贴一份仅供参考：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-pseudo">:root</span> &#123;</span><br><span class="line">  <span class="attr">--waline-dark-grey</span>: <span class="built_in">var</span>(--inside-foreground-color);</span><br><span class="line">  <span class="attr">--waline-theme-color</span>: <span class="built_in">var</span>(--inside-accent-color);</span><br><span class="line">  <span class="attr">--waline-active-color</span>: <span class="built_in">var</span>(--inside-accent-color);</span><br><span class="line">  <span class="attr">--waline-color</span>: <span class="built_in">var</span>(--inside-foreground-color);</span><br><span class="line">  <span class="attr">--waline-bgcolor</span>: <span class="built_in">var</span>(--inside-background);</span><br><span class="line">  <span class="attr">--waline-bgcolor-light</span>: <span class="built_in">var</span>(--inside-card-background);</span><br><span class="line">  <span class="attr">--waline-bgcolor-hover</span>: <span class="built_in">var</span>(--inside-card-background);</span><br><span class="line">  <span class="attr">--waline-border-color</span>: <span class="built_in">var</span>(--inside-border-color);</span><br><span class="line">  <span class="attr">--waline-disable-bgcolor</span>: <span class="built_in">var</span>(--inside-card-background);</span><br><span class="line">  <span class="attr">--waline-disable-color</span>: <span class="built_in">var</span>(--inside-foreground-color);</span><br><span class="line">  <span class="attr">--waline-code-bgcolor</span>: <span class="built_in">var</span>(--inside-highlight-<span class="number">00</span>);</span><br><span class="line">  <span class="attr">--waline-mobile-avatar-size</span>: <span class="built_in">calc</span>(<span class="built_in">var</span>(--waline-avatar-size) * <span class="number">11</span> / <span class="number">13</span>);</span><br><span class="line">  <span class="attr">--waline-badge-color</span>: <span class="built_in">var</span>(--inside-accent-color);</span><br><span class="line">  <span class="attr">--waline-info-bgcolor</span>: <span class="built_in">var</span>(--inside-background);</span><br><span class="line">  <span class="attr">--waline-avatar-radius</span>: <span class="number">50%</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#waline</span> <span class="selector-class">.wl-editor</span> &#123;</span><br><span class="line">  <span class="attribute">width</span>: <span class="built_in">calc</span>(<span class="number">100%</span> - <span class="number">2em</span>) <span class="meta">!important</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-id">#waline</span> pre &#123;</span><br><span class="line">  <span class="attribute">border-color</span>: <span class="built_in">var</span>(--inside-highlight-<span class="number">01</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="自定义小插件">自定义小插件<a title="#自定义小插件" href="#自定义小插件"></a></h2><h3 id="站点访问统计">站点访问统计<a title="#站点访问统计" href="#站点访问统计"></a></h3><p>Inside 提供了两个自定义片段位置。由于我的 <code>custom</code> 还有别的东西要放，这里就只写在 <code>copyright</code> 里。在主题配置文件修改：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">footer:</span></span><br><span class="line">  <span class="comment"># Set to false to hide.</span></span><br><span class="line">  <span class="attr">copyright:</span> <span class="string">|</span></span><br><span class="line"><span class="string">    &lt;script async src=&quot;https://busuanzi.icodeq.com/busuanzi.pure.mini.js&quot;&gt;&lt;/script&gt;</span></span><br><span class="line"><span class="string">    &amp;copy;2022 • &lt;a href=&quot;&quot;&gt;CWorld&lt;/a&gt; • 总访问 &lt;span id=&quot;busuanzi_value_site_pv&quot;&gt;&lt;/span&gt; 次</span></span><br></pre></td></tr></table></figure><h3 id="代码块快捷复制到剪贴板">代码块快捷复制到剪贴板<a title="#代码块快捷复制到剪贴板" href="#代码块快捷复制到剪贴板"></a></h3><p>先从 <a href="https://github.com/zenorocha/clipboard.js/blob/master/dist/clipboard.min.js" target="_blank">Github</a> 下载文件并放置好目录</p><p>然后在主题配置文件修改：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">plugins:</span></span><br><span class="line">  <span class="comment"># ...</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">js/clipboard.min.js</span> <span class="comment"># 全局引入剪贴板JS文件</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">position:</span> [<span class="string">post</span>, <span class="string">page</span>] <span class="comment"># 剪贴板</span></span><br><span class="line">    <span class="attr">template:</span> <span class="string">|</span></span><br><span class="line"><span class="string">      &lt;script&gt;</span></span><br><span class="line"><span class="string">        var elements = document.querySelectorAll(&quot;.highlight tr&gt;.code&quot;);</span></span><br><span class="line"><span class="string">        for (var i = 0; i &lt; elements.length; i++) &#123; elements[i].innerHTML = &#x27;&lt;button class=&quot;btn-copy&quot; data-clipboard-snippet=&quot;&quot;&gt;&lt;svg t=&quot;1644686763820&quot; class=&quot;icon&quot; viewBox=&quot;0 0 1024 1024&quot; version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; p-id=&quot;2062&quot; data-darkreader-inline-fill=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;&lt;path d=&quot;M798.4 128h-72v-12.8c0-38.4-33.6-72-72-72h-97.6C555.2 17.6 537.6 0 512 0c-25.6 0-43.2 17.6-43.2 43.2h-97.6c-38.4 0-72 33.6-72 72V128h-72c-30.4 0-56 25.6-56 56v780.8c0 33.6 25.6 59.2 59.2 59.2h568c17.6 0 33.6-8 43.2-20.8 8-12.8 12.8-25.6 12.8-38.4V184C852.8 153.6 827.2 128 798.4 128zM384 128h256v84.8H384V128z m384 811.2H256V212.8h43.2v12.8c0 38.4 33.6 72 72 72h281.6c38.4 0 72-33.6 72-72v-12.8H768v726.4z&quot; p-id=&quot;2063&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&#x27; + elements[i].innerHTML &#125;;</span></span><br><span class="line"><span class="string">        new ClipboardJS(&#x27;.btn-copy&#x27;, &#123; target: (trigger) =&gt; trigger.nextElementSibling &#125;);</span></span><br><span class="line"><span class="string">      &lt;/script&gt;</span></span><br><span class="line"><span class="string">      &lt;style&gt;</span></span><br><span class="line"><span class="string">        .btn-copy&#123;position:absolute;right:5px;top:5px;border:none;padding:3px 6px;border-radius:3px;background:var(--inside-background);fill:currentColor;opacity:0;transition:.3s&#125;.highlight:hover .btn-copy&#123;opacity:1&#125;</span></span><br><span class="line"><span class="string">      &lt;/style&gt;</span></span><br></pre></td></tr></table></figure><p>其实大部分自定义代码都是在用 SVG 写图标，所以不用担心代码量很大~</p><h2 id="友链优化">友链优化<a title="#友链优化" href="#友链优化"></a></h2><p>这个主题最大的短板就是没有单独的友链支持。所以这里单独对友链介绍一下我的解决方案。</p><p>在友链页面按照如下格式写：</p><ul><li><p>提前引用 css 样式避免排版错乱</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">link</span> <span class="attr">href</span>=<span class="string">&quot;/css/link.min.css&quot;</span> <span class="attr">rel</span>=<span class="string">&quot;stylesheet&quot;</span>&gt;</span></span></span><br></pre></td></tr></table></figure><p>其 CSS 文件也贴出来仅供参考：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &#123;</span><br><span class="line">  <span class="attribute">display</span>: flex;</span><br><span class="line">  <span class="attribute">flex-wrap</span>: wrap;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &#123;</span><br><span class="line">  <span class="attribute">transition</span>: <span class="number">0.3s</span> ease;</span><br><span class="line">  <span class="attribute">list-style</span>: none;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &#123;</span><br><span class="line">  <span class="attribute">display</span>: flex;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">10px</span> <span class="number">10px</span> <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">text-decoration</span>: none;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">10px</span>;</span><br><span class="line">  <span class="attribute">background-color</span>: <span class="built_in">var</span>(--inside-background);</span><br><span class="line">  <span class="attribute">color</span>: <span class="built_in">var</span>(--inside-accent-color);</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">6px</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">  <span class="attribute">color</span>: <span class="number">#fff</span>;</span><br><span class="line">  <span class="attribute">background-color</span>: <span class="built_in">var</span>(--inside-accent-color);</span><br><span class="line">  <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">2px</span> <span class="number">4px</span> <span class="number">1px</span> <span class="built_in">rgb</span>(<span class="number">0</span> <span class="number">0</span> <span class="number">0</span> / <span class="number">20%</span>);</span><br><span class="line">  <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">1.03</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span><span class="selector-pseudo">:active</span> &#123;</span><br><span class="line">  <span class="attribute">transform</span>: <span class="built_in">scale</span>(<span class="number">0.97</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">p</span> &#123;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> <span class="selector-tag">img</span> &#123;</span><br><span class="line">  <span class="attribute">border</span>: solid <span class="number">1px</span> <span class="built_in">var</span>(--inside-border-color);</span><br><span class="line">  <span class="attribute">border-radius</span>: <span class="number">25px</span>;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">50px</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">50px</span>;</span><br><span class="line">  <span class="attribute">margin</span>: <span class="number">0</span> <span class="meta">!important</span>;</span><br><span class="line">  <span class="attribute">max-width</span>: fit-content;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &#123;</span><br><span class="line">  <span class="attribute">position</span>: relative;</span><br><span class="line">  <span class="attribute">margin-left</span>: <span class="number">10px</span>;</span><br><span class="line">  <span class="attribute">padding</span>: <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &#123;</span><br><span class="line">  <span class="attribute">list-style</span>: none;</span><br><span class="line">  <span class="attribute">text-align</span>: center;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span><span class="selector-pseudo">:nth-child</span>(<span class="number">1</span>) &#123;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">14px</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">  <span class="attribute">font-size</span>: <span class="number">12px</span>;</span><br><span class="line">  <span class="attribute">margin-top</span>: <span class="number">5px</span>;</span><br><span class="line">  <span class="attribute">max-width</span>: <span class="number">108px</span>;</span><br><span class="line">  <span class="attribute">overflow</span>: hidden;</span><br><span class="line">  <span class="attribute">text-overflow</span>: ellipsis;</span><br><span class="line">  <span class="attribute">white-space</span>: nowrap;</span><br><span class="line">  <span class="attribute">opacity</span>: <span class="number">0.8</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span><span class="selector-pseudo">:nth-child</span>(<span class="number">3</span>) <span class="selector-tag">a</span> &#123;</span><br><span class="line">  <span class="attribute">position</span>: absolute;</span><br><span class="line">  <span class="attribute">right</span>: <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">top</span>: <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">height</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">  <span class="attribute">border</span>: <span class="number">0</span>;</span><br><span class="line">  <span class="attribute">color</span>: transparent;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">@media</span> (<span class="attribute">max-width</span>: <span class="number">450px</span>) &#123;</span><br><span class="line">  <span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &#123;</span><br><span class="line">    <span class="attribute">margin-left</span>: <span class="number">0</span>;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="selector-class">.f</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &gt; <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span> &#123;</span><br><span class="line">    <span class="attribute">text-align</span>: start;</span><br><span class="line">    <span class="attribute">max-width</span>: <span class="number">100%</span> <span class="meta">!important</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>随后用一个 div 标签将需要优化展示的友链包裹起来即可。这样通过 Markdown 语法写出来的友链，真的是不知道要比手动写 html 标签要高到哪里去了。</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;f&quot;</span>&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> ![](<span class="link">https://gravatar.loli.net/avatar/1ffe42aa45a6b1444a786b1f32dfa8aa?s=400</span>)</span><br><span class="line"><span class="bullet">  -</span> CWorld&#x27;s Blog</span><br><span class="line"><span class="bullet">  -</span> 求知若愚，虚怀若谷</span><br><span class="line"><span class="bullet">  -</span> [](<span class="link">https://blog.cworld.top</span>)</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li></ul><h2 id="结尾">结尾<a title="#结尾" href="#结尾"></a></h2><p>静态博客能够折腾到这个地步真的已经做的很不错了。希望大家都能把博客折腾成各自喜欢的样子，然后长期坚持把内容写下去，否则，折腾一大圈，也不过是一时热情，只会拖累自己的产物罢了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/ikeq/hexo-theme-inside&quot; target=&quot;_blank&quot;&gt;Inside&lt;/a&gt; 是一款采用 SPA 打造的轻量级和功能丰富的 Hexo 主题。然而整体上作者采用了较为开放的丰富的自定义模式，所以很</summary>
      
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Hexo" scheme="https://blogv2.cworld.top/tags/Hexo/"/>
    
    <category term="Inside" scheme="https://blogv2.cworld.top/tags/Inside/"/>
    
  </entry>
  
  <entry>
    <title>Chrome 小恐龙无敌化</title>
    <link href="https://blogv2.cworld.top/post/chrome-dinosaur/"/>
    <id>https://blogv2.cworld.top/post/chrome-dinosaur/</id>
    <published>2021-02-18T15:55:58.000Z</published>
    <updated>2024-04-29T04:43:39.680Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言">前言<a title="#前言" href="#前言"></a></h2><p>众所周知，谷歌的 Chrome 含有一枚彩蛋，是一个<s>画风清奇</s>的小恐龙游戏，可以通过断网和直接访问一下网址触发：</p><p><a href="chrome://dino/" target="_blank">Chrome://dino</a></p><p>但是对于这种逐渐加速的小游戏来说，玩到后面就特别容易内心崩溃，于是便有了此文。</p><h2 id="食用方法">食用方法<a title="#食用方法" href="#食用方法"></a></h2><p>来到熟悉的网页，按下罪恶的 F12：</p><p><img src="post/chrome-dinosaur/qyww7vej30vt0l7q40.jpg" alt="image" loading="lazy" class="φbp"></p><p>看到控制台的 Console 了吗？点开就对了。</p><p>三行代码，总有你喜欢的：</p><ul><li><p>让小恐龙无敌：</p><p><code>Runner.instance_.gameOver=function()&#123;&#125;</code></p></li><li><p>让小恐龙跑得更快（默认是 10，但是你可以手动修改<em>使它更快</em>）：</p><p><code>Runner.instance_.setSpeed(20)</code></p></li><li><p>让小恐龙跳得更高（默认是 10，但是你可以手动修改<em>使它更富有弹性</em>）：</p><p><code>Runner.instance_.tRex.setJumpVelocity(20)</code></p></li></ul><p>就像这样子：</p><p><img src="post/chrome-dinosaur/ra5xeekj30w90lkjsy.jpg" alt="image" loading="lazy" class="φbp"></p><p>问我最高多少分？我觉得应该是 999999 分。</p><p><img src="post/chrome-dinosaur/rd4cvuej30vg0l43zl.jpg" alt="本C的随手分数" loading="lazy" class="φbp"></p><h2 id="后话">后话<a title="#后话" href="#后话"></a></h2><p>我觉得，当你无敌后，一种莫名的无聊感觉涌上心头…</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;前言&lt;a title=&quot;#前言&quot; href=&quot;#前言&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;众所周知，谷歌的 Chrome 含有一枚彩蛋，是一个&lt;s&gt;画风清奇&lt;/s&gt;的小恐龙游戏，可以通过断网和直接访问一下网址触发：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;chrome:/</summary>
      
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Chrome" scheme="https://blogv2.cworld.top/tags/Chrome/"/>
    
    <category term="JavaScript" scheme="https://blogv2.cworld.top/tags/JavaScript/"/>
    
  </entry>
  
  <entry>
    <title>高考随笔 —— 我想</title>
    <link href="https://blogv2.cworld.top/post/gaokao-essay/"/>
    <id>https://blogv2.cworld.top/post/gaokao-essay/</id>
    <published>2020-09-26T20:40:51.000Z</published>
    <updated>2024-04-29T04:43:39.728Z</updated>
    
    <content type="html"><![CDATA[<p>博主已经踏入高三的坎了，所以给自己写诗歌随笔来激励自己。</p><span id="more"></span><p>没有什么原因，<br>只是突然地，我想。<br>那时候的我，极像是茅塞顿开一般。</p><p>我想找回一些关于梦开始的东西。<br>就像深海孤岛般温柔的鲸落，远离世俗、喧嚣，还有残存着原始的粗旷。<br>我想去看看物种最后的倔强，它慵懒的眼神，清晰地透着孤独又悲伤。<br>真想。</p><p>我想坐一列并不时髦的旧式火车，那锈迹斑斑的墨绿色铁皮外，一路的绿树高桥。<br>顺带一夜的樱花流水、、不，那时只剩下江枫烈火。<br>我想去看旧时的江户风尚、银座、新宿的纸醉金迷的涤荡。<br>总会有人提及至尊黑道的故事，在细雨弥香的酒吧，昏暗的灯光幽幽地闪烁着香槟一样的金黄。<br>我想去参拜满是沉香的神社，亲自穿过砖红色的鸟居，然后抿一口茶的芳香。<br>我想去坐观关于古代神话的歌舞伎，扮演伊邪那美命的男子婉转的舞步和凄厉的歌唱在脑海里回荡，<br>在尚未荒废的古老剧院，残存着像是古老图腾的浮雕，诸神黄昏的图画伸展在高耸的穹顶上。<br>我想去大名鼎鼎的秋叶原，在翠色如云的风采里，会不会有披挂十二单的女子，踏着木屐从街角缓缓走过，心底会不会藏着曾经深爱、始终放不下的牛郎。<br>我想去伫足侧望老人家风旋的古老剑术，去千叶县拜访故交的老友，铁青色的玄关也许插满白色不知名的小花。他会同我缓缓叙旧，领我细品一顿来自北海道新鲜的晚餐，一壶凛冽的清酒，祛除了我一身的寒霜。</p><p>我想… …<br>不，这并不立足于当下。<br>从梦中醒来的我惊恐地四下张望。<br>我想回头，但时间的齿轮已在飞旋中磨得锃亮。<br>而我只能鼓起勇气，怀揣梦想，打破天窗，<br>用尽我的全身力气。<br>也许，命运之门已悄然打开… …</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;博主已经踏入高三的坎了，所以给自己写诗歌随笔来激励自己。&lt;/p&gt;</summary>
    
    
    
    <category term="Essay" scheme="https://blogv2.cworld.top/categories/Essay/"/>
    
    
  </entry>
  
  <entry>
    <title>酷安 318 事件</title>
    <link href="https://blogv2.cworld.top/post/coolapk-318/"/>
    <id>https://blogv2.cworld.top/post/coolapk-318/</id>
    <published>2020-03-22T21:02:06.000Z</published>
    <updated>2024-04-29T04:43:39.680Z</updated>
    
    <content type="html"><![CDATA[<p>我们暂且用『载入酷安史册』来形容这 7 天的历史。</p><p>（该文章于 2020-03-22 匆成，于 2020-04-04 发布）</p><p>迟到一年的文章，本来不准备发出来的，如今发出来，也就算是最后的纪念吧。</p><span id="more"></span><h2 id="起因">起因<a title="#起因" href="#起因"></a></h2><p>事情开始于 3.16 。（<a href="https://www.coolapk.com/feed/17355115?shareKey=YzFmNTQ1NjE5OTQ5NWU3MjMyNzI~&amp;shareUid=1384771&amp;shareFrom=com.coolapk.market_10.0.3" target="_blank">原文章已被删除</a>）</p><p>原文实在找不到了，大概内容可以看下这位用户的回答。</p><p><a href="https://www.zhihu.com/question/380038074/answer/1086523661" target="_blank">半生瓜 BalsamPear 的知乎回答</a></p><p>@匿名游客(酷安官方人员) 的说法：<a href="https://www.zhihu.com/question/380038074/answer/1086114857?utm_source=com.coolapk.market&amp;utm_medium=social&amp;utm_oi=968087657482534912" target="_blank">匿名游客的知乎回答</a></p><p>然而，更为过分的是，仅过了 2 天，又有人持续触犯了警戒线。<br>在这样严峻的情况下，酷安小编最终发出了这样的动态： <a href="https://www.coolapk.com/feed/17378785?shareKey=NWY4OWZkYzgzNWE0NWU3MjNjY2M~&amp;shareUid=1384771&amp;shareFrom=com.coolapk.market_10.0.3" target="_blank">酷安小编的酷安动态</a></p><p>“ 我们鼓励大家多交流，多发优质内容，但我们的红线是涉政涉黄涉恐，特别是很多人喜欢玩一些很危险的梗，还是我们太温柔，我发自内心的一直觉得酷友就像一家人，所以我们很珍惜每一位酷友，但这种宽容有好处也有坏处，还是请各位酷友多多珍惜这种氛围，珍惜自己的账号和设备，因为从此以后我们会非常严格，谢谢支持。”</p><p>黄福林随即表明：这次就是要执行禁止发布任何形式的涉政涉黄涉恐涉暴内容的规则，指明与 3.16 事件无关 （<a href="https://www.coolapk.com/feed/17390077?shareKey=ZmUwNWVhZDM2ZWQxNWU3MjQ2MTg~&amp;shareUid=1384771&amp;shareFrom=com.coolapk.market_10.0.3" target="_blank">黄福林的酷安动态</a>） ，但不难想到，这次事情的前提是上述事件同时发生。<br>匿名游客后来给出了一个更为明确的说法：起因是涉黄的用户被处理，用一张小管家提示图去诱骗那个小圈子的人，说非数码举报必成功，让他们去测试，然后他们就信了。</p><p>于是，酷安也就开始了为期 7 天的整改。</p><h2 id="思考">思考<a title="#思考" href="#思考"></a></h2><p>是的，我们将一同度过这个意义深刻的酷安时刻。<br>但不必过于悲观，官方所有人员也将与我们一同为这样的 7 天恼火和难过，在当前很多人都在家刷流量的时候，酷安却因此蒙受巨大损失。不必怨天尤人，这样的结果也毕竟是酷友们一手造成的。也不必过于追究酷友的责任，毕竟每个人都有自己的想法，酷安也因众多酷友而有了今天。<br>酷安也确实有能耐和必要去这样做了。知乎有很多酷友，在为大家耐心解答，3.16 这件事情也在知乎排名最高 22 名。</p><p>在这大数据的背后，我们应该更加深刻地反思自己，不管自己是否参与。我们更应该和谐地与大家相处，珍惜自己摆弄了数天的账号，为酷安这个社区增添一份力。能有这样，酷安也就会真正达到自我净化的目的。我们希望，7 天后的酷安应是一片友善和谐的景象。</p><p>在这 7 天里：我们仍然可以发布和翻阅动态，给自己的看看号收录合适的图文，或是积极参与问答。<br>我们仍可以在像是知乎等平台，重新给酷安一个全新的认识。是的，无论这 7 天，你到了其他平台，去了其他社区，还请记得及时回头，酷安在这 7 天一直等着你，酷安与你同在。</p><h2 id="后话">后话<a title="#后话" href="#后话"></a></h2><p>我们忘不了在酷安所做的点点滴滴，在酷安结识的新朋友，发现更大的天地，甚至改变自己的生活。我们应该感谢酷安官方们这么多年来，给我们的默默付出。</p><p>我甘愿相信，7 天归来，仍是酷安。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;我们暂且用『载入酷安史册』来形容这 7 天的历史。&lt;/p&gt;
&lt;p&gt;（该文章于 2020-03-22 匆成，于 2020-04-04 发布）&lt;/p&gt;
&lt;p&gt;迟到一年的文章，本来不准备发出来的，如今发出来，也就算是最后的纪念吧。&lt;/p&gt;</summary>
    
    
    
    <category term="Essay" scheme="https://blogv2.cworld.top/categories/Essay/"/>
    
    
    <category term="Coolapk" scheme="https://blogv2.cworld.top/tags/Coolapk/"/>
    
  </entry>
  
  <entry>
    <title>钉钉一键点赞（最高 21 亿）</title>
    <link href="https://blogv2.cworld.top/post/dingtalk-like/"/>
    <id>https://blogv2.cworld.top/post/dingtalk-like/</id>
    <published>2020-03-03T23:21:47.000Z</published>
    <updated>2024-04-29T04:43:39.688Z</updated>
    
    <content type="html"><![CDATA[<p>想必感兴趣的已经试过了连点器的畅快吧。在玩转这之前，这确实不失为一种强有力的手段。<span id="more"></span>然而如果这样的话，最多也就不过十万。这怎么能让博主折服呢，所以就从钉钉直播下手。在这之前，先对这个套壳钉钉有一个更深入的了解。</p><h2 id="思路分析">思路分析<a title="#思路分析" href="#思路分析"></a></h2><h3 id="运行逻辑">运行逻辑<a title="#运行逻辑" href="#运行逻辑"></a></h3><p>先研究一下点赞的运行逻辑：</p><p><img src="post/dingtalk-like/hrtsmcgmj30wu08wwja.jpg" alt="点赞逻辑" loading="lazy" class="φbp"></p><p>由于钉钉的客户端中的网络通讯加密，点赞数上传也不例外，所以我们从直播间网页上下功夫。</p><p>直播间所用网页：<a href="https://h5.m.taobao.com/tblive/dingtalk/pc-live-v3.html" target="_blank">钉钉直播间</a></p><blockquote><p>注意：钉钉加载直播间的弹出窗口实际上是一个浏览器，其网络通讯可以被 Fiddler 获取到，亦可以通过其 Autoresponder 功能替换为本地文件，这就是我们的突破口。</p></blockquote><h3 id="目标流程">目标流程<a title="#目标流程" href="#目标流程"></a></h3><p><img src="post/dingtalk-like/hsdqms0bj30w008o42u.jpg" alt="目标" loading="lazy" class="φbp"></p><p>其中不对 favorCount 进行自增是为了确保赞数确实上传到服务器并进行了累加，这样会导致点击之后到数值显示有一定的延迟，一般在几秒钟。此时我们看到点击一次点赞按钮到一定时间后（源文件中是 1000ms ）将会触发上传操作。</p><h2 id="具体实现">具体实现<a title="#具体实现" href="#具体实现"></a></h2><h3 id="理论实践">理论实践<a title="#理论实践" href="#理论实践"></a></h3><p>首先根据原理准备网页文件，下载直播间代码。</p><p>打开上述网址，<code>Ctrl + S</code> 保存。注意我们只需要 html 文件。</p><p><img src="post/dingtalk-like/htjjkwiaj30p50973zi.jpg" alt="image" loading="lazy" class="φbp"></p><p>搜索 uploadLikesClick 字段，将看到一个函数。</p><p><img src="post/dingtalk-like/htqqvj2uj30gg03jgm6.jpg" alt="image" loading="lazy" class="φbp"></p><p>注意两个画框的地方，它们就是要修改的核心。</p><p>这样一来就可以直接修改了。将第一个框中的内容改为：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">uploadLikesClick</span>(B, <span class="number">10000000</span>);</span><br></pre></td></tr></table></figure><p>第二个框中的 1e4 即为上传间隔，赋值为 0 即为清零操作。</p><p>故我们可以做到如下图一般的骚操作：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title function_">uploadLikesClick</span>(B,<span class="title class_">Math</span>.<span class="title function_">ceil</span>(<span class="number">10000000</span>*<span class="title class_">Math</span>.<span class="title function_">random</span>()+<span class="number">1</span>)),t.<span class="property">favorCountCache</span>=<span class="number">1</span>)&#125;,<span class="number">1e2</span>)</span><br></pre></td></tr></table></figure><p>至此理论部分结束。如有技术可以自己实现了。经过实验钉钉存赞数的变量为 32 位有符号 int 其最大值约为 21 亿左右，超出后变成负值，直播间会显示为 0 。如果还有人点赞，赞数会增加但是 -21 亿没什么人会点的过来的…除了这样改。</p><blockquote><p>Ps. 10000000 好像是最大值了。</p></blockquote><h3 id="fiddler-修改">Fiddler 修改<a title="#fiddler-修改" href="#fiddler-修改"></a></h3><ol><li>首先你需要下载并修改好直播间网页并将其保存在本地。</li><li>安装 <a href="https://www.telerik.com/download/fiddler" target="_blank">Fiddler</a> 。</li><li>打开 Fiddler 的 HTTPS 模式，位于 Tools - Options - HTTPS 。<br><img src="post/dingtalk-like/iaaqmxk8j30f20a8mxk.jpg" alt="image" loading="lazy"></li><li>配置 Autoresponder ，即在测试环境中将在线网页强制替换为本地网页。<br><img src="post/dingtalk-like/iaf10k3gj30fz08474s.jpg" alt="image" loading="lazy"></li><li>打开清理钉钉的网页缓存，位于%LOCALAPPDATA%\DIngtalk\Cache，删除全部 f 开头的文件。<blockquote><p><code>%LOCALAPPDATA%</code> 为 <code>C:\Users\你的电脑用户名\AppData\Local</code><br>Ps. 此步骤需在每次 <strong>更改网页文件后和重新打开直播间之前</strong> 完成，否则会导致替换失败。</p></blockquote></li><li>打开钉钉直播间，如果遇到错误没关系，多打开几次，当播放正常之后，点赞吧。</li></ol><h3 id="效果展示">效果展示<a title="#效果展示" href="#效果展示"></a></h3><p><img src="post/dingtalk-like/ib1q0zv7j31ww0zcgxc.jpg" alt="image" loading="lazy" class="φbp"></p><h3 id="注意事项">注意事项<a title="#注意事项" href="#注意事项"></a></h3><p>为了避免视频界面缓存问题，我们将大部分缓存都清除了，这会使直播界面甚至其他界面需要重载缓存，因此清理后很多界面需要二次打开才能加载。</p><p>同时需要注意的是，点赞仅供娱乐。请勿过分贪玩，适度为止。</p><h2 id="主播禁用点赞的问题">主播禁用点赞的问题<a title="#主播禁用点赞的问题" href="#主播禁用点赞的问题"></a></h2><p>根据测试，禁用功能应该是最近研发的，而相关代码似乎是直接追加到最后的，所以趁直播界面加载完毕之前，拟好点赞位置猛击，就会发现还是可以卡的出几个赞的。如果你需要更快的点赞方式，建议使用 <a href="https://www.shudaxia.com/" target="_blank">鼠大侠</a> 等软件，帮助你更快地在加载的片刻迅速点赞。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;想必感兴趣的已经试过了连点器的畅快吧。在玩转这之前，这确实不失为一种强有力的手段。</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="JavaScript" scheme="https://blogv2.cworld.top/tags/JavaScript/"/>
    
    <category term="DingTalk" scheme="https://blogv2.cworld.top/tags/DingTalk/"/>
    
    <category term="Fiddler" scheme="https://blogv2.cworld.top/tags/Fiddler/"/>
    
  </entry>
  
  <entry>
    <title>钉钉云课堂提取视频 &amp; 倍速播放 &amp; 学习进度</title>
    <link href="https://blogv2.cworld.top/post/dingtalk-player/"/>
    <id>https://blogv2.cworld.top/post/dingtalk-player/</id>
    <published>2020-03-03T23:21:47.000Z</published>
    <updated>2024-04-29T04:43:39.696Z</updated>
    
    <content type="html"><![CDATA[<p>钉钉的云课堂比较反人类，不仅有水印影响观看体验，而且不支持倍速播放。<span id="more"></span>看讲课比较慢的老师的视频，无疑是一种煎熬。过于慢的速度，反而会影响效率。</p><p>教程由简单到难逐渐递增，不过玩法也越来越多，所以还请斟酌着看。</p><h2 id="利用-idm-下载">利用 IDM 下载<a title="#利用-idm-下载" href="#利用-idm-下载"></a></h2><p>来自知乎用户 <a href="https://www.zhihu.com/question/371593651/answer/1019733992" target="_blank">cxy</a>（方法及其简单粗暴，一看便懂。博主测试直播回看界面失效）</p><p>首先，下载一个 IDM（internet download manager），这个软件平时当多核下载器拿来下浏览器里的文件也是非常不错的。百度一下网上都有 IDM 的下载链接，浏览器插件也行。</p><p><img src="post/dingtalk-player/uzjvsj3j30k00bvgmj.jpg" alt="image" loading="lazy" class="φbp"></p><p>安装完成以后在后台运行，点开你的课堂网址，右上角就会出现这样的标识：</p><p><img src="post/dingtalk-player/v06dn82j30v50b676t.jpg" alt="image" loading="lazy" class="φbp"></p><p>如果没有出现，多刷新几次页面就可以了</p><p>下载到你电脑的视频就可以任你宰割了，你只需要随便用一个支持倍速播放的播放器即可</p><p><img src="post/dingtalk-player/v14raoxj30k00ap754.jpg" alt="image" loading="lazy" class="φbp"></p><h2 id="使用-httpcanary-抓取">使用 HttpCanary 抓取<a title="#使用-httpcanary-抓取" href="#使用-httpcanary-抓取"></a></h2><p>来自知乎用户 <a href="https://www.zhihu.com/question/371593651/answer/1015872082" target="_blank">solstice23</a>，方法比较中矩，还是有一些参考价值的。</p><p>下载 HttpCanary 软件（这里提供一个<a href="https://link.zhihu.com/?target=https%3A//www.lanzous.com/i9ff8eb" target="_blank">下载链接</a>）</p><ol><li><p>进入钉钉，先不要打开云课堂视频。</p></li><li><p>打开 HttpCanary，点击右下角的开始捕获按钮。</p></li><li><p>切回钉钉，打开云课堂视频，播放几秒</p></li><li><p>切回 HttpCanary，点击右下角按钮暂停抓包</p></li><li><p>点击右上角搜索按钮，选择类别 “视频”</p></li><li><p>筛选出来几个数据包，地址都是相同的。随便点进去一个，长按地址复制。</p></li><li><p>使用下载器下载该视频（例如 ADM 下载器），并使用支持倍速播放的播放器播放即可。</p></li></ol><p><img src="post/dingtalk-player/vbxemrvj32pg1ww1kx.jpg" alt="image" loading="lazy" class="φbp"></p><h2 id="利用-fiddler-注入-js">利用 Fiddler 注入 JS<a title="#利用-fiddler-注入-js" href="#利用-fiddler-注入-js"></a></h2><p>可以说这里开始才是正文。同时也对作者 <a href="https://www.cnblogs.com/1024th/p/12330849.html" target="_blank">樱花赞</a> 表示感谢！</p><blockquote><p>PS.他并不是原创，最初原创的是 <a href="https://solstice23.top/archives/1075" target="_blank">solstice23</a></p></blockquote><h3 id="思路">思路<a title="#思路" href="#思路"></a></h3><p>云课堂的本质是一个（套壳的）网页，可以用抓包软件分析记录学习进度请求，再通过修改这个请求并重发来修改学习进度。</p><h3 id="提示">提示<a title="#提示" href="#提示"></a></h3><p>该方法仅 PC 端可用（其实手机也不是不行）。</p><h3 id="教程">教程<a title="#教程" href="#教程"></a></h3><h4 id="安装-fiddler">安装 Fiddler<a title="#安装-fiddler" href="#安装-fiddler"></a></h4><p><a href="https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe" target="_blank">点击这里</a>下载安装。</p><h4 id="设置-fiddler-捕获-https-流量">设置 Fiddler 捕获 HTTPS 流量<a title="#设置-fiddler-捕获-https-流量" href="#设置-fiddler-捕获-https-流量"></a></h4><p>打开 Fiddler，点击顶栏 “Tools”，在弹出的菜单中点击 “Options…”。</p><p><img src="post/dingtalk-player/vh9k0nhj30i606e3zo.jpg" alt="image" loading="lazy" class="φbp"></p><p>在弹出的窗口中切换到顶部的 “HTTPS” 菜单，勾选 “Capture HTTPS CONNECTs” 和 “Decrypt HTTPS traffic” 复选框，然后点击 OK。</p><p>勾选后会弹出安装证书的窗口，确认即可。</p><p><img src="post/dingtalk-player/vhi47apj30iu0csjti.jpg" alt="image" loading="lazy" class="φbp"></p><p>如果出现下面这样的黄条，点击黄条即可。</p><p><img src="post/dingtalk-player/vhvlkxjj311y02sweo.jpg" alt="image" loading="lazy" class="φbp"></p><h4 id="写入脚本">写入脚本<a title="#写入脚本" href="#写入脚本"></a></h4><p>在 Fiddler 中按下 <code>Ctrl+R</code> 。弹出一个代码编辑器窗口。</p><p><img src="post/dingtalk-player/vkq3jhyj311y0k6abe.jpg" alt="image" loading="lazy" class="φbp"></p><p>在代码编辑器窗口按下 <code>Ctrl+F</code> ，在弹出的窗口中输入 OnBeforeResponse 并按下回车。找到 OnBeforeResponse 函数（下图所示）。</p><p><img src="post/dingtalk-player/vkxu4tuj317c0im0ve.jpg" alt="image" loading="lazy" class="φbp"></p><p>把图中的下面这段：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">static</span> <span class="keyword">function</span> <span class="title function_">OnBeforeResponse</span>(<span class="params">oSession: Session</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (m_Hide304s &amp;&amp; oSession.<span class="property">responseCode</span> == <span class="number">304</span>) &#123;</span><br><span class="line">        oSession[<span class="string">&quot;ui-hide&quot;</span>] = <span class="string">&quot;true&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>替换成下面的代码，然后按下 <code>Ctrl+S</code> 来保存。</p><blockquote><p>下方代码已经整合 <a href="https://www.cnblogs.com/1024th/p/12317158.html" target="_blank">【一劳永逸】钉钉云课堂倍速播放教程</a> 中的代码（看过这篇教程的，可以把原来的代码删掉用下面的）。<br>以下代码部分来自 <a href="https://greasyfork.org/users/49622" target="_blank">HTML5 播放器增强插件</a>，对原作者深表感谢！<br>以下代码参考 <a href="https://www.aneasystone.com/archives/2015/03/reissue-requests-by-conditions-using-fiddlerscript.html" target="_blank">aneasystone’s blog: 通过 FiddlerScript 实现根据条件重发请求</a>，对博主深表感谢！</p></blockquote><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line">public <span class="keyword">static</span> <span class="title class_">RulesOption</span>(<span class="string">&quot;视频增强插件&quot;</span>)</span><br><span class="line"><span class="keyword">var</span> <span class="attr">m_H5VideoPlayerExtension</span>: boolean = <span class="literal">true</span>;</span><br><span class="line">public <span class="keyword">static</span> <span class="title class_">RulesOption</span>(<span class="string">&quot;自动学习&quot;</span>)</span><br><span class="line"><span class="keyword">var</span> <span class="attr">m_AutoLearn</span>: boolean = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">static</span> <span class="keyword">function</span> <span class="title function_">OnBeforeResponse</span>(<span class="params">oSession: Session</span>) &#123;</span><br><span class="line">    <span class="keyword">if</span> (m_Hide304s &amp;&amp; oSession.<span class="property">responseCode</span> == <span class="number">304</span>) &#123;</span><br><span class="line">        oSession[<span class="string">&quot;ui-hide&quot;</span>] = <span class="string">&quot;true&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (m_H5VideoPlayerExtension) &#123;</span><br><span class="line">        <span class="keyword">var</span> sToInsert = <span class="string">&quot;&lt;script src=data:application/javascript;base64,KGZ1bmN0aW9uKCl7dmFyIGh0bWxfcGxheWVyX2VuaGFuY2U9e2ZvbnRTaXplOjIwLHBsYXllcjpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ2aWRlbyIpfSx0aXBzOmZ1bmN0aW9uKHN0cil7dmFyIHN0eWxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNodG1sX3BsYXllcl9lbmhhbmNlX3RpcHMiKS5zdHlsZTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaHRtbF9wbGF5ZXJfZW5oYW5jZV90aXBzIikuaW5uZXJUZXh0PXN0cjtmb3IodmFyIGk9MDtpPDM7aSsrKXtpZih0aGlzLm9uX29mZltpXSl7Y2xlYXJUaW1lb3V0KHRoaXMub25fb2ZmW2ldKX19c3R5bGUuZGlzcGxheT0iYmxvY2siO3RoaXMub25fb2ZmWzBdPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzdHlsZS5vcGFjaXR5PTF9LDUwKTt0aGlzLm9uX29mZlsxXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c3R5bGUub3BhY2l0eT0wfSwyMDAwKTt0aGlzLm9uX29mZlsyXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c3R5bGUuZGlzcGxheT0ibm9uZSJ9LDI4MDApfSxvbl9vZmY6bmV3IEFycmF5KDMpLHJvdGF0ZTowLGZwczozMCxmaWx0ZXI6e2tleTpuZXcgQXJyYXkoNSksc2V0dXA6ZnVuY3Rpb24oKXt2YXIgdmlldz0iYnJpZ2h0bmVzcyh7MH0pIGNvbnRyYXN0KHsxfSkgc2F0dXJhdGUoezJ9KSBodWUtcm90YXRlKHszfWRlZykgYmx1cih7NH1weCkiO2Zvcih2YXIgaT0wO2k8NTtpKyspe3ZpZXc9dmlldy5yZXBsYWNlKCJ7IitpKyJ9IixTdHJpbmcodGhpcy5rZXlbaV0pKTt0aGlzLmtleVtpXT1OdW1iZXIodGhpcy5rZXlbaV0pfWh0bWxfcGxheWVyX2VuaGFuY2UucGxheWVyKCkuc3R5bGUuV2Via2l0RmlsdGVyPXZpZXd9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5rZXlbMF09MTt0aGlzLmtleVsxXT0xO3RoaXMua2V5WzJdPTE7dGhpcy5rZXlbM109MDt0aGlzLmtleVs0XT0wO3RoaXMuc2V0dXAoKX19LHNldHRpcHM6ZnVuY3Rpb24oKXt2YXIgdGlwcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLnBsYXllcigpLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGlwcyk7dGlwcy5zZXRBdHRyaWJ1dGUoImlkIiwiaHRtbF9wbGF5ZXJfZW5oYW5jZV90aXBzIik7dGlwcy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246IGFic29sdXRlO3otaW5kZXg6IDk5OTk5OTtwYWRkaW5nOiAxMHB4O2JhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC44KTtjb2xvcjp3aGl0ZTt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2l0aW9uOiBhbGwgNTAwbXMgZWFzZTtvcGFjaXR5OiAwO2Rpc3BsYXk6IG5vbmU7IC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OiAnbWljcm9zb2Z0IHlhaGVpJywgVmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOy13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Iik7aWYodGhpcy5mb250U2l6ZSE9PTApe3RpcHMuc3R5bGUuZm9udFNpemU9dGhpcy5mb250U2l6ZSsicHgifWlmKGxvY2F0aW9uLmhvc3RuYW1lPT09Ind3dy55b3V0dWJlLmNvbSIpe3RoaXMucGxheWVyKCkucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQ9IjEwMCUifX0sX2lzRm91Y3M6ZmFsc2UsaXNGb3VjczpmdW5jdGlvbigpe3RoaXMucGxheWVyKCkub25tb3VzZW92ZXI9ZnVuY3Rpb24oKXtodG1sX3BsYXllcl9lbmhhbmNlLl9pc0ZvdWNzPXRydWV9O3RoaXMucGxheWVyKCkub25tb3VzZW91dD1mdW5jdGlvbigpe2h0bWxfcGxheWVyX2VuaGFuY2UuX2lzRm91Y3M9ZmFsc2V9fSxidXR0b246ZnVuY3Rpb24oZXZlbnQpe3ZhciBfdGhpcz1odG1sX3BsYXllcl9lbmhhbmNlO2lmKGV2ZW50LmFsdEtleXx8ZXZlbnQuY3RybEtleXx8ZXZlbnQuc2hpZnRLZXkpe3JldHVybn1pZighX3RoaXMuX2lzRm91Y3Mpe3JldHVybn1ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2lmKGV2ZW50LmtleUNvZGU9PT0zOSl7X3RoaXMucGxheWVyKCkuY3VycmVudFRpbWUrPTM7X3RoaXMudGlwcygi5b+r6L+b77yaM+enkiIpfWlmKGV2ZW50LmtleUNvZGU9PT0zNyl7X3RoaXMucGxheWVyKCkuY3VycmVudFRpbWUtPTM7X3RoaXMudGlwcygi5ZCO6YCA77yaM+enkiIpfWlmKGV2ZW50LmtleUNvZGU9PT0zOCl7aWYoX3RoaXMucGxheWVyKCkudm9sdW1lPDEpe190aGlzLnBsYXllcigpLnZvbHVtZSs9MC4wMX1fdGhpcy5wbGF5ZXIoKS52b2x1bWU9X3RoaXMucGxheWVyKCkudm9sdW1lLnRvRml4ZWQoMik7X3RoaXMudGlwcygi6Z+z6YeP77yaIitwYXJzZUludChfdGhpcy5wbGF5ZXIoKS52b2x1bWUqMTAwKSsiJSIpfWlmKGV2ZW50LmtleUNvZGU9PT00MCl7aWYoX3RoaXMucGxheWVyKCkudm9sdW1lPjApe190aGlzLnBsYXllcigpLnZvbHVtZS09MC4wMX1fdGhpcy5wbGF5ZXIoKS52b2x1bWU9X3RoaXMucGxheWVyKCkudm9sdW1lLnRvRml4ZWQoMik7X3RoaXMudGlwcygi6Z+z6YeP77yaIitwYXJzZUludChfdGhpcy5wbGF5ZXIoKS52b2x1bWUqMTAwKSsiJSIpfWlmKGV2ZW50LmtleUNvZGU9PT0zMil7aWYoX3RoaXMucGxheWVyKCkucGF1c2VkKXtfdGhpcy5wbGF5ZXIoKS5wbGF5KCk7X3RoaXMudGlwcygi5pKt5pS+Iil9ZWxzZXtfdGhpcy5wbGF5ZXIoKS5wYXVzZSgpO190aGlzLnRpcHMoIuaaguWBnCIpfX1pZihldmVudC5rZXlDb2RlPT09ODgpe2lmKF90aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZT4wKXtfdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGUtPTAuMTtfdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGU9X3RoaXMucGxheWVyKCkucGxheWJhY2tSYXRlLnRvRml4ZWQoMSk7X3RoaXMudGlwcygi5pKt5pS+6YCf5bqm77yaIitfdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGUrIuWAjSIpfX1pZihldmVudC5rZXlDb2RlPT09Njcpe2lmKF90aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZTwxNil7X3RoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKz0wLjE7X3RoaXMucGxheWVyKCkucGxheWJhY2tSYXRlPV90aGlzLnBsYXllcigpLnBsYXliYWNrUmF0ZS50b0ZpeGVkKDEpO190aGlzLnRpcHMoIuaSreaUvumAn+W6pu+8miIrX3RoaXMucGxheWVyKCkucGxheWJhY2tSYXRlKyLlgI0iKX19aWYoZXZlbnQua2V5Q29kZT09PTkwKXtfdGhpcy5wbGF5ZXIoKS5wbGF5YmFja1JhdGU9MTtfdGhpcy50aXBzKCLmkq3mlL7pgJ/luqbvvJox5YCNIil9aWYoZXZlbnQua2V5Q29kZT09NzApe2lmKCFfdGhpcy5wbGF5ZXIoKS5wYXVzZWQpe190aGlzLnBsYXllcigpLnBhdXNlKCl9X3RoaXMucGxheWVyKCkuY3VycmVudFRpbWUrPU51bWJlcigxL190aGlzLmZwcyk7X3RoaXMudGlwcygi5a6a5L2N77ya5LiL5LiA5binIil9aWYoZXZlbnQua2V5Q29kZT09Njgpe2lmKCFfdGhpcy5wbGF5ZXIoKS5wYXVzZWQpe190aGlzLnBsYXllcigpLnBhdXNlKCl9X3RoaXMucGxheWVyKCkuY3VycmVudFRpbWUtPU51bWJlcigxL190aGlzLmZwcyk7X3RoaXMudGlwcygi5a6a5L2N77ya5LiK5LiA5binIil9aWYoZXZlbnQua2V5Q29kZT09Njkpe2lmKF90aGlzLmZpbHRlci5rZXlbMF0+MSl7X3RoaXMuZmlsdGVyLmtleVswXSs9MX1lbHNle190aGlzLmZpbHRlci5rZXlbMF0rPTAuMX1fdGhpcy5maWx0ZXIua2V5WzBdPV90aGlzLmZpbHRlci5rZXlbMF0udG9GaXhlZCgyKTtfdGhpcy5maWx0ZXIuc2V0dXAoKTtfdGhpcy50aXBzKCLlm77lg4/kuq7luqblop7liqDvvJoiK3BhcnNlSW50KF90aGlzLmZpbHRlci5rZXlbMF0qMTAwKSsiJSIpfWlmKGV2ZW50LmtleUNvZGU9PTg3KXtpZihfdGhpcy5maWx0ZXIua2V5WzBdPjApe2lmKF90aGlzLmZpbHRlci5rZXlbMF0+MSl7X3RoaXMuZmlsdGVyLmtleVswXS09MX1lbHNle190aGlzLmZpbHRlci5rZXlbMF0tPTAuMX1fdGhpcy5maWx0ZXIua2V5WzBdPV90aGlzLmZpbHRlci5rZXlbMF0udG9GaXhlZCgyKTtfdGhpcy5maWx0ZXIuc2V0dXAoKX1fdGhpcy50aXBzKCLlm77lg4/kuq7luqblh4/lsJHvvJoiK3BhcnNlSW50KF90aGlzLmZpbHRlci5rZXlbMF0qMTAwKSsiJSIpfWlmKGV2ZW50LmtleUNvZGU9PTg0KXtpZihfdGhpcy5maWx0ZXIua2V5WzFdPjEpe190aGlzLmZpbHRlci5rZXlbMV0rPTF9ZWxzZXtfdGhpcy5maWx0ZXIua2V5WzFdKz0wLjF9X3RoaXMuZmlsdGVyLmtleVsxXT1fdGhpcy5maWx0ZXIua2V5WzFdLnRvRml4ZWQoMik7X3RoaXMuZmlsdGVyLnNldHVwKCk7X3RoaXMudGlwcygi5Zu+5YOP5a+55q+U5bqm5aKe5Yqg77yaIitwYXJzZUludChfdGhpcy5maWx0ZXIua2V5WzFdKjEwMCkrIiUiKX1pZihldmVudC5rZXlDb2RlPT04Mil7aWYoX3RoaXMuZmlsdGVyLmtleVsxXT4wKXtpZihfdGhpcy5maWx0ZXIua2V5WzFdPjEpe190aGlzLmZpbHRlci5rZXlbMV0tPTF9ZWxzZXtfdGhpcy5maWx0ZXIua2V5WzFdLT0wLjF9X3RoaXMuZmlsdGVyLmtleVsxXT1fdGhpcy5maWx0ZXIua2V5WzFdLnRvRml4ZWQoMik7X3RoaXMuZmlsdGVyLnNldHVwKCl9X3RoaXMudGlwcygi5Zu+5YOP5a+55q+U5bqm5YeP5bCR77yaIitwYXJzZUludChfdGhpcy5maWx0ZXIua2V5WzFdKjEwMCkrIiUiKX1pZihldmVudC5rZXlDb2RlPT04NSl7aWYoX3RoaXMuZmlsdGVyLmtleVsyXT4xKXtfdGhpcy5maWx0ZXIua2V5WzJdKz0xfWVsc2V7X3RoaXMuZmlsdGVyLmtleVsyXSs9MC4xfV90aGlzLmZpbHRlci5rZXlbMl09X3RoaXMuZmlsdGVyLmtleVsyXS50b0ZpeGVkKDIpO190aGlzLmZpbHRlci5zZXR1cCgpO190aGlzLnRpcHMoIuWbvuWDj+mlseWSjOW6puWinuWKoO+8miIrcGFyc2VJbnQoX3RoaXMuZmlsdGVyLmtleVsyXSoxMDApKyIlIil9aWYoZXZlbnQua2V5Q29kZT09ODkpe2lmKF90aGlzLmZpbHRlci5rZXlbMl0+MCl7aWYoX3RoaXMuZmlsdGVyLmtleVsyXT4xKXtfdGhpcy5maWx0ZXIua2V5WzJdLT0xfWVsc2V7X3RoaXMuZmlsdGVyLmtleVsyXS09MC4xfV90aGlzLmZpbHRlci5rZXlbMl09X3RoaXMuZmlsdGVyLmtleVsyXS50b0ZpeGVkKDIpO190aGlzLmZpbHRlci5zZXR1cCgpfV90aGlzLnRpcHMoIuWbvuWDj+mlseWSjOW6puWHj+Wwke+8miIrcGFyc2VJbnQoX3RoaXMuZmlsdGVyLmtleVsyXSoxMDApKyIlIil9aWYoZXZlbnQua2V5Q29kZT09Nzkpe190aGlzLmZpbHRlci5rZXlbM10rPTE7X3RoaXMuZmlsdGVyLnNldHVwKCk7X3RoaXMudGlwcygi5Zu+5YOP6Imy55u45aKe5Yqg77yaIitfdGhpcy5maWx0ZXIua2V5WzNdKyLluqYiKX1pZihldmVudC5rZXlDb2RlPT03Myl7X3RoaXMuZmlsdGVyLmtleVszXS09MTtfdGhpcy5maWx0ZXIuc2V0dXAoKTtfdGhpcy50aXBzKCLlm77lg4/oibLnm7jlh4/lsJHvvJoiK190aGlzLmZpbHRlci5rZXlbM10rIuW6piIpfWlmKGV2ZW50LmtleUNvZGU9PTc1KXtfdGhpcy5maWx0ZXIua2V5WzRdKz0xO190aGlzLmZpbHRlci5zZXR1cCgpO190aGlzLnRpcHMoIuWbvuWDj+aooeeziuWinuWKoO+8miIrX3RoaXMuZmlsdGVyLmtleVs0XSsiUFgiKX1pZihldmVudC5rZXlDb2RlPT03NCl7aWYoX3RoaXMuZmlsdGVyLmtleVs0XT4wKXtfdGhpcy5maWx0ZXIua2V5WzRdLT0xO190aGlzLmZpbHRlci5zZXR1cCgpfV90aGlzLnRpcHMoIuWbvuWDj+aooeeziuWHj+Wwke+8miIrX3RoaXMuZmlsdGVyLmtleVs0XSsiUFgiKX1pZihldmVudC5rZXlDb2RlPT04MSl7X3RoaXMuZmlsdGVyLnJlc2V0KCk7X3RoaXMudGlwcygi5Zu+5YOP5bGe5oCn77ya5aSN5L2NIil9aWYoZXZlbnQua2V5Q29kZT09ODMpe190aGlzLnJvdGF0ZSs9OTA7aWYoX3RoaXMucm90YXRlJTM2MD09PTApe190aGlzLnJvdGF0ZT0wfV90aGlzLnBsYXllcigpLnN0eWxlLnRyYW5zZm9ybT0icm90YXRlKCIrX3RoaXMucm90YXRlKyJkZWcpIjtfdGhpcy50aXBzKCLnlLvpnaLml4vovazvvJoiK190aGlzLnJvdGF0ZSsi5bqmIil9aWYoZXZlbnQua2V5Q29kZT09MTMpe2lmKGxvY2F0aW9uLmhvc3RuYW1lPT09Ind3dy5iaWxpYmlsaS5jb20iKXtpZihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10ZXh0PSLov5vlhaXlhajlsY8iXScpKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10ZXh0PSLov5vlhaXlhajlsY8iXScpLmNsaWNrKCl9fWlmKGxvY2F0aW9uLmhvc3RuYW1lPT09Ind3dy55b3V0dWJlLmNvbSIpe2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tjbGFzcz0ieXRwLWZ1bGxzY3JlZW4tYnV0dG9uIHl0cC1idXR0b24iXScpKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbY2xhc3M9Inl0cC1mdWxsc2NyZWVuLWJ1dHRvbiB5dHAtYnV0dG9uIl0nKS5jbGljaygpfX19fSxpbml0OmZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2h0bWxfcGxheWVyX2VuaGFuY2VfdGlwcyIpLmxlbmd0aD4xKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaHRtbF9wbGF5ZXJfZW5oYW5jZV90aXBzIikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjaHRtbF9wbGF5ZXJfZW5oYW5jZV90aXBzIilbMV0pfWlmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInZpZGVvIikubGVuZ3RoPT09MSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2h0bWxfcGxheWVyX2VuaGFuY2VfdGlwcyIpLmxlbmd0aD09PTApe2lmKCF0aGlzLmxvYWQpe3ZhciBfdGhpcz1odG1sX3BsYXllcl9lbmhhbmNlO3RoaXMubG9hZD10cnVlO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygi5qOA5rWL5YiwSFRNTDXop4bpopHvvIEiKTtjb25zb2xlLmxvZyghX3RoaXMubG9hZCk7X3RoaXMubG9hZD1mYWxzZTtfdGhpcy5maWx0ZXIucmVzZXQoKTtfdGhpcy5zZXR0aXBzKCk7X3RoaXMuaXNGb3VjcygpO2RvY3VtZW50Lm9ua2V5ZG93bj1fdGhpcy5idXR0b259LDEwMDApfX19LGxvYWQ6ZmFsc2V9O2h0bWxfcGxheWVyX2VuaGFuY2UuaW5pdCgpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU5vZGVJbnNlcnRlZCIsZnVuY3Rpb24oKXtodG1sX3BsYXllcl9lbmhhbmNlLmluaXQoKX0pfSkoKTs=&gt;&lt;/script&gt;&quot;</span>;</span><br><span class="line">        oSession.<span class="title function_">utilDecodeResponse</span>();</span><br><span class="line">        oSession.<span class="title function_">utilReplaceOnceInResponse</span>(<span class="string">&#x27;&lt;/head&gt;&#x27;</span>, sToInsert + <span class="string">&#x27;&lt;/head&gt;&#x27;</span>, <span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (m_AutoLearn &amp;&amp; !oSession.<span class="title class_">GetRequestBodyAsString</span>().<span class="title class_">Contains</span>(<span class="string">&quot;\&quot;courseTime\&quot;:9990,\&quot;learnTime\&quot;:60,\&quot;type\&quot;:2&quot;</span>)</span><br><span class="line">        &amp;&amp; oSession.<span class="property">hostname</span> == <span class="string">&quot;saas.daxue.dingtalk.com&quot;</span> &amp;&amp; oSession.<span class="property">PathAndQuery</span> == <span class="string">&quot;/dingtalk/course/record.jhtml&quot;</span>)&#123;</span><br><span class="line">        <span class="keyword">var</span> raw = <span class="string">&quot;&quot;</span>;</span><br><span class="line">        <span class="keyword">var</span> <span class="attr">method</span>:<span class="title class_">String</span> = oSession.<span class="property">RequestMethod</span>;</span><br><span class="line">        <span class="keyword">var</span> <span class="attr">url</span>:<span class="title class_">String</span> = oSession.<span class="property">fullUrl</span>;</span><br><span class="line">        <span class="keyword">var</span> protocol = <span class="string">&quot;HTTP/1.1&quot;</span>;</span><br><span class="line">        raw += method + <span class="string">&quot; &quot;</span> + url + <span class="string">&quot; &quot;</span> + protocol + <span class="string">&quot;\r\n&quot;</span>;</span><br><span class="line">        <span class="keyword">var</span> body = oSession.<span class="title class_">GetRequestBodyAsString</span>();</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">var</span> <span class="attr">i</span>:int = <span class="number">0</span>; i &lt; oSession.<span class="property">oRequest</span>.<span class="property">headers</span>.<span class="title class_">Count</span>(); i++) &#123;</span><br><span class="line">            <span class="keyword">var</span> header = oSession.<span class="property">oRequest</span>.<span class="property">headers</span>[i];</span><br><span class="line">            header = header.<span class="title class_">ToString</span>()</span><br><span class="line">            <span class="keyword">if</span>(header.<span class="title class_">Contains</span>(<span class="string">&quot;Content-Length&quot;</span>))&#123;</span><br><span class="line">                header = <span class="string">&quot;Content-Length: &quot;</span>+(body.<span class="property">Length</span>+<span class="number">4</span>).<span class="title class_">ToString</span>()</span><br><span class="line">            &#125;</span><br><span class="line">            raw += header + <span class="string">&quot;\r\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        body = body.<span class="title function_">replace</span>(<span class="regexp">/&quot;courseTime&quot;:\d+,&quot;learnTime&quot;:\d+,&quot;type&quot;:\d/g</span>,<span class="string">&quot;\&quot;courseTime\&quot;:9990,\&quot;learnTime\&quot;:60,\&quot;type\&quot;:2&quot;</span>);</span><br><span class="line">        raw += <span class="string">&quot;\r\n&quot;</span> + body;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">var</span> <span class="attr">j</span>:int = <span class="number">0</span>; j &lt; <span class="number">10</span>; j++) &#123;</span><br><span class="line">            <span class="title class_">FiddlerObject</span>.<span class="title function_">utilIssueRequest</span>(raw);</span><br><span class="line">            <span class="title class_">FiddlerApplication</span>.<span class="property">Log</span>.<span class="title class_">LogString</span>(<span class="string">&quot;Request has been Send.&quot;</span>);</span><br><span class="line">            <span class="title class_">System</span>.<span class="property">Threading</span>.<span class="property">Thread</span>.<span class="title class_">Sleep</span>(<span class="number">1000</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="看视频">看视频<a title="#看视频" href="#看视频"></a></h4><p>看视频的时候，每次刷新页面（包括第一次进入视频页面时的加载）程序会花 10 s 时间给视频增加 10 min 的学习进度。保险起见，请不要频繁刷新。</p><p>Log 选项卡中，每出现一条<code>Resquest has been Send.</code>说明学习进度增加了 1 min。快速出现大量<code>Resquest has been Send.</code>时，可能是刷新过于频繁或程序错误，请立刻关闭 Fiddler。如果 Fiddler 未响应，可能是陷入死循环，立刻在任务管理器里结束进程。</p><p><img src="post/dingtalk-player/vq1jr7cj311y0k7gns.jpg" alt="image" loading="lazy" class="φbp"></p><p>在 Rules 中可以启用或关闭 <code>视频增强插件</code> 和 <code>自动学习</code>。</p><p><img src="post/dingtalk-player/vqev3o5j30kj0js75k.jpg" alt="image" loading="lazy" class="φbp"></p><h4 id="快捷键说明">快捷键说明<a title="#快捷键说明" href="#快捷键说明"></a></h4><p><img src="post/dingtalk-player/vrdyq2aj311y0k8dj5.jpg" alt="image" loading="lazy" class="φbp"></p><h5 id="播放速度调节">播放速度调节<a title="#播放速度调节" href="#播放速度调节"></a></h5><p>按键 C：加速播放 +0.1<br>按键 X：减速播放 -0.1<br>按键 Z：正常速度播放</p><h4 id="播放时间定位">播放时间定位<a title="#播放时间定位" href="#播放时间定位"></a></h4><p>方向键右 →：快进 3 秒<br>方向键左 ←：后退 3 秒<br>按键 F：下一帧<br>按键 D：上一帧</p><h4 id="音量调节">音量调节<a title="#音量调节" href="#音量调节"></a></h4><p>方向键上 ↑：音量升高 1%<br>方向键下 ↓：音量降低 1%</p><h5 id="图像参数调节">图像参数调节<a title="#图像参数调节" href="#图像参数调节"></a></h5><p>按键 E：亮度增加%<br>按键 W：亮度减少%<br>按键 T：对比度增加%<br>按键 R：对比度减少%<br>按键 U：饱和度增加%<br>按键 Y：饱和度减少%<br>按键 O：色相增加 1 度<br>按键 I：色相减少 1 度<br>按键 K：模糊增加 1 px<br>按键 J：模糊减少 1 px<br>按键 Q：图像复位</p><h5 id="画面调节">画面调节<a title="#画面调节" href="#画面调节"></a></h5><p>按键 S：画面旋转 90 度<br>按键回车：进入全屏（只支持部分网站 B 站，油管）</p><h5 id="兼容性问题">兼容性问题<a title="#兼容性问题" href="#兼容性问题"></a></h5><p>可以使用组合键临时停用插件，例如 播放/暂停 默认为空格键，那么使用 Ctrl+space(空格键)即可暂停使用一次插件。</p><h2 id="备用方案">备用方案<a title="#备用方案" href="#备用方案"></a></h2><p>与上一个类似。从粘贴代码的一步发生了变化。下面就从那一步开始好了。</p><h3 id="中间人注入">中间人注入<a title="#中间人注入" href="#中间人注入"></a></h3><p>复制下面的代码，并粘贴到下图中的位置，然后按下 <code>Ctrl+S</code> 来保存。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> sToInsert =</span><br><span class="line">  <span class="string">&quot;&lt;script src=&#x27;https://res.wx.qq.com/mmbizwap/zh_CN/htmledition/js/vconsole/3.0.0/vconsole.min.js&#x27;&gt;&lt;/script&gt;&lt;script&gt;var vConsole = new VConsole();&lt;/script&gt;&quot;</span>;</span><br><span class="line">oSession.<span class="title function_">utilDecodeResponse</span>();</span><br><span class="line">oSession.<span class="title function_">utilReplaceOnceInResponse</span>(<span class="string">&quot;&lt;/head&gt;&quot;</span>, sToInsert + <span class="string">&quot;&lt;/head&gt;&quot;</span>, <span class="number">0</span>);</span><br></pre></td></tr></table></figure><p><img src="post/dingtalk-player/vyxkvitj30vu091jrp.jpg" alt="image" loading="lazy" class="φbp"></p><p><img src="post/dingtalk-player/vz89e42j30uv05p3yv.jpg" alt="image" loading="lazy" class="φbp"></p><h3 id="直接在钉钉内倍速播放">直接在钉钉内倍速播放<a title="#直接在钉钉内倍速播放" href="#直接在钉钉内倍速播放"></a></h3><p>打开钉钉的云课堂，点开一个视频，可以看到右下角多了一个绿色按钮。点击它。</p><p><img src="post/dingtalk-player/vzunz4tj30xf0pddmo.jpg" alt="image" loading="lazy" class="φbp"></p><p><img src="post/dingtalk-player/w03m4v3j30xf0pdjsn.jpg" alt="image" loading="lazy" class="φbp"></p><p>点击之后，弹出了一个菜单。</p><p>将下面的代码粘贴进下图中标明的位置并点击右侧的 “OK” 按钮。</p><p>在点击右下角绿色按钮弹出的控制台按照上一步的方法输入以下代码：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;video&quot;</span>).<span class="property">playbackRate</span> = <span class="number">2.0</span>;</span><br></pre></td></tr></table></figure><p>点击 OK。可以将钉钉内的视频变为二倍速。代码中的 2.0 可以换成其他的数字。</p><h3 id="获取视频地址和下载视频">获取视频地址和下载视频<a title="#获取视频地址和下载视频" href="#获取视频地址和下载视频"></a></h3><p>还是右下角的绿色按钮弹出的菜单，输入下面的代码</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">&quot;video&quot;</span>).<span class="property">src</span>);</span><br></pre></td></tr></table></figure><p>点击 OK 后，上面的列表出现了一个地址，这个地址就是该云课堂视频的源文件地址。复制这个地址，在浏览器打开即可下载该视频。或者，也可以用 Potplayer 直接打开该地址来倍速播放。</p><p><img src="post/dingtalk-player/w1tw7bkj30xf0pd75h.jpg" alt="image" loading="lazy" class="φbp"></p><h3 id="附：使用-potplayer-倍速观看视频">附：使用 Potplayer 倍速观看视频<a title="#附：使用-potplayer-倍速观看视频" href="#附：使用-potplayer-倍速观看视频"></a></h3><p>推荐使用 Potplayer 来倍速观看视频。Potplayer 是一款很好用的播放器。</p><p>下载并安装 Potplayer 后，在 Potplayer 的左上角点击如图的菜单，或者直接按下 <code>Ctrl+U</code>。</p><p><img src="post/dingtalk-player/w2iyuawj30cf04cwef.jpg" alt="image" loading="lazy" class="φbp"></p><p>在弹出的窗口中粘贴刚才的复制的那个视频链接，点击确定。</p><p><img src="post/dingtalk-player/w2t03cgj30dd05umx7.jpg" alt="image" loading="lazy" class="φbp"></p><p>可以看到，视频已经开始播放。</p><p><img src="post/dingtalk-player/w36gu36j30qu0hyaaq.jpg" alt="image" loading="lazy" class="φbp"></p><p>按下 <code>C</code> 键来加速，按下 <code>X</code> 键来减速，按下 <code>Z</code> 键来恢复原速。</p><p>按下按键后在视频左上角可以看到当前的倍速速率。</p><p><img src="post/dingtalk-player/w3zf24dj303s0100sm.jpg" alt="image" loading="lazy" class="φbp"></p><h2 id="尾声">尾声<a title="#尾声" href="#尾声"></a></h2><p>这里已经推荐了很多钟方法，相信总有一种方法适合你。希望能好好利用工具，做些有利于学习的事，而不是仅仅用来刷分数ヾ(≧▽≦*)o</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;钉钉的云课堂比较反人类，不仅有水印影响观看体验，而且不支持倍速播放。</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="JavaScript" scheme="https://blogv2.cworld.top/tags/JavaScript/"/>
    
    <category term="DingTalk" scheme="https://blogv2.cworld.top/tags/DingTalk/"/>
    
    <category term="Fiddler" scheme="https://blogv2.cworld.top/tags/Fiddler/"/>
    
  </entry>
  
  <entry>
    <title>那些好用的前端 CDN 推荐</title>
    <link href="https://blogv2.cworld.top/post/free-cdn/"/>
    <id>https://blogv2.cworld.top/post/free-cdn/</id>
    <published>2020-03-01T21:11:00.000Z</published>
    <updated>2024-04-29T04:43:39.724Z</updated>
    
    <content type="html"><![CDATA[<p>最近总感觉自己的网站速度不行，又不想重新搭建（Hexo 的宗旨就是打造响应速度超快的轻量级博客嘛），所以这篇文章也就由此应运而生了。</p><p>一个功能丰富的博客总是要引用一些优秀的项目代码。因此为了加快响应速度，不妨从 CDN 入手。</p><blockquote><p>Ps. 以下内容的 Ping 均选取平均值，且仅供参考。本文默认以 Ping 延迟排名，各地区和不同运营商网速各有差异，请在使用前自行测试考鉴。</p></blockquote><h2 id="jsdelivr-cdn">JSDelivr CDN<a title="#jsdelivr-cdn" href="#jsdelivr-cdn"></a></h2><p>主要支持 npm ，Github 和 WordPress 的加速。也就是说，你可以把任意你自己的代码存放在 Github 上并用它来加速。重要的是，作为一家国外的 CDN 服务平台，在中国 QUANTIL 公司的赞助下，在大陆也能享受延迟极低的快速。</p><p>地址：<a href="http://www.jsdelivr.com/" target="_blank">JSDelivr</a><br>赞助：Cloudflare，Fastly，StackPath，QUANTIL 和其他服务商<br>Ping：11ms<br>推荐：★★★★★</p><h2 id="bootstrap-中文网开源项目-cdn-服务">Bootstrap 中文网开源项目 CDN 服务<a title="#bootstrap-中文网开源项目-cdn-服务" href="#bootstrap-中文网开源项目-cdn-服务"></a></h2><p>致力于为 Bootstrap、jQuery、Angular 一样优秀的开源项目提供稳定、快速的免费 CDN 服务。BootCDN 所收录的开源项目主要同步于 cdnjs 仓库。自 2013 年 10 月 31 日上线以来已经为近万家网站提供了稳定、可靠的 CDN 服务。<br>根据官网来看，已经支持了 3450+ 开源项目，确实是非常全的。</p><p>地址：<a href="http://www.bootcdn.cn/" target="_blank">BootCDN</a><br>赞助：猫云<br>Ping：11ms<br>推荐：★★★★★</p><h2 id="七牛云静态文件-cdn-服务">七牛云静态文件 CDN 服务<a title="#七牛云静态文件-cdn-服务" href="#七牛云静态文件-cdn-服务"></a></h2><p>七牛云的目标是提供这样一个仓库，让它尽可能全面收录优秀的开源库，并免费为之提供 CDN 加速服务，使之有更好的访问速度和稳定的环境。同时，我们也提供开源库源接入的入口，让所有人都可以提交开源库，包括 JS、CSS、image 和 swf 等静态文件。<br>Ps.点击搜索，才能发现那些隐藏的项目。</p><p>地址：<a href="https://www.staticfile.org/" target="_blank">七牛云</a><br>赞助：掘金社区<br>Ping：15ms<br>推荐：★★★★★</p><h2 id="字节跳动静态资源公共库">字节跳动静态资源公共库<a title="#字节跳动静态资源公共库" href="#字节跳动静态资源公共库"></a></h2><p>字节跳动也是一家非常具有生命力的公司，旗下的抖音和今日头条等产品也可以说是家喻户晓。更有趣的是，CDN 支持项目还非常广泛，可以与 CDNJS 对齐。</p><p>地址：<a href="http://cdn.bytedance.com/" target="_blank">字节跳动</a><br>赞助：无<br>Ping：25ms<br>推荐：★★★★★</p><h2 id="又拍云-js-库加速服务">又拍云 JS 库加速服务<a title="#又拍云-js-库加速服务" href="#又拍云-js-库加速服务"></a></h2><p>托管常用的 JavaScript 库。又一个不怎么更新速度却非常快的 CDN 。<br>Ps.现在只提供 JQUERY、MOOTOOLS、MODERNIZR、DOJO、EMBER.JS 五种了。另，官网没加小绿锁 🔒。</p><p>地址：<a href="http://jscdn.upai.com/" target="_blank">常用 JavaScript 库 CDN 服务</a><br>赞助：SegmentFault<br>Ping：21ms<br>推荐：★★★⚝⚝</p><h2 id="腾讯微信前端通用库-cdn">腾讯微信前端通用库 CDN<a title="#腾讯微信前端通用库-cdn" href="#腾讯微信前端通用库-cdn"></a></h2><p>太少了点…说实话不知道这样的站点还留着干嘛。<br>还有，有点时间没更新了。</p><p>地址：<a href="https://qydev.weixin.qq.com/cdn/cdnjs.html" target="_blank">前端库 CDN 服务</a><br>赞助：MIG CDN<br>Ping：34ms<br>推荐：★⚝⚝⚝⚝</p><h2 id="75cdn（360-前端静态资源库）">75CDN（360 前端静态资源库）<a title="#75cdn（360-前端静态资源库）" href="#75cdn（360-前端静态资源库）"></a></h2><p>来自一个叫做 <a href="https://www.baomitu.com/" target="_blank">爆米兔</a> H5 服务。虽然没有明称是 360 团队的，不过这个 CDN 服务却似乎又暴露了什么。这个 CDN 服务又是叫做 <a href="https://github.com/75team/" target="_blank">奇舞团</a> 的团队负责，而这个团队却是在为 360 做事，以至于 CDN 官网已直接用 “360 前端静态资源库” 暴露了身份。<br>之前有报道过 360 CDN 已停止支持，不过现在来看支持的还是非常多的。这里更想推荐的是，75CDN 支持 Google 字体库的加速，而且效果非常不错。</p><p>地址：<a href="https://cdn.baomitu.com/" target="_blank">75CDN</a><br>赞助：360<br>Ping：36ms<br>推荐：★★★★★</p><h2 id="腾讯网静态资源公共库">腾讯网静态资源公共库<a title="#腾讯网静态资源公共库" href="#腾讯网静态资源公共库"></a></h2><p>还是太少了点…一样，有点时间没更新了。<br>Ps.手动改网址，似乎还能获取到最新版的，但 Vue 都没有，也算是半残废吧。另，官网没加小绿锁 🔒。</p><p>地址：<a href="https://libs.qq.com/" target="_blank">前端库 CDN 服务</a><br>赞助：MIG CDN<br>Ping：37ms<br>推荐：★★⚝⚝⚝</p><h2 id="新浪云计算-cdn-公共库">新浪云计算 CDN 公共库<a title="#新浪云计算-cdn-公共库" href="#新浪云计算-cdn-公共库"></a></h2><p>新浪云计算是新浪研发中心下属的部门，主要负责新浪在云计算领域的战略规划，技术研发和平台运营工作。主要产品包括 应用云平台 Sina App Engine（简称 SAE）。</p><p>SAE 的 CDN 节点覆盖全国各大城市的多路（电信、联通、移动、教育）骨干网络，使开发者能够方便的使用高质量的 CDN 服务。</p><p>地址：<a href="http://lib.sinaapp.com/" target="_blank">SAE</a><br>赞助：无<br>Ping：48ms<br>推荐：★★⚝⚝⚝</p><h2 id="中科大-google-fonts-加速服务">中科大 Google Fonts 加速服务<a title="#中科大-google-fonts-加速服务" href="#中科大-google-fonts-加速服务"></a></h2><p>针对 Google Fonts 很不错。<br>Ps.现在 Google Fonts 在国内有服务器了，而且可以直接访问。<br>但 Google 能用的只有 <code>fonts.googleapis.com</code>、<code>fonts.gstatic.com</code> 这两个域名。而 <code>ajax.googleapis.com</code> 和 <code>themes.googleusercontent.com</code> 暂时还是没法直接访问，所以还是得依赖中科大。</p><p>地址：<a href="https://lug.ustc.edu.cn/wiki/lug/services/googlefonts" target="_blank">https://lug.ustc.edu.cn/wiki/lug/services/googlefonts</a><br>赞助：无<br>Ping：74ms<br>推荐：★★★★⚝</p><h2 id="公益项目-loli.net">公益项目 <a href="http://loli.net">loli.net</a><a title="#公益项目-loli.net" href="#公益项目-loli.net"></a></h2><p>网站提供常用前端公共库 CDN 服务。<br>这里很多东西都有，Google Fonts、Google 公共库、Gravatar 和 前端库！<br>唯一麻烦的是，不但取名为英文，而且还没有一个人性化的界面，所以你可能需要善用浏览器的搜索功能了。速度其实还是挺不错的。<br>Ps.改名为…萝莉？？？库？</p><p>地址：<a href="https://cdnjs.loli.net/" target="_blank">loli.net</a><br>赞助：公益<br>Ping：84ms<br>推荐：★★★★⚝</p><h2 id="微软-ajax-cdn-服务">微软 Ajax CDN 服务<a title="#微软-ajax-cdn-服务" href="#微软-ajax-cdn-服务"></a></h2><p>估计也用不上，没什么有用的东西。好在速度还可以，应该比较稳定。</p><p>地址：<a href="https://docs.microsoft.com/zh-cn/aspnet/ajax/cdn/overview" target="_blank">AspnetCDN</a><br>赞助：无<br>Ping：92ms<br>推荐：★★★⚝⚝</p><h2 id="cdnjs.com"><a href="http://CDNJS.COM">CDNJS.COM</a><a title="#cdnjs.com" href="#cdnjs.com"></a></h2><p>CDNJS 提供非常完整的 JavaScript 库，无论是热门或是冷门的一应俱全。若你觉得它们缺少哪些好用的函式库，也可以自行提交到网站里，通过审核后就 CDNJS 就会为你分流 js 文件！这项服务是结合 CloudFlare、Pingdom 与 S3Stat 的，稳定性与速度自然不在话下。<br>CDNJS 提供的 JavaScript Libraries 全部列在网站首页，使用者可以直接搜索。这些 JS 库都有标示版本编号、标签以及原维护网站链结。<br>然而根据测试，看了下是 CF 提供的，所以大陆就速度也就一般般了。</p><p>地址：<a href="https://cdnjs.com/" target="_blank">CDNJS.COM</a><br>赞助：Cloudflare<br>Ping：288ms<br>推荐：★★★⚝⚝</p><h2 id="unpkg">UNPKG<a title="#unpkg" href="#unpkg"></a></h2><p>这个网站估计玩过 npm 的都知道。只是不知道用来作 CDN 能否可行。国外的玩意速度都这样子。</p><p>地址：<a href="https://unpkg.com/" target="_blank">UNPKG</a><br>赞助：CloudFlare<br>Ping：283ms<br>推荐：★★⚝⚝⚝</p><h2 id="cdnjs.net"><a href="http://CDNJS.NET">CDNJS.NET</a><a title="#cdnjs.net" href="#cdnjs.net"></a></h2><p>还是很全的，感觉跟 <a href="http://CDNJS.COM">CDNJS.COM</a> 有什么莫名的关系，网上都说这是个盗版。但不管怎么说是速度却败下阵来，而且有一些虽还算和谐的广告。</p><p>地址：<a href="https://cdnjs.net/" target="_blank">CDNJS.NET</a><br>赞助：无<br>Ping：302ms<br>推荐：★★⚝⚝⚝</p><h2 id="google-hosted-libraries">Google Hosted Libraries<a title="#google-hosted-libraries" href="#google-hosted-libraries"></a></h2><p>来自谷歌的托管库，大天朝看看就行。没法用，除非你的服务器是在非天朝（港澳台还是可以的）。<br>Ps.前文有大陆使用方法。</p><p>地址：<a href="https://developers.google.com/speed/libraries" target="_blank">Google Hosted Libraries</a><br>赞助：无<br>Ping：+∞<br>推荐：★⚝⚝⚝⚝</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近总感觉自己的网站速度不行，又不想重新搭建（Hexo 的宗旨就是打造响应速度超快的轻量级博客嘛），所以这篇文章也就由此应运而生了。&lt;/p&gt;
&lt;p&gt;一个功能丰富的博客总是要引用一些优秀的项目代码。因此为了加快响应速度，不妨从 CDN 入手。&lt;/p&gt;
&lt;blockquote&gt;</summary>
      
    
    
    
    <category term="Resource" scheme="https://blogv2.cworld.top/categories/Resource/"/>
    
    
    <category term="CDN" scheme="https://blogv2.cworld.top/tags/CDN/"/>
    
  </entry>
  
  <entry>
    <title>利用腾讯云无服务器云函数搭建 OneDrive 网盘</title>
    <link href="https://blogv2.cworld.top/post/onedrive-scf/"/>
    <id>https://blogv2.cworld.top/post/onedrive-scf/</id>
    <published>2020-02-13T08:44:58.000Z</published>
    <updated>2024-04-29T04:43:39.752Z</updated>
    
    <content type="html"><![CDATA[<p>原理是用腾讯云的无服务器云函数配合 API 网关实现，不需要自己的服务器。</p><span id="more"></span><p>零成本搭建，实测运行机器的配置，8 核 16G 内存（可以运行 System 命令链接 Shell 看），因此此方法搭建自己的大型网站完全够用。</p><p>腾讯云无服务器云函数（Serverless Cloud Function，SCF）是腾讯云为企业和开发者们提供的无服务器执行环境，帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件，即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。</p><h2 id="准备">准备<a title="#准备" href="#准备"></a></h2><ul><li><p>OneDrive SCF 源码</p><p>这里给出仓库地址：</p><p>最初版本 <a href="https://github.com/Tai7sy/OneDrive_SCF" target="_blank">OneDrive_SCF</a></p><p>第二版本 <a href="https://github.com/qkqpttgf/OneDrive_SCF" target="_blank">OneDrive_SCF</a></p><p>三合一版本 <a href="https://github.com/qkqpttgf/OneManager-php" target="_blank">OneManager-php</a></p></li><li><p>一个 OneDrive 账号</p><p>如果你想拥有一个不限量空间，可以尝试在网上找子账号，或者自己申请 <a href="https://baijiahao.baidu.com/s?id=1655579024801979058" target="_blank">Office 365 E5 管理</a></p></li><li><p>一个腾讯云账号</p></li></ul><h2 id="提要">提要<a title="#提要" href="#提要"></a></h2><ul><li>腾讯云的 API 网关还可以关联上自己的域名，从而脱离本身的随机域名。</li><li>如果你是 Office 365 E5 管理员并准备 90 天续期，或许这个可以帮助你长期保持活跃状态。</li></ul><h2 id="注意事项">注意事项<a title="#注意事项" href="#注意事项"></a></h2><p>API 网关从 2019 年 12 月 4 日开始收费。请注意不要超过额度，这意味着最好不要将网站随意告诉他人，以免恶意刷流量。当然腾讯云的免费额度对于个人来说完全够用，超出后收费也非常亲民。所以最好是在腾讯云上充值一块钱，以免意外超额。</p><p>仅调用云函数会收费，因此查看文件的文件本身和下载仅消耗微软的免费服务，因此不会有任何费用产生。</p><p><a href="https://cloud.tencent.com/document/product/583/12282" target="_blank">腾讯云免费额度</a></p><p><a href="https://cloud.tencent.com/document/product/583/12284" target="_blank">GBs 单位与费用计算</a></p><p><a href="https://cloud.tencent.com/document/product/583/12281" target="_blank">超出免费额度收费标准</a></p><p>如果上述内容有些生涩难懂，可以配合 <a href="https://cloud.tencent.com/document/product/583/12285" target="_blank">腾讯云函数计费示例</a> 一同查看。</p><h2 id="搭建教程">搭建教程<a title="#搭建教程" href="#搭建教程"></a></h2><p>开发者也很贴心地制作了视频。<a href="https://service-pgxgvop2-1258064400.ap-hongkong.apigateway.myqcloud.com/test/abcdef/%E6%97%A0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%87%BD%E6%95%B0SCF%E6%90%AD%E5%BB%BAOneDrive.mp4?preview" target="_blank">点击查看</a> 可以与此教程互相对照。</p><ol><li><p>打开进入腾讯云 SCF。</p><p><img src="post/onedrive-scf/buiu6ay46j30i2081q37.jpg" alt="腾讯云 SCF" loading="lazy" class="φbp"></p></li><li><p>函数服务-新建函数-空白函数</p><blockquote><p>后面如果想绑定自定义域名，只能绑定备案域名，所以刚开始新建函数的时候，我们最好选择香港地区，即从下图中的广州改为香港。<br><img src="post/onedrive-scf/buivuzqnqj30hl0a6t8v.jpg" alt="新建函数" loading="lazy"></p></blockquote><p>模板选择空白。填写函数名称，注意以后会以这个名称将作网址且难以更改。运行环境选 PHP7.2。<br><img src="post/onedrive-scf/bukixrkfdj30g70cgdfx.jpg" alt="模板选择" loading="lazy"></p></li><li><p>函数配置</p><p>可以修改一下描述，提交方式选择本地上传。</p></li><li><p>下载函数源码并上传</p><p>下载源码：<a href="https://sword.studio/go/aHR0cHM6Ly9naXRodWIuY29tL1RhaTdzeS9PbmVEcml2ZV9TQ0YvYXJjaGl2ZS9tYXN0ZXIuemlw" target="_blank">点击下载</a></p><p><img src="post/onedrive-scf/bukrik5xxj30i80d4dhn.jpg" alt="选择" loading="lazy" class="φbp"></p><blockquote><p>博主在上传的时候因为是手机操作，所以先使用了压缩包的形式，结果提示错误。所以这里可能只能选择文件夹上传。</p></blockquote></li><li><p>添加触发方式</p><p>修改触发方式，开启集成响应。</p><p><img src="post/onedrive-scf/bukx28f6fj30uz0l5n1l.jpg" alt="2020-2-13 10-46-33" loading="lazy" class="φbp"></p></li><li><p>进入网站，添加 API 密钥</p><p><img src="post/onedrive-scf/bul0sz311j30sc0cxq5b.jpg" alt="2020-2-13 10-49-26" loading="lazy" class="φbp"></p><p>选择中文，开始新建</p><p><img src="post/onedrive-scf/bul29qzlgj30jo0ci0ty.jpg" alt="2020-2-13 10-49-39" loading="lazy" class="φbp"></p><p>接下来的窗口选择继续，然后新建密钥。</p><p>回到函数配置，点击右上角的编辑，将获取的密钥粘贴入环境变量中。</p><p><img src="post/onedrive-scf/bul5zj6c3j313t0oagp4.jpg" alt="2020-2-13 10-55-18" loading="lazy" class="φbp"></p><p><img src="post/onedrive-scf/bul8tl7f4j30om0he405.jpg" alt="2020-2-13 10-56-53" loading="lazy" class="φbp"></p></li><li><p>完成配置</p><p>回到之前自己建的网站，如果没有错就可以继续下一步。选择 MS 默认。</p><p>接下来会自动跳转到 OneDrive ，选择登录并继续，即可看到配置成功的界面。</p><p><img src="post/onedrive-scf/buli0z99vj31410o7790.jpg" alt="2020-2-13 11-6-41" loading="lazy" class="φbp"></p><p>回到函数配置，点击右上角的编辑，环境变量中继续添加：key 为 admin ，value 为你要设置的密码。</p><p><img src="post/onedrive-scf/buliziisyj30lb0cc0tn.jpg" alt="2020-2-13 11-7-54" loading="lazy" class="φbp"></p><p>回到网址，刷新后左上角就可以登录进入后台了。点击更新并在下方进行相应配置。这样就基本完工了！</p></li></ol><h2 id="定义域名">定义域名<a title="#定义域名" href="#定义域名"></a></h2><p>回到 API 网关，选择自定义域名，新建</p><p>为了得到最简链接，自定义路径设为 <code>/</code> <code>发布</code></p><p><img src="post/onedrive-scf/bums87xr6j30q30hkjrv.jpg" alt="2020-2-13 11-51-2" loading="lazy" class="φbp"></p><blockquote><p>如果需要 https，点击“点此前往”，然后点击申请免费证书。注意证书和域名自定义都需要添加解析。<br><img src="post/onedrive-scf/bun91d7xwj31an03kjre.jpg" alt="2020-2-13 12-7-30" loading="lazy"></p></blockquote><p>添加蓝色提示框内的网站为 CNAME 解析。</p><p>访问链接即更换为：<a href="https://%60%E4%BD%A0%E8%87%AA%E5%B7%B1%E8%AE%BE%E7%BD%AE%E7%9A%84%E5%9F%9F%E5%90%8D%60/%60%E5%87%BD%E6%95%B0%E5%90%8D%60" target="_blank">https://`你自己设置的域名`/`函数名`</a></p><h2 id="进阶域名">进阶域名<a title="#进阶域名" href="#进阶域名"></a></h2><p>最近腾讯改进出了更完美的方案，可以将上述的“/<code>函数名</code>”也去掉了。</p><p>作者发的视频链接：<a href="https://service-pgxgvop2-1258064400.ap-hongkong.apigateway.myqcloud.com/test/abcdef/%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D%E5%8F%8A%E5%85%B6%E5%AE%83%E8%AE%BE%E7%BD%AE.mp4?preview" target="_blank">使用自定义域名及其它设置</a></p><p>找到下图，点击服务名链接。</p><p><img src="post/onedrive-scf/c2pstaum5j30al07qgll.jpg" alt="image" loading="lazy" class="φbp"></p><p>选择管理 API，点击右侧的编辑。</p><p><img src="post/onedrive-scf/c2q19mjq8j318c09udgh.jpg" alt="image" loading="lazy" class="φbp"></p><p>将路径改为“/”，点击下一步直到完成即可。然后根据提示点击发布。</p><p><img src="post/onedrive-scf/c2raxninpj30dz0adaal.jpg" alt="image" loading="lazy" class="φbp"></p><p><img src="post/onedrive-scf/c2rdybj76j30l40d10sr.jpg" alt="image" loading="lazy" class="φbp"></p><p>（看起来很像 git 代码托管平台的步骤）</p><p><img src="post/onedrive-scf/c2resp4goj30hx0claab.jpg" alt="image" loading="lazy" class="φbp"></p><p>这时访问链接也终于更换为：<a href="https://%60%E4%BD%A0%E8%87%AA%E5%B7%B1%E8%AE%BE%E7%BD%AE%E7%9A%84%E5%9F%9F%E5%90%8D%60" target="_blank">https://`你自己设置的域名`</a></p><h2 id="进阶美化">进阶美化<a title="#进阶美化" href="#进阶美化"></a></h2><p>截图：</p><p><img src="post/onedrive-scf/bum1csl5aj30or0gzgna.jpg" alt="2020-2-13 11-23-49" loading="lazy" class="φbp"></p><p><img src="post/onedrive-scf/bum1w8ap7j30g50afaad.jpg" alt="2020-2-13 11-24-34" loading="lazy" class="φbp"></p><p><img src="post/onedrive-scf/bum28xu35j30ok0ddabj.jpg" alt="2020-2-13 11-25-11" loading="lazy" class="φbp"></p><p>以下美化仅适用于 classic 主题。</p><blockquote><p><strong>日志</strong><br>设置界面失效。还未修复。</p></blockquote><p>腾讯云的函数界面中找到函数代码，下方窗口中选择 theme 文件夹的 classic.php 。找到<code>&lt;/head&gt;</code>前的<code>&lt;/style&gt;</code>，在这行前面追加以下代码。然后点击保存即可。</p><p><img src="post/onedrive-scf/bulr9zy8uj30ei0c0aan.jpg" alt="2020-2-13 11-15-49" loading="lazy" class="φbp"></p><p>代码：</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">body</span>&#123;<span class="attribute">background</span>:<span class="number">#DBDBDB</span> <span class="meta">!important</span>;<span class="attribute">color</span>:<span class="number">#000</span>;<span class="attribute">font-family</span>:Google Sans <span class="meta">!important</span>;&#125;<span class="attribute">font</span>&#123;<span class="attribute">margin</span>:<span class="number">39.5%</span>;<span class="attribute">color</span>:<span class="number">#989898</span>;<span class="attribute">text-align</span>:center;&#125;<span class="selector-tag">a</span><span class="selector-class">.login</span>,<span class="selector-tag">body</span>&gt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">li</span><span class="selector-class">.operate</span>&#123;<span class="attribute">transition</span>:.<span class="number">3s</span>;…<span class="selector-tag">input</span><span class="selector-id">#upload_submit</span>&#123;<span class="attribute">transition</span>:.<span class="number">3s</span>;<span class="attribute">border</span>:none;<span class="attribute">border-radius</span>:<span class="number">4px</span>;<span class="attribute">background</span>:<span class="number">#0000000d</span>;<span class="attribute">padding</span>:<span class="number">8px</span> <span class="number">11px</span>;<span class="attribute">outline</span>:none <span class="meta">!important</span>;&#125;<span class="selector-tag">input</span><span class="selector-id">#upload_submit</span><span class="selector-pseudo">:hover</span>&#123;<span class="attribute">background</span>:<span class="number">#0088ff2e</span>;<span class="attribute">color</span>:<span class="number">#08f</span>;&#125;<span class="selector-tag">form</span><span class="selector-attr">[method=<span class="string">&quot;post&quot;</span>]</span> <span class="selector-tag">table</span>&#123;<span class="attribute">background</span>:<span class="number">#ffffffb5</span>;<span class="attribute">border-radius</span>:<span class="number">4px</span>;<span class="attribute">border</span>:none;<span class="attribute">padding</span>:<span class="number">10px</span>;<span class="attribute">border-spacing</span>:<span class="number">10px</span>;<span class="attribute">margin-bottom</span>:<span class="number">10px</span>;&#125;<span class="selector-tag">form</span><span class="selector-attr">[method=<span class="string">&quot;post&quot;</span>]</span> <span class="selector-tag">td</span>&#123;<span class="attribute">border</span>:none;&#125;<span class="selector-tag">form</span><span class="selector-attr">[method=<span class="string">&quot;post&quot;</span>]</span> <span class="selector-tag">input</span>,<span class="selector-tag">form</span><span class="selector-attr">[method=<span class="string">&quot;post&quot;</span>]</span> select&#123;<span class="attribute">transition</span>:.<span class="number">3s</span>;<span class="attribute">border</span>:none;<span class="attribute">border-radius</span>:<span class="number">4px</span>;<span class="attribute">background</span>:<span class="number">#0000000d</span>;<span class="attribute">padding</span>:<span class="number">8px</span> <span class="number">11px</span>;<span class="attribute">outline</span>:none <span class="meta">!important</span>;&#125;<span class="selector-tag">form</span><span class="selector-attr">[method=<span class="string">&quot;post&quot;</span>]</span> <span class="selector-tag">input</span><span class="selector-attr">[value=<span class="string">&quot;设置&quot;</span>]</span>&#123;<span class="attribute">background</span>:<span class="number">#0088ff2e</span>;<span class="attribute">color</span>:<span class="number">#08f</span>;&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;原理是用腾讯云的无服务器云函数配合 API 网关实现，不需要自己的服务器。&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="Serverless" scheme="https://blogv2.cworld.top/tags/Serverless/"/>
    
    <category term="Onedrive" scheme="https://blogv2.cworld.top/tags/Onedrive/"/>
    
  </entry>
  
  <entry>
    <title>iChrome CSS 美化</title>
    <link href="https://blogv2.cworld.top/post/ichrome-css/"/>
    <id>https://blogv2.cworld.top/post/ichrome-css/</id>
    <published>2019-07-24T05:58:40.000Z</published>
    <updated>2024-04-29T04:43:39.732Z</updated>
    
    <content type="html"><![CDATA[<p>一个 Chrome 插件 iChrome，功能齐全，但是有广告，所以以下代码就是来美化插件并去除“牛皮藓”。</p><span id="more"></span><p><img src="post/ichrome-css/ichrome.jpg" alt="iChrome" loading="lazy" class="φbp"></p><h2 id="使用方法">使用方法<a title="#使用方法" href="#使用方法"></a></h2><p>在插件 iChrome 的设置中找到自定义 CSS 片段框，填入下面的内容，已经过浓缩处理。</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.tab-container</span> <span class="selector-class">.tab</span>&gt;<span class="selector-class">.ad-unit</span><span class="selector-class">.bottom</span>&#123;<span class="attribute">display</span>:none<span class="meta">!important</span>&#125;</span><br><span class="line"><span class="selector-class">.store-detail</span> <span class="selector-class">.preview</span> <span class="selector-class">.widget</span>, <span class="selector-class">.widgets-container</span> <span class="selector-class">.widget</span>&#123;<span class="attribute">background</span>:<span class="number">#fffc</span>;backdrop-<span class="attribute">filter</span>:<span class="built_in">blur</span>(<span class="number">20px</span>)&#125;</span><br><span class="line"><span class="selector-class">.store-detail</span> <span class="selector-class">.preview</span> <span class="selector-class">.widget</span> <span class="selector-class">.wtooltip</span>, <span class="selector-class">.widgets-container</span> <span class="selector-class">.widget</span> <span class="selector-class">.wtooltip</span>&#123;<span class="attribute">display</span>:none<span class="meta">!important</span>&#125;</span><br><span class="line"><span class="selector-tag">header</span><span class="selector-class">.toolbar</span><span class="selector-class">.floating</span> <span class="selector-class">.search</span> <span class="selector-tag">input</span> &#123;<span class="attribute">background</span>:<span class="number">#fffc</span>;backdrop-<span class="attribute">filter</span>:<span class="built_in">blur</span>(<span class="number">20px</span>);<span class="attribute">box-shadow</span>:<span class="number">0</span> <span class="number">2px</span> <span class="number">10px</span> <span class="number">0</span> <span class="number">#0000005e</span>&#125;</span><br><span class="line"><span class="selector-class">.store-detail</span> <span class="selector-class">.preview</span> <span class="selector-class">.widget</span> <span class="selector-class">.wdelete</span>, <span class="selector-class">.widgets-container</span> <span class="selector-class">.widget</span> <span class="selector-class">.wdelete</span>&#123;<span class="attribute">color</span>:black&#125;</span><br><span class="line"><span class="selector-class">.feedback-link</span> <span class="selector-class">.icon</span>&#123;<span class="attribute">display</span>:none<span class="meta">!important</span>&#125;</span><br><span class="line"><span class="selector-class">.bg-info</span>&#123;<span class="attribute">right</span>:<span class="number">10px</span>;<span class="attribute">color</span>:<span class="number">#fffc</span>&#125;</span><br><span class="line"><span class="selector-class">.add-widget-link</span>&#123;<span class="attribute">color</span>:<span class="number">#fffc</span>;<span class="attribute">position</span>:absolute&#125;</span><br><span class="line"><span class="selector-class">.menu-toggle</span> <span class="selector-class">.menu-button</span><span class="selector-pseudo">:hover</span>&#123;<span class="attribute">background-color</span>:<span class="number">#fff</span>&#125;</span><br><span class="line"><span class="selector-class">.menu-toggle</span> <span class="selector-class">.menu-button</span><span class="selector-pseudo">:before</span>&#123;<span class="attribute">color</span>:black&#125;</span><br><span class="line"><span class="selector-class">.menu-toggle</span> <span class="selector-class">.menu-button</span>&#123;<span class="attribute">background-color</span>:<span class="number">#fffc</span>&#125;</span><br><span class="line"><span class="selector-class">.add-widget-link</span> <span class="selector-class">.icon</span>&#123;<span class="attribute">text-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">0</span> <span class="number">#fff0</span>&#125;</span><br><span class="line"><span class="selector-tag">button</span><span class="selector-class">.material</span><span class="selector-class">.fab</span>&#123;<span class="attribute">background-color</span>:<span class="number">#fffc</span>&#125;</span><br><span class="line"><span class="selector-class">.menu-container</span>&#123;<span class="attribute">background</span>:<span class="number">#fffc</span>;backdrop-<span class="attribute">filter</span>:<span class="built_in">blur</span>(<span class="number">20px</span>);<span class="attribute">box-shadow</span>:<span class="number">0</span> <span class="number">0</span> <span class="number">0</span> <span class="number">0</span> <span class="number">#fff0</span>&#125;</span><br><span class="line"><span class="selector-class">.app</span><span class="selector-class">.settings</span> <span class="selector-class">.page</span> <span class="selector-tag">header</span>&#123;<span class="attribute">background</span>:<span class="number">#4080fe</span>&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;一个 Chrome 插件 iChrome，功能齐全，但是有广告，所以以下代码就是来美化插件并去除“牛皮藓”。&lt;/p&gt;</summary>
    
    
    
    <category term="Tutorials" scheme="https://blogv2.cworld.top/categories/Tutorials/"/>
    
    
    <category term="CSS" scheme="https://blogv2.cworld.top/tags/CSS/"/>
    
  </entry>
  
  <entry>
    <title>Pure 百度 - 质形色，始方圆</title>
    <link href="https://blogv2.cworld.top/post/pure-baidu/"/>
    <id>https://blogv2.cworld.top/post/pure-baidu/</id>
    <published>2019-07-12T09:50:18.000Z</published>
    <updated>2024-04-29T04:43:39.760Z</updated>
    
    <content type="html"><![CDATA[<h2 id="介绍">介绍<a title="#介绍" href="#介绍"></a></h2><h3 id="宣传图">宣传图<a title="#宣传图" href="#宣传图"></a></h3><p><img src="post/pure-baidu/1.jpg" alt="1" loading="lazy" class="φbp"></p><p><img src="post/pure-baidu/2.jpg" alt="2" loading="lazy" class="φbp"></p><p><img src="post/pure-baidu/3.jpg" alt="3" loading="lazy" class="φbp"></p><p><img src="post/pure-baidu/4.jpg" alt="4" loading="lazy" class="φbp"></p><p><img src="post/pure-baidu/5.jpg" alt="5" loading="lazy" class="φbp"></p><h3 id="酷安链接">酷安链接<a title="#酷安链接" href="#酷安链接"></a></h3><p><a href="https://www.coolapk.com/u/1384771" target="_blank">CWorld</a></p><h3 id="写作说明">写作说明<a title="#写作说明" href="#写作说明"></a></h3><p>好不好用自己用了才知道，6,266 行，183,413 字符，凝聚了多少个日夜的缠绵。<br>它涵盖了大量百度的网页，从登录框到按钮，从扁平到质感，升华了多少设计师前沿的灵感。<br>做出一款不管是强迫症，还是设计师，都能佩服舒心的主题，真的太难。<br>我曾多次尝试扁平与质感的平衡，大量留白的舒心，用色彩块代替繁琐和带强烈割据感的线条…<br>在一个被大众所摒弃的拟物化、随处可见的背景直接引用图片来简单模拟质感、改了大框架却连简单的链接、输入框、按钮都没有一丝一毫的修改、到现在都很少用上字体图标、单调到甚至没有任何动画、甚至推广满屏幕的陈旧的百度网页，搭建起一个全新的设计风格，这才是百度所应有的样子，独具一格，简约而现代…<br>我使用了一些质感但不守旧的配色，轻简的质感阴影和鲜明的色块…<br>百度的每一款产品都在属于它们本身的独特设计风格上，反复优化统一。</p><h3 id="完成进度">完成进度<a title="#完成进度" href="#完成进度"></a></h3><p>已完成，欢迎体验。</p><h3 id="覆盖内容">覆盖内容<a title="#覆盖内容" href="#覆盖内容"></a></h3><p>支持百度以下产品：<br>搜索/文库/知道/网盘/百科/经验/翻译/地图/视频/新闻/学术/快照/糯米/风云榜/智能云/百家号/账户安全/个人中心/网址导航/千千静听</p><h2 id="链接">链接<a title="#链接" href="#链接"></a></h2><p><a href="https://userstyles.org/styles/173673/pure" target="_blank"><code>电脑版</code></a> <a href="https://userstyles.org/styles/178663" target="_blank"><code>手机版</code></a></p><h2 id="使用方法">使用方法<a title="#使用方法" href="#使用方法"></a></h2><h3 id="支持软件">支持软件<a title="#支持软件" href="#支持软件"></a></h3><ul><li><p>支持电脑浏览器：</p><p>支持插件的浏览器几乎都能支持</p></li><li><p>支持手机浏览器：</p><p><a href="https://www.coolapk.com/apk/org.mozilla.firefox" target="_blank"><code>Firefox</code></a>、<a href="https://www.coolapk.com/apk/com.kiwibrowser.browser" target="_blank"><code>Kiwi Broswer</code></a>、<a href="https://www.coolapk.com/apk/mark.via" target="_blank"><code>Via</code></a></p></li></ul><p>由于 Via 还没有研究好，添加后不生效，所以暂时不介绍这种，如果有会折腾的可以告诉我</p><h3 id="支持插件">支持插件<a title="#支持插件" href="#支持插件"></a></h3><ul><li>Userscript：油猴脚本 Tampermonkey，ODM Sandbox 等</li><li>CSS：Stylish，Stylus 等</li></ul><h3 id="步骤">步骤<a title="#步骤" href="#步骤"></a></h3><ol><li><p>下载上述插件任意一个，建议 Stylish（方便日后更新）。<br><img src="post/pure-baidu/di3ir3hbj30qh06awfg.jpg" alt="image" loading="lazy"></p></li><li><p>点击上述 Pure 百度的网址。<br><img src="post/pure-baidu/di4eg10wj30c2012a9u.jpg" alt="image" loading="lazy"></p></li><li><p>如果你用的 CSS 类，直接点击蓝色的“Install Style”，即可生效（如果没有看到，说明可能你的第一步没有完成）。<br><img src="post/pure-baidu/di21c2t7j30ld0f80wy.jpg" alt="image" loading="lazy"><br>如果你用的 Userscript 类，网页下翻后点击蓝色小字“Install style as userscript”即可（这种方法甚至可以在不进行第一步的操作下进行）。<br><img src="post/pure-baidu/dm9ki2afj30bq0elglu.jpg" alt="image" loading="lazy"></p></li></ol><h2 id="新增">新增<a title="#新增" href="#新增"></a></h2><h3 id="自定义选项">自定义选项<a title="#自定义选项" href="#自定义选项"></a></h3><p><img src="post/pure-baidu/h79y767sg30qs0msqd9.gif" alt="image" loading="lazy" class="φbp"></p><h2 id="推荐">推荐<a title="#推荐" href="#推荐"></a></h2><p>感谢一下推荐 Pure 百度的网友们：</p><details><summary>[你从未见过的全新百度！PURE 纯净百度安装教程](https://www.bilibili.com/video/av81381716/)</summary><ul><li>作者：<a href="https://space.bilibili.com/274565604" target="_blank">彬彬有礼的有礼</a></li><li>日期：2019-12-31</li></ul></details><details><summary>[这样搞百度！我是舒服了,你们随意 Pure 百度主题美化](https://www.yijingying.com/592.html)</summary><ul><li>作者：<a href="https://www.yijingying.com/592" target="_blank">Healer</a></li><li>日期：2020-01-05</li></ul></details>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;介绍&quot;&gt;介绍&lt;a title=&quot;#介绍&quot; href=&quot;#介绍&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;宣传图&quot;&gt;宣传图&lt;a title=&quot;#宣传图&quot; href=&quot;#宣传图&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;post/pure-baidu/1.jpg&quot; </summary>
      
    
    
    
    <category term="Project" scheme="https://blogv2.cworld.top/categories/Project/"/>
    
    
    <category term="CSS" scheme="https://blogv2.cworld.top/tags/CSS/"/>
    
    <category term="Userstyle" scheme="https://blogv2.cworld.top/tags/Userstyle/"/>
    
  </entry>
  
  <entry>
    <title>免费 API 汇总</title>
    <link href="https://blogv2.cworld.top/post/free-api/"/>
    <id>https://blogv2.cworld.top/post/free-api/</id>
    <published>2019-07-10T13:18:58.000Z</published>
    <updated>2024-04-29T04:43:39.720Z</updated>
    
    <content type="html"><![CDATA[<h2 id="企业">企业<a title="#企业" href="#企业"></a></h2><h3 id="汇总">汇总<a title="#汇总" href="#汇总"></a></h3><p><a href="https://blog.csdn.net/MISTLETOE_WW/article/details/84192185" target="_blank">csdn</a></p><p><a href="https://segmentfault.com/a/1190000017047048" target="_blank">segmentfault</a></p><h3 id="项目">项目<a title="#项目" href="#项目"></a></h3><h3 id="姬长信-api（稳定推荐）">姬长信 API（稳定推荐）<a title="#姬长信-api（稳定推荐）" href="#姬长信-api（稳定推荐）"></a></h3><p><a href="https://api.isoyu.com/" target="_blank">Api 简介</a></p><p>接口太多，不列举了</p><h3 id="free-api（全，稳定）">Free Api（全，稳定）<a title="#free-api（全，稳定）" href="#free-api（全，稳定）"></a></h3><p><a href="https://www.free-api.com/" target="_blank">Api 详情</a></p><h3 id="网友-木芽">网友 木芽<a title="#网友-木芽" href="#网友-木芽"></a></h3><p><a href="https://api.xygeng.cn/bing/1920.php" target="_blank">Bing 日图接口</a></p><p><a href="https://api.xygeng.cn/dailywd/api/api.php" target="_blank">木芽一言接口</a></p><h3 id="网友-xiaohei">网友 Xiaohei<a title="#网友-xiaohei" href="#网友-xiaohei"></a></h3><p><a href="https://www.codess-yun.top/" target="_blank">主站</a></p><p><a href="https://www.codess-yun.top:8756/" target="_blank">随机接口</a></p><p><a href="https://codess.cc/Bing/Bing.php" target="_blank">Bing 日图接口</a></p><p><a href="https://pic.codess.cc/" target="_blank">免费图床</a></p><h3 id="开源社区（全，不推荐）">开源社区（全，不推荐）<a title="#开源社区（全，不推荐）" href="#开源社区（全，不推荐）"></a></h3><p><a href="https://www.apiopen.top/" target="_blank">主站</a></p><p><a href="https://www.jianshu.com/p/e6f072839282" target="_blank">文档介绍</a></p><p><a href="https://www.apiopen.top/api.html" target="_blank">接口预览</a></p><h3 id="网友-小灵冲">网友 小灵冲<a title="#网友-小灵冲" href="#网友-小灵冲"></a></h3><p><a href="http://pic.tsmp4.net/" target="_blank">图床</a></p><p><a href="http://pic.tsmp4.net/api/fengjing/img.php" target="_blank">风景随机图</a></p><p><a href="http://pic.tsmp4.net/api/nvsheng/img.php" target="_blank">女神随机图</a></p><p><a href="http://pic.tsmp4.net/api/yingshi/img.php" target="_blank">影视随机图</a></p><p><a href="http://pic.tsmp4.net/api/erciyuan/img.php" target="_blank">二次元随机图</a></p><h3 id="网友-墨天逸">网友 墨天逸<a title="#网友-墨天逸" href="#网友-墨天逸"></a></h3><p><a href="http://api.mtyqx.cn/" target="_blank">主站</a></p><p><a href="http://api.mtyqx.cn/api/random.php" target="_blank">动漫 1</a></p><p><a href="http://api.mtyqx.cn/tapi/random.php" target="_blank">动漫 2</a></p><h2 id="海外（访问速度较慢）">海外（访问速度较慢）<a title="#海外（访问速度较慢）" href="#海外（访问速度较慢）"></a></h2><h3 id="unsplash-随机（优质，加载慢）">Unsplash 随机（优质，加载慢）<a title="#unsplash-随机（优质，加载慢）" href="#unsplash-随机（优质，加载慢）"></a></h3><p><a href="https://source.unsplash.com/" target="_blank">介绍</a></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">示例 https://source.unsplash.com/random/1920x1080?wallpapers</span><br></pre></td></tr></table></figure><h3 id="lorempixel-随机">Lorempixel 随机<a title="#lorempixel-随机" href="#lorempixel-随机"></a></h3><p><a href="http://lorempixel.com/" target="_blank">介绍</a></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">示例 http://lorempixel.com/1920/1080/</span><br></pre></td></tr></table></figure><h3 id="lorem-picsum（速度较快，有灰度或模糊功能）">Lorem Picsum（速度较快，有灰度或模糊功能）<a title="#lorem-picsum（速度较快，有灰度或模糊功能）" href="#lorem-picsum（速度较快，有灰度或模糊功能）"></a></h3><p><a href="https://picsum.photos/" target="_blank">介绍</a></p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">示例 https://picsum.photos/1920/1080 https://picsum.photos/1920/1080?blur=10</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;企业&quot;&gt;企业&lt;a title=&quot;#企业&quot; href=&quot;#企业&quot;&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;汇总&quot;&gt;汇总&lt;a title=&quot;#汇总&quot; href=&quot;#汇总&quot;&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/MISTLE</summary>
      
    
    
    
    <category term="Resource" scheme="https://blogv2.cworld.top/categories/Resource/"/>
    
    
    <category term="API" scheme="https://blogv2.cworld.top/tags/API/"/>
    
  </entry>
  
  <entry>
    <title>Markdown 语法与学习记录</title>
    <link href="https://blogv2.cworld.top/post/markdown/"/>
    <id>https://blogv2.cworld.top/post/markdown/</id>
    <published>2019-07-10T13:18:58.000Z</published>
    <updated>2024-04-29T04:43:39.732Z</updated>
    
    <content type="html"><![CDATA[<p>Markdown 是一种轻量级的「标记语言」</p><span id="more"></span><h2 id="github-版本">Github 版本<a title="#github-版本" href="#github-版本"></a></h2><p>Markdown 是一种轻量级且易于使用的语法，用于为您的写作设计风格。 它包括的公约:</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">语法突出显示代码块</span><br><span class="line"></span><br><span class="line"><span class="section"># 标题 1</span></span><br><span class="line"></span><br><span class="line"><span class="section">## 标题 2</span></span><br><span class="line"></span><br><span class="line"><span class="section">### 标题 3</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> 项目符号</span><br><span class="line"><span class="bullet">-</span> 清单</span><br><span class="line"></span><br><span class="line"><span class="bullet">1.</span> 编号</span><br><span class="line"><span class="bullet">2.</span> 清单</span><br><span class="line"></span><br><span class="line"><span class="strong">**粗体**</span> 和 <span class="emphasis">_斜体_</span> 和 <span class="code">`代码`</span> 文本</span><br><span class="line"></span><br><span class="line">[<span class="string">链接</span>](<span class="link">网址</span>) 和 ![<span class="string">图片</span>](<span class="link">src</span>)</span><br></pre></td></tr></table></figure><p>有关详细信息，请参阅 <a href="https://guides.github.com/features/mastering-markdown/" target="_blank">GitHub Flavored Markdown</a>。</p><hr><h2 id="segmentfault-版本">SegmentFault 版本<a title="#segmentfault-版本" href="#segmentfault-版本"></a></h2><p>来自 <a href="https://segmentfault.com/markdown" target="_blank">SegmentFault</a></p><h3 id="基本技巧">基本技巧<a title="#基本技巧" href="#基本技巧"></a></h3><h4 id="代码">代码<a title="#代码" href="#代码"></a></h4><p>如果你只想高亮语句中的某个函数名或关键字，可以使用 <code>function_name()</code> 实现</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="code">`function_name()`</span></span><br></pre></td></tr></table></figure><p>通常编辑器根据代码片段适配合适的高亮方法，但你也可以用 <code>```</code> 包裹一段代码，并指定一种语言</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">⁢⁢<span class="code">`javascript $(document).ready(function () &#123; alert(&#x27;hello world&#x27;); &#125;); ⁢⁢`</span></span><br></pre></td></tr></table></figure><p>支持的语言：<code>1c, abnf, accesslog, actionscript, ada, apache, applescript, arduino, armasm, asciidoc, aspectj, autohotkey, autoit, avrasm, awk, axapta, bash, basic, bnf, brainfuck, cal, capnproto, ceylon, clean, clojure, clojure-repl, cmake, coffeescript, coq, cos, cpp, crmsh, crystal, cs, csp, css, d, dart, delphi, diff, django, dns, dockerfile, dos, dsconfig, dts, dust, ebnf, elixir, elm, erb, erlang, erlang-repl, excel, fix, flix, fortran, fsharp, gams, gauss, gcode, gherkin, glsl, go, golo, gradle, groovy, haml, handlebars, haskell, haxe, hsp, htmlbars, http, hy, inform7, ini, irpf90, java, javascript, json, julia, kotlin, lasso, ldif, leaf, less, lisp, livecodeserver, livescript, llvm, lsl, lua, makefile, markdown, mathematica, matlab, maxima, mel, mercury, mipsasm, mizar, mojolicious, monkey, moonscript, n1ql, nginx, nimrod, nix, nsis, objectivec, ocaml, openscad, oxygene, parser3, perl, pf, php, pony, powershell, processing, profile, prolog, protobuf, puppet, purebasic, python, q, qml, r, rib, roboconf, rsl, ruby, ruleslanguage, rust, scala, scheme, scilab, scss, smali, smalltalk, sml, sqf, sql, stan, stata, step21, stylus, subunit, swift, taggerscript, tap, tcl, tex, thrift, tp, twig, typescript, vala, vbnet, vbscript, vbscript-html, verilog, vhdl, vim, x86asm, xl, xml, xquery, yaml, zephir</code></p><p>也可以使用 4 空格缩进，再贴上代码，实现相同的的效果</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">def g(x):</span><br><span class="line"><span class="code">    yield from range(x, 0, -1)</span></span><br><span class="line"><span class="code">yield from range(x)</span></span><br></pre></td></tr></table></figure><p>如你不需要代码高亮，可以用下面的方法禁用：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">⁢<span class="code">`nohighlight ⁢`</span></span><br></pre></td></tr></table></figure><h4 id="标题">标题<a title="#标题" href="#标题"></a></h4><p>文章内容较多时，可以用标题分段：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># 标题 1</span></span><br><span class="line"></span><br><span class="line"><span class="section">## 标题 2</span></span><br><span class="line"></span><br><span class="line"><span class="section">## 大标题</span></span><br><span class="line"></span><br><span class="line"><span class="section">### 小标题</span></span><br></pre></td></tr></table></figure><h4 id="粗斜体">粗斜体<a title="#粗斜体" href="#粗斜体"></a></h4><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="emphasis">_斜体文本_</span> <span class="emphasis">_斜体文本_</span></span><br><span class="line"><span class="strong">**粗体文本**</span> <span class="strong">**粗体文本**</span></span><br><span class="line"><span class="strong">**<span class="emphasis">_粗斜体文本_</span>**</span> <span class="strong">**<span class="emphasis">_粗斜体文本_</span>**</span></span><br></pre></td></tr></table></figure><h4 id="链接">链接<a title="#链接" href="#链接"></a></h4><p>常用链接方法</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">文字链接 [<span class="string">链接名称</span>](<span class="link">http://链接网址</span>)</span><br><span class="line">网址链接 <span class="language-xml">&lt;http://链接网址&gt;</span></span><br></pre></td></tr></table></figure><p>高级链接技巧</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">这个链接用 1 作为网址变量 [<span class="string">Google</span>][<span class="symbol">1</span>].</span><br><span class="line">这个链接用 yahoo 作为网址变量 [<span class="string">Yahoo!</span>][<span class="symbol">yahoo</span>].</span><br><span class="line">然后在文档的结尾为变量赋值（网址）</span><br><span class="line"></span><br><span class="line">[<span class="symbol">1</span>]: <span class="link">http://www.google.com/</span></span><br><span class="line">[<span class="symbol">yahoo</span>]: <span class="link">http://www.yahoo.com/</span></span><br></pre></td></tr></table></figure><h4 id="列表">列表<a title="#列表" href="#列表"></a></h4><p>普通无序列表</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> 列表文本前使用 [减号+空格]</span><br><span class="line"></span><br><span class="line"><span class="bullet">*</span> 列表文本前使用 [加号+空格]</span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> 列表文本前使用 [星号+空格]</span><br></pre></td></tr></table></figure><p>普通有序列表</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">1.</span> 列表前使用 [数字+空格]</span><br><span class="line"><span class="bullet">2.</span> 我们会自动帮你添加数字</span><br><span class="line"><span class="bullet">3.</span> 不用担心数字不对，显示的时候我们会自动把这行的 7 纠正为 3</span><br></pre></td></tr></table></figure><p>列表嵌套</p><ol><li>列出所有元素：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">    -</span> 无序列表元素 A</span><br><span class="line"><span class="bullet">        1.</span> 元素 A 的有序子列表</span><br><span class="line"><span class="bullet">    -</span> 前面加四个空格</span><br><span class="line"></span><br><span class="line"><span class="bullet">2.</span> 列表里的多段换行：</span><br><span class="line">   前面必须加四个空格，</span><br><span class="line">   这样换行，整体的格式不会乱</span><br><span class="line"></span><br><span class="line"><span class="bullet">3.</span> 列表里引用：</span><br><span class="line"></span><br><span class="line">   &gt; 前面空一行</span><br><span class="line">   &gt; 仍然需要在 &gt; 前面加四个空格</span><br><span class="line"></span><br><span class="line"><span class="bullet">4.</span> 列表里代码段：</span><br><span class="line">   ⁢<span class="code">`前面四个空格，之后按代码语法`</span> 书写</span><br><span class="line">   ⁢<span class="code">```</span></span><br><span class="line"><span class="code">   或者这样直接空八个，引入代码块</span></span><br></pre></td></tr></table></figure><h4 id="引用">引用<a title="#引用" href="#引用"></a></h4><p>普通引用</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="quote">&gt; 引用文本前使用 [大于号+空格]</span></span><br><span class="line"><span class="quote">&gt; 折行可以不加，新起一行都要加上哦</span></span><br></pre></td></tr></table></figure><p>引用里嵌套引用</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="quote">&gt; 最外层引用</span></span><br><span class="line"><span class="quote">&gt;</span></span><br><span class="line"><span class="quote">&gt; &gt; 多一个 &gt; 嵌套一层引用</span></span><br><span class="line"><span class="quote">&gt; &gt;</span></span><br><span class="line"><span class="quote">&gt; &gt; &gt; 可以嵌套很多层</span></span><br></pre></td></tr></table></figure><p>引用里嵌套列表</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="quote">&gt; - 这是引用里嵌套的一个列表</span></span><br><span class="line"><span class="quote">&gt; - 还可以有子列表</span></span><br><span class="line"><span class="quote">&gt;   - 子列表需要从 - 之后延后四个空格开始</span></span><br></pre></td></tr></table></figure><p>引用里嵌套代码块</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="quote">&gt;     同样的，在前面加四个空格形成代码块</span></span><br><span class="line"><span class="quote">&gt;</span></span><br><span class="line"><span class="quote">&gt; ⁢` . 或者使用 ⁢` 形成代码块</span></span><br><span class="line"><span class="quote">&gt; ⁢```</span></span><br></pre></td></tr></table></figure><h4 id="图片">图片<a title="#图片" href="#图片"></a></h4><p>跟链接的方法区别在于前面加了个感叹号 !，这样是不是觉得好记多了呢？</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">![<span class="string">图片名称</span>](<span class="link">http://图片网址</span>)</span><br></pre></td></tr></table></figure><p>当然，你也可以像网址那样对图片网址使用变量</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">这个链接用 1 作为网址变量 [<span class="string">Google</span>][<span class="symbol">1</span>].</span><br><span class="line">然后在文档的结尾位变量赋值（网址）</span><br><span class="line"></span><br><span class="line">[<span class="symbol">1</span>]: <span class="link">http://www.google.com/logo.png</span></span><br></pre></td></tr></table></figure><h4 id="换行">换行<a title="#换行" href="#换行"></a></h4><p>如果另起一行，只需在当前行结尾加 2 个空格</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">在当前行的结尾加 2 个空格  </span><br><span class="line">这行就会新起一行</span><br></pre></td></tr></table></figure><p>如果是要起一个新段落，只需要空出一行即可。</p><h4 id="分隔符">分隔符<a title="#分隔符" href="#分隔符"></a></h4><p>如果你有写分割线的习惯，可以新起一行输入三个减号-。当前后都有段落时，请空出一行：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">前面的段落</span><br><span class="line"></span><br><span class="line">---</span><br><span class="line"></span><br><span class="line">后面的段落</span><br></pre></td></tr></table></figure><h3 id="高级技巧">高级技巧<a title="#高级技巧" href="#高级技巧"></a></h3><h4 id="行内-html-元素">行内 HTML 元素<a title="#行内-html-元素" href="#行内-html-元素"></a></h4><p>目前只支持部分段内 HTML 元素效果，包括 <code>&lt;kdb&gt; &lt;b&gt; &lt;i&gt; &lt;em&gt; &lt;sup&gt; &lt;sub&gt; &lt;br&gt;</code> ，如</p><p>键位显示</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">使用 <span class="language-xml"><span class="tag">&lt;<span class="name">kbd</span>&gt;</span></span>Ctrl<span class="language-xml"><span class="tag">&lt;/<span class="name">kbd</span>&gt;</span></span> + <span class="language-xml"><span class="tag">&lt;<span class="name">kbd</span>&gt;</span></span>Alt<span class="language-xml"><span class="tag">&lt;/<span class="name">kbd</span>&gt;</span></span> + <span class="language-xml"><span class="tag">&lt;<span class="name">kbd</span>&gt;</span></span>Del<span class="language-xml"><span class="tag">&lt;/<span class="name">kbd</span>&gt;</span></span> 重启电脑</span><br></pre></td></tr></table></figure><p>代码块</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">使用 <span class="language-xml"><span class="tag">&lt;<span class="name">pre</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">pre</span>&gt;</span></span> 元素同样可以形成代码块</span><br></pre></td></tr></table></figure><p>粗斜体</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">b</span>&gt;</span></span> Markdown 在此处同样适用，如 <span class="emphasis">_加粗_</span> <span class="language-xml"><span class="tag">&lt;/<span class="name">b</span>&gt;</span></span></span><br></pre></td></tr></table></figure><h4 id="符号转义">符号转义<a title="#符号转义" href="#符号转义"></a></h4><p>如果你的描述中需要用到 markdown 的符号，比如 _ # * 等，但又不想它被转义，这时候可以在这些符号前加反斜杠，如 <code>\_</code> <code>\#</code> <code>\*</code> 进行避免。</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">\<span class="emphasis">_不想这里的文本变斜体\_</span></span><br><span class="line">\<span class="emphasis">*\*</span>不想这里的文本被加粗\<span class="emphasis">*\*</span></span><br></pre></td></tr></table></figure><h4 id="扩展">扩展<a title="#扩展" href="#扩展"></a></h4><p>支持 jsfiddle、gist、runjs、优酷视频，直接填写 url，在其之后会自动添加预览点击会展开相关内容。</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">http://&#123;url<span class="emphasis">*of_the_fiddle&#125;/embedded/[&#123;tabs&#125;/[&#123;style&#125;]]/</span></span><br><span class="line"><span class="emphasis">https://gist.github.com/&#123;gist_id&#125;</span></span><br><span class="line"><span class="emphasis">http://runjs.cn/detail/&#123;id&#125;</span></span><br><span class="line"><span class="emphasis">http://v.youku.com/v_show/id*</span>&#123;video<span class="emphasis">_id&#125;.html</span></span><br></pre></td></tr></table></figure><h4 id="公式">公式<a title="#公式" href="#公式"></a></h4><p>当你需要在编辑器中插入数学公式时，可以使用两个美元符 $$ 包裹 TeX 或 LaTeX 格式的数学公式来实现。提交后，问答和文章页会根据需要加载 Mathjax 对数学公式进行渲染。如：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$$ x = &#123;-b \pm \sqrt&#123;b^2-4ac&#125; \over 2a&#125;. $$</span><br><span class="line"></span><br><span class="line">$$</span><br><span class="line">x \href&#123;why-equal.html&#125;&#123;=&#125; y^2 + 1</span><br><span class="line">$$</span><br></pre></td></tr></table></figure><p>同时也支持 HTML 属性，如：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$$ (x+1)^2 = \class&#123;hidden&#125;&#123;(x+1)(x+1)&#125; $$</span><br><span class="line"></span><br><span class="line">$$</span><br><span class="line">(x+1)^2 = \cssId&#123;step1&#125;&#123;\style&#123;visibility:hidden&#125;&#123;(x+1)(x+1)&#125;&#125;</span><br><span class="line">$$</span><br></pre></td></tr></table></figure><hr><h2 id="补充">补充<a title="#补充" href="#补充"></a></h2><h4 id="删除线">删除线<a title="#删除线" href="#删除线"></a></h4><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~~删除线~~</span><br></pre></td></tr></table></figure><h4 id="html-写法">Html 写法<a title="#html-写法" href="#html-写法"></a></h4><p>折叠块</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">details</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;<span class="name">summary</span>&gt;</span></span>点击展开<span class="language-xml"><span class="tag">&lt;/<span class="name">summary</span>&gt;</span></span>它被隐藏了<span class="language-xml"><span class="tag">&lt;/<span class="name">details</span>&gt;</span></span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;Markdown 是一种轻量级的「标记语言」&lt;/p&gt;</summary>
    
    
    
    <category term="Docs" scheme="https://blogv2.cworld.top/categories/Docs/"/>
    
    
    <category term="Markdown" scheme="https://blogv2.cworld.top/tags/Markdown/"/>
    
  </entry>
  
  <entry>
    <title>各国语言缩写</title>
    <link href="https://blogv2.cworld.top/post/national-language/"/>
    <id>https://blogv2.cworld.top/post/national-language/</id>
    <published>2019-07-04T22:42:30.000Z</published>
    <updated>2024-04-29T04:43:39.740Z</updated>
    
    <content type="html"><![CDATA[<p>鉴于经常要用这些，所以写出来，方便自己用。</p><span id="more"></span><h3 id="常见">常见<a title="#常见" href="#常见"></a></h3><div class="φbq"><div class="φbs"><table><thead><tr><th>缩写</th><th>语言</th></tr></thead><tbody><tr><td>en</td><td>英国</td></tr><tr><td>en-US</td><td>英国 - 美国</td></tr><tr><td>en-AU</td><td>英国 - 澳洲</td></tr><tr><td>zh-CN</td><td>中国 - 中国</td></tr><tr><td>zh-TW</td><td>中国 - 台湾</td></tr><tr><td>zh-HK</td><td>中国 - 香港 SAR</td></tr><tr><td>zh-MO</td><td>中国 - 澳门 SAR</td></tr><tr><td>ja</td><td>日本</td></tr><tr><td>ja-JP</td><td>日本 - 日本</td></tr><tr><td>ko</td><td>韩国</td></tr><tr><td>ko-KR</td><td>韩国 - 韩国</td></tr><tr><td>ru</td><td>俄国</td></tr><tr><td>ru-RU</td><td>俄国 - 俄国</td></tr><tr><td>fr</td><td>法国</td></tr></tbody></table></div></div><hr><h3 id="汇总">汇总<a title="#汇总" href="#汇总"></a></h3><div class="φbq"><div class="φbs"><table><thead><tr><th>缩写</th><th>语言</th></tr></thead><tbody><tr><td>af</td><td>公用荷兰</td></tr><tr><td>af-ZA</td><td>公用荷兰 - 南非</td></tr><tr><td>sq</td><td>阿尔巴尼亚</td></tr><tr><td>sq-AL</td><td>阿尔巴尼亚 - 阿尔巴尼亚</td></tr><tr><td>ar</td><td>阿拉伯</td></tr><tr><td>ar-DZ</td><td>阿拉伯 - 阿尔及利亚</td></tr><tr><td>ar-BH</td><td>阿拉伯 - 巴林</td></tr><tr><td>ar-EG</td><td>阿拉伯 - 埃及</td></tr><tr><td>ar-IQ</td><td>阿拉伯 - 伊拉克</td></tr><tr><td>ar-JO</td><td>阿拉伯 - 约旦</td></tr><tr><td>ar-KW</td><td>阿拉伯 - 科威特</td></tr><tr><td>ar-LB</td><td>阿拉伯 - 黎巴嫩</td></tr><tr><td>ar-LY</td><td>阿拉伯 - 利比亚</td></tr><tr><td>ar-MA</td><td>阿拉伯 - 摩洛哥</td></tr><tr><td>ar-OM</td><td>阿拉伯 - 阿曼</td></tr><tr><td>ar-QA</td><td>阿拉伯 - 卡塔尔</td></tr><tr><td>ar-SA</td><td>阿拉伯 - 沙特阿拉伯</td></tr><tr><td>ar-SY</td><td>阿拉伯 - 叙利亚共和国</td></tr><tr><td>ar-TN</td><td>阿拉伯 - 北非的共和国</td></tr><tr><td>ar-AE</td><td>阿拉伯 - 阿拉伯联合酋长国</td></tr><tr><td>ar-YE</td><td>阿拉伯 - 也门</td></tr><tr><td>hy</td><td>亚美尼亚</td></tr><tr><td>hy-AM</td><td>亚美尼亚 - 亚美尼亚</td></tr><tr><td>az</td><td>阿塞拜疆</td></tr><tr><td>az-AZ-Cyrl</td><td>阿塞拜疆(西里尔字母) - 阿塞拜疆</td></tr><tr><td>az-AZ-Latn</td><td>阿塞拜疆(拉丁文) - 阿塞拜疆</td></tr><tr><td>eu</td><td>巴斯克</td></tr><tr><td>eu-ES</td><td>巴斯克 - 巴斯克</td></tr><tr><td>be</td><td>白俄罗斯</td></tr><tr><td>be-BY</td><td>白俄罗斯 - 白俄罗斯</td></tr><tr><td>bg</td><td>保加利亚</td></tr><tr><td>bg-BG</td><td>保加利亚 -保加利亚</td></tr><tr><td>ca</td><td>嘉泰罗尼亚</td></tr><tr><td>ca-ES</td><td>嘉泰罗尼亚 -嘉泰罗尼亚</td></tr><tr><td>zh-HK</td><td>中国 - 香港 SAR</td></tr><tr><td>zh-MO</td><td>中国 - 澳门 SAR</td></tr><tr><td>zh-CN</td><td>中国 - 中国</td></tr><tr><td>zh-CHS</td><td>中国 (单一化)</td></tr><tr><td>zh-SG</td><td>中国 - 新加坡</td></tr><tr><td>zh-TW</td><td>中国 - 台湾</td></tr><tr><td>zh-CHT</td><td>中国 (传统)</td></tr><tr><td>hr</td><td>克罗埃西亚</td></tr><tr><td>hr-HR</td><td>克罗埃西亚 - 克罗埃西亚</td></tr><tr><td>cs</td><td>捷克</td></tr><tr><td>cs-CZ</td><td>捷克 - 捷克</td></tr><tr><td>da</td><td>丹麦文</td></tr><tr><td>da-DK</td><td>丹麦文 - 丹麦</td></tr><tr><td>div</td><td>马尔代夫</td></tr><tr><td>div-MV</td><td>马尔代夫 - 马尔代夫</td></tr><tr><td>nl</td><td>荷兰</td></tr><tr><td>nl-BE</td><td>荷兰 - 比利时</td></tr><tr><td>nl-NL</td><td>荷兰 - 荷兰</td></tr><tr><td>en</td><td>英国</td></tr><tr><td>en-AU</td><td>英国 - 澳洲</td></tr><tr><td>en-BZ</td><td>英国 - 伯利兹</td></tr><tr><td>en-CA</td><td>英国 - 加拿大</td></tr><tr><td>en-CB</td><td>英国 - 加勒比海</td></tr><tr><td>en-IE</td><td>英国 - 爱尔兰</td></tr><tr><td>en-JM</td><td>英国 - 牙买加</td></tr><tr><td>en-NZ</td><td>英国 - 新西兰</td></tr><tr><td>en-PH</td><td>英国 - 菲律宾共和国</td></tr><tr><td>en-ZA</td><td>英国 - 南非</td></tr><tr><td>en-TT</td><td>英国 - 千里达托贝哥共和国</td></tr><tr><td>en-GB</td><td>英国 - 英国</td></tr><tr><td>en-US</td><td>英国 - 美国</td></tr><tr><td>en-ZW</td><td>英国 - 津巴布韦</td></tr><tr><td>et</td><td>爱沙尼亚</td></tr><tr><td>et-EE</td><td>爱沙尼亚 - 爱沙尼亚</td></tr><tr><td>fo</td><td>法罗群岛</td></tr><tr><td>fo-FO</td><td>法罗群岛- 法罗群岛</td></tr><tr><td>fa</td><td>波斯</td></tr><tr><td>fa-IR</td><td>波斯 - 伊朗王国</td></tr><tr><td>fi</td><td>芬兰</td></tr><tr><td>fi-FI</td><td>芬兰 - 芬兰</td></tr><tr><td>fr</td><td>法国</td></tr><tr><td>fr-BE</td><td>法国 - 比利时</td></tr><tr><td>fr-CA</td><td>法国 - 加拿大</td></tr><tr><td>fr-FR</td><td>法国 - 法国</td></tr><tr><td>fr-LU</td><td>法国 - 卢森堡</td></tr><tr><td>fr-MC</td><td>法国 - 摩纳哥</td></tr><tr><td>fr-CH</td><td>法国 - 瑞士</td></tr><tr><td>gl</td><td>加利西亚</td></tr><tr><td>gl-ES</td><td>加利西亚 - 加利西亚</td></tr><tr><td>ka</td><td>格鲁吉亚州</td></tr><tr><td>ka-GE</td><td>格鲁吉亚州 - 格鲁吉亚州</td></tr><tr><td>de</td><td>德国</td></tr><tr><td>de-AT</td><td>德国 - 奥地利</td></tr><tr><td>de-DE</td><td>德国 - 德国</td></tr><tr><td>de-LI</td><td>德国 - 列支敦士登</td></tr><tr><td>de-LU</td><td>德国 - 卢森堡</td></tr><tr><td>de-CH</td><td>德国 - 瑞士</td></tr><tr><td>el</td><td>希腊</td></tr><tr><td>el-GR</td><td>希腊 - 希腊</td></tr><tr><td>gu</td><td>印度</td></tr><tr><td>gu-IN</td><td>印度 - 印度</td></tr><tr><td>he</td><td>希伯来</td></tr><tr><td>he-IL</td><td>希伯来 - 以色列</td></tr><tr><td>hi</td><td>北印度</td></tr><tr><td>hi-IN</td><td>北印度 - 印度</td></tr><tr><td>hu</td><td>匈牙利</td></tr><tr><td>hu-HU</td><td>匈牙利 - 匈牙利</td></tr><tr><td>is</td><td>冰岛</td></tr><tr><td>is-IS</td><td>冰岛的 - 冰岛</td></tr><tr><td>id</td><td>印尼</td></tr><tr><td>id-ID</td><td>印尼 - 印尼</td></tr><tr><td>it</td><td>意大利</td></tr><tr><td>it-IT</td><td>意大利 - 意大利</td></tr><tr><td>it-CH</td><td>意大利 - 瑞士</td></tr><tr><td>ja</td><td>日本</td></tr><tr><td>ja-JP</td><td>日本 - 日本</td></tr><tr><td>kn</td><td>卡纳达</td></tr><tr><td>kn-IN</td><td>卡纳达 - 印度</td></tr><tr><td>kk</td><td>哈萨克</td></tr><tr><td>kk-KZ</td><td>哈萨克 - 哈萨克</td></tr><tr><td>kok</td><td>印度</td></tr><tr><td>kok-IN</td><td>印度 - 印度</td></tr><tr><td>ko</td><td>韩国</td></tr><tr><td>ko-KR</td><td>韩国 - 韩国</td></tr><tr><td>ky</td><td>哈萨克</td></tr><tr><td>ky-KZ</td><td>哈萨克 - 哈萨克</td></tr><tr><td>lv</td><td>拉脱维亚</td></tr><tr><td>lv-LV</td><td>拉脱维亚 -拉脱维亚</td></tr><tr><td>lt</td><td>立陶宛</td></tr><tr><td>lt-LT</td><td>立陶宛 - 立陶宛</td></tr><tr><td>mk</td><td>马其顿</td></tr><tr><td>mk-MK</td><td>马其顿 - 马其顿</td></tr><tr><td>ms</td><td>马来</td></tr><tr><td>ms-BN</td><td>马来 - 汶莱</td></tr><tr><td>ms-MY</td><td>马来 - 马来西亚</td></tr><tr><td>mr</td><td>马拉地</td></tr><tr><td>mr-IN</td><td>马拉地 - 印度</td></tr><tr><td>mn</td><td>蒙古</td></tr><tr><td>mn-MN</td><td>蒙古 - 蒙古</td></tr><tr><td>no</td><td>挪威</td></tr><tr><td>nb-NO</td><td>挪威 (Bokm?l) - 挪威</td></tr><tr><td>nn-NO</td><td>挪威 (Nynorsk)- 挪威</td></tr><tr><td>pl</td><td>波兰</td></tr><tr><td>pl-PL</td><td>波兰 - 波兰</td></tr><tr><td>pt</td><td>葡萄牙</td></tr><tr><td>pt-BR</td><td>葡萄牙 - 巴西</td></tr><tr><td>pt-PT</td><td>葡萄牙 - 葡萄牙</td></tr><tr><td>pa</td><td>Punjab</td></tr><tr><td>pa-IN</td><td>Punjab -印度</td></tr><tr><td>ro</td><td>罗马尼亚</td></tr><tr><td>ro-RO</td><td>罗马尼亚 - 罗马尼亚</td></tr><tr><td>ru</td><td>俄国</td></tr><tr><td>ru-RU</td><td>俄国 - 俄国</td></tr><tr><td>sa</td><td>梵文</td></tr><tr><td>sa-IN</td><td>梵文 - 印度</td></tr><tr><td>sr-SP-Cyrl</td><td>塞尔维亚 (西里尔字母的) - 塞尔维亚共和国</td></tr><tr><td>sr-SP-Latn</td><td>塞尔维亚 (拉丁文) - 塞尔维亚共和国</td></tr><tr><td>sk</td><td>斯洛伐克</td></tr><tr><td>sk-SK</td><td>斯洛伐克 - 斯洛伐克</td></tr><tr><td>sl</td><td>斯洛文尼亚</td></tr><tr><td>sl-SI</td><td>斯洛文尼亚 - 斯洛文尼亚</td></tr><tr><td>es</td><td>西班牙</td></tr><tr><td>es-AR</td><td>西班牙 - 阿根廷</td></tr><tr><td>es-BO</td><td>西班牙 - 玻利维亚</td></tr><tr><td>es-CL</td><td>西班牙 - 智利</td></tr><tr><td>es-CO</td><td>西班牙 - 哥伦比亚</td></tr><tr><td>es-CR</td><td>西班牙 - 哥斯达黎加</td></tr><tr><td>es-DO</td><td>西班牙 - 多米尼加共和国</td></tr><tr><td>es-EC</td><td>西班牙 - 厄瓜多尔</td></tr><tr><td>es-SV</td><td>西班牙 - 萨尔瓦多</td></tr><tr><td>es-GT</td><td>西班牙 - 危地马拉</td></tr><tr><td>es-HN</td><td>西班牙 - 洪都拉斯</td></tr><tr><td>es-MX</td><td>西班牙 - 墨西哥</td></tr><tr><td>es-NI</td><td>西班牙 - 尼加拉瓜</td></tr><tr><td>es-PA</td><td>西班牙 - 巴拿马</td></tr><tr><td>es-PY</td><td>西班牙 - 巴拉圭</td></tr><tr><td>es-PE</td><td>西班牙 - 秘鲁</td></tr><tr><td>es-PR</td><td>西班牙 - 波多黎各</td></tr><tr><td>es-ES</td><td>西班牙 - 西班牙</td></tr><tr><td>es-UY</td><td>西班牙 - 乌拉圭</td></tr><tr><td>es-VE</td><td>西班牙 - 委内瑞拉</td></tr><tr><td>sw</td><td>斯瓦希里</td></tr><tr><td>sw-KE</td><td>斯瓦希里 - 肯尼亚</td></tr><tr><td>sv</td><td>瑞典</td></tr><tr><td>sv-FI</td><td>瑞典 - 芬兰</td></tr><tr><td>sv-SE</td><td>瑞典 - 瑞典</td></tr><tr><td>syr</td><td>叙利亚</td></tr><tr><td>syr-SY</td><td>叙利亚 - 叙利亚共和国</td></tr><tr><td>ta</td><td>坦米尔</td></tr><tr><td>ta-IN</td><td>坦米尔 - 印度</td></tr><tr><td>tt</td><td>俄国</td></tr><tr><td>tt-RU</td><td>俄国 - 俄国</td></tr><tr><td>te</td><td>泰卢固</td></tr><tr><td>te-IN</td><td>泰卢固 - 印度</td></tr><tr><td>th</td><td>泰国</td></tr><tr><td>th-TH</td><td>泰国 - 泰国</td></tr><tr><td>tr</td><td>土耳其</td></tr><tr><td>tr-TR</td><td>土耳其 - 土耳其</td></tr><tr><td>uk</td><td>乌克兰</td></tr><tr><td>uk-UA</td><td>乌克兰 - 乌克兰</td></tr><tr><td>ur</td><td>乌尔都</td></tr><tr><td>ur-PK</td><td>乌尔都 - 巴基斯坦</td></tr><tr><td>uz</td><td>Uzbek</td></tr><tr><td>uz-UZ-Cyrl</td><td>Uzbek(西里尔字母的) - 乌兹别克斯坦</td></tr><tr><td>uz-UZ-Latn</td><td>Uzbek(拉丁文) - 乌兹别克斯坦</td></tr><tr><td>vi</td><td>越南</td></tr><tr><td>vi-VN</td><td>越南 - 越南</td></tr></tbody></table></div></div>]]></content>
    
    
    <summary type="html">&lt;p&gt;鉴于经常要用这些，所以写出来，方便自己用。&lt;/p&gt;</summary>
    
    
    
    <category term="Docs" scheme="https://blogv2.cworld.top/categories/Docs/"/>
    
    
    <category term="Language" scheme="https://blogv2.cworld.top/tags/Language/"/>
    
  </entry>
  
  <entry>
    <title>Xiaomi Redmi 4A (Rolex) 刷机集合</title>
    <link href="https://blogv2.cworld.top/post/redmi-4a-list/"/>
    <id>https://blogv2.cworld.top/post/redmi-4a-list/</id>
    <published>2019-07-03T12:19:12.000Z</published>
    <updated>2024-04-29T04:43:39.780Z</updated>
    
    <content type="html"><![CDATA[<p>主要是一些刷机包，也有一些已知的 xda 刷机集合贴</p><span id="more"></span><h2 id="xda-developers">Xda-Developers<a title="#xda-developers" href="#xda-developers"></a></h2><h3 id="xda-集合">Xda 集合<a title="#xda-集合" href="#xda-集合"></a></h3><ul><li><a href="https://forum.xda-developers.com/redmi-4a/how-to/list-redmi-4a-rolex-custom-roms-t3774162" target="_blank">List of Redmi 4A (Rolex) Custom Roms</a></li></ul><h3 id="xda-刷机包">Xda 刷机包<a title="#xda-刷机包" href="#xda-刷机包"></a></h3><ul><li><a href="https://forum.xda-developers.com/redmi-4a/development/9-0-resurrection-remix-v7-0-t3899635" target="_blank">【9.0】【OFFICIAL】Resurrection Remix v7.0 【ROLEX】</a><br><a href="https://get.resurrectionremix.com/?dir=rolex" target="_blank">ROM Download</a></li></ul><h3 id="xda-rec">Xda REC<a title="#xda-rec" href="#xda-rec"></a></h3><ul><li><a href="https://forum.xda-developers.com/redmi-4a/development/port-orangefox-recovery-project-t3925400" target="_blank">【PORT】【TWRP】【TREBLE】 OrangeFox Recovery Project 【R10.0】</a><br><a href="https://sourceforge.net/projects/team-tentacles/files/Recovery/OrangeFoxRecoveryProject/" target="_blank">Download</a></li></ul><h3 id="xda-内核">Xda 内核<a title="#xda-内核" href="#xda-内核"></a></h3><ul><li><a href="https://forum.xda-developers.com/redmi-4a/development/infinity-kernel-v3-2-redmi-4a-rolex-t3775549" target="_blank">【ROLEX / RIVA】 【KERNEL】 【OREO / NOUGAT】 Infinity Kernel</a><br><a href="https://teaminfinity.github.io/" target="_blank">Download</a></li></ul><h2 id="android-file-host">Android File Host<a title="#android-file-host" href="#android-file-host"></a></h2><h3 id="file-集合">File 集合<a title="#file-集合" href="#file-集合"></a></h3><ul><li><p>Downloads for : Xiaomi Redmi 4A<br>Developed By :AryanPatidar<br><a href="https://androidfilehost.com/?w=files&amp;flid=244226" target="_blank">Download</a></p></li><li><p>Downloads for : Xiaomi Redmi 4A<br>Developed By :MacTavishAO<br><a href="https://androidfilehost.com/?w=files&amp;flid=215006" target="_blank">Download</a></p></li></ul><h3 id="file-刷机包">File 刷机包<a title="#file-刷机包" href="#file-刷机包"></a></h3><ul><li><p>flyme_Redmi-4A_ycjeson_6.7.6.23R.zip<br><a href="https://androidfilehost.com/?fid=817550096634784321" target="_blank">Download</a></p></li><li><p>Flyme6_Nougat_AryanPatidar_BugFree_Final_ROLEX_HM4A_Redmi4A.zip<br><a href="https://androidfilehost.com/?fid=746010030569964162" target="_blank">Download</a><br>Redme.txt<br><a href="https://androidfilehost.com/?fid=746010030569964158" target="_blank">Download</a></p></li><li><p>RR-N-v5.8.5-20180414-rolex.zip<br><a href="https://androidfilehost.com/?fid=890129502657598005" target="_blank">Download</a></p></li><li><p>RR-O-v6.0.0-20180429-rolex-Unofficial.zip<br><a href="https://androidfilehost.com/?fid=673956719939837762" target="_blank">Download</a></p></li><li><p>RR-O-v6.1.0-20180625-riva-Unofficial.zip<br><a href="https://androidfilehost.com/?fid=890278863836296667" target="_blank">Download</a></p></li><li><p>Havoc-OS-201808dddd16-rolex-Test.zip<br><a href="https://androidfilehost.com/?fid=1322778262903981334" target="_blank">Download</a></p></li><li><p>AospExtended-v5.8-rolex-20181017-1735-OFFICIAL.zip<br><a href="https://androidfilehost.com/?fid=11410932744536981921" target="_blank">Download</a></p></li></ul><h3 id="file-内核">File 内核<a title="#file-内核" href="#file-内核"></a></h3><ul><li><p>InfinityKernel V5.0.zip<br><a href="https://androidfilehost.com/?fid=962187416754474923" target="_blank">Download</a></p></li><li><p>InfinityKernel_Unified_V5.1F.zip<br><a href="https://androidfilehost.com/?fid=1322778262904007808" target="_blank">Download</a></p></li><li><p>Xtreme Kernel v3.1.zip<br><a href="https://androidfilehost.com/?fid=890278863836292220" target="_blank">Download</a></p></li></ul><h3 id="file-海外版（秒解锁-bl）">File 海外版（秒解锁 BL）<a title="#file-海外版（秒解锁-bl）" href="#file-海外版（秒解锁-bl）"></a></h3><ul><li>miflash_unlock-en-2.3.803.10.zip<br><a href="https://androidfilehost.com/?fid=673956719939835980" target="_blank">Download</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;主要是一些刷机包，也有一些已知的 xda 刷机集合贴&lt;/p&gt;</summary>
    
    
    
    <category term="Resource" scheme="https://blogv2.cworld.top/categories/Resource/"/>
    
    
    <category term="Readmi 4A" scheme="https://blogv2.cworld.top/tags/Readmi-4A/"/>
    
  </entry>
  
  <entry>
    <title>我的第一篇 • 个人网站存在的意义</title>
    <link href="https://blogv2.cworld.top/post/first-article/"/>
    <id>https://blogv2.cworld.top/post/first-article/</id>
    <published>2019-06-14T16:24:38.000Z</published>
    <updated>2024-04-29T04:43:39.720Z</updated>
    
    <content type="html"><![CDATA[<p>个人网站这个以前很时髦的名词正随着时间慢慢被人忘记，互联网的门槛越来越低，个人网站显然不再成为一个重要的入口。甚至连电脑都已经不是首选的上网平台了。</p><p>那么现在还有必要为自己搭建个人网站吗？</p><hr><h2 id="不是人人都有料">不是人人都有料<a title="#不是人人都有料" href="#不是人人都有料"></a></h2><p>不可否认的是，个人网站由于其具有一定的专业性，所以搭建它是要付出一定的成本的，不论是金钱上的还是时间上的。有成本付出就会有回报的期望。每个坚持写博的人背后肯定有它的动力在支撑，但是我看到的是越来越多的个人博主荒废了它当初付出成本来打理的网站。</p><p>为什么？因为没有人看，一个人写有啥意思，如果只是写写笔记放到本地也可以，速度还更快。你既然选择了放到网上，那么心里肯定还是期望有读者的。但是理想是美好的，现实是残酷的，你写的那些东西就是没人看。</p><h3 id="你不是大明星">你不是大明星<a title="#你不是大明星" href="#你不是大明星"></a></h3><p>为啥人家徐静蕾一篇文章写几个字“今天好困啊”之类的，就有好几万的评论。你辛辛苦苦码了好几千字，又是配图又是又是写诗，唯一的访问者却只有搜索引擎的爬虫。</p><p>因为你不是 Big Boy ，而网上的访问者具有匿名性，他们基本上跟你生活毫无交集，他们也不关心你去了哪些地方，吃了啥东西。这些事情不能成为谈资，所以如果你希望在个人网站分享这类内容，我建议还是朋友圈，QQ 空间之类的地方比较好。起码还可以得到几个赞。</p><h3 id="专家不是这么好当的">专家不是这么好当的<a title="#专家不是这么好当的" href="#专家不是这么好当的"></a></h3><p>除了看看明星八卦，大多数网上的意见领袖都是各方面的专家，他们往往可以一呼百应。</p><p>但我始终坚持认为，就算是伪专家也是有他的过人之处的，更不要说真正的大牛了。很多人喜欢写技术文章，但首先你个人是一个默默无闻的路人，即使突然脑袋开窍撸了一篇可称大神级的文章出来，也会被埋没在信息的海洋里。更何况这种情况出现的概率基本为零，大多数情况下一般人写出来的文章就是没啥料的，不具备可读性。</p><p>而且现在还有各种各样的阅读平台，分享网站，以及垃圾站。你网站上的文章还没被爬到，就被他们抓走了，有点良心的还贴个来源链接，无良的直接连作者名都给你改了。</p><h2 id="个人网站如何经营">个人网站如何经营<a title="#个人网站如何经营" href="#个人网站如何经营"></a></h2><p>这个标题一写出来，网上类似的文章一大把。但我不是从技术角度来讲，我首先要劝一些人放弃，如果你没有啥好写的东西，那还是放弃这个打算把。你把精力投入到微博，微信上可能效果还好些。</p><h3 id="你一定要有一些别人没有的东西">你一定要有一些别人没有的东西<a title="#你一定要有一些别人没有的东西" href="#你一定要有一些别人没有的东西"></a></h3><p>如果你不是在某一方面浸淫多年特别擅长，那么要不然你帅的惊动 D 中央，要不然你特别有钱是个土豪。如果你说，我又没啥特长，长的也一般，也没啥钱，总之就是一个普通的路人，还有希望吗？</p><p>我知道你肯定希望我说出“有”这个字来给你信心，但是真没有。因为大部分人都是这样，别人凭啥去看你？所以经营网站的第一步是经营自己，让自己能够出类拔萃。</p><h3 id="精心准备你的内容">精心准备你的内容<a title="#精心准备你的内容" href="#精心准备你的内容"></a></h3><p>当然如果你是大明星可以忽略这一点，脑残粉们根本不会在乎您发了什么。。。</p><p>内容是你制胜的关键，可以说在信息化同质严重的今天，内容的重要性不是降低而是升高了。有品位的内容往往能为你吸引来有价值的用户。在这个过程中你也可以获得不少成就感。</p><p>内容的选材也很重要，你需要去了解读者喜欢什么样的内容，既然是公开发表的内容，你就应该照顾别人的想法，这并不是要你埋没个性，相反在内容的组织上展示你的个性才是体现出你闪光点的好办法。</p><p>为什么你看到很多业界大神，总是喜欢写一些普及性的文章。但往往这类文章的点击率是最高的，因为大多数人需要这类文章，而怎么把这类文章写好也是需要挑战性的。深入浅出是一门技术活，很多人写着写着越来越晦涩难懂，不知道怎么样用浅显的道理表达出来。</p><h3 id="快速分享">快速分享<a title="#快速分享" href="#快速分享"></a></h3><p>这一步反而是大多数人做的最好的，各种分享按钮，微博，朋友圈分发。这样非常好，可以为你带来固定的读者群，但对拓宽读者群体没有多大帮助，我个人觉得可以借助一些业内比较有影响力的分享渠道，当然前提是你的文章真的质量过硬，也要给别人带来好处。比如：</p><ul><li><a href="https://v2ex.com" target="_blank">v2ex.com</a></li><li><a href="https://segmentfault.com" target="_blank">segmentfault.com</a></li></ul><p>值得注意的是，你不能把他们当成单纯的发广告的地方，这样会很快透支掉你的口碑。你需要用心经营你自己的品牌，多多形成双赢的局面，为别人网站也能带来干货。</p><h2 id="总结">总结<a title="#总结" href="#总结"></a></h2><p>其实我本人并不是擅长此道的专家，但是因为对这一个圈子接触比较多所以有这些感受。我见过太多怀揣着梦想进入个人网站这个圈子的好少年了，但大多数因为没有认清现实而浪费了很多资源。我这片文章的目的并不可能让大家马上牛逼起来，但如果能让大家稍稍认清点现实，也不枉费我这么多口舌了。</p><p>转载自 JoyQi’s Homepage <a href="https://joyqi.com/develop/how-to-manage-your-personal-website.html" target="_blank">个人网站存在的意义</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;个人网站这个以前很时髦的名词正随着时间慢慢被人忘记，互联网的门槛越来越低，个人网站显然不再成为一个重要的入口。甚至连电脑都已经不是首选的上网平台了。&lt;/p&gt;
&lt;p&gt;那么现在还有必要为自己搭建个人网站吗？&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;不是人人都有料&quot;&gt;不是人人都有料&lt;a</summary>
      
    
    
    
    <category term="Essay" scheme="https://blogv2.cworld.top/categories/Essay/"/>
    
    
  </entry>
  
</feed>
