<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Hexo Theme Fluid</title>
  
  <subtitle>Hexo Theme Fluid</subtitle>
  <link href="https://fluid-dev.cn/atom.xml" rel="self"/>
  
  <link href="https://fluid-dev.cn/"/>
  <updated>2026-04-05T19:28:51.547Z</updated>
  <id>https://fluid-dev.cn/</id>
  
  <author>
    <name>Fluid</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>基于大语言模型的 Hexo 博客自动化翻译方案</title>
    <link href="https://fluid-dev.cn/posts/hexo-translate-llm/"/>
    <id>https://fluid-dev.cn/posts/hexo-translate-llm/</id>
    <published>2026-01-05T10:47:13.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：Tokisaki Galaxy<br /> 原文地址：https://tokisaki.top/blog/hexo-translate-llm/</p>           </div><div class="note note-success">            <p>该项目已在 GitHub 开源。您可以访问 <a href="https://github.com/Tokisaki-Galaxy/hexo-translate-llm">Tokisaki-Galaxy/hexo-translate-llm</a> 获取更多信息。</p>           </div><p>跨语言的信息传播在数字化时代愈发重要。手动翻译文章不仅耗时，也难以保证更新频率。<strong>HexoLLM Translate</strong>插件为此提供了自动化解决方案。它利用大语言模型（LLM）实现博客内容的高质量翻译。</p><h2 id="核心特性">核心特性</h2><p>智能双语切换提升了读者的阅读体验。插件会识别浏览器的语言偏好。读者无需手动点击即可阅读对应版本。</p><p>缓存机制保障了翻译效率。插件通过内容哈希识别变更。只有在正文或标题变动时才会触发接口调用。这有效降低了API 的使用成本。</p><p>多端同步支持远程数据库。通过 <strong>NeonPostgreSQL</strong>，不同设备间的构建缓存可以实时共享。（可选）</p><p>稳定性是插件设计的核心。内置限流器防止并发过高导致接口熔断。自动重试机制能有效应对网络波动。</p><p>SEO 优化确保了搜索权重的留存。翻译后的内容直接注入 HTML结构。搜索引擎可以完整抓取双语信息。Hexo特有的标签也得到了妥善保护，避免了页面结构的破坏。</p><p>对于不想被翻译的文章，可以通过 Front-matter 设置<code>no_translate: true</code> 来排除在外。</p><h2 id="快速上手">快速上手</h2><h3 id="安装插件">安装插件</h3><p>在 Hexo 根目录下执行安装指令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">npm install hexo-translate-llm<br></code></pre></td></tr></table></figure><h3 id="配置参数">配置参数</h3><p>在 <code>_config.yml</code>中加入以下配置。建议选用性价比更高的模型：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">llm_translation:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">model:</span> <span class="hljs-string">deepseek-ai/DeepSeek-V3.2</span><br>  <span class="hljs-attr">endpoint:</span> <span class="hljs-string">https://api.siliconflow.cn/v1/chat/completions</span><br>  <span class="hljs-attr">max_concurrency:</span> <span class="hljs-number">4</span><br>  <span class="hljs-attr">single_timeout:</span> <span class="hljs-number">120</span><br></code></pre></td></tr></table></figure><div class="note note-info">            <p>如果不想使用远程数据库，可以跳过 Neon PostgreSQL 的配置步骤。插件会自动使用本地缓存。</p>           </div><h3 id="安全设置">安全设置</h3><p>本项目通过环境变量管理敏感信息。</p><h4 id="vercel-部署">Vercel 部署</h4><p>在 Vercel 仪表盘的项目设置中，添加 <code>LLM_API_KEY</code>环境变量。<br />设置 Storage 连接，连接到 Neon PostgreSQL 数据库。Vercel 会自动注入<code>DATABASE_URL</code> 环境变量。</p><h4 id="本地构建">本地构建</h4><p>在根目录创建 <code>.env</code> 文件：<br /><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs env">LLM_API_KEY=您的密钥<br>DATABASE_URL=数据库连接地址<br></code></pre></td></tr></table></figure></p><h2 id="使用技巧">使用技巧</h2><p>特定文章可以排除在翻译范围之外。只需在 Front-matter 中设置<code>no_translate: true</code>。插件会自动同步页面的 <code>title</code>标签，确保浏览器标签页的语言一致性。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note note-success&quot;&gt;
            &lt;p&gt;本文由 Fluid 用户授权转载，版权归原作者所有。&lt;/p&gt; &lt;p&gt;本文作者：Tokisaki Galaxy&lt;br /&gt; 原文地址：https://tokisaki.top/blog/h</summary>
      
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>仿 TrymenT 游戏风格的时钟组件</title>
    <link href="https://fluid-dev.cn/posts/fluid-lock/"/>
    <id>https://fluid-dev.cn/posts/fluid-lock/</id>
    <published>2025-03-10T14:24:58.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：Tokisaki_Galaxy<br /> 原文地址：<a href="https://tokisaki.top/background-tryment-clock" class="uri">https://tokisaki.top/background-tryment-clock</a></p>           </div><div class="note note-warning">            <p>该项目特别针对Hexo-Fluid主题进行了优化，其他主题可能需要手动修改主题代码以获得最佳体验。<br /> Hexo-Theme-Fluid项目地址：<a href="https://github.com/fluid-dev/hexo-theme-fluid" class="uri">https://github.com/fluid-dev/hexo-theme-fluid</a></p>           </div><h2 id="效果预览">效果预览</h2><p><ahref="https://github.com/Tokisaki-Galaxy/TrymenT-ClocK/">Github上的项目</a><br /><a href="https://tokisaki.top/">在Hexo的在线预览</a></p><p>时钟效果展现了游戏中那种略带神秘感的界面设计，转动的双环加上特殊符号标记，营造出一种独特的视觉体验。无论是作为博客装饰还是个人页面点缀，都能增添不少科幻氛围。</p><h2 id="介绍">介绍</h2><p>一个仿 <code>TrymenT ―今を変えたいと願うあなたへ―</code>游戏中时钟界面设计的 Web 时钟实现。提供了一个特殊视觉风格的数字时钟。很喜欢这个游戏，RASK公司什么时候出OmegaA啊？说好分割商法，也别烂尾啊！以最左边的指针为指示，指针不动，取而代之的是内外盘不停地动。内盘代表小时，外盘代表分钟。</p><h2 id="特性">特性</h2><ul><li>独特的双环时钟设计</li><li>特殊的字体和符号标记</li><li>自定义日期显示格式</li><li>响应式设计，自适应不同屏幕尺寸</li><li>半透明背景图片效果</li></ul><h2 id="使用方法">使用方法</h2><h3 id="需要的文件">需要的文件</h3><ul><li><ahref="https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.css">TrymenT-ClocK.min.css</a></li><li><ahref="https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.js">TrymenT-ClocK.min.js</a></li><li><ahref="https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/img.png">TrymenT-ClocK-PNG</a></li></ul><h3 id="在hexo中使用">在Hexo中使用</h3><h4 id="推荐hexo注入">（推荐！）Hexo注入</h4><p><ahref="https://hexo.fluid-dev.com/posts/hexo-injector/">Hexo注入器</a>是一项Hexo5之后提出的功能.<br />编写注入代码，需要在博客的根目录下创建 scripts文件夹，然后在里面任意命名创建一个 js 文件即可。</p><p>例如创建一个 /blog/scripts/Tryment-Clock.js，内容为</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs javascript">hexo.<span class="hljs-property">extend</span>.<span class="hljs-property">injector</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">&#x27;body_begin&#x27;</span>, <span class="hljs-string">&#x27;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.css&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.js&quot;&gt;&lt;/script&gt;&#x27;</span>, <span class="hljs-string">&#x27;default&#x27;</span>);<br></code></pre></td></tr></table></figure><h4 id="比较麻烦修改主题代码">（比较麻烦）修改主题代码</h4><p>把下面的代码放到主题的 <code>layout/layout.ejs</code>文件中，然后把相应的文件复制到css，js，img文件夹里面。<br /><figure class="highlight html"><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><code class="hljs html">&lt;% if (theme.background_trymentclock.enable) &#123; %&gt;<br>  <span class="hljs-comment">&lt;!--下面两行是核心内容--&gt;</span><br>  &lt;%- css_ex(theme.static_prefix.internal_css, &#x27;TrymenT-ClocK.min.css&#x27;) %&gt;<br>  &lt;%- js_ex(theme.static_prefix.internal_js, &#x27;TrymenT-ClocK.min.js&#x27;) %&gt;<br>  &lt;% &#125; %&gt;<br></code></pre></td></tr></table></figure></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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-comment"># 背景的TrymenT时钟特效，如果需要切换背景图片请在主题目录下替换 /source/img/img.png</span><br><span class="hljs-comment"># See: https://github.com/Tokisaki-Galaxy/TrymenT-ClocK</span><br><span class="hljs-attr">background_trymentclock:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">false</span><br></code></pre></td></tr></table></figure><h3 id="作为独立页面使用">作为独立页面使用</h3><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-keyword">html</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">&quot;en&quot;</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">&quot;UTF-8&quot;</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;viewport&quot;</span> <span class="hljs-attr">content</span>=<span class="hljs-string">&quot;width=device-width, initial-scale=1.0&quot;</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>TrymenT ClocK<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.css&quot;</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text/javascript&quot;</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/gh/Tokisaki-Galaxy/TrymenT-ClocK/TrymenT-ClocK.min.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span><br></code></pre></td></tr></table></figure><h2 id="注意事项">注意事项</h2><ul><li>时钟效果可能会占用一定的系统资源，在低配置设备上可能会有轻微卡顿</li><li>背景图片默认为半透明效果，可能会与某些深色主题产生冲突</li><li>在移动设备上浏览时，时钟会自动调整大小以适应屏幕</li><li>如需更换背景图片，图片尺寸建议保持在1920×1080以上</li><li>不建议在页面中添加多个时钟实例，可能会导致性能问题</li></ul>]]></content>
    
    
    <summary type="html">一个模仿游戏 TrymenT 中时钟界面的 Web 时钟实现，带有独特双环设计</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Fluid VSCode Extension 插件</title>
    <link href="https://fluid-dev.cn/posts/fluid-vscode-plugin/"/>
    <id>https://fluid-dev.cn/posts/fluid-vscode-plugin/</id>
    <published>2024-07-30T06:00:57.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授權轉載，版權歸原作者所有。</p> <p>本文作者：<a href="https://f88083.github.io/">Simon Lai</a><br /> 原文地址：<a href="https://f88083.github.io/2024/07/30/Fluid-VSCode-Extension-%E4%B8%80%E6%AC%BE%E7%82%BAHexo%E6%A1%86%E6%9E%B6Fluid%E4%B8%BB%E9%A1%8C%E6%89%93%E9%80%A0%E7%9A%84%E6%93%B4%E5%B1%95/" class="uri">https://f88083.github.io/2024/07/30/Fluid-VSCode-Extension-%E4%B8%80%E6%AC%BE%E7%82%BAHexo%E6%A1%86%E6%9E%B6Fluid%E4%B8%BB%E9%A1%8C%E6%89%93%E9%80%A0%E7%9A%84%E6%93%B4%E5%B1%95/</a></p>           </div><h2 id="介紹">介紹</h2><p>這個擴展是為使用 Fluid 主題的 Hexo用戶量身定製的，提供自動語句片段貼上功能。</p><h2 id="功能">功能</h2><p>透過輸入和選擇命令來貼上語句。</p><h2 id="使用方法">使用方法</h2><ol type="1"><li><p>從<ahref="https://marketplace.visualstudio.com/items?itemName=Shih-Che-Lai-Simon.hexo-snippet-paste-tool-for-fluid">market</a>安裝，或是<code>vscode</code>裡面直接搜尋<code>Hexo Snippet Paste Tool for Fluid</code>安裝<br /><imgsrc="https://fluid.s3.bitiful.net/fluid-vscode-plugin/PEzdmlE.png?fmt=webp"alt="Market" /></p></li><li><p><code>F1</code>打開命令面板<br /><imgsrc="https://raw.githubusercontent.com/f88083/hexo-snippet-paste-tool-for-fluid/a5fc70f9a2e41be5de5202818acf7e4ecb25608c/img/f1.png"alt="Command palette" /></p></li><li><p>輸入<code>Fluid Paste Tool</code>，基本上不需要全部輸入就會顯示這個擴展的命令，輸入幾個字符後應該會看到如下所示的命令列表<br /><imgsrc="https://raw.githubusercontent.com/f88083/hexo-snippet-paste-tool-for-fluid/a5fc70f9a2e41be5de5202818acf7e4ecb25608c/img/commands.png"alt="Commands" /></p></li><li><p>所有可用命令如下所列（大多數片段可以在 <ahref="https://hexo.fluid-dev.com/docs/en/guide/">Fluid 文檔</a>中找到），詳細命令資訊可以在我的<ahref="https://hackmd.io/@simonlai23/HJGxJqQCp">筆記</a>中找到</p><ul><li>Paste Youtube Embed Code</li><li>Paste Fold Block</li><li>Paste Note</li><li>Paste Label</li><li>Paste CheckBox</li><li>Paste Button</li><li>Paste GroupImages</li><li>Paste Mermaid</li></ul></li><li><p>選擇其中之一自動貼到編輯器（某些命令可能需要輸入標題或類型等來自定義片段），下圖為執行了<code>Paste Note</code>的畫面<br /><imgsrc="https://raw.githubusercontent.com/f88083/hexo-snippet-paste-tool-for-fluid/a5fc70f9a2e41be5de5202818acf7e4ecb25608c/img/paste-note.png"alt="Customize command" /></p></li><li><p>按 Enter 鍵貼上<code>note</code><br /><imgsrc="https://raw.githubusercontent.com/f88083/hexo-snippet-paste-tool-for-fluid/a5fc70f9a2e41be5de5202818acf7e4ecb25608c/img/pasted-note.png"alt="Snippet pasted" /></p></li></ol><h2 id="已知問題">已知問題</h2><p>其實也不知道這個算不算問題，不過沒有那麼直覺就是了，所以放在這邊。</p><ul><li>某些語句例如<code>button</code>可以輸入文字，而<code>button</code>命令會用空格來區分<code>url</code>,<code>text</code>,以及<code>title</code>。這時如果輸入的文字是一句話，其中有空格，擴展就會把文字當作是<code>title</code>。同樣的情況也適用於其他用空格區分的命令</li></ul><h2 id="相關連結">相關連結</h2><ul><li><ahref="https://marketplace.visualstudio.com/items?itemName=Shih-Che-Lai-Simon.hexo-snippet-paste-tool-for-fluid">VisualStudio Marketplace</a></li><li><ahref="https://github.com/f88083/hexo-snippet-paste-tool-for-fluid">GitHubRepo</a></li><li><ahref="https://hackmd.io/@simonlai23/HJGxJqQCp">本擴展命令詳細使用方式</a></li></ul>]]></content>
    
    
    <summary type="html">專為 Fluid 開發的 VSCode 的插件/擴展，裡面集合了所有常用的語句，讓寫文章的過程更加流暢</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="示例" scheme="https://fluid-dev.cn/tags/%E7%A4%BA%E4%BE%8B/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
  </entry>
  
  <entry>
    <title>Fluid 摄影大赛#1</title>
    <link href="https://fluid-dev.cn/posts/fluid-photo-1/"/>
    <id>https://fluid-dev.cn/posts/fluid-photo-1/</id>
    <published>2024-02-05T09:30:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<h2 id="比赛介绍">比赛介绍</h2><p>为了满足 Fluid 社群成员的精神需求，促进群友之间的感情，首届 Fluid摄影大赛正式开启作品征集。</p><p><strong>本届比赛不设任何主题，题材除人像、写真、航拍、打鸟、动物特写以外其他均可。</strong></p><h2 id="获奖作品">获奖作品</h2><h4 id="相机组金奖">相机组金奖</h4><figure><imgsrc="https://fluid.s3.bitiful.net/fluid-photo/camera-1.png?fmt=webp"alt="冬季秦岭雾凇雪景 @凉风" /><figcaption aria-hidden="true">冬季秦岭雾凇雪景 <span class="citation"data-cites="凉风">@凉风</span></figcaption></figure><h4 id="相机组银奖">相机组银奖</h4><figure><imgsrc="https://fluid.s3.bitiful.net/fluid-photo/camera-2.png?fmt=webp"alt="黄河小浪底 @Bob" /><figcaption aria-hidden="true">黄河小浪底 <span class="citation"data-cites="Bob">@Bob</span></figcaption></figure><h4 id="相机组铜奖">相机组铜奖</h4><figure><imgsrc="https://fluid.s3.bitiful.net/fluid-photo/camera-3.png?fmt=webp"alt="粤西婚礼纪录 @鸣珂" /><figcaption aria-hidden="true">粤西婚礼纪录 <span class="citation"data-cites="鸣珂">@鸣珂</span></figcaption></figure><h4 id="手机组金奖">手机组金奖</h4><p>（轮空）</p><h4 id="手机组银奖">手机组银奖</h4><p>（轮空）</p><h4 id="手机组铜奖">手机组铜奖</h4><p>（并列获奖）</p><figure><img src="https://fluid.s3.bitiful.net/fluid-photo/phone-1.png?fmt=webp"alt="几枝红柿出墙来 @Abner" /><figcaption aria-hidden="true">几枝红柿出墙来 <span class="citation"data-cites="Abner">@Abner</span></figcaption></figure><figure><img src="https://fluid.s3.bitiful.net/fluid-photo/phone-2.png?fmt=webp"alt="神都龙年行记 @AlanBiao" /><figcaption aria-hidden="true">神都龙年行记 <span class="citation"data-cites="AlanBiao">@AlanBiao</span></figcaption></figure><h2 id="奖项">奖项</h2><ul><li>相机组：评选出 3 幅作品，奖金依次为 1000 元、600 元、400 元</li><li>手机组：评选出 3 幅作品，奖金依次为 500 元、300 元、200 元</li></ul><h2 id="参赛作品">参赛作品</h2><p><ahref="http://500px.com.cn/s/b1bf41a06a7f6a070cd9ee2d7c0806e7c2c88a4e60dc5844eb4403e34c78165f1112f114bcb5bfa0?swipe=1">相机组作品集</a></p><p><ahref="http://500px.com.cn/s/ed015c68192ef2c5edccf0516108436348eb07af561d93542df2fae8138f30371112f114bcb5bfa0?swipe=1">手机组作品集</a></p><h2 id="鸣谢">鸣谢</h2><p>本比赛所有奖金由 <span class="citation"data-cites="啥事都想试试">@啥事都想试试</span>·团子 特别赞助！</p>]]></content>
    
    
    <summary type="html">首届 Fluid 摄影大赛圆满结束，获奖作品展览</summary>
    
    
    
    <category term="社群动态" scheme="https://fluid-dev.cn/categories/%E7%A4%BE%E7%BE%A4%E5%8A%A8%E6%80%81/"/>
    
    
    <category term="社群" scheme="https://fluid-dev.cn/tags/%E7%A4%BE%E7%BE%A4/"/>
    
  </entry>
  
  <entry>
    <title>Vercel 部署高级用法教程</title>
    <link href="https://fluid-dev.cn/posts/hexo-vercel/"/>
    <id>https://fluid-dev.cn/posts/hexo-vercel/</id>
    <published>2022-10-10T10:55:57.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：<a href="https://blog.17lia.site">夜法之书</a><br /> 原文地址：<a href="https://blog.17lai.site/posts/e922fac8/" class="uri">https://blog.17lai.site/posts/e922fac8/</a></p>           </div><blockquote><p>Vercel使用有不少需要仔细配置的地方，可惜的是，自定义Vercel缓存时间，Vercel重定向等使用方法略复杂，不是开箱即用，有一定使用门槛，故这里单独列一篇文章详细说明Vercel的一些高级使用方法！</p></blockquote><!-- more --><h2 id="为什么使用-vercel">为什么使用 vercel</h2><ul><li>国内 <code>Github Pages</code> 速度较慢。</li><li><code>vercel</code> 速度快且能够自定义域名，能实现和<code>Github Pages</code> 一样的效果</li></ul><blockquote><p>vercel 官方地址：<a href="https://vercel.com/">vercel.com/</a></p></blockquote><h2 id="开始使用">开始使用</h2><ul><li>首先注册一个账号 <a href="https://vercel.com/"class="uri">https://vercel.com/</a></li><li>注册成功后进入页面，点击 <code>News Project</code></li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329.png"alt="img" /><figcaption aria-hidden="true">img</figcaption></figure><ul><li>然后通过绑定的 <code>github</code> 或者 <code>gitlab</code>导入需要部署的项目</li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329-1.png"alt="img" /><figcaption aria-hidden="true">img</figcaption></figure><ul><li>如果导入的项目是打包好的静态页，<code>FRAMEWORK PRESET</code> 选择<code>Other</code> 。</li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329-2.png"alt="img" /><figcaption aria-hidden="true">img</figcaption></figure><ul><li>点击 <code>deployed</code>进行部署，如果部署失败可以查看报错信息是不是上一步的某些选项没有覆盖。部署成功后会进入如图所示的界面</li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/re_214145.png"alt="img" /><figcaption aria-hidden="true">img</figcaption></figure><h2 id="如何自定义域名">如何自定义域名</h2><ul><li>腾讯云域名地址：<ahref="https://console.cloud.tencent.com/domain">console.cloud.tencent.com/domain</a></li><li><code>vercel</code> 静态页挂载地址：</li><li>进入到 setting 中可对项目进行一些设置，如项目名称</li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329-4.png"alt="vercel 自定义域名" /><figcaption aria-hidden="true">vercel 自定义域名</figcaption></figure><ul><li>下面演示如何自定义域名，默认情况下部署成功后 <code>vercel</code>会给你生成一个默认的域名，如果想要修改成自己的域名可将域名名称修改成自己的。</li><li>当选择修改成自己的域名名称后，<code>vercel</code> 会检查域名指向的<code>DNS</code> 对不对，如果不对的话会提示你域名的 DNS应该如何配置，按照 <code>vercel</code> 提示的 <code>DNS</code> 信息</li></ul><p>在自己的域名的 <code>DNS</code> 配置中进行配置，如图</p><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329-5.png"alt="img" /><figcaption aria-hidden="true">img</figcaption></figure><h2 id="配置多个域名">配置多个域名</h2><p>对其他新增的域名选择重定向到自己的主域名即可</p><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904114329-6.png"alt="vercel 多域名配置" /><figcaption aria-hidden="true">vercel 多域名配置</figcaption></figure><h2 id="自定义vercel服务器位置">自定义Vercel服务器位置</h2><blockquote><p>Vercel线路已经很快了，但是可以通过选择Vercel部署服务器位置，更进一步加快中国大陆，亚洲区域的访问速度！</p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220904120615.png"alt="Vercel服务器选择" /><figcaption aria-hidden="true">Vercel服务器选择</figcaption></figure><p>香港服务器虽然没有严格测试，但是中国大陆速度应该是最快的！</p><h2 id="自定义header缓存时间">自定义Header缓存时间</h2><blockquote><p><ahref="https://vercel.com/docs/project-configuration#project-configuration/headers">vercel.com/docs</a></p><p><strong>使用Vercel必备配置，本地缓存加速访问！</strong></p></blockquote><p><code>vercel.json</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><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></pre></td><td class="code"><pre><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>  <span class="hljs-attr">&quot;headers&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br>    <span class="hljs-punctuation">&#123;</span><br>      <span class="hljs-attr">&quot;source&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;/sw.js&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;headers&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br>        <span class="hljs-punctuation">&#123;</span><br>          <span class="hljs-attr">&quot;key&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Cache-Control&quot;</span><span class="hljs-punctuation">,</span><br>          <span class="hljs-attr">&quot;value&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;public, max-age=0, must-revalidate&quot;</span><br>        <span class="hljs-punctuation">&#125;</span><br>      <span class="hljs-punctuation">]</span><br>    <span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-punctuation">&#123;</span><br>      <span class="hljs-attr">&quot;source&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;(.*)&quot;</span><span class="hljs-punctuation">,</span><br>      <span class="hljs-attr">&quot;headers&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br>        <span class="hljs-punctuation">&#123;</span><br>          <span class="hljs-attr">&quot;key&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Cache-Control&quot;</span><span class="hljs-punctuation">,</span><br>          <span class="hljs-attr">&quot;value&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;public, s-maxage=86400, max-age=86400&quot;</span><br>        <span class="hljs-punctuation">&#125;</span><br>      <span class="hljs-punctuation">]</span><br>    <span class="hljs-punctuation">&#125;</span><br>  <span class="hljs-punctuation">]</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><h2 id="vercel自定义404">Vercel自定义404</h2><blockquote><p><a href="https://vercel.com/guides/custom-404-page">learn how tocustomize the 404 page</a>.</p></blockquote><h2 id="vercel流量超标怎么办">Vercel流量超标怎么办？</h2><blockquote><p>最近查看了一下Vercel流量使用情况，发现RSS订阅流量太大了，占了30GB流量！</p><p>免费Vercel账户每月只有100G免费流量，怎么办？</p></blockquote><p>有两种解决方法：</p><ol type="1"><li>使用 DNS 多线路分流，例如<ahref="https://blog.17lai.site/posts/5311b619/#DNSPOD-%E5%A4%9A%E7%BA%BF%E8%B7%AF%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1">DNSPOD多线路负载均衡</a></li><li>使用 Vercel 提供的 <ahref="https://vercel.com/docs/project-configuration#project-configuration/redirects">redirects</a>或者 <ahref="https://vercel.com/docs/project-configuration#project-configuration/rewrites">rewrites</a>功能，把rss访问重定向到其它部署方式，例如Cloudflare</li></ol><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220927103610.png"alt="Vercel 流量" /><figcaption aria-hidden="true">Vercel 流量</figcaption></figure><p>查看方法：<a href="https://vercel.com/dashboard">dashboard</a> -&gt;<a href="https://vercel.com/dashboard/usage">usage</a></p><p>由于个人blog也部署到Cloudflare上面了，<ahref="https://cfblog.17lai.site"class="uri">https://cfblog.17lai.site</a>，Cloudflare的流量目前看着没限制，如是，可以使用如下重定向方法</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><code class="hljs json"><span class="hljs-attr">&quot;redirects&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><br><span class="hljs-punctuation">&#123;</span> <span class="hljs-attr">&quot;source&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;/atom.xml&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;destination&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://cfblog.17lai.site/atom.xml&quot;</span> <span class="hljs-punctuation">&#125;</span><span class="hljs-punctuation">,</span><br><span class="hljs-punctuation">&#123;</span> <span class="hljs-attr">&quot;source&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;/rss.xml&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">&quot;destination&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;https://cfblog.17lai.site/rss.xml&quot;</span> <span class="hljs-punctuation">&#125;</span><br>  <span class="hljs-punctuation">]</span><br></code></pre></td></tr></table></figure><p>详细 Cloudflare 部署方法，戳 <ahref="https://blog.17lai.site/posts/5311b619/#cloudflare-Pages-%E9%83%A8%E7%BD%B2">cloudflarePages 部署</a></p><h2 id="乒乓部署">乒乓部署</h2><blockquote><p>也可以叫旋转门部署。</p><p>解决调试博客插件，修改半成品文章时部署到云端会影响正在查阅博客的用户的问题！</p><p>使用Docker版本本地预览是很不错，但是 jsdelivr 版本发布需要在 Github生成新 release 这时本地就不行了。乒乓部署可以解决这个问题！</p></blockquote><p>具体方法就是同时部署到两个地方A和B，博客域名在两个服务器之间切换。这里以Vercel 为例</p><h3 id="准备工作">准备工作：</h3><ul><li>创建2个Github仓库，对应服务器A和B的部署</li><li>建立两个服务器A和B，分别关联两个 Github 仓库</li><li>把调试完毕的代码上传到两个仓库</li><li>这时通过服务器A和B都是可以正常浏览的</li></ul><h3 id="要调试的时候">要调试的时候：</h3><ul><li>发布到A之前，把博客域名转移到服务器B</li><li>在服务A做一些调试，在线 debug 工作</li><li>特别是在线 <a href="https://pagespeed.web.dev/">pageseed</a>测试调优，这种事必备方法。简单不需要新的 jsdelivr 版本调试本地 <ahref="https://github.com/appotry/docker-hexo">docker-hexo</a>调试即可！</li></ul><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220820181601.png"alt="输入想转移的域名" /><figcaption aria-hidden="true">输入想转移的域名</figcaption></figure><figure><img src="https://fluid.s3.bitiful.net/hexo-vercel/20220820181557.png"alt="点击确认转移域名" /><figcaption aria-hidden="true">点击确认转移域名</figcaption></figure><h3 id="调试完毕后">调试完毕后：</h3><ul><li>把域名切换到服务器A</li><li>同时部署到服务器B，服务器B同步A的部署内容，以便下次备用</li></ul><blockquote><p>总结就是服务器A现行，服务器B做后备，调试发布使用A，调试A的时候B就顶上前台！</p><p>这样，调试和正常部署网络服务两不误。是不是感觉自己是个大聪明！</p></blockquote><h2 id="参考致谢">参考&amp;致谢</h2><ul><li><ahref="https://vercel.com/docs/project-configuration#project-configuration/redirects"class="uri">https://vercel.com/docs/project-configuration#project-configuration/redirects</a></li></ul><h2 id="系列教程">系列教程</h2><ul><li><a href="https://blog.17lai.site/posts/40300608/">HexoDocker环境与Hexo基础配置篇</a></li><li><ahref="https://blog.17lai.site/posts/4d8a0b22/">hexo博客自定义修改篇</a></li><li><ahref="https://blog.17lai.site/posts/9b056c86/">hexo博客网络优化篇</a></li><li><ahref="https://blog.17lai.site/posts/5311b619/">hexo博客增强部署篇</a></li><li><ahref="https://blog.17lai.site/posts/4a2050e2/">hexo博客个性定制篇</a></li><li><ahref="https://blog.17lai.site/posts/84b4059a/">hexo博客常见问题篇</a></li><li><ahref="https://blog.17lai.site/posts/253706ff/">hexo博客博文撰写篇之完美笔记大攻略终极完全版</a></li><li><a href="https://blog.17lai.site/posts/cf0f47fd/">HexoMarkdown以及各种插件功能测试</a></li></ul><blockquote><ul><li>markdown 各种其它语法插件，latex公式支持，mermaid图表，plantuml图表，URL卡片，bilibili卡片，github卡片，豆瓣卡片，插入音乐和视频，插入脑图，插入PDF，嵌入iframe</li></ul></blockquote><ul><li><a href="https://blog.17lai.site/posts/217ccdc1/">在 Hexo 博客中插入ECharts 动态图表</a></li><li><ahref="https://blog.17lai.site/posts/546887ac/">使用nodeppt给hexo博客嵌入PPT演示</a></li><li><ahref="https://blog.17lai.site/posts/e922fac8/">Vercel部署高级用法教程</a></li></ul>]]></content>
    
    
    <summary type="html">Vercel 使用有不少需要仔细配置的地方，可惜的是，自定义 Vercel 缓存时间，Vercel 重定向等使用方法略复杂，不是开箱即用，有一定使用门槛，故这里单独列一篇文章详细说明Vercel的一些高级使用方法。</summary>
    
    
    
    <category term="实用技巧" scheme="https://fluid-dev.cn/categories/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 使用 Docker 来写文章和调试博客</title>
    <link href="https://fluid-dev.cn/posts/hexo-docker/"/>
    <id>https://fluid-dev.cn/posts/hexo-docker/</id>
    <published>2022-10-10T10:04:57.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：<a href="https://blog.17lia.site">夜法之书</a><br /> 原文地址：<a href="https://blog.17lai.site/posts/40300608/" class="uri">https://blog.17lai.site/posts/40300608/</a></p>           </div><h2 id="hexo-docker环境使用篇">Hexo Docker环境使用篇</h2><h3 id="docker-简介">Docker 简介：</h3><blockquote><p>Docker是一种轻量级的虚拟机环境，可以隔离主机的运行环境，内核公用主机的，运行库和环境是Docker 私有的。运行 Docker程序只比主机直接运行程序性能损失微乎其微。使用 Docker你可以同时运行各种各样运行库环境而不用担心搞乱你的主机运行库环境！</p><p>Docker 运行负载远小于 Vmware 这类虚拟机， Vmware需要模拟对应的CPU指令，再虚机运行一个虚拟机自己的内核，再这个虚拟机内核之上，再运行虚拟机的运行库和程序。比Docker 多了一个内核模拟和运行，Cpu 和内存开销大增！</p></blockquote><h3 id="docker-版-hexo-环境一键部署">Docker 版 hexo 环境一键部署</h3><blockquote><p>博主开源定制，推荐使用！省去您大量环境配置时间。</p><p>使用 Hexo Docker 之前需要 Docker 环境，请参阅后文 Docker 安装方法</p><ul><li><ahref="https://hub.docker.com/r/bloodstar/hexo">docker-hub</a></li><li><ahref="https://github.com/appotry/docker-hexo">Github-hexo</a></li></ul></blockquote><p>Docker一键安装</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></pre></td><td class="code"><pre><code class="hljs bash">docker create --name=hexo \<br>-e HEXO_SERVER_PORT=4000 \<br>-e GIT_USER=<span class="hljs-string">&quot;17lai&quot;</span> \<br>-e GIT_EMAIL=<span class="hljs-string">&quot;17lai@domain.tld&quot;</span> \<br>-v /mnt/blog.17lai.site:/app \<br>-p 4000:4000 \<br>bloodstar/hexo<br></code></pre></td></tr></table></figure><p><code>Docker</code>镜像直接提供最新版本<code>node</code>，<code>hexo</code></p><h3 id="hexo-web-后台写作">hexo web 后台写作</h3><blockquote><p>基于 <strong><ahref="https://github.com/jaredly/hexo-admin">hexo-admin</a></strong>实现，具体配置实现方法见<ahref="https://blog.17lai.site/posts/40300608/">后文</a>。</p><p>最终效果如下图所示。<code>blog.17lai.fun</code>访问<code>blog</code>， 添加后缀 <code>admin</code> 访问<code>hexo</code> 后台。</p><p>使用前面提到的 hexo docker ，启动运行 hexo docker 后，非自动安装hexo-admin 以及常用插件，你也可以自定义安装你虚幻的插件，<code>vi /app/useRun.sh</code>。</p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2620220326133730.png"alt="hexo-admin 主界面" /><figcaption aria-hidden="true">hexo-admin 主界面</figcaption></figure><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2620220326133825.png"alt="hexo-admin 编辑写作界面" /><figcaption aria-hidden="true">hexo-admin 编辑写作界面</figcaption></figure><p>配置 hexo-admin 根目录下<code>_config.yml</code>:</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">admin:</span><br>  <span class="hljs-attr">username:</span> <span class="hljs-string">myfavoritename</span> <span class="hljs-comment">#用户名</span><br>  <span class="hljs-attr">password_hash:</span> <span class="hljs-string">be121740bf988b2225a313fa1f107ca1</span> <span class="hljs-comment">#密码</span><br>  <span class="hljs-attr">secret:</span> <span class="hljs-string">a</span> <span class="hljs-string">secret</span> <span class="hljs-string">something</span> <span class="hljs-comment"># secret is used to make the cookies secure</span><br>  <span class="hljs-attr">deployCommand:</span> <span class="hljs-string">&#x27;/app/tools/cide.sh&#x27;</span>  <span class="hljs-comment"># 自定义的部署脚本，在 hexo admin 的 deploy 标签页 deploy 按钮点击调用</span><br></code></pre></td></tr></table></figure><p>配置 post metadata 根目录下<code>_config.yml</code>:</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-comment"># add and edit your own post metadata with the admin interface</span><br><span class="hljs-attr">metadata:</span><br>  <span class="hljs-attr">author_id:</span> <span class="hljs-string">defaultAuthorId</span><br>  <span class="hljs-attr">language:</span><br></code></pre></td></tr></table></figure><h4 id="hexon">hexon</h4><blockquote><p>Github: <a href="https://github.com/gethexon/hexon">hexon</a></p><p>另一个hexo web 编辑界面，界面比hexo-admin更现代化。安装配置方法见<ahref="https://github.com/gethexon/hexon">Github</a></p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/20220529214918.png"alt="hexon" /><figcaption aria-hidden="true">hexon</figcaption></figure><h4 id="hexo-editor">hexo-editor</h4><blockquote><p><a href="https://github.com/tajpure/hexo-editor">hexo-editor</a></p><p>又一个hexo web 编辑器</p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/20220818101457.png"alt="hexo editor 登录" /><figcaption aria-hidden="true">hexo editor 登录</figcaption></figure><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/20220818101457-1.png"alt="hexo editor 预览" /><figcaption aria-hidden="true">hexo editor 预览</figcaption></figure><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/20220818101457-2.png"alt="hexo editor 编辑" /><figcaption aria-hidden="true">hexo editor 编辑</figcaption></figure><p><strong>支持手机</strong></p><p><imgsrc="https://fluid.s3.bitiful.net/hexo-docker/20220818101457-3.png" /></p><h3 id="ssh-key-部署">ssh key 部署</h3><p><strong>Docker会自动随机生成ssh key</strong> 在 /app/.ssh目录下面。自动部署请把ssh key添加到github 等平台。</p><p><ahref="https://docs.github.com/cn/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account">Github详细教程</a></p><blockquote><ol type="1"><li>将<strong>SSH</strong> 公钥复制到剪贴板。 ...</li><li>在任何页面的右上角，单击您的个人资料照片，然后单击Settings（设置）。</li><li>在用户设置侧边栏中，单击<strong>SSH</strong> and GPGkeys（<strong>SSH</strong> 和GPG 密钥）。</li><li>单击New <strong>SSH</strong> key（新<strong>SSH</strong> 密钥）或Add<strong>SSH</strong> key（添加<strong>SSH</strong> 密钥）。</li></ol></blockquote><h3 id="ssh-进入docker">SSH 进入docker</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">docker <span class="hljs-built_in">exec</span> -it hexo /bin/bash<br></code></pre></td></tr></table></figure><p>然后就可以正常运行hexo的各种命令了，是不是非常简单？ 快来试试吧。</p><h3 id="远程-ssh-访问docker">远程 SSH 访问Docker</h3><blockquote><p>推荐使用<code>SecurtCRT</code>来远程访问你的<code>Docker</code>。</p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2620220326140201.png"alt="SecurtCRT" /><figcaption aria-hidden="true">SecurtCRT</figcaption></figure><h3 id="自定义用户自动运行脚本">自定义用户自动运行脚本</h3><blockquote><p>用户可以在这里添加自动配置，自动安装插件，等各种启动docker运行的命令。</p><p>它将在Docker启动完成后自动调用运行！</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">vi /app/useRun.sh<br></code></pre></td></tr></table></figure><h3 id="反向代理-hexo-docker">反向代理 Hexo Docker</h3><blockquote><p><em>Nginx</em> (engine x)是一个高性能的HTTP和反向代理web服务器，同时也提供了IMAP/POP3/SMTP服务。</p><ul><li><p>一些测试可能需要ssl支持，那么用nginx来反向代理一下，就可以在本地愉快的测试ssl加密功能了。</p></li><li><p>访问docker，需要<code>192.168.0.100:4000</code>这样数字<code>ip + 端口号</code>的方式不觉得很丑陋，而且需要开大量的端口，使用nginx反向代理，可以直接使用域名访问。</p></li><li><p>如果你想使用<code>blog.17lai.fun</code>这样的域名访问你的 docker里面运行的博客，请参考下文。</p></li></ul></blockquote><p>Nginx也使用docker来运行，<code>blog.17lai.fun</code>为本地域名，修改本地hostsdns信息来访问。</p><h4 id="docker-compose-配置">docker compose 配置</h4><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">nginxweb:</span><br>  <span class="hljs-attr">image:</span> <span class="hljs-string">bloodstar/nginx-purge</span><br>  <span class="hljs-attr">container_name:</span> <span class="hljs-string">&quot;nginxweb&quot;</span><br>  <span class="hljs-attr">hostname:</span> <span class="hljs-string">nginxweb</span><br>  <span class="hljs-attr">ports:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;80:80&quot;</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">&quot;443:443&quot;</span><br>  <span class="hljs-attr">restart:</span> <span class="hljs-string">always</span><br>  <span class="hljs-attr">volumes:</span><br>    <span class="hljs-comment"># $&#123;USERDIR&#125;为你docker运行目录</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">$&#123;USERDIR&#125;/nginx/conf.d:/etc/nginx/conf.d:ro</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">$&#123;USERDIR&#125;/nginxproxy/certs:/etc/nginx/certs:ro</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">$&#123;USERDIR&#125;/nginx/nginx.conf:/etc/nginx/nginx.conf:ro</span><br></code></pre></td></tr></table></figure><ul><li><ahref="https://hub.docker.com/r/bloodstar/nginx-purge">bloodstar/nginx-purge</a></li></ul><h4 id="nginx配置">nginx配置</h4><p>文件 <code>blog.conf</code>，配置文件放到<code>$&#123;USERDIR&#125;/nginx/conf.d</code>目录中</p><figure class="highlight nginx"><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></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-section">upstream</span> blog &#123;<br>    <span class="hljs-attribute">server</span> hexo:<span class="hljs-number">4000</span>;<br>&#125;<br><br><span class="hljs-section">server</span> &#123;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;<br>    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span> ssl http2;<br>    <span class="hljs-attribute">server_name</span>  blog.17lai.fun;<br><br>    <span class="hljs-attribute">ssl_certificate</span> /etc/nginx/certs/17lai.pem;<br>    <span class="hljs-attribute">ssl_certificate_key</span> /etc/nginx/certs/17lai.key;<br><br>    <span class="hljs-attribute">ssl_session_cache</span> shared:aria2SSL:<span class="hljs-number">10m</span>;<br>    <span class="hljs-attribute">ssl_session_timeout</span>  <span class="hljs-number">30m</span>;<br>    <span class="hljs-comment">#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;</span><br>    <span class="hljs-attribute">ssl_ciphers</span> EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;<br>    <span class="hljs-attribute">ssl_protocols</span> TLSv1 TLSv1.<span class="hljs-number">1</span> TLSv1.<span class="hljs-number">2</span>;<br>    <span class="hljs-attribute">ssl_prefer_server_ciphers</span> <span class="hljs-literal">on</span>;<br>    <br>    <span class="hljs-attribute">access_log</span> /var/log/nginx/blog.17lai.fun_access.log combined;<br>    <span class="hljs-attribute">error_log</span>  /var/log/nginx/blog.17lai.fun_error.log;<br>    <br>    <span class="hljs-attribute">keepalive_requests</span> <span class="hljs-number">10000</span>;<br>    <br>    <span class="hljs-section">location</span> / &#123;<br>        <span class="hljs-comment">#proxy_redirect off;</span><br>        <span class="hljs-attribute">proxy_pass</span> http://blog;<br><br>        <span class="hljs-attribute">proxy_buffering</span> <span class="hljs-literal">off</span>;<br>        <br>        <span class="hljs-attribute">add_header</span> X-Cache-Status <span class="hljs-variable">$upstream_cache_status</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Host <span class="hljs-variable">$http_host</span>;<br><br>        <span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto <span class="hljs-variable">$scheme</span>;<br><br>        <span class="hljs-attribute">proxy_set_header</span> X-Real-IP <span class="hljs-variable">$remote_addr</span>;<br>        <span class="hljs-attribute">proxy_set_header</span>  X-Forwarded-Ssl     <span class="hljs-literal">on</span>;<br>        <span class="hljs-attribute">proxy_set_header</span>  X-Forwarded-For     <span class="hljs-variable">$proxy_add_x_forwarded_for</span>;      <br>        <span class="hljs-attribute">proxy_set_header</span>  X-Frame-Options     SAMEORIGIN;<br>        <br>        <span class="hljs-attribute">proxy_set_header</span> Upgrade <span class="hljs-variable">$http_upgrade</span>;<br>        <span class="hljs-attribute">proxy_set_header</span> Connection <span class="hljs-string">&quot;upgrade&quot;</span>;<br>    &#125; <br>&#125;<br><br></code></pre></td></tr></table></figure><h4 id="windows-dns修改">Windows DNS修改</h4><p>windows hosts文件路径为：<code>C:\Windows\System32\drivers\etc\HOSTS</code></p><p>管理员权限用文本编辑器打开这个文件并添加<code>192.168.0.100 blog.17lai.fun</code>，然后，你就可以在本地浏览器中使用域名访问你的blog了！</p><h4 id="linux-dns-修改">Linux DNS 修改</h4><p>Linux hosts 文件路径为： <code>/etc/hosts</code></p><p>用文本编辑器或者命令行工具<code>vim</code>打开这个文件并添加<code>192.168.0.100 blog.17lai.fun</code>，然后，你就可以在本地浏览器中使用域名访问你的blog了！</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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># root用户一条指令搞定</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;192.168.0.100 blog.17lai.fun&quot;</span> &gt;&gt; /etc/hosts<br><br><span class="hljs-comment">#或者使用 vi 或者 vim</span><br>vi /etc/hosts<br></code></pre></td></tr></table></figure><h4 id="获取-ssl-证书">获取 SSL 证书</h4><blockquote><ul><li>如果你购买了域名，可以在域名服务商获得免费的ssl证书。</li><li>自己生成<u><em>私有证书</em></u>，使用时需要给本地计算机，浏览器添加==你自己的根证书==，才能使你的ssl证书在==你自己的浏览器==中生效。</li></ul></blockquote><blockquote><p>使用Hexo Docker之前需要Docker 环境，下面是Docker 环境安装方法。</p></blockquote><h3 id="centos-安装docker"><strong>Centos 安装Docker</strong></h3><p><strong>X86</strong>（一键安装脚本）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">curl -sSL https://get.docker.com/ | sh<br></code></pre></td></tr></table></figure><p><strong>Arm</strong>：</p><p>步骤1</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> yum install -y yum-utils device-mapper-persistent-data lvm2<br></code></pre></td></tr></table></figure><p>步骤2</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><code class="hljs bash"><span class="hljs-built_in">sudo</span> yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo<br></code></pre></td></tr></table></figure><p>步骤3</p><p>安装Docker</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> yum install docker-ce docker-ce-cli containerd.io<br></code></pre></td></tr></table></figure><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2420220324173951.png"alt="centos docker" /><figcaption aria-hidden="true">centos docker</figcaption></figure><p><imgsrc="https://fluid.s3.bitiful.net/hexo-docker/2420220324173951-1.png"alt="centos docker" />完成安装</p><p>步骤4</p><p>启动Docker</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">sudo</span> systemctl start docker<br></code></pre></td></tr></table></figure><h3 id="qnap-安装docker">QNAP 安装Docker</h3><blockquote><p>在系统应用的AppCenter中找到 ContainerStation，可以直接点击安装即可。</p></blockquote><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2620220326110013.png"alt="qnap docker" /><figcaption aria-hidden="true">qnap docker</figcaption></figure><h3 id="群晖-安装-docker">群晖 安装 Docker</h3><p>首先要说的是，x86 平台的群晖才能用的上 <code>Docker</code>套件，因此，ARM 架构平台的群晖只能说非常遗憾了。<br />　　打开套件中心，在 “所有套件” 中找到 <code>Docker</code> 并安装：</p><figure><img src="https://fluid.s3.bitiful.net/hexo-docker/2620220326111828.png"alt="群晖 Docker" /><figcaption aria-hidden="true">群晖 Docker</figcaption></figure><h2 id="系列教程">系列教程</h2><p>本文是系列教程<strong>基于Hexo的matery主题搭建博客并深度优化完全一站式教程</strong>第一篇的Docker部分</p><ul><li><a href="https://blog.17lai.site/posts/40300608/">HexoDocker环境与Hexo基础配置篇</a></li><li><ahref="https://blog.17lai.site/posts/4d8a0b22/">hexo博客自定义修改篇</a></li><li><ahref="https://blog.17lai.site/posts/9b056c86/">hexo博客网络优化篇</a></li><li><ahref="https://blog.17lai.site/posts/5311b619/">hexo博客增强部署篇</a></li><li><ahref="https://blog.17lai.site/posts/4a2050e2/">hexo博客个性定制篇</a></li><li><ahref="https://blog.17lai.site/posts/84b4059a/">hexo博客常见问题篇</a></li><li><ahref="https://blog.17lai.site/posts/253706ff/">hexo博客博文撰写篇之完美笔记大攻略终极完全版</a></li><li><a href="https://blog.17lai.site/posts/cf0f47fd/">HexoMarkdown以及各种插件功能测试</a></li></ul>]]></content>
    
    
    <summary type="html">Docker 是一种轻量级的虚拟机环境，可以隔离主机的运行环境，内核公用主机的，运行库和环境是 Docker 私有的。运行 Docker 程序只比主机直接运行程序性能损失微乎其微。使用 Docker 你可以同时运行各种各样运行库环境而不用担心搞乱你的主机运行库环境！</summary>
    
    
    
    <category term="实用技巧" scheme="https://fluid-dev.cn/categories/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Coding 免费图床方案</title>
    <link href="https://fluid-dev.cn/posts/coding-imagehost/"/>
    <id>https://fluid-dev.cn/posts/coding-imagehost/</id>
    <published>2022-03-11T15:47:47.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：千泷<br /> 原文地址：<a href="https://www.myql.xyz/post/92e90c46/" class="uri">https://www.myql.xyz/post/92e90c46/</a></p>           </div><p>现在绝大多数自建博客用的图床方案都是 GitHub + jsDelivr +PicGo，包括作者的站点也是一样，优点在于零成本，简单的搭建方式以及不错的访问速度，但随着jsDelivr 备案被取消，国内访问不再稳定，我开始考虑更好的代替品。</p><p>之前其实也试过 Coding 或 Gitee作为自建图床，但是体验都不是特别完美，Coding图床支持的软件太少了，不管是管理还是上传都并不是很方便，而 Gitee图床超过 1M 就必须登录才能查看，之前试过使用类似于 <ahref="https://github.com/marketplace/actions/sync-repo-to-coding">SyncRepo to Coding</a> 将同步到 Coding，但是效果不太理想。</p><h2 id="思路">🤔 思路</h2><p>通过 Coding 持续集成自动将 GitHub 仓库实时同步到 Coding仓库，并且替换 <code>PicGo</code> 中自定义网址。</p><p>相同方法适用于 Gitee，不过更建议使用 Coding。</p><h2 id="优势">🧐 优势</h2><p>Coding 每月 1000 分钟，单任务 30分钟，并且不限次数，仅用来同步完全够用，并且构建速度极快，每次构建 7~8秒左右，通过 PicGo上传图片后几乎感觉不到太大的延迟就可以显示出图片。</p><p>相比于直接使用 Coding 或 Gitee 当图床的优势在于：</p><ul><li>支持的软件和项目变多</li><li>可以通过 vscode 等一键替换已有链接，达成无感迁移</li><li>不改变原有基于 GitHub + jsDelivr + PicGo 方案的使用方式</li><li>可以搭配类似于 <a href="https://github.com/apps/imgbot">Imgbot</a>或 <ahref="https://github.com/namoscato/action-tinify">action-tinify</a>完成图片的<strong>自动压缩优化</strong></li><li>管理方面可以使用 <a href="https://github.com/XPoet/picx">picx</a> 或<a href="https://github.com/xjh22222228/boomb">boomb</a>类似的项目进行在线管理</li></ul><h2 id="需要的准备">🪛 需要的准备</h2><ul><li>GitHub 账号</li><li>Coding 账号</li><li>VScode / Typora</li><li><a href="https://github.com/Molunerfinn/PicGo">PicGo</a> / <ahref="https://marketplace.visualstudio.com/items?itemName=Spades.vs-picgo">vs-picgo</a>/ <ahref="https://marketplace.visualstudio.com/items?itemName=hancel.markdown-image">MarkdownImage</a></li></ul><h2 id="部署">🛠️ 部署</h2><p>打开 <a href="https://e.coding.net/login">Coding</a>后创建一个项目。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-16-35-57.png" /></p><p>选择按需选择，勾选<code>代码托管</code>和<code>构建流水线&amp;自动化测试</code>完成创建。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-00-37.png" /></p><p>进入项目后先创建项目令牌，记录下用户名和密码备用。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-03-48.png" /></p><p>接下来导入 GitHub 中你选择当图床的仓库。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-16-54-24.png" /></p><p>完成后点击<code>持续集成</code>选择<code>构建计划</code>划到最下方选择自定义构建过程，代码仓库选择<code>GitHub</code>选择你刚刚导入的仓库。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-18-30.png" /></p><p>点击<code>确定</code>后会自动跳转到配置流程，点击<code>文本编辑器</code>输入以下代码，记得替换成自己的 Coding 仓库 Url：</p><figure class="highlight sh"><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></pre></td><td class="code"><pre><code class="hljs sh">pipeline &#123;<br>  agent any<br>  stages &#123;<br>    stage(<span class="hljs-string">&quot;检出&quot;</span>) &#123;<br>      steps &#123;<br>        checkout([<br>          <span class="hljs-variable">$class</span>: <span class="hljs-string">&#x27;GitSCM&#x27;</span>,<br>          branches: [[name: GIT_BUILD_REF]],<br>          userRemoteConfigs: [[<br>            url: GIT_REPO_URL,<br>            credentialsId: CREDENTIALS_ID<br>        ]]])<br>      &#125;<br>    &#125;<br>    stage(<span class="hljs-string">&#x27;拉取到Coding&#x27;</span>) &#123;<br>      steps &#123;<br>        <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;正在拉取&quot;</span><br>        sh <span class="hljs-string">&#x27;git push -f https://$CODING_NAME:$CODING_TOKEN@e.coding.net/你的团队名/项目名称/代码仓库名称.git HEAD:main&#x27;</span><br>        <span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;拉取完成&quot;</span><br>      &#125;<br>    &#125;<br>  &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-31-41.png" /></p><p>在环境变量里输入<code>CODING_NAME</code>和<code>CODING_TOKEN</code>值就是刚刚申请的项目令牌的用户名和密码，完成后记得保存。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-41-09.png" /></p><p>在<code>触发规则</code>里修改触发方式为推送到<code>main</code>分支时触发，并且将手动触发改为<code>main</code>（可根据自己实际需求选择）。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-17-46-15.png" /></p><p>完成后点击<code>立即构建</code>, 从现在起，你在 GitHub上的仓库会自动同步到 Coding 仓库上，到此部署结束。</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-19-02-15.png" /></p><h2 id="实际使用">🚀 实际使用</h2><p>开打 <a href="https://github.com/Molunerfinn/PicGo">PicGo</a> / <ahref="https://marketplace.visualstudio.com/items?itemName=Spades.vs-picgo">vs-picgo</a>/ <ahref="https://marketplace.visualstudio.com/items?itemName=hancel.markdown-image">MarkdownImage</a> 中的任意一个，配置GitHub图床，将自定义网址替换为：<br /><code>https://你的团队名.coding.net/p/你的项目名称/d/你的代码仓库名称/git/raw/main</code>。</p><p>以 <ahref="https://marketplace.visualstudio.com/items?itemName=Spades.vs-picgo">vs-picgo</a>为例：</p><p><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/2022-03-12-18-07-36.png" /></p><p>现在直接使用快捷键上传图像，图片会自动将 GitHub 的链接替换为 Coding的链接，请开始愉快的写作吧！</p>]]></content>
    
    
    <summary type="html">通过 Coding 持续集成同步 GitHub 仓库，实现自建图床功能</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>在 Fluid 主题中加入谷歌广告</title>
    <link href="https://fluid-dev.cn/posts/fluid-adsense/"/>
    <id>https://fluid-dev.cn/posts/fluid-adsense/</id>
    <published>2022-02-20T12:22:02.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<p>诚如大家所见，本主题的官网（当前这个站和文档站）都挂上了谷歌广告。</p><p>当然这不是开发组穷疯了，毕竟这种广告 CPM 计费每千人也就 1美元左右，就算把历史的访问量全折算掉也就几百块钱。</p><p>主要是因为 Fluid维护了这么长时间都是靠爱发电，域名和服务器都是自费，不得不加入一些商业行为才能从长计议。</p><p>同时我们正在寻找商业赞助商，如果贵司想在 Fluid 项目的 README展示广告位（每月 6K+ Views定向流量曝光）），或者有其他赞助形式，可将联系方式发送邮件至zkqiang#126.com (#替换为@)。</p><hr /><p>回到主题，大家写博客都想给自己提供一些回报，挂 CRM广告是最方便的方式之一 ，而<ahref="https://www.google.com/adsense">谷歌广告</a>在所有 CRM计费广告中是单价比较高的，不过就是提现比较麻烦，所以用之前最好先了解下，另外建议大家在博客有固定的流量后再加入广告，不然广告都是给自己看，可能会被谷歌判断刷量（谷歌对广告的规范很严格，放置过多的广告或者有诱导点击行为都是违规的）。</p><p>本文提供的方式需要 Fluid v1.9.0 以上版本。</p><p>然后在博客根目录下找到 <code>scripts</code>文件夹（不存在就创建一个），进入后任意创建一个 js 文件，比如<code>inject.js</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><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs javascript">hexo.<span class="hljs-property">extend</span>.<span class="hljs-property">filter</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">&#x27;theme_inject&#x27;</span>, <span class="hljs-keyword">function</span>(<span class="hljs-params">injects</span>) &#123;<br>injects.<span class="hljs-property">bodyEnd</span>.<span class="hljs-title function_">raw</span>(<span class="hljs-string">&#x27;adsense&#x27;</span>, <span class="hljs-string">&#x27;&lt;script async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-xxxxxx&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;&#x27;</span>);<br>injects.<span class="hljs-property">head</span>.<span class="hljs-title function_">raw</span>(<span class="hljs-string">&#x27;adsense&#x27;</span>, <span class="hljs-string">&#x27;&lt;style&gt;ins.adsbygoogle[data-ad-status=&quot;unfilled&quot;] &#123; display: none !important; &#125;&lt;/style&gt;&#x27;</span>);<br>injects.<span class="hljs-property">postLeft</span>.<span class="hljs-title function_">raw</span>(<span class="hljs-string">&#x27;adsense&#x27;</span>, <span class="hljs-string">&#x27;&lt;aside class=&quot;sidebar d-none d-xl-block&quot; style=&quot;margin-right:-1rem;z-index:-1&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display:flex;justify-content:center;min-width:160px;max-width:300px;width:100%;height:600px;position:sticky;top:2rem&quot; data-ad-client=&quot;ca-pub-xxxxxx&quot; data-ad-slot=&quot;yyyyyy&quot;&gt;&lt;/ins&gt;&lt;script&gt; (adsbygoogle = window.adsbygoogle || []).push(&#123;&#125;); &lt;/script&gt;&lt;/aside&gt;&#x27;</span>);<br>injects.<span class="hljs-property">postCopyright</span>.<span class="hljs-title function_">raw</span>(<span class="hljs-string">&#x27;adsense&#x27;</span>, <span class="hljs-string">&#x27;&lt;div style=&quot;width:100%;display:flex;justify-content:center;margin-bottom:1.5rem&quot;&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display:flex;justify-content:center;max-width:845px;width:100%;height:90px&quot; data-ad-client=&quot;ca-pub-xxxxxx&quot; data-ad-slot=&quot;yyyyyy&quot;&gt;&lt;/ins&gt;&lt;script&gt; (adsbygoogle = window.adsbygoogle || []).push(&#123;&#125;); &lt;/script&gt;&lt;/div&gt;&#x27;</span>);<br>&#125;);<br></code></pre></td></tr></table></figure><p>以上代码的意思请参考 <ahref="https://hexo.fluid-dev.com/docs/advance/#fluid-%E6%B3%A8%E5%85%A5%E4%BB%A3%E7%A0%81">Fluid注入功能</a>，插入的广告位置和本页是一样的，分别是文章页的左侧和文末位置。</p><p>复制之后，把其中 <code>ca-pub-xxxxxx</code> 和<code>data-ad-slot="yyyyyy"</code> 按谷歌广告里提供的编号替换即可。</p><p>保存后就不需要其他额外的配置了，如果谷歌广告的配置没有问题的话，部署之后应该就能看到广告展示出来。</p>]]></content>
    
    
    <summary type="html">几行代码把自己博客的流量轻松变现</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Hexo Netlify CMS 在线编辑博客</title>
    <link href="https://fluid-dev.cn/posts/hexo-netlify/"/>
    <id>https://fluid-dev.cn/posts/hexo-netlify/</id>
    <published>2021-04-20T14:41:54.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：千泷<br /> 原文地址：<a href="https://www.myql.xyz/post/e00ab0f6/" class="uri">https://www.myql.xyz/post/e00ab0f6/</a></p>           </div><h2 id="前言">✨前言</h2><p>我们都知道，<a href="https://hexo.io/zh-cn/">Hexo</a>是一个静态部署博客的框架，优点在于速度快，成本低（无需服务器），缺点在于繁琐，你每次更新文章都需要去改代码，再部署推送，修改配置也是如此，你不能像<code>WordPress</code> 一样直接在后台修改配置并使它生效。</p><p>不过有很多教程可以让你无需繁琐的部署，只管推送代码，通过<code>GitHub Actions</code>，<code>travis-ci</code>，<ahref="https://vercel.com/">vercel</a>，<ahref="Netlifyhttps://www.netlify.com/">Netlify</a>等都可以便捷的进行博客的部署，只管写代码然后推送就好，类似的教程有非常多，在此就不再重复介绍。那么，我们是否可以在此基础上，更加便捷的进行静态博客的写作和管理？答案是可以的。</p><p>我们可以通过将博客部署到 <ahref="https://www.netlify.com/">Netlify</a>，并使用 <ahref="https://www.netlifycms.org/">Netlify CMS</a> 来做到这一点。</p><p>首先，我们来了解一下配置完之后可以做到哪些事情？</p><ul><li>在线新建，编辑，预览，删除博客文章</li><li>支持文章草稿，工作流</li><li>支持对博客图片的管理</li><li>支持在线修改博客配置，例如对首页顶部图的修改，友链的修改</li></ul><hr /><h3 id="图片预览">🎈图片预览</h3><p>配置完的界面</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420211303684.png"alt="image-20210420211303684" /><figcaption aria-hidden="true">image-20210420211303684</figcaption></figure><p>在线对文章进行编辑，修改</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418222435713.png"alt="image-20210418222435713" /><figcaption aria-hidden="true">image-20210418222435713</figcaption></figure><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418222455291.png"alt="image-20210418222455291" /><figcaption aria-hidden="true">image-20210418222455291</figcaption></figure><p>工作流</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420212403763.png"alt="image-20210420212403763" /><figcaption aria-hidden="true">image-20210420212403763</figcaption></figure><p>对媒体资源的管理</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420212801157.png"alt="image-20210420212801157" /><figcaption aria-hidden="true">image-20210420212801157</figcaption></figure><p>对其他页面的修改</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420213123997.png"alt="image-20210420213123997" /><figcaption aria-hidden="true">image-20210420213123997</figcaption></figure><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420213142628.png"alt="image-20210420213142628" /><figcaption aria-hidden="true">image-20210420213142628</figcaption></figure><p>在线修改博客首页、文章页、归档页等页面的顶部图</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420214308165.png"alt="image-20210420214308165" /><figcaption aria-hidden="true">image-20210420214308165</figcaption></figure><p>在线添加、编辑友链页面</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418223337304.png"alt="image-20210418223337304" /><figcaption aria-hidden="true">image-20210418223337304</figcaption></figure><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418223354013.png"alt="image-20210418223354013" /><figcaption aria-hidden="true">image-20210418223354013</figcaption></figure><h3 id="在线演示">🔗在线演示</h3><p>为了更加直观，做了一个已经配置完毕的博客，你可以在线体验上述功能 👉<ahref="https://qwqmiao.cf/admin/">点我查看</a></p><h2 id="简单说明">📃简单说明</h2><p>下面我将会以 <a href="https://hexo.io/zh-cn/">Hexo</a> +做演示，并配置 <ahref="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a>的友链功能，达到在线编辑预览友链的目的，但此方法不仅仅只适用于<a href="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a>的友链功能，其他各类主题也可以通过此方法达到在线修改配置的目的，只要你配置完成，几乎可以修改所有配置项。包括但不限于以下类型的文件<code>yml</code>、<code>yaml</code>、<code>toml</code>、<code>json</code>、<code>md</code>、<code>markdown</code>、<code>html</code>具体请查看👉<a href="https://www.netlifycms.org/">Netlify CMS</a> 文档。</p><h2 id="具体配置">🔧具体配置</h2><p><a href="https://www.netlifycms.org/">Netlify CMS</a>使用的前提条件是你必须将博客部署到 <ahref="https://www.netlify.com/">Netlify</a>上。因为网上有很多部署教程，这里不再重复。</p><p>具体可以查看：</p><ul><li><ahref="https://guanqr.com/tech/website/deploy-blog-to-netlify/">博客通过Netlify 实现持续集成</a></li><li><a href="https://io-oi.me/tech/deploy-static-site-to-netlify/">将Hexo 静态博客部署到 Netlify</a></li></ul><h3 id="准备工作">👟准备工作</h3><p>在部署完成后，你需要开启 <code>Identity</code></p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418225044656.png"alt="image-20210418225044656" /><figcaption aria-hidden="true">image-20210418225044656</figcaption></figure><p>进入设置中</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418225125358.png"alt="image-20210418225125358" /><figcaption aria-hidden="true">image-20210418225125358</figcaption></figure><p>将 <code>Registration preferences</code> 修改为<code>Invite only</code> 此项为是否开启注册，默认是开启注册。修改为<code>Invite only</code>后表示仅受邀请的用户可以注册，当然此项你可以在自己注册完毕之后再行修改。</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418225239607.png"alt="image-20210418225239607" /><figcaption aria-hidden="true">image-20210418225239607</figcaption></figure><p>下滑找到 <code>Git Gateway</code> 并开启。</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418225726557.png"alt="image-20210418225726557" /><figcaption aria-hidden="true">image-20210418225726557</figcaption></figure><p>至此准备工作完成</p><h3 id="修改博客配置">🎨修改博客配置</h3><blockquote><p>在博客根目录中找到<code>_config.yml</code>并修改，这一步是跳过文件夹渲染，不然后面会出错</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">skip_render:</span> <span class="hljs-string">admin/*</span><br></code></pre></td></tr></table></figure></blockquote><p>在博客<code>source</code>文件夹中，创建<code>admin</code>文件夹，并新建两个文件<code>index.html</code>和<code>config.yml</code></p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210418230338242.png"alt="image-20210418230338242" /><figcaption aria-hidden="true">image-20210418230338242</figcaption></figure><p>在 <code>index.html</code> 中添加以下内容</p><figure class="highlight html"><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><code class="hljs html"><span class="hljs-meta">&lt;!doctype <span class="hljs-keyword">html</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span><br>    <br>    <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">&quot;utf-8&quot;</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;viewport&quot;</span> <span class="hljs-attr">content</span>=<span class="hljs-string">&quot;width=device-width, initial-scale=1.0&quot;</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">http-equiv</span>=<span class="hljs-string">&quot;x-UA-Compatible&quot;</span> <span class="hljs-attr">content</span>=<span class="hljs-string">&quot;IE=Edge&quot;</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;apple-mobile-web-app-status-bar-style&quot;</span> <span class="hljs-attr">content</span>=<span class="hljs-string">&quot;white&quot;</span> /&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text/javascript&quot;</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://identity.netlify.com/v1/netlify-identity-widget.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>魔王の领地<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span><br>    <br>    <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span><br>        <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/netlify-cms@2/dist/netlify-cms.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span><br><br><span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span><br></code></pre></td></tr></table></figure><p>在 <code>config.yml</code> 中添加如下折叠内容</p><details><summary>点击展开配置内容</summary><figure class="highlight yaml"><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><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">backend:</span><br>  <span class="hljs-attr">name:</span> <span class="hljs-string">git-gateway</span> <span class="hljs-comment"># https://github.com/netlify/netlify-cms</span><br>  <span class="hljs-attr">branch:</span> <span class="hljs-string">main</span> <span class="hljs-comment"># 要更新的分支(可选；默认为主分支)</span><br><br><span class="hljs-comment"># This line should *not* be indented</span><br><span class="hljs-attr">publish_mode:</span> <span class="hljs-string">editorial_workflow</span><br><br><span class="hljs-comment"># This line should *not* be indented</span><br><span class="hljs-attr">media_folder:</span> <span class="hljs-string">&quot;source/images/uploads&quot;</span> <span class="hljs-comment"># 媒体文件将存储在图片/上载下的Repo中。</span><br><span class="hljs-attr">public_folder:</span> <span class="hljs-string">&quot;/images/uploads&quot;</span> <span class="hljs-comment"># 上传的媒体的src属性将以/images/uploads开头。</span><br><br><span class="hljs-attr">site_url:</span> <span class="hljs-string">https://www.myql.xyz</span> <span class="hljs-comment"># 网站网址</span><br><span class="hljs-attr">display_url:</span> <span class="hljs-string">https://www.myql.xyz</span> <span class="hljs-comment"># 显示网址</span><br><br><span class="hljs-attr">locale:</span> <span class="hljs-string">&quot;zh_Hans&quot;</span> <span class="hljs-comment"># 语言环境 https://github.com/netlify/netlify-cms/tree/master/packages/netlify-cms-locales/src</span><br><br><span class="hljs-attr">collections:</span>      <span class="hljs-comment"># https://www.netlifycms.org/docs/configuration-options/#collections</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;posts&quot;</span> <span class="hljs-comment"># 在路由中使用，例如：/admin/collections/blog。</span><br>    <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;Post&quot;</span> <span class="hljs-comment"># 在用户界面中使用</span><br>    <span class="hljs-attr">folder:</span> <span class="hljs-string">&quot;source/_posts&quot;</span> <span class="hljs-comment"># 存储文件的文件夹的路径。</span><br>    <span class="hljs-attr">create:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># 允许用户在这个集合中创建新的文件。</span><br>    <span class="hljs-attr">fields:</span> <span class="hljs-comment"># 每份文件的字段，通常是前面的内容。</span><br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125; <br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;文章封面&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;index_img&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125; <br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;文章排序&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;sticky&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;标题&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;title&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;发布日期&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;date&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;datetime&quot;</span>, <span class="hljs-attr">format:</span> <span class="hljs-string">&quot;YYYY-MM-DD HH:mm:ss&quot;</span>, <span class="hljs-attr">dateFormat:</span> <span class="hljs-string">&quot;YYYY-MM-DD&quot;</span>, <span class="hljs-attr">timeFormat:</span> <span class="hljs-string">&quot;HH:mm:ss&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;更新日期&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;updated&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;datetime&quot;</span>, <span class="hljs-attr">format:</span> <span class="hljs-string">&quot;YYYY-MM-DD HH:mm:ss&quot;</span>, <span class="hljs-attr">dateFormat:</span> <span class="hljs-string">&quot;YYYY-MM-DD&quot;</span>, <span class="hljs-attr">timeFormat:</span> <span class="hljs-string">&quot;HH:mm:ss&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;标签&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;tags&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;list&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;分类&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;categories&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;list&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;关键词&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;keywords&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;list&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;摘要&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;excerpt&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;list&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;内容&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;body&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;markdown&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;永久链接&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;permalink&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>      <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;评论&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;comments&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;boolean&quot;</span>, <span class="hljs-attr">default:</span> <span class="hljs-literal">true</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;pages&quot;</span><br>    <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;Pages&quot;</span><br>    <span class="hljs-attr">files:</span><br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">file:</span> <span class="hljs-string">&quot;source/about/index.md&quot;</span><br>        <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;about&quot;</span><br>        <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;关于&quot;</span><br>        <span class="hljs-attr">fields:</span><br>          <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;标题&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;title&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>&#125;<br>          <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;内容&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;body&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;markdown&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>          <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;评论&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;comments&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;boolean&quot;</span>, <span class="hljs-attr">default:</span> <span class="hljs-literal">true</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br><br><span class="hljs-comment"># 如果你不是Fluid 主题，请删除以下配置，或者对文件路径及字段进行修改</span><br>  <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;settings&quot;</span><br>    <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;settings&quot;</span><br>    <span class="hljs-attr">files:</span>      <br>      <span class="hljs-bullet">-</span> <span class="hljs-attr">file:</span> <span class="hljs-string">&quot;source/_data/fluid_config.yml&quot;</span><br>        <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;fluid&quot;</span><br>        <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;Fluid 主题配置&quot;</span><br>        <span class="hljs-attr">editor:</span><br>          <span class="hljs-attr">preview:</span> <span class="hljs-literal">true</span>      <span class="hljs-comment"># 是否开启编辑预览</span><br>        <span class="hljs-attr">fields:</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;首页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;index&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span>   <span class="hljs-comment"># 是否折叠显示</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;文章页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;post&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图(默认)&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span> <br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;文章封面图(默认)&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;default_index_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;归档页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;archive&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;分类页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;category&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;标签页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;tag&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;关于页&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;about&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>          <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;友链页面&quot;</span><br>            <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;links&quot;</span><br>            <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;object&quot;</span><br>            <span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span><br>            <span class="hljs-attr">fields:</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;顶部图&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;高度&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;banner_img_height&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;number&quot;</span><br>              <span class="hljs-bullet">-</span> <span class="hljs-attr">label:</span> <span class="hljs-string">&quot;项目&quot;</span><br>                <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;items&quot;</span><br>                <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;list&quot;</span><br>                <span class="hljs-attr">fields:</span><br>                  <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;网站名称&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;title&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>                  <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;网址描述&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;intro&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>                  <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;网站地址&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;link&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;string&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br>                  <span class="hljs-bullet">-</span> &#123;<span class="hljs-attr">label:</span> <span class="hljs-string">&quot;网站图片&quot;</span>, <span class="hljs-attr">name:</span> <span class="hljs-string">&quot;avatar&quot;</span>, <span class="hljs-attr">widget:</span> <span class="hljs-string">&quot;image&quot;</span>, <span class="hljs-attr">required:</span> <span class="hljs-literal">false</span>&#125;<br></code></pre></td></tr></table></figure></details><p>请注意，这里我对 <ahref="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a>进行了配置，例如<code>banner_img</code>、<code>index_img</code>等项目，不能正常使用请删除，如果你不是<a href="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a>请根据实际情况对<code>source\admin\config.yml</code>配置进行修改，如果你和我一样是<a href="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a>，还需要将主题配置文件（<code>/_config.fluid.yml</code>）中的相对应的字段及其内容一并注释掉才能使其生效，类似于这样</p><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210420221125705.png"alt="image-20210420221125705" /><figcaption aria-hidden="true">image-20210420221125705</figcaption></figure><figure><imgsrc="https://myql.coding.net/p/owo/d/img/git/raw/main/posts/image-20210419015951835.png"alt="image-20210419015951835" /><figcaption aria-hidden="true">image-20210419015951835</figcaption></figure><p>并且创建<code>source\_data\fluid_config.yml</code>，将相关配置复制粘贴到里面（请根据此配置去主题配置文件中注释掉相对应的字段）</p><details><summary>点击展开配置内容</summary><figure class="highlight yaml"><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">index:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/images/background.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">100</span><br><span class="hljs-attr">post:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/mmexport1602581319886.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">70</span><br>  <span class="hljs-attr">default_index_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-g8wvm7.webp</span><br><span class="hljs-attr">archive:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-q6ov7d.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br><span class="hljs-attr">category:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-zm93dj.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br><span class="hljs-attr">tag:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-1kkm2g.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br><span class="hljs-attr">about:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-pkkr2.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br><span class="hljs-attr">links:</span><br>  <span class="hljs-attr">banner_img:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/leicancun/img@main/banner_img/wallhaven-rddv31.webp</span><br>  <span class="hljs-attr">banner_img_height:</span> <span class="hljs-number">80</span><br>  <span class="hljs-attr">items:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">小丁的个人博客</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">世间所有的相遇，都是久别重逢</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://tding.top</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://tding.top/images/avatar.webp</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">米奇妙妙屋</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">逐风揽月登九天</span> <span class="hljs-string">踏浪擒龙游四海</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://ifibe.com/</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/useblue/ucdn/imgs/avatar.webp</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">荷戟独彷徨</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">爱光学，爱生活，爱创造</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://guanqr.com/</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://cdn.jsdelivr.net/gh/guanqr/blog/static/icons/android-chrome-512x512.png</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">iMaeGoo’s</span> <span class="hljs-string">Blog</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">虹墨空间站</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://www.imaegoo.com</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://www.imaegoo.com/images/avatar.jpg</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">琉仙の后花园</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">一起来种花家呀</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://blog.lx101.cn/</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://z3.ax1x.com/2021/03/28/cS2LNV.jpg</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-string">LOGI</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-string">会点代码的强迫症</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-string">https://logi.im</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-string">https://code.bdstatic.com/npm/logicdn@1.0.0/logi.im/usr/images/global/logo.webp</span><br></code></pre></td></tr></table></figure></details><p>请保持这样的格式，当然如果你对<code>yml</code>语法非常了解也可以自行修改🤣</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-attr">links:</span><br>  <span class="hljs-attr">items:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">title:</span> <span class="hljs-comment"># 博客名称</span><br>      <span class="hljs-attr">intro:</span> <span class="hljs-comment"># 博客描述</span><br>      <span class="hljs-attr">link:</span> <span class="hljs-comment"># 博客链接</span><br>      <span class="hljs-attr">avatar:</span> <span class="hljs-comment"># 博客logo</span><br></code></pre></td></tr></table></figure><h3 id="结语">🤣结语</h3><p>说一下为什么不推荐直接修改根目录下的 <code>_config.fluid.yml</code>因为通过 <a href="https://www.netlifycms.org/">Netlify CMS</a>在线修改配置文件后，仅会保留你已经在<code>source\admin\config.yml</code>中配置的选项，没有配置的选项会默认清空，按主题默认配置进行，你当然可以将所有选项进行配置，但是没必要，所以推荐通过<code>source\_data\fluid_config.yml</code>仅复制粘贴需要的选项进行修改配置。</p><hr /><p>至此 <a href="https://www.netlifycms.org/">Netlify CMS</a>配置就算完成了，只要推送代码，等待片刻，通过你部署在 <ahref="https://www.netlify.com/">Netlify</a> 上的域名，加<code>/admin/</code> 即可访问你的博客后台。</p><h2 id="一键部署">🚀 一键部署</h2><p>如果你感觉有点繁琐，或者怕配置出错可以直接使用我配置好的<code>一键部署</code>来快速搭建你的博客👉<ahref="https://github.com/leicancun/hexo-blog-netlify">点击前往</a></p><p>ps:即使是一键部署也不要忘记<code>准备工作</code>里的步骤，这很重要</p><h2 id="改进计划">😕 改进计划</h2><p><del>因为对 css不太熟悉，并没有设置页面自适应，导致现在编辑页面的预览体验很差，在手机上显示也不甚理想，等我多熟悉熟悉css 然后弄一下自适应。</del></p><p>目前对图片并没有自适应，在手机上显示的效果也不算好，因为能力有限折腾了很久没弄明白，官方文档在这里👉<ahref="https://www.netlifycms.org/docs/customization/">点我查看</a><br />如果能有大佬能帮助我就更好了，十分欢迎各位大佬</p><h2 id="感谢">😁 感谢</h2><p>十分感谢 <a href="https://github.com/zkqiang">zkqiang</a>大佬对我的耐心帮助🎉🎉🎉</p>]]></content>
    
    
    <summary type="html">通过 Netlify CMS 实现在线编辑文章和修改主题配置</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>通过 Hexo 5 注入器为主题添加新功能</title>
    <link href="https://fluid-dev.cn/posts/hexo-injector/"/>
    <id>https://fluid-dev.cn/posts/hexo-injector/</id>
    <published>2020-10-17T12:00:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<h2 id="hexo-注入器">Hexo 注入器</h2><p><a href="https://hexo.io/zh-cn/api/injector.html">Hexo 注入器</a>是Hexo 5 版本自身加入的一项新功能，所以在所有 Hexo主题都是支持这个功能的。</p><p>该注入器可以将 HTML 片段注入生成页面的 <code>&lt;head&gt;</code> 和<code>&lt;body&gt;</code> 节点中。</p><p>编写注入代码，需要在博客的根目录下创建 <code>scripts</code>文件夹，然后在里面任意命名创建一个 js 文件即可。</p><p>例如创建一个 <code>/blog/scripts/example.js</code>，内容为：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs javascript">hexo.<span class="hljs-property">extend</span>.<span class="hljs-property">injector</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">&#x27;body_end&#x27;</span>, <span class="hljs-string">&#x27;&lt;script src=&quot;/jquery.js&quot;&gt;&lt;/script&gt;&#x27;</span>, <span class="hljs-string">&#x27;default&#x27;</span>);<br></code></pre></td></tr></table></figure><p>上述代码会在生成的页面 <code>&lt;/body&gt;</code> 注入加载<code>jquery.js</code> 的代码。</p><p><code>register</code>函数可接受三个参数，第一个参数是代码片段注入的位置，接受以下值：<br />- <code>head_begin</code>: 注入在 <code>&lt;head&gt;</code>之后（默认）<br />- <code>head_end</code>: 注入在 <code>&lt;/head&gt;</code> 之前<br />- <code>body_begin</code>: 注入在 <code>&lt;body&gt;</code> 之后<br />- <code>body_end</code>: 注入在 <code>&lt;/body&gt;</code> 之前</p><p>第二个参数是注入的片段，可以是字符串，也可以是一个返回值为字符串的函数。</p><p>第三个参数是注入的页面类型，接受以下值：<br />- <code>default</code>: 注入到每个页面（默认值）<br />- <code>home</code>: 只注入到主页（<code>is_home()</code> 为<code>true</code> 的页面）<br />- <code>post</code>: 只注入到文章页面（<code>is_post()</code> 为<code>true</code> 的页面）<br />- <code>page</code>: 只注入到独立页面（<code>is_page()</code> 为<code>true</code> 的页面）<br />- <code>archive</code>: 只注入到归档页面（<code>is_archive()</code> 为<code>true</code> 的页面）<br />- <code>category</code>: 只注入到分类页面（<code>is_category()</code> 为<code>true</code> 的页面）<br />- <code>tag</code>: 只注入到标签页面（<code>is_tag()</code> 为<code>true</code> 的页面）<br />- 或是其他自定义 layout 名称，例如在Fluid 主题中 <code>about</code>对应关于页、<code>links</code> 对应友联页</p><h2 id="实际案例">实际案例</h2><p>在实际使用中，建议将 js 代码独立成为 js 文件，存放在博客的<code>source</code> 目录下，然后在 <code>scripts</code> 里通过一个包含injector 的 js 文件统一引入。</p><p>例如创建一个<code>/source/js/custom.js</code>，里面包含初始化的代码，然后在<code>/scripts/injector.js</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></pre></td><td class="code"><pre><code class="hljs javascript">hexo.<span class="hljs-property">extend</span>.<span class="hljs-property">injector</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">&#x27;body_end&#x27;</span>, <span class="hljs-string">`</span><br><span class="hljs-string">  &lt;script src=&quot;/js/custom.js&quot;&gt;&lt;/script&gt;</span><br><span class="hljs-string">`</span>)<br></code></pre></td></tr></table></figure><p>以下案例都采用类似的形式，不再赘述。</p><h3 id="aplayer-音乐播放器">APlayer 音乐播放器</h3><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></pre></td><td class="code"><pre><code class="hljs javascript">hexo.<span class="hljs-property">extend</span>.<span class="hljs-property">injector</span>.<span class="hljs-title function_">register</span>(<span class="hljs-string">&#x27;body_end&#x27;</span>, <span class="hljs-string">`</span><br><span class="hljs-string">  &lt;div id=&quot;aplayer&quot;&gt;&lt;/div&gt;</span><br><span class="hljs-string">  &lt;link defer rel=&quot;stylesheet&quot; href=&quot;https://cdn.staticfile.org/aplayer/1.10.1/APlayer.min.css&quot; /&gt;</span><br><span class="hljs-string">  &lt;script src=&quot;https://cdn.staticfile.org/aplayer/1.10.1/APlayer.min.js&quot;&gt;&lt;/script&gt;</span><br><span class="hljs-string">  &lt;script defer src=&quot;/js/aplayer.js&quot;&gt;&lt;/script&gt;</span><br><span class="hljs-string">`</span>);<br></code></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><code class="hljs javascript">!(<span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br>  <span class="hljs-keyword">var</span> oldLoadAp = <span class="hljs-variable language_">window</span>.<span class="hljs-property">onload</span>;<br>  <span class="hljs-variable language_">window</span>.<span class="hljs-property">onload</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) &#123;<br>    oldLoadAp &amp;&amp; <span class="hljs-title function_">oldLoadAp</span>();<br><br>    <span class="hljs-keyword">new</span> <span class="hljs-title class_">APlayer</span>(&#123;<br>      <span class="hljs-attr">container</span>: <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&#x27;aplayer&#x27;</span>),<br>      <span class="hljs-attr">fixed</span>: <span class="hljs-literal">true</span>,<br>      <span class="hljs-attr">autoplay</span>: <span class="hljs-literal">false</span>,<br>      <span class="hljs-attr">loop</span>: <span class="hljs-string">&#x27;all&#x27;</span>,<br>      <span class="hljs-attr">order</span>: <span class="hljs-string">&#x27;random&#x27;</span>,<br>      <span class="hljs-attr">theme</span>: <span class="hljs-string">&#x27;#b7daff&#x27;</span>,<br>      <span class="hljs-attr">preload</span>: <span class="hljs-string">&#x27;none&#x27;</span>,<br>      <span class="hljs-attr">audio</span>: [<br>        &#123;<br>          <span class="hljs-attr">name</span>: <span class="hljs-string">&#x27;song1&#x27;</span>,<br>          <span class="hljs-attr">artist</span>: <span class="hljs-string">&#x27;artist1&#x27;</span>,<br>          <span class="hljs-attr">url</span>: <span class="hljs-string">&#x27;/songs/song1.mp3&#x27;</span>,<br>          <span class="hljs-attr">cover</span>: <span class="hljs-string">&#x27;/img/cover.jpg&#x27;</span><br>        &#125;<br>      ]<br>    &#125;);<br>  &#125;<br>&#125;)();<br></code></pre></td></tr></table></figure><p>更多参数详见 <ahref="https://aplayer.js.org/#/zh-Hans/?id=%E5%8F%82%E6%95%B0">Aplayer文档</a>。</p><h3 id="daovoice-聊天插件">DaoVoice 聊天插件</h3><p>先在 <a href="https://daovoice.io"class="uri">https://daovoice.io</a> 注册一个账号，按其中的引导获得appId，然后添加如下代码：</p><figure class="highlight xml"><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><code class="hljs xml">hexo.extend.injector.register(&#x27;body_end&#x27;, `<br>  <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;/js/daovoice.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>`);<br></code></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><code class="hljs javascript">!(<span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br>  <span class="hljs-keyword">var</span> appId = <span class="hljs-string">&#x27;这里填上注册后账号的 appId&#x27;</span>;<br><br>  (<span class="hljs-keyword">function</span> (<span class="hljs-params">i, s, o, g, r, a, m</span>) &#123;  <br>    i[<span class="hljs-string">&#x27;DaoVoiceObject&#x27;</span>] = r;<br>    i[r] = i[r] ||<br>      <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) &#123;<br>        (i[r].<span class="hljs-property">q</span> = i[r].<span class="hljs-property">q</span> || []).<span class="hljs-title function_">push</span>(<span class="hljs-variable language_">arguments</span>);<br>      &#125;;<br>    i[r].<span class="hljs-property">l</span> = <span class="hljs-number">1</span> * <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>();<br>    a = s.<span class="hljs-title function_">createElement</span>(o);<br>    m = s.<span class="hljs-title function_">getElementsByTagName</span>(o)[<span class="hljs-number">0</span>];<br>    a.<span class="hljs-property">async</span> = <span class="hljs-number">1</span>;<br>    a.<span class="hljs-property">src</span> = g;<br>    a.<span class="hljs-property">charset</span> = <span class="hljs-string">&#x27;utf-8&#x27;</span>;<br>    m.<span class="hljs-property">parentNode</span>.<span class="hljs-title function_">insertBefore</span>(a, m);<br>  &#125;)(<span class="hljs-variable language_">window</span>, <span class="hljs-variable language_">document</span>, <span class="hljs-string">&#x27;script&#x27;</span>, (<span class="hljs-string">&#x27;https:&#x27;</span> === <span class="hljs-variable language_">document</span>.<span class="hljs-property">location</span>.<span class="hljs-property">protocol</span> ? <span class="hljs-string">&#x27;https:&#x27;</span> : <span class="hljs-string">&#x27;http:&#x27;</span>) + <span class="hljs-string">&#x27;//widget.daovoice.io/widget/&#x27;</span> + appId + <span class="hljs-string">&#x27;.js&#x27;</span>, <span class="hljs-string">&#x27;daovoice&#x27;</span>);<br>  <span class="hljs-title function_">daovoice</span>(<span class="hljs-string">&#x27;init&#x27;</span>, &#123;<br>    <span class="hljs-attr">app_id</span>: appId,<br>  &#125;);<br>  <span class="hljs-title function_">daovoice</span>(<span class="hljs-string">&#x27;update&#x27;</span>);<br>&#125;)();<br></code></pre></td></tr></table></figure><h3 id="文章时效性提示">文章时效性提示</h3><p>技术性文章往往存在时效性的问题，比如某些文章会介绍一些临时解决方案，但随着时间推移可能已经失效了。我们可以通过判断发布时间（即文章设置的<code>date</code>）与当前时间的间隔，来为文章开头插入一条提示。</p><p>代码效果如下所示：</p><div class="note note-warning" style="font-size:0.9rem"><p></p><div class="h6">文章时效性提示</div><p>这是一篇发布于 263 天前的文章，部分信息可能已发生改变，请注意甄别。</p><p></p></div><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></pre></td><td class="code"><pre><code class="hljs javascript">(<span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br>  <span class="hljs-keyword">var</span> times = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementsByTagName</span>(<span class="hljs-string">&#x27;time&#x27;</span>);<br>  <span class="hljs-keyword">if</span> (times.<span class="hljs-property">length</span> === <span class="hljs-number">0</span>) &#123; <span class="hljs-keyword">return</span>; &#125;<br>  <span class="hljs-keyword">var</span> posts = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementsByClassName</span>(<span class="hljs-string">&#x27;post-content&#x27;</span>);<br>  <span class="hljs-keyword">if</span> (posts.<span class="hljs-property">length</span> === <span class="hljs-number">0</span>) &#123; <span class="hljs-keyword">return</span>; &#125;<br><br>  <span class="hljs-keyword">var</span> pubTime = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>(times[<span class="hljs-number">0</span>].<span class="hljs-property">dateTime</span>);  <span class="hljs-comment">/* 文章发布时间戳 */</span><br>  <span class="hljs-keyword">var</span> now = <span class="hljs-title class_">Date</span>.<span class="hljs-title function_">now</span>()  <span class="hljs-comment">/* 当前时间戳 */</span><br>  <span class="hljs-keyword">var</span> interval = <span class="hljs-built_in">parseInt</span>(now - pubTime)<br>  <span class="hljs-comment">/* 发布时间超过指定时间（毫秒） */</span><br>  <span class="hljs-keyword">if</span> (interval &gt; <span class="hljs-number">3600</span>*<span class="hljs-number">24</span>*<span class="hljs-number">30</span>*<span class="hljs-number">1000</span>)&#123;<br>    <span class="hljs-keyword">var</span> days = <span class="hljs-built_in">parseInt</span>(interval / <span class="hljs-number">86400000</span>)<br>    posts[<span class="hljs-number">0</span>].<span class="hljs-property">innerHTML</span> = <span class="hljs-string">&#x27;&lt;div class=&quot;note note-warning&quot; style=&quot;font-size:0.9rem&quot;&gt;&lt;p&gt;&#x27;</span> +<br>      <span class="hljs-string">&#x27;&lt;div class=&quot;h6&quot;&gt;文章时效性提示&lt;/div&gt;&lt;p&gt;这是一篇发布于 &#x27;</span> + days + <span class="hljs-string">&#x27; 天前的文章，部分信息可能已发生改变，请注意甄别。&#x27;</span> +<br>      <span class="hljs-string">&#x27;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&#x27;</span> + posts[<span class="hljs-number">0</span>].<span class="hljs-property">innerHTML</span>;<br>  &#125;<br>&#125;)();<br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">想增加一些花里胡哨的功能又不想修改主题源代码？本文介绍 Hexo 官方支持的一种无侵入式的修改方式，适用于所有主题。</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>Fluid 页脚增加网站运行时长</title>
    <link href="https://fluid-dev.cn/posts/fluid-footer-custom/"/>
    <id>https://fluid-dev.cn/posts/fluid-footer-custom/</id>
    <published>2020-10-17T11:00:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<p>Fluid 1.8.4版本支持自定义页脚内容了，群友常改的网站运行时长，这次无需再修改源代码。</p><span id="more"></span><p>只需要在主题配置中的 <code>footer: content</code> 添加：</p><figure class="highlight xml"><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></pre></td><td class="code"><pre><code class="hljs xml">footer:<br>  content: &#x27;<br>    <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;https://hexo.io&quot;</span> <span class="hljs-attr">target</span>=<span class="hljs-string">&quot;_blank&quot;</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;nofollow noopener&quot;</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">span</span>&gt;</span>Hexo<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">i</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;iconfont icon-love&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;https://github.com/fluid-dev/hexo-theme-fluid&quot;</span> <span class="hljs-attr">target</span>=<span class="hljs-string">&quot;_blank&quot;</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;nofollow noopener&quot;</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">span</span>&gt;</span>Fluid<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size: 0.85rem&quot;</span>&gt;</span><br>      <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;timeDate&quot;</span>&gt;</span>载入天数...<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br>      <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;times&quot;</span>&gt;</span>载入时分秒...<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br>      <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;/js/duration.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br>  &#x27;<br></code></pre></td></tr></table></figure><p><code>content</code> 前三行是 Fluid原有的页脚内容，建议不要删除，可稍作修改，保留 Fluid的超链接，用于向更多人推广主题。</p><p><code>duration.js</code> 包含的才是功能代码，我们在博客目录下创建<code>source/js/duration.js</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><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></pre></td><td class="code"><pre><code class="hljs javascript">!(<span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;<br>  <span class="hljs-comment">/** 计时起始时间，自行修改 **/</span><br>  <span class="hljs-keyword">var</span> start = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>(<span class="hljs-string">&quot;2020/01/01 00:00:00&quot;</span>);<br><br>  <span class="hljs-keyword">function</span> <span class="hljs-title function_">update</span>(<span class="hljs-params"></span>) &#123;<br>    <span class="hljs-keyword">var</span> now = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>();<br>    now.<span class="hljs-title function_">setTime</span>(now.<span class="hljs-title function_">getTime</span>()+<span class="hljs-number">250</span>);<br>    days = (now - start) / <span class="hljs-number">1000</span> / <span class="hljs-number">60</span> / <span class="hljs-number">60</span> / <span class="hljs-number">24</span>;<br>    dnum = <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(days);<br>    hours = (now - start) / <span class="hljs-number">1000</span> / <span class="hljs-number">60</span> / <span class="hljs-number">60</span> - (<span class="hljs-number">24</span> * dnum);<br>    hnum = <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(hours);<br>    <span class="hljs-keyword">if</span>(<span class="hljs-title class_">String</span>(hnum).<span class="hljs-property">length</span> === <span class="hljs-number">1</span> )&#123;<br>      hnum = <span class="hljs-string">&quot;0&quot;</span> + hnum;<br>    &#125;<br>    minutes = (now - start) / <span class="hljs-number">1000</span> /<span class="hljs-number">60</span> - (<span class="hljs-number">24</span> * <span class="hljs-number">60</span> * dnum) - (<span class="hljs-number">60</span> * hnum);<br>    mnum = <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(minutes);<br>    <span class="hljs-keyword">if</span>(<span class="hljs-title class_">String</span>(mnum).<span class="hljs-property">length</span> === <span class="hljs-number">1</span> )&#123;<br>      mnum = <span class="hljs-string">&quot;0&quot;</span> + mnum;<br>    &#125;<br>    seconds = (now - start) / <span class="hljs-number">1000</span> - (<span class="hljs-number">24</span> * <span class="hljs-number">60</span> * <span class="hljs-number">60</span> * dnum) - (<span class="hljs-number">60</span> * <span class="hljs-number">60</span> * hnum) - (<span class="hljs-number">60</span> * mnum);<br>    snum = <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">round</span>(seconds);<br>    <span class="hljs-keyword">if</span>(<span class="hljs-title class_">String</span>(snum).<span class="hljs-property">length</span> === <span class="hljs-number">1</span> )&#123;<br>      snum = <span class="hljs-string">&quot;0&quot;</span> + snum;<br>    &#125;<br>    <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&quot;timeDate&quot;</span>).<span class="hljs-property">innerHTML</span> = <span class="hljs-string">&quot;本站安全运行&amp;nbsp&quot;</span>+dnum+<span class="hljs-string">&quot;&amp;nbsp天&quot;</span>;<br>    <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&quot;times&quot;</span>).<span class="hljs-property">innerHTML</span> = hnum + <span class="hljs-string">&quot;&amp;nbsp小时&amp;nbsp&quot;</span> + mnum + <span class="hljs-string">&quot;&amp;nbsp分&amp;nbsp&quot;</span> + snum + <span class="hljs-string">&quot;&amp;nbsp秒&quot;</span>;<br>  &#125;<br><br>  <span class="hljs-title function_">update</span>();<br>  <span class="hljs-built_in">setInterval</span>(update, <span class="hljs-number">1000</span>);<br>&#125;)();<br></code></pre></td></tr></table></figure><p>不要忘记把上面注释的时间改为自己的时间，至此这项功能就引入到<code>&lt;footer&gt;</code> 里了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Fluid 1.8.4
版本支持自定义页脚内容了，群友常改的网站运行时长，这次无需再修改源代码。&lt;/p&gt;</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>使用 ECharts 插件绘制炫酷图表</title>
    <link href="https://fluid-dev.cn/posts/hexo-echarts/"/>
    <id>https://fluid-dev.cn/posts/hexo-echarts/</id>
    <published>2020-06-20T15:00:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：pxxyyz</p> <p>原文地址：<a href="https://pxxyyz.com/posts/15698/" class="uri">https://pxxyyz.com/posts/15698/</a></p>           </div><h2 id="echarts使用">ECharts使用</h2><ul><li>安装<code>hexo-tag-echarts</code>插件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ npm install hexo-tag-echarts --save<br></code></pre></td></tr></table></figure><ul><li><p>注意：ECharts官网教程-<ahref="%5Bhttps://echarts.apache.org/zh/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts%5D(https://echarts.apache.org/zh/tutorial.html#5%20分钟上手%20ECharts)">5分钟上手ECharts</a>里的<code>npm install echarts --save</code>并不适合hexo博客，这种安装方式无效，请安装<code>hexo-tag-echarts</code>插件。</p></li><li><p>添加如下js文件</p></li></ul><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><code class="hljs markdown">// 通过jsDelivr的CDN引入echarts<br><span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js&quot;</span>&gt;</span></span><span class="language-xml"><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></span><br>// 使用GL里的各种组件时需要添加，否则可不需要<br><span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/echarts-gl@1.1.1/dist/echarts-gl.min.js&quot;</span>&gt;</span></span><span class="language-xml"><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></span><br></code></pre></td></tr></table></figure><ul><li>在markdown文件下添加echarts，格式如下</li></ul><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><code class="hljs markdown"><span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span></span><br>...<br><span class="language-xml"><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></span><br><br>&#123;% echarts 400 &#x27;85%&#x27; %&#125;<br>...<br>&#123;% endecharts %&#125;<br></code></pre></td></tr></table></figure><ul><li><code>&lt;script&gt;</code>中添加定义的变量和函数，若无设定则可删掉<code>&lt;script&gt;&lt;/script&gt;</code></li><li><code>{% echarts 400 '85%' %}</code>和<code>{% endecharts %}</code>之间添加echarts的<code>option</code>。<ul><li>参数400指定图表展示的高度为400px，85%则指定图表展示的宽度为85%，如不写明这两项参数则默认值为高度400px，宽度81%。</li><li>title：标题组件，包含主标题和副标题。</li><li>legend：图例组件。</li><li>tooltip：提示框组件。</li><li>toolbox：工具栏。内置有导出图片，数据视图，动态类型切换，数据区域缩放，重置五个工具。</li><li>xAxis、yAxis：直角坐标系 grid 中的 x 轴、y轴。</li><li>series：系列列表。每个系列通过<code>type</code>决定自己的图表类型。<ul><li>series-line：折线/面积图</li><li>series-bar：柱状/条形图</li><li>series-pie：饼图</li><li>series-scatter：散点图</li><li>series-radar：雷达图</li><li>series-tree：树图</li><li>series-boxplot：箱形图</li><li>series-candlestick：K线图</li><li>series-heatmap：热力图</li><li>series-graph：关系图</li></ul></li></ul></li><li>多个图表的数据和函数可能会冲突，请注意！</li><li>直接在html中直接绘制，然后用<code>&lt;iframe&gt;&lt;/iframe&gt;</code>展示效果更佳。关于hexo的html文件渲染问题，可以参考<ahref="https://pxxyyz.com/posts/13656/">Fluid+自定义html</a>，主要是去掉<code>head</code>部分的说明。</li><li>在html绘图ECharts的格式如下：</li></ul><figure class="highlight html"><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><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br><span class="hljs-comment">&lt;!-- 为 ECharts 准备一个具备大小（宽高）的 DOM --&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;main&quot;</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;width: 600px;height:400px;&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text/javascript&quot;</span>&gt;</span><span class="language-javascript"></span><br><span class="language-javascript">  <span class="hljs-comment">// 基于准备好的dom，初始化echarts实例</span></span><br><span class="language-javascript">  <span class="hljs-keyword">var</span> myChart = echarts.<span class="hljs-title function_">init</span>(<span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&#x27;main&#x27;</span>));</span><br><span class="language-javascript">  <span class="hljs-comment">// 指定图表的配置项和数据</span></span><br><span class="language-javascript">  <span class="hljs-keyword">var</span> option = &#123;</span><br><span class="language-javascript">    ...</span><br><span class="language-javascript">  &#125;;</span><br><span class="language-javascript">  <span class="hljs-comment">// 使用刚指定的配置项和数据显示图表。</span></span><br><span class="language-javascript">  myChart.<span class="hljs-title function_">setOption</span>(option);</span><br><span class="language-javascript">  <span class="hljs-comment">// 刷新调整</span></span><br><span class="language-javascript">  <span class="hljs-variable language_">window</span>.<span class="hljs-property">onresize</span> = <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) &#123;</span><br><span class="language-javascript">    myChart.<span class="hljs-title function_">resize</span>();</span><br><span class="language-javascript">  &#125;</span><br><span class="language-javascript"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure><ul><li>部分echart需要引入其他js，如<code>bmap</code>、<code>jquery</code>等，请自行添加。</li><li>使用百度地图的api需要<ahref="http://lbsyun.baidu.com/apiconsole/key?application=key">申请密钥(ak)</a>，使用格式如下，注意替换<code>FAKE_AK</code>。</li></ul><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text/javascript&quot;</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://api.map.baidu.com/api?v=2.0&amp;ak=FAKE_AK&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">&quot;text/javascript&quot;</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://api.map.baidu.com/getscript?v=2.0&amp;ak=FAKE_AK&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure><script src="https://cdn.jsdelivr.net/npm/echarts@4.8.0/dist/echarts.min.js"></script><script src="https://api.map.baidu.com/getscript?v=2.0&ak=84y4lPUPCHIrwRUQPc61uBewdYZ1pHM2"></script><script src="https://cdn.jsdelivr.net/npm/echarts-gl@1.1.1/dist/echarts-gl.min.js"></script><h2 id="实例">实例</h2><div class="note note-success">            <p>下面给出一些<a href="https://echarts.apache.org/examples/zh/index.html">echarts官方实例</a>，大多数都可以<span class="label label-primary"><strong>交互</strong></span>。</p>           </div><h3 id="折线图line">折线图Line</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=area-stack">Stackedarea chart</a></li></ul><div id="echarts4336" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts4336'));        // 指定图表的配置项和数据        var option = option = {    title: {        text: '堆叠区域图'    },    tooltip: {        trigger: 'axis',        axisPointer: {            type: 'cross',            label: {                backgroundColor: '#6a7985'            }        }    },    legend: {        data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎']    },    toolbox: {        feature: {            saveAsImage: {}        }    },    grid: {        left: '3%',        right: '4%',        bottom: '3%',        containLabel: true    },    xAxis: [        {            type: 'category',            boundaryGap: false,            data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']        }    ],    yAxis: [        {            type: 'value'        }    ],    series: [        {            name: '邮件营销',            type: 'line',            stack: '总量',            areaStyle: {},            data: [120, 132, 101, 134, 90, 230, 210]        },        {            name: '联盟广告',            type: 'line',            stack: '总量',            areaStyle: {},            data: [220, 182, 191, 234, 290, 330, 310]        },        {            name: '视频广告',            type: 'line',            stack: '总量',            areaStyle: {},            data: [150, 232, 201, 154, 190, 330, 410]        },        {            name: '直接访问',            type: 'line',            stack: '总量',            areaStyle: {},            data: [320, 332, 301, 334, 390, 330, 320]        },        {            name: '搜索引擎',            type: 'line',            stack: '总量',            label: {                normal: {                    show: true,                    position: 'top'                }            },            areaStyle: {},            data: [820, 932, 901, 934, 1290, 1330, 1320]        }    ]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=area-pieces">AreaPieces</a></li></ul><div id="echarts9396" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts9396'));        // 指定图表的配置项和数据        var option = option = {    xAxis: {        type: 'category',        boundaryGap: false    },    yAxis: {        type: 'value',        boundaryGap: [0, '30%']    },    visualMap: {        type: 'piecewise',        show: false,        dimension: 0,        seriesIndex: 0,        pieces: [{            gt: 1,            lt: 3,            color: 'rgba(0, 180, 0, 0.5)'        }, {            gt: 5,            lt: 7,            color: 'rgba(0, 180, 0, 0.5)'        }]    },    series: [        {            type: 'line',            smooth: 0.6,            symbol: 'none',            lineStyle: {                color: 'green',                width: 5            },            markLine: {                symbol: ['none', 'none'],                label: {show: false},                data: [                    {xAxis: 1},                    {xAxis: 3},                    {xAxis: 5},                    {xAxis: 7}                ]            },            areaStyle: {},            data: [                ['2019-10-10', 200],                ['2019-10-11', 400],                ['2019-10-12', 650],                ['2019-10-13', 500],                ['2019-10-14', 250],                ['2019-10-15', 300],                ['2019-10-16', 450],                ['2019-10-17', 300],                ['2019-10-18', 100]            ]        }    ]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=area-rainfall">Rainfall</a></li></ul><div id="echarts6260" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts6260'));        // 指定图表的配置项和数据        var option = option = {    title: {        text: '雨量流量关系图',        subtext: '数据来自西安兰特水电测控技术有限公司',        left: 'center',        align: 'right'    },    grid: {        bottom: 80    },    toolbox: {        feature: {            dataZoom: {                yAxisIndex: 'none'            },            restore: {},            saveAsImage: {}        }    },    tooltip: {        trigger: 'axis',        axisPointer: {            type: 'cross',            animation: false,            label: {                backgroundColor: '#505765'            }        }    },    legend: {        data: ['流量', '降雨量'],        left: 10    },    dataZoom: [        {            show: true,            realtime: true,            start: 65,            end: 85        },        {            type: 'inside',            realtime: true,            start: 65,            end: 85        }    ],    xAxis: [        {            type: 'category',            boundaryGap: false,            axisLine: {onZero: false},            data: [                '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00',                '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00',                '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00',                '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00',                '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00',                '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00',                '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00',                '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00',                '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00',                '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00',                '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00',                '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00',                '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00',                '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00',                '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00',                '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00',                '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00',                '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00',                '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00',                '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00',                '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00',                '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00',                '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00',                '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00',                '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00',                '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00',                '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00',                '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00',                '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00',                '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00',                '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00',                '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00',                '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00',                '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00',                '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00',                '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00',                '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00',                '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00',                '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00',                '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00',                '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00',                '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00',                '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00',                '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00',                '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00',                '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00',                '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00',                '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00',                '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00',                '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00',                '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '2009/8/2 3:00', '2009/8/2 4:00', '2009/8/2 5:00', '2009/8/2 6:00', '2009/8/2 7:00', '2009/8/2 8:00', '2009/8/2 9:00', '2009/8/2 10:00', '2009/8/2 11:00', '2009/8/2 12:00', '2009/8/2 13:00', '2009/8/2 14:00', '2009/8/2 15:00', '2009/8/2 16:00', '2009/8/2 17:00', '2009/8/2 18:00', '2009/8/2 19:00', '2009/8/2 20:00', '2009/8/2 21:00', '2009/8/2 22:00', '2009/8/2 23:00', '2009/8/3 0:00', '2009/8/3 1:00', '2009/8/3 2:00', '2009/8/3 3:00', '2009/8/3 4:00', '2009/8/3 5:00', '2009/8/3 6:00', '2009/8/3 7:00', '2009/8/3 8:00', '2009/8/3 9:00', '2009/8/3 10:00', '2009/8/3 11:00', '2009/8/3 12:00', '2009/8/3 13:00', '2009/8/3 14:00', '2009/8/3 15:00', '2009/8/3 16:00', '2009/8/3 17:00', '2009/8/3 18:00', '2009/8/3 19:00', '2009/8/3 20:00', '2009/8/3 21:00', '2009/8/3 22:00', '2009/8/3 23:00', '2009/8/4 0:00', '2009/8/4 1:00', '2009/8/4 2:00', '2009/8/4 3:00', '2009/8/4 4:00', '2009/8/4 5:00', '2009/8/4 6:00', '2009/8/4 7:00', '2009/8/4 8:00', '2009/8/4 9:00', '2009/8/4 10:00', '2009/8/4 11:00', '2009/8/4 12:00', '2009/8/4 13:00', '2009/8/4 14:00', '2009/8/4 15:00', '2009/8/4 16:00', '2009/8/4 17:00', '2009/8/4 18:00', '2009/8/4 19:00', '2009/8/4 20:00', '2009/8/4 21:00', '2009/8/4 22:00', '2009/8/4 23:00', '2009/8/5 0:00', '2009/8/5 1:00', '2009/8/5 2:00', '2009/8/5 3:00', '2009/8/5 4:00', '2009/8/5 5:00', '2009/8/5 6:00', '2009/8/5 7:00', '2009/8/5 8:00', '2009/8/5 9:00', '2009/8/5 10:00', '2009/8/5 11:00', '2009/8/5 12:00', '2009/8/5 13:00', '2009/8/5 14:00', '2009/8/5 15:00', '2009/8/5 16:00', '2009/8/5 17:00', '2009/8/5 18:00', '2009/8/5 19:00', '2009/8/5 20:00', '2009/8/5 21:00', '2009/8/5 22:00', '2009/8/5 23:00', '2009/8/6 0:00', '2009/8/6 1:00', '2009/8/6 2:00', '2009/8/6 3:00', '2009/8/6 4:00', '2009/8/6 5:00', '2009/8/6 6:00', '2009/8/6 7:00', '2009/8/6 8:00', '2009/8/6 9:00', '2009/8/6 10:00', '2009/8/6 11:00', '2009/8/6 12:00', '2009/8/6 13:00', '2009/8/6 14:00', '2009/8/6 15:00', '2009/8/6 16:00', '2009/8/6 17:00', '2009/8/6 18:00', '2009/8/6 19:00', '2009/8/6 20:00', '2009/8/6 21:00', '2009/8/6 22:00', '2009/8/6 23:00', '2009/8/7 0:00', '2009/8/7 1:00', '2009/8/7 2:00', '2009/8/7 3:00', '2009/8/7 4:00', '2009/8/7 5:00', '2009/8/7 6:00', '2009/8/7 7:00', '2009/8/7 8:00', '2009/8/7 9:00', '2009/8/7 10:00', '2009/8/7 11:00', '2009/8/7 12:00', '2009/8/7 13:00', '2009/8/7 14:00', '2009/8/7 15:00', '2009/8/7 16:00', '2009/8/7 17:00', '2009/8/7 18:00', '2009/8/7 19:00', '2009/8/7 20:00', '2009/8/7 21:00', '2009/8/7 22:00', '2009/8/7 23:00', '2009/8/8 0:00', '2009/8/8 1:00', '2009/8/8 2:00', '2009/8/8 3:00', '2009/8/8 4:00', '2009/8/8 5:00', '2009/8/8 6:00', '2009/8/8 7:00', '2009/8/8 8:00', '2009/8/8 9:00', '2009/8/8 10:00', '2009/8/8 11:00', '2009/8/8 12:00', '2009/8/8 13:00', '2009/8/8 14:00', '2009/8/8 15:00', '2009/8/8 16:00', '2009/8/8 17:00', '2009/8/8 18:00', '2009/8/8 19:00', '2009/8/8 20:00', '2009/8/8 21:00', '2009/8/8 22:00', '2009/8/8 23:00', '2009/8/9 0:00', '2009/8/9 1:00', '2009/8/9 2:00', '2009/8/9 3:00', '2009/8/9 4:00', '2009/8/9 5:00', '2009/8/9 6:00', '2009/8/9 7:00', '2009/8/9 8:00', '2009/8/9 9:00', '2009/8/9 10:00', '2009/8/9 11:00', '2009/8/9 12:00', '2009/8/9 13:00', '2009/8/9 14:00', '2009/8/9 15:00', '2009/8/9 16:00', '2009/8/9 17:00', '2009/8/9 18:00', '2009/8/9 19:00', '2009/8/9 20:00', '2009/8/9 21:00', '2009/8/9 22:00', '2009/8/9 23:00', '2009/8/10 0:00', '2009/8/10 1:00', '2009/8/10 2:00', '2009/8/10 3:00', '2009/8/10 4:00', '2009/8/10 5:00', '2009/8/10 6:00', '2009/8/10 7:00', '2009/8/10 8:00', '2009/8/10 9:00', '2009/8/10 10:00', '2009/8/10 11:00', '2009/8/10 12:00', '2009/8/10 13:00', '2009/8/10 14:00', '2009/8/10 15:00', '2009/8/10 16:00', '2009/8/10 17:00', '2009/8/10 18:00', '2009/8/10 19:00', '2009/8/10 20:00', '2009/8/10 21:00', '2009/8/10 22:00', '2009/8/10 23:00', '2009/8/11 0:00', '2009/8/11 1:00', '2009/8/11 2:00', '2009/8/11 3:00', '2009/8/11 4:00', '2009/8/11 5:00', '2009/8/11 6:00', '2009/8/11 7:00', '2009/8/11 8:00', '2009/8/11 9:00', '2009/8/11 10:00', '2009/8/11 11:00', '2009/8/11 12:00', '2009/8/11 13:00', '2009/8/11 14:00', '2009/8/11 15:00', '2009/8/11 16:00', '2009/8/11 17:00', '2009/8/11 18:00', '2009/8/11 19:00', '2009/8/11 20:00', '2009/8/11 21:00', '2009/8/11 22:00', '2009/8/11 23:00', '2009/8/12 0:00', '2009/8/12 1:00', '2009/8/12 2:00', '2009/8/12 3:00', '2009/8/12 4:00', '2009/8/12 5:00', '2009/8/12 6:00', '2009/8/12 7:00', '2009/8/12 8:00', '2009/8/12 9:00', '2009/8/12 10:00', '2009/8/12 11:00', '2009/8/12 12:00', '2009/8/12 13:00', '2009/8/12 14:00', '2009/8/12 15:00', '2009/8/12 16:00', '2009/8/12 17:00', '2009/8/12 18:00', '2009/8/12 19:00', '2009/8/12 20:00', '2009/8/12 21:00', '2009/8/12 22:00', '2009/8/12 23:00', '2009/8/13 0:00', '2009/8/13 1:00', '2009/8/13 2:00', '2009/8/13 3:00', '2009/8/13 4:00', '2009/8/13 5:00', '2009/8/13 6:00', '2009/8/13 7:00', '2009/8/13 8:00', '2009/8/13 9:00', '2009/8/13 10:00', '2009/8/13 11:00', '2009/8/13 12:00', '2009/8/13 13:00', '2009/8/13 14:00', '2009/8/13 15:00', '2009/8/13 16:00', '2009/8/13 17:00', '2009/8/13 18:00', '2009/8/13 19:00', '2009/8/13 20:00', '2009/8/13 21:00', '2009/8/13 22:00', '2009/8/13 23:00', '2009/8/14 0:00', '2009/8/14 1:00', '2009/8/14 2:00', '2009/8/14 3:00', '2009/8/14 4:00', '2009/8/14 5:00', '2009/8/14 6:00', '2009/8/14 7:00', '2009/8/14 8:00', '2009/8/14 9:00', '2009/8/14 10:00', '2009/8/14 11:00', '2009/8/14 12:00', '2009/8/14 13:00', '2009/8/14 14:00', '2009/8/14 15:00', '2009/8/14 16:00', '2009/8/14 17:00', '2009/8/14 18:00', '2009/8/14 19:00', '2009/8/14 20:00', '2009/8/14 21:00', '2009/8/14 22:00', '2009/8/14 23:00', '2009/8/15 0:00', '2009/8/15 1:00', '2009/8/15 2:00', '2009/8/15 3:00', '2009/8/15 4:00', '2009/8/15 5:00', '2009/8/15 6:00', '2009/8/15 7:00', '2009/8/15 8:00', '2009/8/15 9:00', '2009/8/15 10:00', '2009/8/15 11:00', '2009/8/15 12:00', '2009/8/15 13:00', '2009/8/15 14:00', '2009/8/15 15:00', '2009/8/15 16:00', '2009/8/15 17:00', '2009/8/15 18:00', '2009/8/15 19:00', '2009/8/15 20:00', '2009/8/15 21:00', '2009/8/15 22:00', '2009/8/15 23:00', '2009/8/16 0:00', '2009/8/16 1:00', '2009/8/16 2:00', '2009/8/16 3:00', '2009/8/16 4:00', '2009/8/16 5:00', '2009/8/16 6:00', '2009/8/16 7:00', '2009/8/16 8:00', '2009/8/16 9:00', '2009/8/16 10:00', '2009/8/16 11:00', '2009/8/16 12:00', '2009/8/16 13:00', '2009/8/16 14:00', '2009/8/16 15:00', '2009/8/16 16:00', '2009/8/16 17:00', '2009/8/16 18:00', '2009/8/16 19:00', '2009/8/16 20:00', '2009/8/16 21:00', '2009/8/16 22:00', '2009/8/16 23:00', '2009/8/17 0:00', '2009/8/17 1:00', '2009/8/17 2:00', '2009/8/17 3:00', '2009/8/17 4:00', '2009/8/17 5:00', '2009/8/17 6:00', '2009/8/17 7:00', '2009/8/17 8:00', '2009/8/17 9:00', '2009/8/17 10:00', '2009/8/17 11:00', '2009/8/17 12:00', '2009/8/17 13:00', '2009/8/17 14:00', '2009/8/17 15:00', '2009/8/17 16:00', '2009/8/17 17:00', '2009/8/17 18:00', '2009/8/17 19:00', '2009/8/17 20:00', '2009/8/17 21:00', '2009/8/17 22:00', '2009/8/17 23:00', '2009/8/18 0:00', '2009/8/18 1:00', '2009/8/18 2:00', '2009/8/18 3:00', '2009/8/18 4:00', '2009/8/18 5:00', '2009/8/18 6:00', '2009/8/18 7:00', '2009/8/18 8:00', '2009/8/18 9:00', '2009/8/18 10:00', '2009/8/18 11:00', '2009/8/18 12:00', '2009/8/18 13:00', '2009/8/18 14:00', '2009/8/18 15:00', '2009/8/18 16:00', '2009/8/18 17:00', '2009/8/18 18:00', '2009/8/18 19:00', '2009/8/18 20:00', '2009/8/18 21:00', '2009/8/18 22:00', '2009/8/18 23:00', '2009/8/19 0:00', '2009/8/19 1:00', '2009/8/19 2:00', '2009/8/19 3:00', '2009/8/19 4:00', '2009/8/19 5:00', '2009/8/19 6:00', '2009/8/19 7:00', '2009/8/19 8:00', '2009/8/19 9:00', '2009/8/19 10:00', '2009/8/19 11:00', '2009/8/19 12:00', '2009/8/19 13:00', '2009/8/19 14:00', '2009/8/19 15:00', '2009/8/19 16:00', '2009/8/19 17:00', '2009/8/19 18:00', '2009/8/19 19:00', '2009/8/19 20:00', '2009/8/19 21:00', '2009/8/19 22:00', '2009/8/19 23:00', '2009/8/20 0:00', '2009/8/20 1:00', '2009/8/20 2:00', '2009/8/20 3:00', '2009/8/20 4:00', '2009/8/20 5:00', '2009/8/20 6:00', '2009/8/20 7:00', '2009/8/20 8:00', '2009/8/20 9:00', '2009/8/20 10:00', '2009/8/20 11:00', '2009/8/20 12:00', '2009/8/20 13:00', '2009/8/20 14:00', '2009/8/20 15:00', '2009/8/20 16:00', '2009/8/20 17:00', '2009/8/20 18:00', '2009/8/20 19:00', '2009/8/20 20:00', '2009/8/20 21:00', '2009/8/20 22:00', '2009/8/20 23:00', '2009/8/21 0:00', '2009/8/21 1:00', '2009/8/21 2:00', '2009/8/21 3:00', '2009/8/21 4:00', '2009/8/21 5:00', '2009/8/21 6:00', '2009/8/21 7:00', '2009/8/21 8:00', '2009/8/21 9:00', '2009/8/21 10:00', '2009/8/21 11:00', '2009/8/21 12:00', '2009/8/21 13:00', '2009/8/21 14:00', '2009/8/21 15:00', '2009/8/21 16:00', '2009/8/21 17:00', '2009/8/21 18:00', '2009/8/21 19:00', '2009/8/21 20:00', '2009/8/21 21:00', '2009/8/21 22:00', '2009/8/21 23:00', '2009/8/22 0:00', '2009/8/22 1:00', '2009/8/22 2:00', '2009/8/22 3:00', '2009/8/22 4:00', '2009/8/22 5:00', '2009/8/22 6:00', '2009/8/22 7:00', '2009/8/22 8:00', '2009/8/22 9:00', '2009/8/22 10:00', '2009/8/22 11:00', '2009/8/22 12:00', '2009/8/22 13:00', '2009/8/22 14:00', '2009/8/22 15:00', '2009/8/22 16:00', '2009/8/22 17:00', '2009/8/22 18:00', '2009/8/22 19:00', '2009/8/22 20:00', '2009/8/22 21:00', '2009/8/22 22:00', '2009/8/22 23:00', '2009/8/23 0:00', '2009/8/23 1:00', '2009/8/23 2:00', '2009/8/23 3:00', '2009/8/23 4:00', '2009/8/23 5:00', '2009/8/23 6:00', '2009/8/23 7:00', '2009/8/23 8:00', '2009/8/23 9:00', '2009/8/23 10:00', '2009/8/23 11:00', '2009/8/23 12:00', '2009/8/23 13:00', '2009/8/23 14:00', '2009/8/23 15:00', '2009/8/23 16:00', '2009/8/23 17:00', '2009/8/23 18:00', '2009/8/23 19:00', '2009/8/23 20:00', '2009/8/23 21:00', '2009/8/23 22:00', '2009/8/23 23:00', '2009/8/24 0:00', '2009/8/24 1:00', '2009/8/24 2:00', '2009/8/24 3:00', '2009/8/24 4:00', '2009/8/24 5:00', '2009/8/24 6:00', '2009/8/24 7:00', '2009/8/24 8:00', '2009/8/24 9:00', '2009/8/24 10:00', '2009/8/24 11:00', '2009/8/24 12:00', '2009/8/24 13:00', '2009/8/24 14:00', '2009/8/24 15:00', '2009/8/24 16:00', '2009/8/24 17:00', '2009/8/24 18:00', '2009/8/24 19:00', '2009/8/24 20:00', '2009/8/24 21:00', '2009/8/24 22:00', '2009/8/24 23:00', '2009/8/25 0:00', '2009/8/25 1:00', '2009/8/25 2:00', '2009/8/25 3:00', '2009/8/25 4:00', '2009/8/25 5:00', '2009/8/25 6:00', '2009/8/25 7:00', '2009/8/25 8:00', '2009/8/25 9:00', '2009/8/25 10:00', '2009/8/25 11:00', '2009/8/25 12:00', '2009/8/25 13:00', '2009/8/25 14:00', '2009/8/25 15:00', '2009/8/25 16:00', '2009/8/25 17:00', '2009/8/25 18:00', '2009/8/25 19:00', '2009/8/25 20:00', '2009/8/25 21:00', '2009/8/25 22:00', '2009/8/25 23:00', '2009/8/26 0:00', '2009/8/26 1:00', '2009/8/26 2:00', '2009/8/26 3:00', '2009/8/26 4:00', '2009/8/26 5:00', '2009/8/26 6:00', '2009/8/26 7:00', '2009/8/26 8:00', '2009/8/26 9:00', '2009/8/26 10:00', '2009/8/26 11:00', '2009/8/26 12:00', '2009/8/26 13:00', '2009/8/26 14:00', '2009/8/26 15:00', '2009/8/26 16:00', '2009/8/26 17:00', '2009/8/26 18:00', '2009/8/26 19:00', '2009/8/26 20:00', '2009/8/26 21:00', '2009/8/26 22:00', '2009/8/26 23:00', '2009/8/27 0:00', '2009/8/27 1:00', '2009/8/27 2:00', '2009/8/27 3:00', '2009/8/27 4:00', '2009/8/27 5:00', '2009/8/27 6:00', '2009/8/27 7:00', '2009/8/27 8:00', '2009/8/27 9:00', '2009/8/27 10:00', '2009/8/27 11:00', '2009/8/27 12:00', '2009/8/27 13:00', '2009/8/27 14:00', '2009/8/27 15:00', '2009/8/27 16:00', '2009/8/27 17:00', '2009/8/27 18:00', '2009/8/27 19:00', '2009/8/27 20:00', '2009/8/27 21:00', '2009/8/27 22:00', '2009/8/27 23:00', '2009/8/28 0:00', '2009/8/28 1:00', '2009/8/28 2:00', '2009/8/28 3:00', '2009/8/28 4:00', '2009/8/28 5:00', '2009/8/28 6:00', '2009/8/28 7:00', '2009/8/28 8:00', '2009/8/28 9:00', '2009/8/28 10:00', '2009/8/28 11:00', '2009/8/28 12:00', '2009/8/28 13:00', '2009/8/28 14:00', '2009/8/28 15:00', '2009/8/28 16:00', '2009/8/28 17:00', '2009/8/28 18:00', '2009/8/28 19:00', '2009/8/28 20:00', '2009/8/28 21:00', '2009/8/28 22:00', '2009/8/28 23:00', '2009/8/29 0:00', '2009/8/29 1:00', '2009/8/29 2:00', '2009/8/29 3:00', '2009/8/29 4:00', '2009/8/29 5:00', '2009/8/29 6:00', '2009/8/29 7:00', '2009/8/29 8:00', '2009/8/29 9:00', '2009/8/29 10:00', '2009/8/29 11:00', '2009/8/29 12:00', '2009/8/29 13:00', '2009/8/29 14:00', '2009/8/29 15:00', '2009/8/29 16:00', '2009/8/29 17:00', '2009/8/29 18:00', '2009/8/29 19:00', '2009/8/29 20:00', '2009/8/29 21:00', '2009/8/29 22:00', '2009/8/29 23:00', '2009/8/30 0:00', '2009/8/30 1:00', '2009/8/30 2:00', '2009/8/30 3:00', '2009/8/30 4:00', '2009/8/30 5:00', '2009/8/30 6:00', '2009/8/30 7:00', '2009/8/30 8:00', '2009/8/30 9:00', '2009/8/30 10:00', '2009/8/30 11:00', '2009/8/30 12:00', '2009/8/30 13:00', '2009/8/30 14:00', '2009/8/30 15:00', '2009/8/30 16:00', '2009/8/30 17:00', '2009/8/30 18:00', '2009/8/30 19:00', '2009/8/30 20:00', '2009/8/30 21:00', '2009/8/30 22:00', '2009/8/30 23:00', '2009/8/31 0:00', '2009/8/31 1:00', '2009/8/31 2:00', '2009/8/31 3:00', '2009/8/31 4:00', '2009/8/31 5:00', '2009/8/31 6:00', '2009/8/31 7:00', '2009/8/31 8:00', '2009/8/31 9:00', '2009/8/31 10:00', '2009/8/31 11:00', '2009/8/31 12:00', '2009/8/31 13:00', '2009/8/31 14:00', '2009/8/31 15:00', '2009/8/31 16:00', '2009/8/31 17:00', '2009/8/31 18:00', '2009/8/31 19:00', '2009/8/31 20:00', '2009/8/31 21:00', '2009/8/31 22:00', '2009/8/31 23:00',                '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '2009/9/2 3:00', '2009/9/2 4:00', '2009/9/2 5:00', '2009/9/2 6:00', '2009/9/2 7:00', '2009/9/2 8:00', '2009/9/2 9:00', '2009/9/2 10:00', '2009/9/2 11:00', '2009/9/2 12:00', '2009/9/2 13:00', '2009/9/2 14:00', '2009/9/2 15:00', '2009/9/2 16:00', '2009/9/2 17:00', '2009/9/2 18:00', '2009/9/2 19:00', '2009/9/2 20:00', '2009/9/2 21:00', '2009/9/2 22:00', '2009/9/2 23:00', '2009/9/3 0:00', '2009/9/3 1:00', '2009/9/3 2:00', '2009/9/3 3:00', '2009/9/3 4:00', '2009/9/3 5:00', '2009/9/3 6:00', '2009/9/3 7:00', '2009/9/3 8:00', '2009/9/3 9:00', '2009/9/3 10:00', '2009/9/3 11:00', '2009/9/3 12:00', '2009/9/3 13:00', '2009/9/3 14:00', '2009/9/3 15:00', '2009/9/3 16:00', '2009/9/3 17:00', '2009/9/3 18:00', '2009/9/3 19:00', '2009/9/3 20:00', '2009/9/3 21:00', '2009/9/3 22:00', '2009/9/3 23:00', '2009/9/4 0:00', '2009/9/4 1:00', '2009/9/4 2:00', '2009/9/4 3:00', '2009/9/4 4:00', '2009/9/4 5:00', '2009/9/4 6:00', '2009/9/4 7:00', '2009/9/4 8:00', '2009/9/4 9:00', '2009/9/4 10:00', '2009/9/4 11:00', '2009/9/4 12:00', '2009/9/4 13:00', '2009/9/4 14:00', '2009/9/4 15:00', '2009/9/4 16:00', '2009/9/4 17:00', '2009/9/4 18:00', '2009/9/4 19:00', '2009/9/4 20:00', '2009/9/4 21:00', '2009/9/4 22:00', '2009/9/4 23:00', '2009/9/5 0:00', '2009/9/5 1:00', '2009/9/5 2:00', '2009/9/5 3:00', '2009/9/5 4:00', '2009/9/5 5:00', '2009/9/5 6:00', '2009/9/5 7:00', '2009/9/5 8:00', '2009/9/5 9:00', '2009/9/5 10:00', '2009/9/5 11:00', '2009/9/5 12:00', '2009/9/5 13:00', '2009/9/5 14:00', '2009/9/5 15:00', '2009/9/5 16:00', '2009/9/5 17:00', '2009/9/5 18:00', '2009/9/5 19:00', '2009/9/5 20:00', '2009/9/5 21:00', '2009/9/5 22:00', '2009/9/5 23:00', '2009/9/6 0:00', '2009/9/6 1:00', '2009/9/6 2:00', '2009/9/6 3:00', '2009/9/6 4:00', '2009/9/6 5:00', '2009/9/6 6:00', '2009/9/6 7:00', '2009/9/6 8:00', '2009/9/6 9:00', '2009/9/6 10:00', '2009/9/6 11:00', '2009/9/6 12:00', '2009/9/6 13:00', '2009/9/6 14:00', '2009/9/6 15:00', '2009/9/6 16:00', '2009/9/6 17:00', '2009/9/6 18:00', '2009/9/6 19:00', '2009/9/6 20:00', '2009/9/6 21:00', '2009/9/6 22:00', '2009/9/6 23:00', '2009/9/7 0:00', '2009/9/7 1:00', '2009/9/7 2:00', '2009/9/7 3:00', '2009/9/7 4:00', '2009/9/7 5:00', '2009/9/7 6:00', '2009/9/7 7:00', '2009/9/7 8:00', '2009/9/7 9:00', '2009/9/7 10:00', '2009/9/7 11:00', '2009/9/7 12:00', '2009/9/7 13:00', '2009/9/7 14:00', '2009/9/7 15:00', '2009/9/7 16:00', '2009/9/7 17:00', '2009/9/7 18:00', '2009/9/7 19:00', '2009/9/7 20:00', '2009/9/7 21:00', '2009/9/7 22:00', '2009/9/7 23:00', '2009/9/8 0:00', '2009/9/8 1:00', '2009/9/8 2:00', '2009/9/8 3:00', '2009/9/8 4:00', '2009/9/8 5:00', '2009/9/8 6:00', '2009/9/8 7:00', '2009/9/8 8:00', '2009/9/8 9:00', '2009/9/8 10:00', '2009/9/8 11:00', '2009/9/8 12:00', '2009/9/8 13:00', '2009/9/8 14:00', '2009/9/8 15:00', '2009/9/8 16:00', '2009/9/8 17:00', '2009/9/8 18:00', '2009/9/8 19:00', '2009/9/8 20:00', '2009/9/8 21:00', '2009/9/8 22:00', '2009/9/8 23:00', '2009/9/9 0:00', '2009/9/9 1:00', '2009/9/9 2:00', '2009/9/9 3:00', '2009/9/9 4:00', '2009/9/9 5:00', '2009/9/9 6:00', '2009/9/9 7:00', '2009/9/9 8:00', '2009/9/9 9:00', '2009/9/9 10:00', '2009/9/9 11:00', '2009/9/9 12:00', '2009/9/9 13:00', '2009/9/9 14:00', '2009/9/9 15:00', '2009/9/9 16:00', '2009/9/9 17:00', '2009/9/9 18:00', '2009/9/9 19:00', '2009/9/9 20:00', '2009/9/9 21:00', '2009/9/9 22:00', '2009/9/9 23:00', '2009/9/10 0:00', '2009/9/10 1:00', '2009/9/10 2:00', '2009/9/10 3:00', '2009/9/10 4:00', '2009/9/10 5:00', '2009/9/10 6:00', '2009/9/10 7:00', '2009/9/10 8:00', '2009/9/10 9:00', '2009/9/10 10:00', '2009/9/10 11:00', '2009/9/10 12:00', '2009/9/10 13:00', '2009/9/10 14:00', '2009/9/10 15:00', '2009/9/10 16:00', '2009/9/10 17:00', '2009/9/10 18:00', '2009/9/10 19:00', '2009/9/10 20:00', '2009/9/10 21:00', '2009/9/10 22:00', '2009/9/10 23:00', '2009/9/11 0:00', '2009/9/11 1:00', '2009/9/11 2:00', '2009/9/11 3:00', '2009/9/11 4:00', '2009/9/11 5:00', '2009/9/11 6:00', '2009/9/11 7:00', '2009/9/11 8:00', '2009/9/11 9:00', '2009/9/11 10:00', '2009/9/11 11:00', '2009/9/11 12:00', '2009/9/11 13:00', '2009/9/11 14:00', '2009/9/11 15:00', '2009/9/11 16:00', '2009/9/11 17:00', '2009/9/11 18:00', '2009/9/11 19:00', '2009/9/11 20:00', '2009/9/11 21:00', '2009/9/11 22:00', '2009/9/11 23:00', '2009/9/12 0:00', '2009/9/12 1:00', '2009/9/12 2:00', '2009/9/12 3:00', '2009/9/12 4:00', '2009/9/12 5:00', '2009/9/12 6:00', '2009/9/12 7:00', '2009/9/12 8:00', '2009/9/12 9:00', '2009/9/12 10:00', '2009/9/12 11:00', '2009/9/12 12:00', '2009/9/12 13:00', '2009/9/12 14:00', '2009/9/12 15:00', '2009/9/12 16:00', '2009/9/12 17:00', '2009/9/12 18:00', '2009/9/12 19:00', '2009/9/12 20:00', '2009/9/12 21:00', '2009/9/12 22:00', '2009/9/12 23:00', '2009/9/13 0:00', '2009/9/13 1:00', '2009/9/13 2:00', '2009/9/13 3:00', '2009/9/13 4:00', '2009/9/13 5:00', '2009/9/13 6:00', '2009/9/13 7:00', '2009/9/13 8:00', '2009/9/13 9:00', '2009/9/13 10:00', '2009/9/13 11:00', '2009/9/13 12:00', '2009/9/13 13:00', '2009/9/13 14:00', '2009/9/13 15:00', '2009/9/13 16:00', '2009/9/13 17:00', '2009/9/13 18:00', '2009/9/13 19:00', '2009/9/13 20:00', '2009/9/13 21:00', '2009/9/13 22:00', '2009/9/13 23:00', '2009/9/14 0:00', '2009/9/14 1:00', '2009/9/14 2:00', '2009/9/14 3:00', '2009/9/14 4:00', '2009/9/14 5:00', '2009/9/14 6:00', '2009/9/14 7:00', '2009/9/14 8:00', '2009/9/14 9:00', '2009/9/14 10:00', '2009/9/14 11:00', '2009/9/14 12:00', '2009/9/14 13:00', '2009/9/14 14:00', '2009/9/14 15:00', '2009/9/14 16:00', '2009/9/14 17:00', '2009/9/14 18:00', '2009/9/14 19:00', '2009/9/14 20:00', '2009/9/14 21:00', '2009/9/14 22:00', '2009/9/14 23:00', '2009/9/15 0:00', '2009/9/15 1:00', '2009/9/15 2:00', '2009/9/15 3:00', '2009/9/15 4:00', '2009/9/15 5:00', '2009/9/15 6:00', '2009/9/15 7:00', '2009/9/15 8:00', '2009/9/15 9:00', '2009/9/15 10:00', '2009/9/15 11:00', '2009/9/15 12:00', '2009/9/15 13:00', '2009/9/15 14:00', '2009/9/15 15:00', '2009/9/15 16:00', '2009/9/15 17:00', '2009/9/15 18:00', '2009/9/15 19:00', '2009/9/15 20:00', '2009/9/15 21:00', '2009/9/15 22:00', '2009/9/15 23:00', '2009/9/16 0:00', '2009/9/16 1:00', '2009/9/16 2:00', '2009/9/16 3:00', '2009/9/16 4:00', '2009/9/16 5:00', '2009/9/16 6:00', '2009/9/16 7:00', '2009/9/16 8:00', '2009/9/16 9:00', '2009/9/16 10:00', '2009/9/16 11:00', '2009/9/16 12:00', '2009/9/16 13:00', '2009/9/16 14:00', '2009/9/16 15:00', '2009/9/16 16:00', '2009/9/16 17:00', '2009/9/16 18:00', '2009/9/16 19:00', '2009/9/16 20:00', '2009/9/16 21:00', '2009/9/16 22:00', '2009/9/16 23:00', '2009/9/17 0:00', '2009/9/17 1:00', '2009/9/17 2:00', '2009/9/17 3:00', '2009/9/17 4:00', '2009/9/17 5:00', '2009/9/17 6:00', '2009/9/17 7:00', '2009/9/17 8:00', '2009/9/17 9:00', '2009/9/17 10:00', '2009/9/17 11:00', '2009/9/17 12:00', '2009/9/17 13:00', '2009/9/17 14:00', '2009/9/17 15:00', '2009/9/17 16:00', '2009/9/17 17:00', '2009/9/17 18:00', '2009/9/17 19:00', '2009/9/17 20:00', '2009/9/17 21:00', '2009/9/17 22:00', '2009/9/17 23:00', '2009/9/18 0:00', '2009/9/18 1:00', '2009/9/18 2:00', '2009/9/18 3:00', '2009/9/18 4:00', '2009/9/18 5:00', '2009/9/18 6:00', '2009/9/18 7:00', '2009/9/18 8:00', '2009/9/18 9:00', '2009/9/18 10:00', '2009/9/18 11:00', '2009/9/18 12:00', '2009/9/18 13:00', '2009/9/18 14:00', '2009/9/18 15:00', '2009/9/18 16:00', '2009/9/18 17:00', '2009/9/18 18:00', '2009/9/18 19:00', '2009/9/18 20:00', '2009/9/18 21:00', '2009/9/18 22:00', '2009/9/18 23:00', '2009/9/19 0:00', '2009/9/19 1:00', '2009/9/19 2:00', '2009/9/19 3:00', '2009/9/19 4:00', '2009/9/19 5:00', '2009/9/19 6:00', '2009/9/19 7:00', '2009/9/19 8:00', '2009/9/19 9:00', '2009/9/19 10:00', '2009/9/19 11:00', '2009/9/19 12:00', '2009/9/19 13:00', '2009/9/19 14:00', '2009/9/19 15:00', '2009/9/19 16:00', '2009/9/19 17:00', '2009/9/19 18:00', '2009/9/19 19:00', '2009/9/19 20:00', '2009/9/19 21:00', '2009/9/19 22:00', '2009/9/19 23:00', '2009/9/20 0:00', '2009/9/20 1:00', '2009/9/20 2:00', '2009/9/20 3:00', '2009/9/20 4:00', '2009/9/20 5:00', '2009/9/20 6:00', '2009/9/20 7:00', '2009/9/20 8:00', '2009/9/20 9:00', '2009/9/20 10:00', '2009/9/20 11:00', '2009/9/20 12:00', '2009/9/20 13:00', '2009/9/20 14:00', '2009/9/20 15:00', '2009/9/20 16:00', '2009/9/20 17:00', '2009/9/20 18:00', '2009/9/20 19:00', '2009/9/20 20:00', '2009/9/20 21:00', '2009/9/20 22:00', '2009/9/20 23:00', '2009/9/21 0:00', '2009/9/21 1:00', '2009/9/21 2:00', '2009/9/21 3:00', '2009/9/21 4:00', '2009/9/21 5:00', '2009/9/21 6:00', '2009/9/21 7:00', '2009/9/21 8:00', '2009/9/21 9:00', '2009/9/21 10:00', '2009/9/21 11:00', '2009/9/21 12:00', '2009/9/21 13:00', '2009/9/21 14:00', '2009/9/21 15:00', '2009/9/21 16:00', '2009/9/21 17:00', '2009/9/21 18:00', '2009/9/21 19:00', '2009/9/21 20:00', '2009/9/21 21:00', '2009/9/21 22:00', '2009/9/21 23:00', '2009/9/22 0:00', '2009/9/22 1:00', '2009/9/22 2:00', '2009/9/22 3:00', '2009/9/22 4:00', '2009/9/22 5:00', '2009/9/22 6:00', '2009/9/22 7:00', '2009/9/22 8:00', '2009/9/22 9:00', '2009/9/22 10:00', '2009/9/22 11:00', '2009/9/22 12:00', '2009/9/22 13:00', '2009/9/22 14:00', '2009/9/22 15:00', '2009/9/22 16:00', '2009/9/22 17:00', '2009/9/22 18:00', '2009/9/22 19:00', '2009/9/22 20:00', '2009/9/22 21:00', '2009/9/22 22:00', '2009/9/22 23:00', '2009/9/23 0:00', '2009/9/23 1:00', '2009/9/23 2:00', '2009/9/23 3:00', '2009/9/23 4:00', '2009/9/23 5:00', '2009/9/23 6:00', '2009/9/23 7:00', '2009/9/23 8:00', '2009/9/23 9:00', '2009/9/23 10:00', '2009/9/23 11:00', '2009/9/23 12:00', '2009/9/23 13:00', '2009/9/23 14:00', '2009/9/23 15:00', '2009/9/23 16:00', '2009/9/23 17:00', '2009/9/23 18:00', '2009/9/23 19:00', '2009/9/23 20:00', '2009/9/23 21:00', '2009/9/23 22:00', '2009/9/23 23:00', '2009/9/24 0:00', '2009/9/24 1:00', '2009/9/24 2:00', '2009/9/24 3:00', '2009/9/24 4:00', '2009/9/24 5:00', '2009/9/24 6:00', '2009/9/24 7:00', '2009/9/24 8:00', '2009/9/24 9:00', '2009/9/24 10:00', '2009/9/24 11:00', '2009/9/24 12:00', '2009/9/24 13:00', '2009/9/24 14:00', '2009/9/24 15:00', '2009/9/24 16:00', '2009/9/24 17:00', '2009/9/24 18:00', '2009/9/24 19:00', '2009/9/24 20:00', '2009/9/24 21:00', '2009/9/24 22:00', '2009/9/24 23:00', '2009/9/25 0:00', '2009/9/25 1:00', '2009/9/25 2:00', '2009/9/25 3:00', '2009/9/25 4:00', '2009/9/25 5:00', '2009/9/25 6:00', '2009/9/25 7:00', '2009/9/25 8:00', '2009/9/25 9:00', '2009/9/25 10:00', '2009/9/25 11:00', '2009/9/25 12:00', '2009/9/25 13:00', '2009/9/25 14:00', '2009/9/25 15:00', '2009/9/25 16:00', '2009/9/25 17:00', '2009/9/25 18:00', '2009/9/25 19:00', '2009/9/25 20:00', '2009/9/25 21:00', '2009/9/25 22:00', '2009/9/25 23:00', '2009/9/26 0:00', '2009/9/26 1:00', '2009/9/26 2:00', '2009/9/26 3:00', '2009/9/26 4:00', '2009/9/26 5:00', '2009/9/26 6:00', '2009/9/26 7:00', '2009/9/26 8:00', '2009/9/26 9:00', '2009/9/26 10:00', '2009/9/26 11:00', '2009/9/26 12:00', '2009/9/26 13:00', '2009/9/26 14:00', '2009/9/26 15:00', '2009/9/26 16:00', '2009/9/26 17:00', '2009/9/26 18:00', '2009/9/26 19:00', '2009/9/26 20:00', '2009/9/26 21:00', '2009/9/26 22:00', '2009/9/26 23:00', '2009/9/27 0:00', '2009/9/27 1:00', '2009/9/27 2:00', '2009/9/27 3:00', '2009/9/27 4:00', '2009/9/27 5:00', '2009/9/27 6:00', '2009/9/27 7:00', '2009/9/27 8:00', '2009/9/27 9:00', '2009/9/27 10:00', '2009/9/27 11:00', '2009/9/27 12:00', '2009/9/27 13:00', '2009/9/27 14:00', '2009/9/27 15:00', '2009/9/27 16:00', '2009/9/27 17:00', '2009/9/27 18:00', '2009/9/27 19:00', '2009/9/27 20:00', '2009/9/27 21:00', '2009/9/27 22:00', '2009/9/27 23:00', '2009/9/28 0:00', '2009/9/28 1:00', '2009/9/28 2:00', '2009/9/28 3:00', '2009/9/28 4:00', '2009/9/28 5:00', '2009/9/28 6:00', '2009/9/28 7:00', '2009/9/28 8:00', '2009/9/28 9:00', '2009/9/28 10:00', '2009/9/28 11:00', '2009/9/28 12:00', '2009/9/28 13:00', '2009/9/28 14:00', '2009/9/28 15:00', '2009/9/28 16:00', '2009/9/28 17:00', '2009/9/28 18:00', '2009/9/28 19:00', '2009/9/28 20:00', '2009/9/28 21:00', '2009/9/28 22:00', '2009/9/28 23:00', '2009/9/29 0:00', '2009/9/29 1:00', '2009/9/29 2:00', '2009/9/29 3:00', '2009/9/29 4:00', '2009/9/29 5:00', '2009/9/29 6:00', '2009/9/29 7:00', '2009/9/29 8:00', '2009/9/29 9:00', '2009/9/29 10:00', '2009/9/29 11:00', '2009/9/29 12:00', '2009/9/29 13:00', '2009/9/29 14:00', '2009/9/29 15:00', '2009/9/29 16:00', '2009/9/29 17:00', '2009/9/29 18:00', '2009/9/29 19:00', '2009/9/29 20:00', '2009/9/29 21:00', '2009/9/29 22:00', '2009/9/29 23:00', '2009/9/30 0:00', '2009/9/30 1:00', '2009/9/30 2:00', '2009/9/30 3:00', '2009/9/30 4:00', '2009/9/30 5:00', '2009/9/30 6:00', '2009/9/30 7:00', '2009/9/30 8:00', '2009/9/30 9:00', '2009/9/30 10:00', '2009/9/30 11:00', '2009/9/30 12:00', '2009/9/30 13:00', '2009/9/30 14:00', '2009/9/30 15:00', '2009/9/30 16:00', '2009/9/30 17:00', '2009/9/30 18:00', '2009/9/30 19:00', '2009/9/30 20:00', '2009/9/30 21:00', '2009/9/30 22:00', '2009/9/30 23:00',                '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1:00', '2009/10/2 2:00', '2009/10/2 3:00', '2009/10/2 4:00', '2009/10/2 5:00', '2009/10/2 6:00', '2009/10/2 7:00', '2009/10/2 8:00', '2009/10/2 9:00', '2009/10/2 10:00', '2009/10/2 11:00', '2009/10/2 12:00', '2009/10/2 13:00', '2009/10/2 14:00', '2009/10/2 15:00', '2009/10/2 16:00', '2009/10/2 17:00', '2009/10/2 18:00', '2009/10/2 19:00', '2009/10/2 20:00', '2009/10/2 21:00', '2009/10/2 22:00', '2009/10/2 23:00', '2009/10/3 0:00', '2009/10/3 1:00', '2009/10/3 2:00', '2009/10/3 3:00', '2009/10/3 4:00', '2009/10/3 5:00', '2009/10/3 6:00', '2009/10/3 7:00', '2009/10/3 8:00', '2009/10/3 9:00', '2009/10/3 10:00', '2009/10/3 11:00', '2009/10/3 12:00', '2009/10/3 13:00', '2009/10/3 14:00', '2009/10/3 15:00', '2009/10/3 16:00', '2009/10/3 17:00', '2009/10/3 18:00', '2009/10/3 19:00', '2009/10/3 20:00', '2009/10/3 21:00', '2009/10/3 22:00', '2009/10/3 23:00', '2009/10/4 0:00', '2009/10/4 1:00', '2009/10/4 2:00', '2009/10/4 3:00', '2009/10/4 4:00', '2009/10/4 5:00', '2009/10/4 6:00', '2009/10/4 7:00', '2009/10/4 8:00', '2009/10/4 9:00', '2009/10/4 10:00', '2009/10/4 11:00', '2009/10/4 12:00', '2009/10/4 13:00', '2009/10/4 14:00', '2009/10/4 15:00', '2009/10/4 16:00', '2009/10/4 17:00', '2009/10/4 18:00', '2009/10/4 19:00', '2009/10/4 20:00', '2009/10/4 21:00', '2009/10/4 22:00', '2009/10/4 23:00', '2009/10/5 0:00', '2009/10/5 1:00', '2009/10/5 2:00', '2009/10/5 3:00', '2009/10/5 4:00', '2009/10/5 5:00', '2009/10/5 6:00', '2009/10/5 7:00', '2009/10/5 8:00', '2009/10/5 9:00', '2009/10/5 10:00', '2009/10/5 11:00', '2009/10/5 12:00', '2009/10/5 13:00', '2009/10/5 14:00', '2009/10/5 15:00', '2009/10/5 16:00', '2009/10/5 17:00', '2009/10/5 18:00', '2009/10/5 19:00', '2009/10/5 20:00', '2009/10/5 21:00', '2009/10/5 22:00', '2009/10/5 23:00', '2009/10/6 0:00', '2009/10/6 1:00', '2009/10/6 2:00', '2009/10/6 3:00', '2009/10/6 4:00', '2009/10/6 5:00', '2009/10/6 6:00', '2009/10/6 7:00', '2009/10/6 8:00', '2009/10/6 9:00', '2009/10/6 10:00', '2009/10/6 11:00', '2009/10/6 12:00', '2009/10/6 13:00', '2009/10/6 14:00', '2009/10/6 15:00', '2009/10/6 16:00', '2009/10/6 17:00', '2009/10/6 18:00', '2009/10/6 19:00', '2009/10/6 20:00', '2009/10/6 21:00', '2009/10/6 22:00', '2009/10/6 23:00', '2009/10/7 0:00', '2009/10/7 1:00', '2009/10/7 2:00', '2009/10/7 3:00', '2009/10/7 4:00', '2009/10/7 5:00', '2009/10/7 6:00', '2009/10/7 7:00', '2009/10/7 8:00', '2009/10/7 9:00', '2009/10/7 10:00', '2009/10/7 11:00', '2009/10/7 12:00', '2009/10/7 13:00', '2009/10/7 14:00', '2009/10/7 15:00', '2009/10/7 16:00', '2009/10/7 17:00', '2009/10/7 18:00', '2009/10/7 19:00', '2009/10/7 20:00', '2009/10/7 21:00', '2009/10/7 22:00', '2009/10/7 23:00', '2009/10/8 0:00', '2009/10/8 1:00', '2009/10/8 2:00', '2009/10/8 3:00', '2009/10/8 4:00', '2009/10/8 5:00', '2009/10/8 6:00', '2009/10/8 7:00', '2009/10/8 8:00', '2009/10/8 9:00', '2009/10/8 10:00', '2009/10/8 11:00', '2009/10/8 12:00', '2009/10/8 13:00', '2009/10/8 14:00', '2009/10/8 15:00', '2009/10/8 16:00', '2009/10/8 17:00', '2009/10/8 18:00', '2009/10/8 19:00', '2009/10/8 20:00', '2009/10/8 21:00', '2009/10/8 22:00', '2009/10/8 23:00', '2009/10/9 0:00', '2009/10/9 1:00', '2009/10/9 2:00', '2009/10/9 3:00', '2009/10/9 4:00', '2009/10/9 5:00', '2009/10/9 6:00', '2009/10/9 7:00', '2009/10/9 8:00', '2009/10/9 9:00', '2009/10/9 10:00', '2009/10/9 11:00', '2009/10/9 12:00', '2009/10/9 13:00', '2009/10/9 14:00', '2009/10/9 15:00', '2009/10/9 16:00', '2009/10/9 17:00', '2009/10/9 18:00', '2009/10/9 19:00', '2009/10/9 20:00', '2009/10/9 21:00', '2009/10/9 22:00', '2009/10/9 23:00', '2009/10/10 0:00', '2009/10/10 1:00', '2009/10/10 2:00', '2009/10/10 3:00', '2009/10/10 4:00', '2009/10/10 5:00', '2009/10/10 6:00', '2009/10/10 7:00', '2009/10/10 8:00', '2009/10/10 9:00', '2009/10/10 10:00', '2009/10/10 11:00', '2009/10/10 12:00', '2009/10/10 13:00', '2009/10/10 14:00', '2009/10/10 15:00', '2009/10/10 16:00', '2009/10/10 17:00', '2009/10/10 18:00', '2009/10/10 19:00', '2009/10/10 20:00', '2009/10/10 21:00', '2009/10/10 22:00', '2009/10/10 23:00', '2009/10/11 0:00', '2009/10/11 1:00', '2009/10/11 2:00', '2009/10/11 3:00', '2009/10/11 4:00', '2009/10/11 5:00', '2009/10/11 6:00', '2009/10/11 7:00', '2009/10/11 8:00', '2009/10/11 9:00', '2009/10/11 10:00', '2009/10/11 11:00', '2009/10/11 12:00', '2009/10/11 13:00', '2009/10/11 14:00', '2009/10/11 15:00', '2009/10/11 16:00', '2009/10/11 17:00', '2009/10/11 18:00', '2009/10/11 19:00', '2009/10/11 20:00', '2009/10/11 21:00', '2009/10/11 22:00', '2009/10/11 23:00', '2009/10/12 0:00', '2009/10/12 1:00', '2009/10/12 2:00', '2009/10/12 3:00', '2009/10/12 4:00', '2009/10/12 5:00', '2009/10/12 6:00', '2009/10/12 7:00', '2009/10/12 8:00', '2009/10/12 9:00', '2009/10/12 10:00', '2009/10/12 11:00', '2009/10/12 12:00', '2009/10/12 13:00', '2009/10/12 14:00', '2009/10/12 15:00', '2009/10/12 16:00', '2009/10/12 17:00', '2009/10/12 18:00', '2009/10/12 19:00', '2009/10/12 20:00', '2009/10/12 21:00', '2009/10/12 22:00', '2009/10/12 23:00', '2009/10/13 0:00', '2009/10/13 1:00', '2009/10/13 2:00', '2009/10/13 3:00', '2009/10/13 4:00', '2009/10/13 5:00', '2009/10/13 6:00', '2009/10/13 7:00', '2009/10/13 8:00', '2009/10/13 9:00', '2009/10/13 10:00', '2009/10/13 11:00', '2009/10/13 12:00', '2009/10/13 13:00', '2009/10/13 14:00', '2009/10/13 15:00', '2009/10/13 16:00', '2009/10/13 17:00', '2009/10/13 18:00', '2009/10/13 19:00', '2009/10/13 20:00', '2009/10/13 21:00', '2009/10/13 22:00', '2009/10/13 23:00', '2009/10/14 0:00', '2009/10/14 1:00', '2009/10/14 2:00', '2009/10/14 3:00', '2009/10/14 4:00', '2009/10/14 5:00', '2009/10/14 6:00', '2009/10/14 7:00', '2009/10/14 8:00', '2009/10/14 9:00', '2009/10/14 10:00', '2009/10/14 11:00', '2009/10/14 12:00', '2009/10/14 13:00', '2009/10/14 14:00', '2009/10/14 15:00', '2009/10/14 16:00', '2009/10/14 17:00', '2009/10/14 18:00', '2009/10/14 19:00', '2009/10/14 20:00', '2009/10/14 21:00', '2009/10/14 22:00', '2009/10/14 23:00', '2009/10/15 0:00', '2009/10/15 1:00', '2009/10/15 2:00', '2009/10/15 3:00', '2009/10/15 4:00', '2009/10/15 5:00', '2009/10/15 6:00', '2009/10/15 7:00', '2009/10/15 8:00', '2009/10/15 9:00', '2009/10/15 10:00', '2009/10/15 11:00', '2009/10/15 12:00', '2009/10/15 13:00', '2009/10/15 14:00', '2009/10/15 15:00', '2009/10/15 16:00', '2009/10/15 17:00', '2009/10/15 18:00', '2009/10/15 19:00', '2009/10/15 20:00', '2009/10/15 21:00', '2009/10/15 22:00', '2009/10/15 23:00', '2009/10/16 0:00', '2009/10/16 1:00', '2009/10/16 2:00', '2009/10/16 3:00', '2009/10/16 4:00', '2009/10/16 5:00', '2009/10/16 6:00', '2009/10/16 7:00', '2009/10/16 8:00', '2009/10/16 9:00', '2009/10/16 10:00', '2009/10/16 11:00', '2009/10/16 12:00', '2009/10/16 13:00', '2009/10/16 14:00', '2009/10/16 15:00', '2009/10/16 16:00', '2009/10/16 17:00', '2009/10/16 18:00', '2009/10/16 19:00', '2009/10/16 20:00', '2009/10/16 21:00', '2009/10/16 22:00', '2009/10/16 23:00', '2009/10/17 0:00', '2009/10/17 1:00', '2009/10/17 2:00', '2009/10/17 3:00', '2009/10/17 4:00', '2009/10/17 5:00', '2009/10/17 6:00', '2009/10/17 7:00', '2009/10/17 8:00', '2009/10/17 9:00', '2009/10/17 10:00', '2009/10/17 11:00', '2009/10/17 12:00', '2009/10/17 13:00', '2009/10/17 14:00', '2009/10/17 15:00', '2009/10/17 16:00', '2009/10/17 17:00', '2009/10/17 18:00', '2009/10/17 19:00', '2009/10/17 20:00', '2009/10/17 21:00', '2009/10/17 22:00', '2009/10/17 23:00', '2009/10/18 0:00', '2009/10/18 1:00', '2009/10/18 2:00', '2009/10/18 3:00', '2009/10/18 4:00', '2009/10/18 5:00', '2009/10/18 6:00', '2009/10/18 7:00', '2009/10/18 8:00'            ].map(function (str) {                return str.replace(' ', '\n');            })        }    ],    yAxis: [        {            name: '流量(m^3/s)',            type: 'value',            max: 500        },        {            name: '降雨量(mm)',            nameLocation: 'start',            max: 5,            type: 'value',            inverse: true        }    ],    series: [        {            name: '流量',            type: 'line',            animation: false,            areaStyle: {},            lineStyle: {                width: 1            },            markArea: {                silent: true,                data: [[{                    xAxis: '2009/9/12\n7:00'                }, {                    xAxis: '2009/9/22\n7:00'                }]]            },            data: [                0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.87,0.88,0.9,0.93,0.96,0.99,1.03,1.06,1.1,1.14,1.17,1.2,1.23,1.26,1.29,1.33,1.36,1.4,1.43,1.45,1.48,1.49,1.51,1.51,1.5,1.49,1.47,1.44,1.41,1.37,1.34,1.3,1.27,1.24,1.22,1.2,1.19,1.18,1.16,1.15,1.14,1.13,1.12,1.11,1.11,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.09,1.09,1.08,1.07,1.06,1.05,1.04,1.03,1.03,1.02,1.01,1.01,1,0.99,0.98,0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.85,0.84,0.83,0.82,0.81,0.8,0.8,0.79,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.77,0.75,0.73,0.71,0.68,0.65,0.63,0.61,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.57,0.57,0.57,0.56,0.55,0.55,0.54,0.54,0.53,0.52,0.52,0.51,0.51,0.5,0.5,0.49,0.48,0.48,0.47,0.47,0.47,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.52,0.67,0.9,1.19,1.52,1.87,2.22,2.55,2.84,3.07,3.22,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.24,3.13,2.97,2.77,2.54,2.3,2.05,1.82,1.62,1.46,1.35,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.3,1.26,1.21,1.14,1.06,0.97,0.89,0.81,0.74,0.69,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.63,0.63,0.62,0.62,0.61,0.6,0.59,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.59,0.61,0.63,0.65,0.68,0.71,0.73,0.75,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.77,0.75,0.73,0.71,0.68,0.65,0.63,0.61,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.59,0.59,0.6,0.61,0.62,0.62,0.63,0.63,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.66,0.68,0.69,0.71,0.73,0.74,0.76,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.79,0.81,0.82,0.84,0.86,0.88,0.9,0.92,0.93,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.85,0.84,0.82,0.8,0.78,0.76,0.75,0.73,0.72,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.72,0.73,0.74,0.76,0.78,0.79,0.82,0.84,0.86,0.89,0.91,0.94,0.97,1,1.02,1.05,1.08,1.11,1.14,1.17,1.19,1.22,1.25,1.27,1.29,1.31,1.33,1.35,1.36,1.38,1.39,1.39,1.4,1.4,1.4,1.39,1.37,1.35,1.32,1.29,1.26,1.22,1.18,1.14,1.1,1.05,1.01,0.97,0.93,0.89,0.85,0.82,0.78,0.76,0.74,0.72,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.72,0.73,0.74,0.75,0.77,0.78,0.8,0.82,0.84,0.87,0.89,0.92,0.94,0.97,0.99,1.02,1.05,1.08,1.1,1.13,1.16,1.18,1.21,1.23,1.26,1.28,1.3,1.32,1.34,1.35,1.37,1.38,1.39,1.4,1.41,1.41,1.42,1.42,1.43,1.43,1.43,1.44,1.44,1.44,1.44,1.45,1.45,1.45,1.46,1.46,1.46,1.47,1.47,1.48,1.48,1.49,1.5,1.51,1.54,1.62,1.73,1.88,2.05,2.24,2.45,2.67,2.89,3.11,3.31,3.51,3.69,3.86,4.03,4.18,4.33,4.48,4.62,4.76,4.89,5.02,5.16,5.29,5.43,5.57,5.71,5.86,6.02,6.18,6.36,6.54,6.73,6.93,7.15,7.38,7.62,7.88,8.16,8.46,8.77,9.11,9.46,9.84,10.24,10.67,11.12,11.6,12.3,13.66,16,38.43,82.21,146.6,218.7,226,225.23,223.08,219.78,212,199.82,184.6,168,151.65,137.21,126.31,119.94,115.52,112.06,108.92,105.44,101,94.56,86.36,77.67,69.76,63.9,60.38,57.41,54.84,52.57,50.56,48.71,46.97,45.25,43.48,41.6,39.5,37.19,34.81,32.46,30.27,28.36,26.85,25.86,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.27,24.65,23.7,22.52,21.17,19.75,18.33,16.98,15.8,14.85,14.23,14,14.02,14.08,14.17,14.29,14.44,14.61,14.8,15.01,15.23,15.47,15.71,15.95,16.19,16.43,16.67,16.89,17.1,17.29,17.46,17.61,17.73,17.82,17.88,17.9,17.63,16.88,15.75,14.33,12.71,10.98,9.23,7.56,6.05,4.81,3.92,3.47,3.28,3.1,2.93,2.76,2.61,2.46,2.32,2.19,2.07,1.96,1.85,1.75,1.66,1.58,1.51,1.44,1.39,1.34,1.29,1.26,1.23,1.22,1.2,1.2,1.2,1.2,1.2,1.2,1.21,1.21,1.21,1.21,1.22,1.22,1.22,1.23,1.23,1.23,1.24,1.24,1.25,1.25,1.25,1.26,1.26,1.27,1.27,1.27,1.28,1.28,1.28,1.29,1.29,1.29,1.29,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.29,1.29,1.29,1.29,1.28,1.28,1.28,1.27,1.27,1.26,1.25,1.25,1.24,1.23,1.23,1.22,1.21,1.2,1.16,1.06,0.95,0.83,0.74,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.69,0.69,0.69,0.69,0.69,0.69,0.69,0.69,0.68,0.68,0.68,0.68,0.68,0.68,0.67,0.67,0.67,0.67,0.67,0.67,0.67,0.66,0.66,0.66,0.66,0.66,0.66,0.66,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.66,0.68,0.69,0.71,0.73,0.74,0.76,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.8,0.86,0.95,1.08,1.25,1.46,1.7,1.97,2.28,2.63,3.01,3.42,3.87,4.35,4.86,5.4,5.98,6.59,7.92,10.49,14.04,18.31,23.04,27.98,32.87,37.45,41.46,44.64,46.74,47.5,46.86,45.16,42.77,40.04,37.33,35,32.74,30.21,27.7,25.5,23.9,23.2,23.06,22.94,22.84,22.77,22.72,22.7,22.8,23.23,23.95,24.91,26.04,27.3,28.76,30.7,33.39,37.12,42.15,48.77,65.22,252.1,257,237.32,221.19,212,208.67,206.89,205.2,202.15,189.82,172,165.3,160.49,156.8,153.44,149.62,144.6,138.27,131,123.11,114.9,106.69,98.79,91.5,85.13,80,75.53,71.03,66.65,62.54,58.85,55.73,53.31,51.75,51.2,56.53,68.25,80,91.01,102.03,109,112.37,115.29,117.68,119.48,120.61,121,119.45,115.57,110.52,105.47,101.58,100,99.97,99.94,99.92,99.9,99.88,99.86,99.85,99.84,99.83,99.82,99.81,99.81,99.8,99.8,99.8,122.15,163.65,186,182.96,175.15,164.56,153.18,143,136,131.37,126.98,122.81,118.85,115.09,111.52,108.13,104.9,101.83,98.9,96.11,93.44,90.87,88.41,86.04,83.74,81.51,79.33,77.2,75.1,73.02,70.95,68.88,66.8,64.87,63.14,61.4,59.53,57.67,56,54.6,53.36,52.2,51.05,49.85,48.5,46.87,44.92,42.74,40.42,38.04,35.69,33.46,31.44,29.72,28.38,27.51,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.14,26.97,26.7,26.35,25.95,25.49,25.02,24.53,24.04,23.58,23.16,22.8,22.46,22.11,21.75,21.39,21.03,20.69,20.36,20.05,19.78,19.54,19.35,19.2,19.09,19,18.92,18.85,18.79,18.74,18.68,18.62,18.56,18.49,18.4,18.3,18.17,18.02,17.83,17.63,17.41,17.18,16.93,16.68,16.43,16.18,15.93,15.7,15.47,15.22,14.97,14.71,14.45,14.18,13.93,13.68,13.44,13.21,13,12.8,12.62,12.46,12.31,12.16,12.03,11.89,11.76,11.62,11.48,11.33,11.17,11,10.81,10.59,10.36,10.12,9.86,9.61,9.36,9.12,8.89,8.68,8.5,8.35,8.21,8.08,7.94,7.81,7.68,7.56,7.46,7.36,7.29,7.23,7.19,7.18,7.51,8.42,9.81,11.58,13.63,15.86,18.16,20.44,22.58,24.49,26.06,27.2,28.08,28.95,29.81,30.65,31.48,32.28,33.07,33.82,34.55,35.25,35.92,36.56,37.15,37.71,38.23,38.7,39.13,39.5,39.83,40.1,40.31,40.47,40.57,40.6,40.49,40.16,39.64,38.94,38.09,37.1,36,34.79,33.51,32.17,30.79,29.39,27.99,26.6,25.25,23.96,22.75,21.63,20.63,19.76,19.04,18.49,18.14,18,17.97,17.95,17.94,17.92,17.91,17.9,17.89,17.88,17.87,17.85,17.83,17.8,17.7,17.46,17.13,16.7,16.21,15.68,15.13,14.57,14.04,13.56,13.14,12.8,12.52,12.27,12.02,11.79,11.57,11.37,11.16,10.97,10.78,10.59,10.39,10.2,10.01,9.81,9.63,9.44,9.26,9.08,8.9,8.73,8.56,8.39,8.22,8.06,7.9,7.73,7.57,7.41,7.25,7.09,6.94,6.79,6.65,6.52,6.4,6.28,6.17,6.08,5.98,5.9,5.81,5.73,5.65,5.57,5.49,5.41,5.32,5.23,5.14,5.04,4.94,4.84,4.74,4.63,4.53,4.43,4.33,4.23,4.13,4.03,3.93,3.81,3.69,3.57,3.45,3.33,3.22,3.12,3.04,2.98,2.93,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.9,2.86,2.8,2.71,2.62,2.52,2.42,2.33,2.24,2.18,2.14,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.1,2.06,2,1.91,1.82,1.71,1.61,1.5,1.4,1.32,1.25,1.2,1.16,1.13,1.1,1.06,1.03,1,0.97,0.93,0.9,0.87,0.85,0.82,0.79,0.77,0.74,0.72,0.69,0.67,0.65,0.63,0.61,0.59,0.58,0.56,0.54,0.53,0.52,0.51,0.5,0.49,0.48,0.48,0.47,0.47,0.46,0.46,0.47,0.48,0.5,0.53,0.56,0.59,0.62,0.64,0.67,0.69,0.7,0.71,0.71,0.71,0.71,0.7,0.7,0.7,0.69,0.69,0.69,0.68,0.68,0.67,0.67,0.67,0.66,0.66,0.65,0.65,0.65,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.65,0.65,0.66,0.66,0.67,0.68,0.69,0.69,0.7,0.71,0.73,0.74,0.75,0.76,0.78,0.8,0.81,0.83,0.85,0.87,0.89,0.92,0.94,0.97,0.99,1.02,1.05,1.08,1.11,1.15,1.18,1.32,1.66,2.21,2.97,3.94,5.11,6.5,8.1,9.9,11.92,14.15,16.6,22.3,22.8,24.48,30.38,35.74,42.4,57.14,94.04,112.9,123.4,130.4,130,119.4,120.7,116.8,118.1,119.4,124.8,143.5,204,294,319.2,328.4,365,350.8,347.6,347.6,325,331.6,319.2,308,308,308,308,296.8,300,281,278.4,270.6,271,253.6,233.5,219.2,207.8,205.9,204,189.6,178.8,173.4,160,154.4,146,145,140.5,130.4,126.2,116.8,112.9,106.5,101.6,98.51,82.67,67.3,80.05,76.12,72.3,71.02,69.78,67.3,67.3,68.54,57.6,71.02,66.06,59.12,57.14,55.16,55.16,52.19,52.19,51.2,48.56,44.16,43,45.92,49.44,44.16,36.48,35.74,35,32.36,37.22,32.36,32.36,32.36,33.68,32.36,31.7,35.74,29.72,32.36,30.38,29.72,28.4,28.4,28.4,27.28,25.6,25.04,23.92,22.3,21.8,21.8,21.8,22.8,21.8,25.6,22.8,22.8,17.8,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,15.02,14,14.03,14.11,14.25,14.45,14.72,15.06,15.46,15.95,16.51,17.15,17.87,18.69,19.59,20.59,21.69,22.88,24.18,25.59,27.1,28.73,30.48,32.34,34.33,36.44,38.69,41.06,43.57,46.22,49.01,51.95,55.04,58.27,61.66,65.21,68.92,72.8,88.09,104.9,105.7,110.3,111.6,110.3,106.5,105.7,103.3,100,97.02,98.8,91.07,83.98,88.09,81.36,78.74,77.43,77.43,73.5,74.81,72.63,68.58,66.4,68.54,69.78,67.3,64.82,61.1,59.12,56.15,53.18,50.32,49.44,44.16,36.5,42.4,37.96,37.22,33.68,36.48,35.74,35,35,37.22,37.22,39.44,32.6,34.54,36.48,35.74,34.34,33.68,33.02,31.04,29.72,29.72,29.72,26.16,25.6,29.72,18.3,22.3,21.3,21.8,21.8,20.3,20.8,25.04,25.04,25.6,25.6,25.04,25.6,25.04,25.6,23.92,25.04,21.3,21.8,22.3,21.8,20.8,16.1,20.3,18.3,13.22,19.3,19.3,18.3,14.4,13.86,13.36,12.9,12.48,12.1,11.75,11.43,11.15,10.9,10.67,10.48,10.31,10.16,10.04,9.93,9.85,9.78,9.73,9.69,9.67,9.65,9.65,12.08,8.67,11.7,11.38,10.65,9.84,9.32,9.07,8.85,8.66,8.49,8.35,8.22,8.1,7.98,7.86,7.74,7.61,7.47,7.31,7.14,6.96,6.78,6.58,6.39,6.19,5.99,5.78,5.58,5.39,5.2,5.01,4.83,4.67,4.51,4.37,4.24,4.12,4.02,3.95,3.89,3.85,3.84,4.41,5.77,7.39,8.75,9.32,9.18,9,8.94,8.88,8.83,8.78,8.73,8.68,8.64,8.6,8.56,8.53,8.5,8.47,8.45,8.42,8.4,8.39,8.37,8.36,8.35,8.35,8.34,8.34,8.67,9.65,9.62,9.53,9.4,9.21,8.98,8.7,8.4,8.06,7.69,7.3,6.89,6.47,6.03,5.59,5.14,4.7,4.26,3.83,3.42,3.02,2.65,2.3,1.98,1.7,1.45,1.25,1.09,0.99,0.94,0.92,0.91,0.89,0.87,0.85,0.84,0.82,0.81,0.79,0.78,0.77,0.75,0.74,0.73,0.72,0.71,0.7,0.69,0.68,0.67,0.66,0.65,0.64,0.64,0.63,0.63,0.62,0.62,0.61,0.61,0.61,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.61,0.61,0.61,0.61,0.61,0.61,0.62,0.62,0.62,0.62,0.63,0.63,0.63,0.63,0.63,0.64,0.64,0.64,0.64,0.64,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.64,0.63,0.62,0.6,0.59,0.57,0.55,0.54,0.53,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.51,0.51,0.51,0.5,0.5,0.49,0.48,0.47,0.47,0.46,0.45,0.45,0.44,0.43,0.42,0.42,0.41,0.41,0.41,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.41,0.42,0.43,0.44,0.46,0.48,0.5,0.53,0.55,0.58,0.61,0.64,0.67,0.7,0.73,0.77,0.8,0.83,0.87,0.9,0.93,0.96,0.99,1.02,1.05,1.08,1.1,1.12,1.14,1.16,1.17,1.18,1.19,1.2,1.2,1.2,1.19,1.17,1.15,1.12,1.09,1.06,1.02,0.98,0.94,0.9,0.86,0.82,0.78,0.74,0.7,0.66,0.63,0.6,0.57,0.55,0.53,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.51,0.51,0.5,0.5,0.49,0.49,0.48,0.47,0.47,0.47,0.46,0.46,0.45,0.45,0.45,0.44,0.44,0.44,0.43,0.43,0.43,0.42,0.42,0.42,0.41,0.41,0.41,0.41,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.43,0.43,0.43,0.43,0.43,0.43,0.44,0.44,0.44,0.44,0.44,0.44,0.45,0.45,0.45            ]        },        {            name: '降雨量',            type: 'line',            yAxisIndex: 1,            animation: false,            areaStyle: {},            lineStyle: {                width: 1            },            markArea: {                silent: true,                data: [                    [{                        xAxis: '2009/9/10\n7:00'                    }, {                        xAxis: '2009/9/20\n7:00'                    }]                ]            },            data: [                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.017,0.017,0.017,0.017,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.021,0.026,0.03,0.036,0.036,0.195,0.221,0.019,0.013,0.017,0.03,0.03,0.03,0.046,0.045,0.038,0.084,0.045,0.045,0.037,0.034,0.035,0.036,0.044,0.052,0.048,0.109,0.033,0.029,0.04,0.042,0.042,0.042,0.073,0.076,0.062,0.066,0.066,0.075,0.096,0.128,0.121,0.128,0.14,0.226,0.143,0.097,0.018,0,0,0,0,0,0.018,0.047,0.054,0.054,0.054,0.036,0.185,0.009,0.038,0.061,0.077,0.091,0.126,0.69,0.182,0.349,0.231,0.146,0.128,0.167,0.1,0.075,0.071,0.071,0.117,0.01,0.002,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.026,0.038,0.038,0.038,0.076,0.086,0.109,0.213,0.276,0.288,0.297,0.642,1.799,1.236,2.138,0.921,0.497,0.685,0.828,0.41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.018,0.024,0.024,0.024,0.024,0.006,0.003,0.046,0.046,0.046,0.046,0.043,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.204,0.303,1.028,1.328,1.524,1.41,1.362,1.292,1.191,0.529,0.501,0.944,1.81,2.899,0.859,0.126,0.087,0.047,0,0,0,0,0.011,0.028,0.028,0.028,0.028,0.017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.099,0.159,0.297,0.309,0.309,0.614,0.818,1.436,1.195,0.553,0.542,0.955,0.898,0.466,0.386,0.556,0.388,0.221,0.192,0.192,0.187,0.166,0.18,0.302,0.158,0.009,0.009,0.009,0.009,0.009,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.004,0.032,0.032,0.032,0.032,0.082,0.149,0.204,0.247,0.262,0.49,0.51,0.533,0.746,0.847,2.393,1.188,1.114,0.475,0.043,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,0.017,0.021,0.042,0.079,0.111,0.126,0.122,0.133,0.846,0.102,0.077,0.067,0.056,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0.011,0.017,0.017,0.017,0.017,0.006,0,0,0,0,0,0.01,0.03,0.054,0.067,0.07,0.25,0.251,0.494,0.065,0.054,0.054,0.064,0.084,0.077,0.101,0.132,0.248,0.069,0.117,0.115,0.087,0.326,0.036,0.009,0.009,0.009,0.009,0.009,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.02,0.039,0.04,0.04,0.04,0.229,0.079,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.023,0.069,0.082,0.082,0.082,0.503,0.774,0.038,0.012,0.012,0.012,0.016,0.02,0.028,0.051,0.06,0.064,0.19,0.15,0.164,0.139,0.13,0.085,0.031,0.023,0.022,0.007,0.005,0.005,0.001,0,0.02,0.048,0.048,0.053,0.056,0.036,0.008,0.008,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.013,0.017,0.036,0.068,0.095,0.233,0.272,0.377,0.722,1.494,3.756,0.954,0.439,0.442,0.462,0.373,0.249,0.214,0.1,0.044,0.037,0.023,0.002,0,0,0,0,0,0,0.02,0.024,0.024,0.024,0.024,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.008,0.017,0.017,0.045,0.186,0.308,0.241,0.241,0.893,4.067,4.494,5.015,3.494,2.057,1.411,0.718,0.407,0.313,0.339,1.537,1.105,0.218,0.136,0.03,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.037,0.448,1.2,1.309,1.309,1.425,1.223,0.471,0.767,0.423,0.273,0.412,0.646,0.481,0.239,0.131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.044,0.15,0.223,0.388,0.513,0.883,2.828,4.786,5.959,4.95,6.434,6.319,3.35,2.806,4.204,1.395,1.015,1.015,0.836,0.74,0.72,0.615,0.477,0.192,0.046,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.008,0.005,0.005,0.005,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.012,0.012,0.012,0.012,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.012,0.028,0.028,0.028,0.138,0.092,0.082,0.082,0.096,0.719,0.155,0.042,0.047,0.129,0.021,0.021,0.014,0.009,0.029,0.067,0.088,0.095,0.095,0.138,0.091,0.032,0.025,0.025,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.045,0.228,0.297,0.325,0.339,0.581,1.244,0.796,0.517,0.227,0.053,0.006,0,0,0,0,0,0,0,0,0,0.003,0.005,0.005,0.005,0.005,0.081,0.129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.014,0.041,0.041,0.041,0.041,0.027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.009,0.017,0.017,0.017,0.017,0.355,0.174,0.009,0.009,0.012,0.136,0.208,0.208,0.208,0.215,7.359,1.858,0.458,0.053,0.053,0.047,0.045,0.045,0.059,0.136,0.188,0.206,0.21,0.588,1.517,6.02,4.688,4.42,0.624,0.326,0.359,0.553,0.899,0.94,2.95,9.415,5.752,1.092,0.096,0.035,0.026,0.018,0.015,0.011,0.011,0.011,0,0,0,0,0,0,0,0,0,0,0,0.056,0.27,0.314,0.351,0.354,0.609,0.796,1.857,0.848,0.538,0.214,0.178,0.178,0.201,0.231,0.227,0.272,0.397,0.45,1.014,2.917,1.675,0.081,0.059,0.059,0.148,0.075,0.075,0.078,0.236,0.784,0.784,0.784,0.784,0.741,0.115,0.058,0.058,0.058,0.029,0.015,0.015,0.015,0.015,0.012,0.008,0.604,0.985,1.305,2.273,2.528,2.336,2.496,2.281,1.397,1.713,3.259,1.167,0.745,0.548,1.058,0.684,0.728,0.392,0.179,0.283,0.283,0.46,0.08,0.099,0.099,0.099,0.1,0.143,0.137,0.238,0.317,0.262,0.225,0.792,0.426,0.332,0.261,0.11,0.093,0.102,0.171,0.292,0.504,0.605,1.745,2.485,1.964,0.33,0.171,0.259,0.242,0.215,0.366,0.354,0.205,0.203,0.262,0.153,0.13,0.137,0.362,0.691,0.295,0.433,0.154,0.056,0.053,0.053,0.053,0.051,0.047,0.065,0.078,0.091,0.206,0.813,0.102,0.151,0.05,0.024,0.004,0.001,0,0,0,0.021,0.021,0.021,0.021,0.021,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.018,0.021,0.021,0.021,0.021,0.003,0,0,0,0,0,0,0,0,0,0.024,0.173,0.261,0.267,0.267,0.534,1.354,1.772,0.72,0.218,0.018,0.018,0.028,0.036,0.032,0.194,0.082,0.035,0.286,0.027,0.038,0.038,0.027,0.021,0.014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.016,0.017,0.017,0.031,0.047,0.043,0.056,0.104,0.149,0.179,0.205,0.328,0.998,0.522,1.851,3.727,3.273,2.204,1.169,1.006,1.179,0.74,0.741,1.065,0.925,0.671,0.497,0.431,0.327,0.277,0.126,0.581,0.207,0.359,2.485,0.038,0.036,0.003,0.003,0.003,0.003,0.004,0.098,0.023,0.021,0.021,0.022,0.041,0.041,0.043,0.045,0.043,0.014,0.014,0.014,0.014,0.014,0.014,0.014,0.031,0.046,0.063,0.119,0.107,0.092,0.085,0.065,0.06,0.054,0.042,0.039,0.046,0.044,0.028,0.028,0.02,0.013,0.013,0.013,0.013,0.016,0.032,0.031,0.031,0.031,0.028,0.011,0.011,0.011,0.011,0.011,0.023,0.024,0.024,0.024,0.019,0.015,0.015,0.015,0.015,0.015,0.015,0.013,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.011,0.017,0.024,0.026,0.061,0.172,0.206,0.213,0.267,0.511,0.668,0.157,0.017,0.017,0.017,0.046,0.054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.017,0.017,0.017,0.017,0.016,0,0,0,0,0,0,0,0,0,0.01,0.017,0.017,0.017,0.017,0.012,0.017,0.017,0.017,0.017,0.012,0,0,0,0,0,0.003,0.031,0.066,0.093,0.112,0.122,0.202,0.068,0.041,0.022,0.011,0,0,0,0,0,0,0,0,0,0,0,0.002,0.005,0.012,0.021,0.021,0.019,0.033,0.03,0.026,0.026,0.034,0.095,0.024,0.024,0.024,0.023,0.019,0.018,0.018,0.018,0.011,0.03,0.045,0.044,0.044,0.044,0.022,0.009,0.024,0.033,0.033,0.033,0.024,0.009,0,0,0,0,0,0,0.003,0.017,0.017,0.017,0.017,0.014,0,0,0,0,0,0.032,0.032,0.032,0.032,0.032,0.005,0.008,0.009,0.014,0.014,0.009,0.005,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.007,0.009,0.009,0.009,0.009,0.043,0.063,0.084,0.098,0.101,0.213,0.334,0.383,0.43,0.448,0.511,0.801,0.835,1.642,1.614,1.496,1.496,1.476,1.068,0.481,0.22,0.119,0.099,0.07,0.072,0.063,0.076,0.14,0.205,0.28,0.297,0.3,0.479,0.877,1.098,1.611,1.629,1.686,1.686,1.631,1.528,1.862,1.703,1.531,2.196,0.395,0.416,0.453,0.728,0.917,0.986,1.17,2.171,3.011,2.909,3.301,1.377,0.778,0.799,0.947,1.039,0.879,0.76,1.372,1.674,1.674,1.68,1.823,1.793,1.162,0.783,0.216,0.152,0.152,0.152,0.049,0,0,0,0.117,0.127,0.127,0.127,0.127,0.127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.003,0.005,0.005,0.005,0.005,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.309,0.364,0.364,0.364,0.364,0.063,0.01,0.01,0.01,0.012,0.015,0.015,0.11,0.55,0.824,0.825,0.829,1.39,1.429,1.342,1.43,1.636,1.717,2.135,2.203,3.191,3.022,1.589,0.86,0.807,0.645,0.595,0.588,0.557,0.552,1.271,0.708,0.677,0.629,0.714,0.203,0.133,0.061,0.062,0.018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.072,0.29,0.438,0.53,0.557,0.873,1.039,1.04,0.208,0.049,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.039,0.039,0.039,0.039,0.098,0.008,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.056,0.062,0.065,0.065,0.065,0.047,0.216,0.256,0.315,0.4,0.502,0.449,0.47,0.571,0.814,1.153,0.774,0.202,0.086,0.075,0.071,0.032,0.019,0.003,0.004,0.004,0.004,0.004,0.004,0.004,0.007,0.072,0.153,0.256,0.306,0.404,0.698,0.733,0.823,0.715,0.563,0.404,0.293,0.217,0.213,0.202,0.202,0.294,0.704,0.797,1.359,1.101,0.72,0.514,0.539,0.434,0.389,0.387,0.386,0.375,0.369,0.319,0.239,0.183,0.136,0.062,0.052,0.096,0.119,0.119,0.114,0.127,0.132,0.139,0.169,0.191,0.278,0.254,0.214,0.237,0.221,0.143,0.129,0.125,0.109,0.1,0.087,0.06,0.038,0.029,0.029,0.028,0.048,0.053,0.053,0.111,0.125,0.102,0.097,0.097,0.039,0.02,0.02,0.02,0.014,0.004,0.031,0.043,0.047,0.052,0.08,0.144,0.182,0.176,0.171,0.149,0.112,0.025,0,0,0,0,0,0,0,0.016,0.031,0.031,0.031,0.031,0.015,0,0,0,0,0,0.005,0.005,0.005,0.005,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.005,0.005,0.005,0.005,0.001,0,0,0            ]        }    ]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=line-easing">LineEasing Visualizing</a></li></ul><script>var easingFuncs = {    linear: function (k) {        return k;    },    quadraticIn: function (k) {        return k * k;    },    quadraticOut: function (k) {        return k * (2 - k);    },    quadraticInOut: function (k) {        if ((k *= 2) < 1) { return 0.5 * k * k; }        return -0.5 * (--k * (k - 2) - 1);    },    cubicIn: function (k) {        return k * k * k;    },    cubicOut: function (k) {        return --k * k * k + 1;    },    cubicInOut: function (k) {        if ((k *= 2) < 1) { return 0.5 * k * k * k; }        return 0.5 * ((k -= 2) * k * k + 2);    },    quarticIn: function (k) {        return k * k * k * k;    },    quarticOut: function (k) {        return 1 - (--k * k * k * k);    },    quarticInOut: function (k) {        if ((k *= 2) < 1) { return 0.5 * k * k * k * k; }        return -0.5 * ((k -= 2) * k * k * k - 2);    },    quinticIn: function (k) {        return k * k * k * k * k;    },    quinticOut: function (k) {        return --k * k * k * k * k + 1;    },    quinticInOut: function (k) {        if ((k *= 2) < 1) { return 0.5 * k * k * k * k * k; }        return 0.5 * ((k -= 2) * k * k * k * k + 2);    },    sinusoidalIn: function (k) {        return 1 - Math.cos(k * Math.PI / 2);    },    sinusoidalOut: function (k) {        return Math.sin(k * Math.PI / 2);    },    sinusoidalInOut: function (k) {        return 0.5 * (1 - Math.cos(Math.PI * k));    },    exponentialIn: function (k) {        return k === 0 ? 0 : Math.pow(1024, k - 1);    },    exponentialOut: function (k) {        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);    },    exponentialInOut: function (k) {        if (k === 0) {            return 0;        }        if (k === 1) {            return 1;        }        if ((k *= 2) < 1) {            return 0.5 * Math.pow(1024, k - 1);        }        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);    },    circularIn: function (k) {        return 1 - Math.sqrt(1 - k * k);    },    circularOut: function (k) {        return Math.sqrt(1 - (--k * k));    },    circularInOut: function (k) {        if ((k *= 2) < 1) { return -0.5 * (Math.sqrt(1 - k * k) - 1); }        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);    },    elasticIn: function (k) {        var s;        var a = 0.1;        var p = 0.4;        if (k === 0) { return 0; }        if (k === 1) { return 1; }        if (!a || a < 1) { a = 1; s = p / 4; }        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }        return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));    },    elasticOut: function (k) {        var s;        var a = 0.1;        var p = 0.4;        if (k === 0) { return 0; }        if (k === 1) { return 1; }        if (!a || a < 1) { a = 1; s = p / 4; }        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }        return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);    },    elasticInOut: function (k) {        var s;        var a = 0.1;        var p = 0.4;        if (k === 0) { return 0; }        if (k === 1) { return 1; }        if (!a || a < 1) { a = 1; s = p / 4; }        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }        if ((k *= 2) < 1) {            return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));        }        return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;    },    backIn: function (k) {        var s = 1.70158;        return k * k * ((s + 1) * k - s);    },    backOut: function (k) {        var s = 1.70158;        return --k * k * ((s + 1) * k + s) + 1;    },    backInOut: function (k) {        var s = 1.70158 * 1.525;        if ((k *= 2) < 1) { return 0.5 * (k * k * ((s + 1) * k - s)); }        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);    },    bounceIn: function (k) {        return 1 - easingFuncs.bounceOut(1 - k);    },    bounceOut: function (k) {        if (k < (1 / 2.75)) { return 7.5625 * k * k; }        else if (k < (2 / 2.75)) { return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; }        else if (k < (2.5 / 2.75)) { return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; }        else { return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; }    },    bounceInOut: function (k) {        if (k < 0.5) { return easingFuncs.bounceIn(k * 2) * 0.5; }        return easingFuncs.bounceOut(k * 2 - 1) * 0.5 + 0.5;    }};var N_POINT = 30;var grids = [];var xAxes = [];var yAxes = [];var series = [];var titles = [];var count = 0;echarts.util.each(easingFuncs, function (easingFunc, name) {    var data = [];    for (var i = 0; i <= N_POINT; i++) {        var x = i / N_POINT;        var y = easingFunc(x);        data.push([x, y]);    }    grids.push({        show: true,        borderWidth: 0,        backgroundColor: '#fff',        shadowColor: 'rgba(0, 0, 0, 0.3)',        shadowBlur: 2    });    xAxes.push({        type: 'value',        show: false,        min: 0,        max: 1,        gridIndex: count    });    yAxes.push({        type: 'value',        show: false,        min: -0.4,        max: 1.4,        gridIndex: count    });    series.push({        name: name,        type: 'line',        xAxisIndex: count,        yAxisIndex: count,        data: data,        showSymbol: false,        animationEasing: name,        animationDuration: 1000    });    titles.push({        textAlign: 'center',        text: name,        textStyle: {            fontSize: 12,            fontWeight: 'normal'        }    });    count++;});var rowNumber = Math.ceil(Math.sqrt(count));echarts.util.each(grids, function (grid, idx) {    grid.left = ((idx % rowNumber) / rowNumber * 100 + 0.5) + '%';    grid.top = (Math.floor(idx / rowNumber) / rowNumber * 100 + 0.5) + '%';    grid.width = (1 / rowNumber * 100 - 1) + '%';    grid.height = (1 / rowNumber * 100 - 1) + '%';    titles[idx].left = parseFloat(grid.left) + parseFloat(grid.width) / 2 + '%';    titles[idx].top = parseFloat(grid.top) + '%';});</script><div id="echarts4841" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts4841'));        // 指定图表的配置项和数据        var option = option = {    title: titles.concat([{        text: 'Different Easing Functions',        top: 'bottom',        left: 'center'    }]),    grid: grids,    xAxis: xAxes,    yAxis: yAxes,    series: series};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="柱状图bar">柱状图Bar</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=bar-animation-delay">柱状图动画延迟</a></li></ul><script>var xAxisData = [];var data01 = [];var data02 = [];for (var i = 0; i < 100; i++) {    xAxisData.push('类目' + i);    data01.push((Math.sin(i / 5) * (i / 5 -10) + i / 6) * 5);    data02.push((Math.cos(i / 5) * (i / 5 -10) + i / 6) * 5);}</script><div id="echarts8846" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts8846'));        // 指定图表的配置项和数据        var option = option = {    title: {        text: '柱状图动画延迟'    },    legend: {        data: ['bar01', 'bar02']    },    toolbox: {        // y: 'bottom',        feature: {            magicType: {                type: ['stack', 'tiled']            },            dataView: {},            saveAsImage: {                pixelRatio: 2            }        }    },    tooltip: {},    xAxis: {        data: xAxisData,        splitLine: {            show: false        }    },    yAxis: {    },    series: [{        name: 'bar01',        type: 'bar',        data: data01,        animationDelay: function (idx) {            return idx * 10 + 50;        }    }, {        name: 'bar02',        type: 'bar',        data: data02,        animationDelay: function (idx) {            return idx * 10 + 100;        }    }],    animationEasing: 'elasticOut',    animationDelayUpdate: function (idx) {        return idx * 5;    }};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=bar-brush">柱状图框选</a></li></ul><script>var xAxisData = [];var data1 = [];var data2 = [];var data3 = [];var data4 = [];for (var i = 0; i < 10; i++) {    xAxisData.push('Class' + i);    data1.push((Math.random() * 2).toFixed(2));    data2.push(-Math.random().toFixed(2));    data3.push((Math.random() * 5).toFixed(2));    data4.push((Math.random() + 0.3).toFixed(2));}var emphasisStyle = {    itemStyle: {        barBorderWidth: 1,        shadowBlur: 10,        shadowOffsetX: 0,        shadowOffsetY: 0,        shadowColor: 'rgba(0,0,0,0.5)'    }};myChart.on('brushSelected', renderBrushed);function renderBrushed(params) {    var brushed = [];    var brushComponent = params.batch[0];    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {        var rawIndices = brushComponent.selected[sIdx].dataIndex;        brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));    }        myChart.setOption({        title: {            backgroundColor: '#333',            text: 'SELECTED DATA INDICES: \n' + brushed.join('\n'),            bottom: 0,            right: 0,            width: 100,            textStyle: {                fontSize: 12,                color: '#fff'            }        }    });}</script><div id="echarts706" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts706'));        // 指定图表的配置项和数据        var option = option = {    backgroundColor: '#eee',    legend: {        data: ['bar', 'bar2', 'bar3', 'bar4'],        left: 10    },    brush: {        toolbox: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],        xAxisIndex: 0    },    toolbox: {        feature: {            magicType: {                type: ['stack', 'tiled']            },            dataView: {}        }    },    tooltip: {},    xAxis: {        data: xAxisData,        name: 'X Axis',        axisLine: {onZero: true},        splitLine: {show: false},        splitArea: {show: false}    },    yAxis: {        inverse: true,        splitArea: {show: false}    },    grid: {        left: 100    },    visualMap: {        type: 'continuous',        dimension: 1,        text: ['High', 'Low'],        inverse: true,        itemHeight: 200,        calculable: true,        min: -2,        max: 6,        top: 60,        left: 10,        inRange: {            colorLightness: [0.4, 0.8]        },        outOfRange: {            color: '#bbb'        },        controller: {            inRange: {                color: '#2f4554'            }        }    },    series: [        {            name: 'bar',            type: 'bar',            stack: 'one',            emphasis: emphasisStyle,            data: data1        },        {            name: 'bar2',            type: 'bar',            stack: 'one',            emphasis: emphasisStyle,            data: data2        },        {            name: 'bar3',            type: 'bar',            stack: 'two',            emphasis: emphasisStyle,            data: data3        },        {            name: 'bar4',            type: 'bar',            stack: 'two',            emphasis: emphasisStyle,            data: data4        }    ]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=bar-polar-stack-radial">极坐标系下的堆叠柱状图</a></li></ul><script></script><div id="echarts1763" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts1763'));        // 指定图表的配置项和数据        var option = option = {    angleAxis: {        type: 'category',        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']    },    radiusAxis: {    },    polar: {    },    series: [{        type: 'bar',        data: [1, 2, 3, 4, 3, 5, 1],        coordinateSystem: 'polar',        name: 'A',        stack: 'a'    }, {        type: 'bar',        data: [2, 4, 6, 1, 3, 2, 1],        coordinateSystem: 'polar',        name: 'B',        stack: 'a'    }, {        type: 'bar',        data: [1, 2, 3, 4, 1, 2, 5],        coordinateSystem: 'polar',        name: 'C',        stack: 'a'    }],    legend: {        show: true,        data: ['A', 'B', 'C']    }};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="饼图pie">饼图Pie</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=pie-pattern">Textureon Pie Chart</a></li></ul><script>var piePatternSrc = 'data:image/jpeg;base64,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';var bgPatternSrc = 'data:image/png;charset=utf-8;base64,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';var piePatternImg = new Image();piePatternImg.src = piePatternSrc;var bgPatternImg = new Image();bgPatternImg.src = bgPatternSrc;var itemStyle = {    normal: {        opacity: 0.7,        color: {            image: piePatternImg,            repeat: 'repeat'        },        borderWidth: 3,        borderColor: '#235894'    }};</script><div id="echarts6677" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts6677'));        // 指定图表的配置项和数据        var option = option = {    backgroundColor: {        image: bgPatternImg,        repeat: 'repeat'    },    title: {        text: '饼图纹理',        textStyle: {            color: '#235894'        }    },    tooltip: {},    series: [{        name: 'pie',        type: 'pie',        selectedMode: 'single',        selectedOffset: 30,        clockwise: true,        label: {            fontSize: 18,            color: '#235894'        },        labelLine: {            lineStyle: {                color: '#235894'            }        },        data: [            {value: 335, name: '直接访问'},            {value: 310, name: '邮件营销'},            {value: 234, name: '联盟广告'},            {value: 135, name: '视频广告'},            {value: 1548, name: '搜索引擎'}        ],        itemStyle: itemStyle    }]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="地理坐标地图geomap">地理坐标/地图GEO/Map</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=effectScatter-bmap">AirQuality - Baidu Map</a></li></ul><iframe src="https://pxxyyz.com/html-file/echarts/lines-bmap-bus.html" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><p>可进入<ahref="https://pxxyyz.com/html-file/echarts/lines-bmap-bus.html">页面查看</a></p><h3 id="k-线图candlestick">K 线图Candlestick</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=candlestick-brush">CandlestickBrush</a></li></ul><iframe src="https://pxxyyz.com/html-file/echarts/candlestick-brush.html" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><p>可进入<ahref="https://pxxyyz.com/html-file/echarts/candlestick-brush.html">页面查看</a></p><h3 id="雷达图radar">雷达图Radar</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=radar2">Proportionof Browsers</a></li></ul><div id="echarts9593" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts9593'));        // 指定图表的配置项和数据        var option = option = {    title: {        text: '浏览器占比变化',        subtext: '纯属虚构',        top: 10,        left: 10    },    tooltip: {        trigger: 'item',        backgroundColor: 'rgba(0,0,250,0.2)'    },    legend: {        type: 'scroll',        bottom: 10,        data: (function (){            var list = [];            for (var i = 1; i <=28; i++) {                list.push(i + 2000 + '');            }            return list;        })()    },    visualMap: {        top: 'middle',        right: 10,        color: ['red', 'yellow'],        calculable: true    },    radar: {        indicator: [            { text: 'IE8-', max: 400},            { text: 'IE9+', max: 400},            { text: 'Safari', max: 400},            { text: 'Firefox', max: 400},            { text: 'Chrome', max: 400}        ]    },    series: (function (){        var series = [];        for (var i = 1; i <= 28; i++) {            series.push({                name: '浏览器（数据纯属虚构）',                type: 'radar',                symbol: 'none',                lineStyle: {                    width: 1                },                emphasis: {                    areaStyle: {                        color: 'rgba(0,250,0,0.3)'                    }                },                data: [{                    value: [                        (40 - i) * 10,                        (38 - i) * 4 + 60,                        i * 5 + 10,                        i * 9,                        i * i /2                    ],                    name: i + 2000 + ''                }]            });        }        return series;    })()};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="关系图graph">关系图Graph</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=graph-webkit-dep">GraphWebkit Dep</a></li></ul><iframe src="https://pxxyyz.com/html-file/echarts/graph-webkit-dep.html" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><p>可进入<ahref="https://pxxyyz.com/html-file/echarts/graph-webkit-dep.html">页面查看</a></p><h3 id="树图tree">树图Tree</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=tree-legend">MultipleTrees</a></li></ul><script>var data = {    "name": "flare",    "children": [        {            "name": "data",            "children": [                {                     "name": "converters",                     "children": [                      {"name": "Converters", "value": 721},                      {"name": "DelimitedTextConverter", "value": 4294}                     ]                },                {                    "name": "DataUtil",                    "value": 3322                }            ]        },        {            "name": "display",            "children": [                {"name": "DirtySprite", "value": 8833},                {"name": "LineSprite", "value": 1732},                {"name": "RectSprite", "value": 3623}           ]        },        {            "name": "flex",            "children": [                {"name": "FlareVis", "value": 4116}            ]        },        {           "name": "query",           "children": [            {"name": "AggregateExpression", "value": 1616},            {"name": "And", "value": 1027},            {"name": "Arithmetic", "value": 3891},            {"name": "Average", "value": 891},            {"name": "BinaryExpression", "value": 2893},            {"name": "Comparison", "value": 5103},            {"name": "CompositeExpression", "value": 3677},            {"name": "Count", "value": 781},            {"name": "DateUtil", "value": 4141},            {"name": "Distinct", "value": 933},            {"name": "Expression", "value": 5130},            {"name": "ExpressionIterator", "value": 3617},            {"name": "Fn", "value": 3240},            {"name": "If", "value": 2732},            {"name": "IsA", "value": 2039},            {"name": "Literal", "value": 1214},            {"name": "Match", "value": 3748},            {"name": "Maximum", "value": 843},            {             "name": "methods",             "children": [              {"name": "add", "value": 593},              {"name": "and", "value": 330},              {"name": "average", "value": 287},              {"name": "count", "value": 277},              {"name": "distinct", "value": 292},              {"name": "div", "value": 595},              {"name": "eq", "value": 594},              {"name": "fn", "value": 460},              {"name": "gt", "value": 603},              {"name": "gte", "value": 625},              {"name": "iff", "value": 748},              {"name": "isa", "value": 461},              {"name": "lt", "value": 597},              {"name": "lte", "value": 619},              {"name": "max", "value": 283},              {"name": "min", "value": 283},              {"name": "mod", "value": 591},              {"name": "mul", "value": 603},              {"name": "neq", "value": 599},              {"name": "not", "value": 386},              {"name": "or", "value": 323},              {"name": "orderby", "value": 307},              {"name": "range", "value": 772},              {"name": "select", "value": 296},              {"name": "stddev", "value": 363},              {"name": "sub", "value": 600},              {"name": "sum", "value": 280},              {"name": "update", "value": 307},              {"name": "variance", "value": 335},              {"name": "where", "value": 299},              {"name": "xor", "value": 354},              {"name": "_", "value": 264}             ]            },            {"name": "Minimum", "value": 843},            {"name": "Not", "value": 1554},            {"name": "Or", "value": 970},            {"name": "Query", "value": 13896},            {"name": "Range", "value": 1594},            {"name": "StringUtil", "value": 4130},            {"name": "Sum", "value": 791},            {"name": "Variable", "value": 1124},            {"name": "Variance", "value": 1876},            {"name": "Xor", "value": 1101}           ]          },        {           "name": "scale",           "children": [            {"name": "IScaleMap", "value": 2105},            {"name": "LinearScale", "value": 1316},            {"name": "LogScale", "value": 3151},            {"name": "OrdinalScale", "value": 3770},            {"name": "QuantileScale", "value": 2435},            {"name": "QuantitativeScale", "value": 4839},            {"name": "RootScale", "value": 1756},            {"name": "Scale", "value": 4268},            {"name": "ScaleType", "value": 1821},            {"name": "TimeScale", "value": 5833}           ]        }    ]};var data2 = {    "name": "flare",    "children": [        {            "name": "flex",            "children": [                {"name": "FlareVis", "value": 4116}            ]        },        {            "name": "scale",            "children": [                {"name": "IScaleMap", "value": 2105},                {"name": "LinearScale", "value": 1316},                {"name": "LogScale", "value": 3151},                {"name": "OrdinalScale", "value": 3770},                {"name": "QuantileScale", "value": 2435},                {"name": "QuantitativeScale", "value": 4839},                {"name": "RootScale", "value": 1756},                {"name": "Scale", "value": 4268},                {"name": "ScaleType", "value": 1821},                {"name": "TimeScale", "value": 5833}           ]        },        {            "name": "display",            "children": [                {"name": "DirtySprite", "value": 8833}           ]        }    ]};</script><div id="echarts8021" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts8021'));        // 指定图表的配置项和数据        var option = option = {    tooltip: {        trigger: 'item',        triggerOn: 'mousemove'    },    legend: {        top: '2%',        left: '3%',        orient: 'vertical',        data: [{            name: 'tree1',            icon: 'rectangle'        },        {            name: 'tree2',            icon: 'rectangle'        }],        borderColor: '#c23531'    },    series:[        {            type: 'tree',            name: 'tree1',                data: [data],                top: '5%',            left: '7%',            bottom: '2%',            right: '60%',                symbolSize: 7,                label: {                position: 'left',                verticalAlign: 'middle',                align: 'right'            },                leaves: {                label: {                    position: 'right',                    verticalAlign: 'middle',                    align: 'left'                }            },                expandAndCollapse: true,                animationDuration: 550,            animationDurationUpdate: 750            },        {            type: 'tree',            name: 'tree2',            data: [data2],                top: '20%',            left: '60%',            bottom: '22%',            right: '18%',                symbolSize: 7,                label: {                position: 'left',                verticalAlign: 'middle',                align: 'right'            },                leaves: {                label: {                    position: 'right',                    verticalAlign: 'middle',                    align: 'left'                }            },                expandAndCollapse: true,                animationDuration: 550,            animationDurationUpdate: 750        }    ]}        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="日历坐标系calendar">日历坐标系Calendar</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=calendar-horizontal">CalendarHeatmap Horizontal</a></li></ul><script>function getVirtulData(year) {    year = year || '2017';    var date = +echarts.number.parseDate(year + '-01-01');    var end = +echarts.number.parseDate((+year + 1) + '-01-01');    var dayTime = 3600 * 24 * 1000;    var data = [];    for (var time = date; time < end; time += dayTime) {        data.push([            echarts.format.formatTime('yyyy-MM-dd', time),            Math.floor(Math.random() * 1000)        ]);    }    return data;}</script><div id="echarts5350" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts5350'));        // 指定图表的配置项和数据        var option = option = {    tooltip: {        position: 'top'    },    visualMap: {        min: 0,        max: 1000,        calculable: true,        orient: 'horizontal',        left: 'center',        top: 'top'    },    calendar: [{        range: '2020',        cellSize: ['auto', 15]    },    {        top: 260,        range: '2019',        cellSize: ['auto', 15]    }],        series: [{        type: 'heatmap',        coordinateSystem: 'calendar',        calendarIndex: 0,        data: getVirtulData(2020)    }, {        type: 'heatmap',        coordinateSystem: 'calendar',        calendarIndex: 1,        data: getVirtulData(2019)    }]};        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h3 id="d">3D</h3><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=bar3d-simplex-noise&amp;gl=1&amp;theme=dark">Bar3D- Simplex Noise</a></li></ul><iframe src="https://pxxyyz.com/html-file/echarts/bar-3D-simplex-noise.html" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><p>可进入<ahref="https://pxxyyz.com/html-file/echarts/bar-3D-simplex-noise.html">页面查看</a></p><ul><li><ahref="https://echarts.apache.org/examples/zh/editor.html?c=surface-wave&amp;gl=1">SurfaceWave</a></li></ul><div id="echarts4907" style="width: 85%;height: 400px;margin: 0 auto"></div><script type="text/javascript">        // 基于准备好的dom，初始化echarts实例        var myChart = echarts.init(document.getElementById('echarts4907'));        // 指定图表的配置项和数据        var option = option = {    tooltip: {},    backgroundColor: '#fff',    visualMap: {        show: false,        dimension: 2,        min: -1,        max: 1,        inRange: {            color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']        }    },    xAxis3D: {        type: 'value'    },    yAxis3D: {        type: 'value'    },    zAxis3D: {        type: 'value',        max: 1,        splitNumber: 2    },    grid3D: {        viewControl: {            // projection: 'orthographic'        },        boxHeight: 40    },    series: [{        type: 'surface',        wireframe: {            show: false        },        shading: 'color',        equation: {            x: {                step: 0.05,                min: -3,                max: 3,            },            y: {                step: 0.05,                min: -3,                max: 3,            },            z: function (x, y) {                return Math.sin(x * x + y * y) * x / 3.14            }        }    }]}        // 使用刚指定的配置项和数据显示图表。        myChart.setOption(option);</script><h2 id="pyecharts">pyecharts</h2><p><span class="math display">\[\text{py} + \text{echarts} = \text{pyecharts}\]</span></p><h3 id="是什么">是什么</h3><blockquote><p>Echarts是一个由百度开源的数据可视化，凭借着良好的交互性，精巧的图表设计，得到了众多开发者的认可。而Python是一门富有表达力的语言，很适合用于数据处理。当数据分析遇上数据可视化时，pyecharts诞生了<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[pyecharts仓库](https://github.com/pyecharts/pyecharts)">[2]</span></a></sup>。</p></blockquote><h3 id="怎么用--py或jupyter">怎么用--py或jupyter</h3><ul><li>pip 安装</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ pip install pyecharts -U<br></code></pre></td></tr></table></figure><ul><li>生成 HTML</li></ul><figure class="highlight python"><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></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-keyword">from</span> pyecharts.charts <span class="hljs-keyword">import</span> Bar<br><span class="hljs-keyword">from</span> pyecharts <span class="hljs-keyword">import</span> options <span class="hljs-keyword">as</span> opts<br><br><span class="hljs-comment"># V1 版本开始支持链式调用</span><br>bar = (<br>    Bar()<br>    .add_xaxis([<span class="hljs-string">&quot;衬衫&quot;</span>, <span class="hljs-string">&quot;毛衣&quot;</span>, <span class="hljs-string">&quot;领带&quot;</span>, <span class="hljs-string">&quot;裤子&quot;</span>, <span class="hljs-string">&quot;风衣&quot;</span>, <span class="hljs-string">&quot;高跟鞋&quot;</span>, <span class="hljs-string">&quot;袜子&quot;</span>])<br>    .add_yaxis(<span class="hljs-string">&quot;商家A&quot;</span>, [<span class="hljs-number">114</span>, <span class="hljs-number">55</span>, <span class="hljs-number">27</span>, <span class="hljs-number">101</span>, <span class="hljs-number">125</span>, <span class="hljs-number">27</span>, <span class="hljs-number">105</span>])<br>    .add_yaxis(<span class="hljs-string">&quot;商家B&quot;</span>, [<span class="hljs-number">57</span>, <span class="hljs-number">134</span>, <span class="hljs-number">137</span>, <span class="hljs-number">129</span>, <span class="hljs-number">145</span>, <span class="hljs-number">60</span>, <span class="hljs-number">49</span>])<br>    .set_global_opts(title_opts=opts.TitleOpts(title=<span class="hljs-string">&quot;某商场销售情况&quot;</span>))<br>)<br>bar.render()<br><br><span class="hljs-comment"># 不习惯链式调用的开发者依旧可以单独调用方法</span><br>bar = Bar()<br>bar.add_xaxis([<span class="hljs-string">&quot;衬衫&quot;</span>, <span class="hljs-string">&quot;毛衣&quot;</span>, <span class="hljs-string">&quot;领带&quot;</span>, <span class="hljs-string">&quot;裤子&quot;</span>, <span class="hljs-string">&quot;风衣&quot;</span>, <span class="hljs-string">&quot;高跟鞋&quot;</span>, <span class="hljs-string">&quot;袜子&quot;</span>])<br>bar.add_yaxis(<span class="hljs-string">&quot;商家A&quot;</span>, [<span class="hljs-number">114</span>, <span class="hljs-number">55</span>, <span class="hljs-number">27</span>, <span class="hljs-number">101</span>, <span class="hljs-number">125</span>, <span class="hljs-number">27</span>, <span class="hljs-number">105</span>])<br>bar.add_yaxis(<span class="hljs-string">&quot;商家B&quot;</span>, [<span class="hljs-number">57</span>, <span class="hljs-number">134</span>, <span class="hljs-number">137</span>, <span class="hljs-number">129</span>, <span class="hljs-number">145</span>, <span class="hljs-number">60</span>, <span class="hljs-number">49</span>])<br>bar.set_global_opts(title_opts=opts.TitleOpts(title=<span class="hljs-string">&quot;某商场销售情况&quot;</span>))<br>bar.render()<br></code></pre></td></tr></table></figure><ul><li><strong>Demo</strong>：pyecharts画廊<sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[pyecharts 画廊](https://github.com/pyecharts/pyecharts-gallery)">[3]</span></a></sup></li></ul><h2 id="参考">参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1"class="footnote-text"><span><a href="https://echarts.apache.org/zh/index.html">echarts官网</a><br /><a href="#fnref:1" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><ahref="https://github.com/pyecharts/pyecharts">pyecharts仓库</a><a href="#fnref:2" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:3"class="footnote-text"><span><a href="https://github.com/pyecharts/pyecharts-gallery">pyecharts画廊</a><br /><a href="#fnref:3" rev="footnote" class="footnote-backref">↩︎</a></span></span></li></ol></div></section>]]></content>
    
    
    <summary type="html">ECharts 是一个使用 JavaScript 实现的开源可视化库，涵盖各行业图表，满足各种需求，本文介绍如何在 Hexo 博客中使用 ECharts 插件。</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>给博客文章嵌入 PPT 演示</title>
    <link href="https://fluid-dev.cn/posts/hexo-nodeppt/"/>
    <id>https://fluid-dev.cn/posts/hexo-nodeppt/</id>
    <published>2020-06-09T04:30:00.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：pxxyyz</p> <p>原文地址：<a href="https://pxxyyz.com/posts/44941/" class="uri">https://pxxyyz.com/posts/44941/</a></p>           </div><h2 id="效果">效果</h2><iframe src="https://pxxyyz.com/nodeppt/%E5%A4%9A%E5%A4%8D%E5%8F%98%E8%BF%91%E6%9C%9F%E8%BF%9B%E5%B1%95/demo.html" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><div class="note note-light">            <p><strong>可以通过鼠标和键盘控制</strong></p> <ul> <li>页面: ↑/↓/←/→ Space Home End（空格,home键,end键）</li> <li>全屏: F</li> <li>Overview: -/+</li> <li>演讲者笔记: N</li> <li>网格背景: Enter</li> </ul>           </div><h2 id="nodeppt">nodeppt</h2><p>首先可以看看官网给的<ahref="https://nodeppt.js.org/">demo</a>，非常的炫酷。</p><iframe src="https://nodeppt.js.org/" width="100%" height="600" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><h3 id="安装nodeppt">安装nodeppt</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ npm install -g nodeppt<br></code></pre></td></tr></table></figure><h3 id="使用nodeppt">使用nodeppt</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><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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># new：使用线上模板创建一个新的 md 文件</span><br><span class="hljs-comment"># create a new slide with an official template</span><br>$ nodeppt new slide.md<br><span class="hljs-comment"># 使用模板</span><br>$ nodeppt new username/repo xxx.md<br><br><span class="hljs-comment"># create a new slide straight from a github template</span><br>$ nodeppt new slide.md -t username/repo<br><br><span class="hljs-comment"># serve：启动一个 md 文件的 webpack dev server</span><br><span class="hljs-comment"># start local sever show slide</span><br>$ nodeppt serve slide.md<br><span class="hljs-comment"># start local sever show slide with port</span><br>$ nodeppt serve slide.md -p port<br><br><span class="hljs-comment"># build：编译产出一个 md 文件</span><br><span class="hljs-comment"># to build a slide</span><br>$ nodeppt build slide.md<br></code></pre></td></tr></table></figure><ul><li><p>生成的网页可以使用键盘操作(类似PPT操作)</p><ul><li>Page: ↑/↓/←/→ Space Home End</li><li>Fullscreen: F</li><li>Overview: -/+</li><li>Speaker Note: N</li><li>Grid Background: Enter</li><li>nodeppt 有演讲者模式，在页面 url 后面增加<code>?mode=speaker</code>既可以打开演讲者模式，双屏同步</li></ul></li><li><p>端口port的好处是可以照着官网的demo文件学习和修改，保证多个slide.md在浏览器查看时不会冲突，默认的链接是http://192.168.0.105:8080/。</p></li><li><p>官网的demo文件在<ahref="https://github.com/ksky521/nodeppt/tree/master/site">Github</a>其中的<ahref="https://github.com/ksky521/nodeppt/blob/master/site/index.md">index.md</a>。</p></li><li><p>产生pdf：直接在浏览器上<code>command+P/ctrl+P</code></p></li><li><p>产生html：</p><ul><li><p>之前版本通过<code>nodeppt generate ./ppts/demo.md -a</code>，见<ahref="https://github.com/zhangry868/nodePPT#html%E7%89%88">GithubnodePPT v1.2.0</a></p></li><li><p>当前版本产生html利用<strong>built</strong>指令，例如<code>nodeppt build slide.md</code>，产生的html在默认文件夹<code>dist</code>中，包含CSS、IMG、JS三个文件夹和demo.html。</p></li><li><p>在nodeppt仓库的Issue<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[分享个脚本，导出单个离线HTML文件，不是用build #289](https://github.com/ksky521/nodeppt/issues/289#issue-613221513)">[1]</span></a></sup>上找到一个小哥做的爬虫程序，亲测有效。会生成一个html文件，虽然文件会大一点。不过用<ahref="https://github.com/ksky521/nodeppt/blob/master/site/index.md">index.md</a>文件实验，发现(某些)图片响应时间过长导致失败，不过自己写的markdown基本无压力转html，给小哥点大大的赞👍而且小哥表示：</p><blockquote><p>之前试过直接用build，效果没问题，但build出来会有几个文件，如果通过手机或email分享出去直接播放的话稍显麻烦。</p></blockquote></li></ul></li></ul><h3 id="nodeppt入门">nodeppt入门</h3><ul><li>配置与hexo的post文件头一样，用 yaml 语法设定基本配置</li></ul><figure class="highlight yaml"><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">title:</span> <span class="hljs-string">nodeppt</span> <span class="hljs-string">markdown</span> <span class="hljs-string">演示</span><br><span class="hljs-attr">speaker:</span> <span class="hljs-string">三水清</span><br><span class="hljs-attr">url:</span> <span class="hljs-string">https://github.com/ksky521/nodeppt</span><br><span class="hljs-attr">js:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">https://www.echartsjs.com/asset/theme/shine.js</span><br><span class="hljs-attr">prismTheme:</span> <span class="hljs-string">solarizedlight</span><br><span class="hljs-attr">plugins:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">echarts</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">mermaid</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-string">katex</span><br></code></pre></td></tr></table></figure><ul><li>正文使用<code>&lt;slide&gt;</code>对整个 markdown文件进行拆分，拆成单页的幻灯片内容。</li><li>图片、样式、布局、icon、动画等设置可以看看仓库的文档和demo文件学习。</li><li>演讲者模式的批注通过来<code>:::</code>语法添加，然后再页面的链接添加<code>?mode=speaker</code>，按<code>N</code>开启演讲中模式。</li></ul><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><code class="hljs markdown">:::note<br><span class="hljs-section">## Note here</span><br>:::<br></code></pre></td></tr></table></figure><h2 id="踩坑">踩坑</h2><h3 id="css样式导入失败">CSS样式导入失败</h3><p>生成的html数学公式的格式全部错误，即使在nodeppt的配置部分引入katex的JS和CSS，导出的文档仍然会出错。</p><ul><li>通过nodeppt build的html页面</li></ul><p>打开生成的html文件可以看到<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[当在浏览器里直接打开index.html时，打开速度会非常慢 #286](https://github.com/ksky521/nodeppt/issues/286#issue-575436572)">[2]</span></a></sup></p><figure class="highlight html"><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><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css&quot;</span> /&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//cdn.staticfile.org/prism/1.15.0/themes/prism.min.css&quot;</span> /&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//cdn.staticfile.org/KaTeX/0.10.0-rc.1/katex.min.css&quot;</span> /&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;//cdn.staticfile.org/KaTeX/0.5.1/katex.min.css&quot;</span> /&gt;</span><br></code></pre></td></tr></table></figure><p>只要把文件中所有<code>//</code>开头的都替换成<code>https://</code>，如</p><figure class="highlight html"><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><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">stylesheet</span> <span class="hljs-attr">href</span>=<span class="hljs-string">https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">stylesheet</span> <span class="hljs-attr">href</span>=<span class="hljs-string">https://cdn.staticfile.org/prism/1.15.0/themes/prism.min.css</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">stylesheet</span> <span class="hljs-attr">href</span>=<span class="hljs-string">https://cdn.staticfile.org/KaTeX/0.10.0-rc.1/katex.min.css</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">stylesheet</span> <span class="hljs-attr">href</span>=<span class="hljs-string">https://cdn.staticfile.org/KaTeX/0.5.1/katex.min.css</span>&gt;</span><br></code></pre></td></tr></table></figure><p>这样控制台就不会报错了，数学公式和fa-icon能正常显示了。</p><ul><li>通过py程序爬的html页面</li></ul><p>配合KaTeX官网的<ahref="https://katex.org/docs/browser.html#starter-template">使用文档</a>，在生成的html文件<code>&lt;head&gt;</code>引用katex的JS和CSS。</p><figure class="highlight html"><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><code class="hljs html"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-keyword">html</span>&gt;</span><br><span class="hljs-comment">&lt;!-- KaTeX requires the use of the HTML5 doctype. Without it, KaTeX may not render properly --&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span><br>  <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">&quot;stylesheet&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css&quot;</span> <span class="hljs-attr">integrity</span>=<span class="hljs-string">&quot;sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq&quot;</span> <span class="hljs-attr">crossorigin</span>=<span class="hljs-string">&quot;anonymous&quot;</span>&gt;</span><br><br>    <span class="hljs-comment">&lt;!-- The loading of KaTeX is deferred to speed up page rendering --&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js&quot;</span> <span class="hljs-attr">integrity</span>=<span class="hljs-string">&quot;sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz&quot;</span> <span class="hljs-attr">crossorigin</span>=<span class="hljs-string">&quot;anonymous&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br><br>    <span class="hljs-comment">&lt;!-- To automatically render math in text elements, include the auto-render extension: --&gt;</span><br>    <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">defer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js&quot;</span> <span class="hljs-attr">integrity</span>=<span class="hljs-string">&quot;sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI&quot;</span> <span class="hljs-attr">crossorigin</span>=<span class="hljs-string">&quot;anonymous&quot;</span></span><br><span class="hljs-tag">        <span class="hljs-attr">onload</span>=<span class="hljs-string">&quot;renderMathInElement(document.body);&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>  <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span><br>  ...<br><span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span><br></code></pre></td></tr></table></figure><p>添加后公式都能正确显示了。</p><h3 id="在博客添加nodeppt">在博客添加nodeppt</h3><ul><li>通过py程序爬的html页面</li></ul><p>在Hexo博客里想调用或者链接nodeppt生成的html，需要hexo设置<code>skip_render</code>,指定不进行渲染的文件或文件夹，例如在<code>source</code>目录下新建<code>nodeppt</code>来存放nodeppt生成的html，则需要在根目录下的<code>_config.yml</code>文件添加</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">skip_render:</span> <br>  <span class="hljs-bullet">-</span> <span class="hljs-string">nodeppt/*.html</span><br></code></pre></td></tr></table></figure><ul><li>通过nodeppt build的html页面</li></ul><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">skip_render:</span> <br>  <span class="hljs-bullet">-</span> <span class="hljs-string">nodeppt/**</span><br></code></pre></td></tr></table></figure><p>文件匹配是基于正则匹配的，如果需要忽略全部文件(<code>/*</code>)、指定类型type文件(<code>/*.type</code>)、全部文件以及子目录(<code>/**</code>)以及多个文件需要用(<code>- file/**</code>)。</p><p>对应的文件访问格式是<code>../../nodeppt/file.html</code>或<code>../../nodeppt/file/demo.html</code>，本页演示的加载是通过<code>iframe</code>实现的。</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">iframe</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;../../nodeppt/file.html&quot;</span> <span class="hljs-attr">width</span>=<span class="hljs-string">&quot;100%&quot;</span> <span class="hljs-attr">height</span>=<span class="hljs-string">&quot;500&quot;</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;topFrame&quot;</span> <span class="hljs-attr">scrolling</span>=<span class="hljs-string">&quot;yes&quot;</span> <span class="hljs-attr">noresize</span>=<span class="hljs-string">&quot;noresize&quot;</span> <span class="hljs-attr">frameborder</span>=<span class="hljs-string">&quot;0&quot;</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;topFrame&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">iframe</span>&gt;</span><br></code></pre></td></tr></table></figure><p>注意：如果这一步不执行的话，debug会发现nodeppt生成的html会被hexo处理，产生错误</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><code class="hljs bash">FATAL Something<span class="hljs-string">&#x27;s wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html</span><br><span class="hljs-string">Nunjucks Error:  [Line 9418, Column 3465] expected variable end</span><br></code></pre></td></tr></table></figure><p>至于使用cdn来使用html似乎不行，出来的是html的源码，而不是网页。如果使用cdn的方式能成功就不用这么麻烦的<code>skip_render</code>。</p><p>有一种简单的方法就是用github或者coding等部署nodeppt的html，再iframe的src填对应的网址。如果hexo的<code>skip_render</code>设置正确，也可通过网址主页下的nodeppt下找到。</p><ul><li><ahref="https://pxxyyz.com/nodeppt/%E5%A4%9A%E5%A4%8D%E5%8F%98%E8%BF%91%E6%9C%9F%E8%BF%9B%E5%B1%95/demo.html"class="uri">https://pxxyyz.com/nodeppt/%E5%A4%9A%E5%A4%8D%E5%8F%98%E8%BF%91%E6%9C%9F%E8%BF%9B%E5%B1%95/demo.html</a></li><li><a href="http://uwrfy5.coding-pages.com/"class="uri">http://uwrfy5.coding-pages.com/</a></li></ul><h2 id="参考">参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span><ahref="https://github.com/ksky521/nodeppt/issues/289#issue-613221513">分享个脚本，导出单个离线HTML文件，不是用build#289</a><br /><a href="#fnref:1" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><ahref="https://github.com/ksky521/nodeppt/issues/286#issue-575436572">当在浏览器里直接打开index.html时，打开速度会非常慢#286</a><br /><a href="#fnref:2" rev="footnote" class="footnote-backref">↩︎</a></span></span></li></ol></div></section>]]></content>
    
    
    <summary type="html">在 Hexo 博客使用 NodePPT 插件实现演示功能</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>在 Fluid 主题首页上加入一言</title>
    <link href="https://fluid-dev.cn/posts/fluid-hitokoto/"/>
    <id>https://fluid-dev.cn/posts/fluid-hitokoto/</id>
    <published>2020-06-03T15:30:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：pxxyyz</p> <p>原文地址：<a href="https://pxxyyz.com/posts/30454/" class="uri">https://pxxyyz.com/posts/30454/</a></p>           </div><p>群里有个小哥想在首页 Slogan 上显示一言，在 GitHub 上搜了搜，还真有Fluid 主题的改造，我按照思路写下改造的步骤。</p><h2 id="修改代码">修改代码</h2><h3 id="typed.ejs">typed.ejs</h3><p>修改<code>layout\_partial\plugins</code>目录下的<code>typed.ejs</code></p><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs html">&lt;% if(theme.fun_features.typing.enable &amp;&amp; page.subtitle !== false)&#123; %&gt;<br>  &lt;%- js_ex(theme.static_prefix.typed, &quot;/typed.min.js&quot;) %&gt;<br>  <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="language-javascript"></span><br><span class="language-javascript">    <span class="hljs-keyword">function</span> <span class="hljs-title function_">typing</span>(<span class="hljs-params">id, title</span>)&#123;</span><br><span class="language-javascript">        <span class="hljs-keyword">var</span> typed = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Typed</span>(<span class="hljs-string">&#x27;#&#x27;</span> + id, &#123;</span><br><span class="language-javascript">            <span class="hljs-attr">strings</span>: [</span><br><span class="language-javascript">              <span class="hljs-string">&#x27;  &#x27;</span>,</span><br><span class="language-javascript">              title + <span class="hljs-string">&quot;&amp;nbsp;&quot;</span>,</span><br><span class="language-javascript">            ],</span><br><span class="language-javascript">            <span class="hljs-attr">cursorChar</span>: <span class="hljs-string">&quot;&lt;%- theme.fun_features.typing.cursorChar %&gt;&quot;</span>,</span><br><span class="language-javascript">            <span class="hljs-attr">typeSpeed</span>: &lt;%- theme.<span class="hljs-property">fun_features</span>.<span class="hljs-property">typing</span>.<span class="hljs-property">typeSpeed</span> %&gt;,</span><br><span class="language-javascript">            <span class="hljs-attr">loop</span>: &lt;%- theme.<span class="hljs-property">fun_features</span>.<span class="hljs-property">typing</span>.<span class="hljs-property">loop</span> %&gt;,</span><br><span class="language-javascript">        &#125;);</span><br><span class="language-javascript">        typed.<span class="hljs-title function_">stop</span>();</span><br><span class="language-javascript">        $(<span class="hljs-variable language_">document</span>).<span class="hljs-title function_">ready</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) &#123;</span><br><span class="language-javascript">            $(<span class="hljs-string">&quot;.typed-cursor&quot;</span>).<span class="hljs-title function_">addClass</span>(<span class="hljs-string">&quot;h2&quot;</span>);</span><br><span class="language-javascript">            typed.<span class="hljs-title function_">start</span>();</span><br><span class="language-javascript">        &#125;);</span><br><span class="language-javascript">    &#125;</span><br><span class="language-javascript">    &lt;% <span class="hljs-keyword">if</span>(<span class="hljs-title function_">is_post</span>()) &#123; %&gt;</span><br><span class="language-javascript">        <span class="hljs-title function_">typing</span>(<span class="hljs-string">&quot;subtitle&quot;</span>, <span class="hljs-string">&quot;&lt;%- data.subtitle %&gt;&quot;</span>)</span><br><span class="language-javascript">    &lt;% &#125; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(theme.<span class="hljs-property">index</span>.<span class="hljs-property">hitokoto</span>.<span class="hljs-property">enable</span>)&#123; %&gt;</span><br><span class="language-javascript">        <span class="hljs-title function_">fetch</span>(<span class="hljs-string">&#x27;https://v1.hitokoto.cn&#x27;</span>)</span><br><span class="language-javascript">        .<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> response.<span class="hljs-title function_">json</span>())</span><br><span class="language-javascript">        .<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">data</span> =&gt;</span> &#123;</span><br><span class="language-javascript">           <span class="hljs-title function_">typing</span>(<span class="hljs-string">&quot;hitokoto&quot;</span>, data.<span class="hljs-property">hitokoto</span>)</span><br><span class="language-javascript">        &#125;)</span><br><span class="language-javascript">        .<span class="hljs-title function_">catch</span>(<span class="hljs-variable language_">console</span>.<span class="hljs-property">error</span>)</span><br><span class="language-javascript">    &lt;% &#125; <span class="hljs-keyword">else</span> &#123; %&gt;</span><br><span class="language-javascript">        <span class="hljs-title function_">typing</span>(<span class="hljs-string">&quot;subtitle&quot;</span>, <span class="hljs-string">&quot;&lt;%- data.subtitle %&gt;&quot;</span>)</span><br><span class="language-javascript">    &lt;% &#125; %&gt;</span><br><span class="language-javascript">  </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br>&lt;% &#125; %&gt;<br></code></pre></td></tr></table></figure><ul><li>将原来的功能放在typing函数里面，再判断打字机显示subtitle还是hitokoto<ul><li>所有的post都显示subtitle，即markdown的title，page的title是网站的标题</li><li>除了post以外，判断<code>theme.index.hitokoto.enable</code><ul><li>设置显示一言，则通过fetch调用hitokoto的API，这个部分官方说明<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[一言开发者中心](https://developer.hitokoto.cn/)">[1]</span></a></sup>和DIY教程<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[为您的Hexo博客添加Hitokoto一言功能](https://blog.bill.moe/add-hitokoto/)">[2]</span></a></sup>都说的很详细了</li><li>如果设置不显示一言，则显示subtitle</li></ul></li><li>hitokoto比subtitle优先级高，这会导致归档、分类、标签等页面的打字机显示hitokoto</li><li>如果只需要在首页显示hitokoto，但在非post的页面显示原subtitle，这需要判断页面的属性，据我观察，所有的非post的页面布局(layout)都会设置<code>page.layout=”XXX“</code>，但是index和page没有设置，因此，可以通过<code>!page.layout</code>判断来判断是否为首页，当然，post页面设定显示subtitle，就不在考虑范围内，这样只需将上面的<code>else if</code>条件修改如下</li></ul></li></ul><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs html">&lt;% &#125; else if(theme.index.hitokoto.enable &amp;&amp; !page.layout) &#123; %&gt;<br></code></pre></td></tr></table></figure><h3 id="layout.ejs">layout.ejs</h3><p>修改<code>layout</code>目录下的<code>layout.ejs</code>，在<code>&lt;span class="h2" id="subtitle"&gt;</code>和<code>&lt;% if(is_post()) &#123; %&gt;</code>之间插入如下代码</p><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;h2&quot;</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;subtitle&quot;</span>&gt;</span><br>    &lt;% if(theme.fun_features.typing.enable == false) &#123; %&gt;<br>    &lt;%- subtitle %&gt;<br>    &lt;% &#125; %&gt;<br><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br><br>&lt;% if(!is_post()) &#123; %&gt;<br><span class="hljs-tag">&lt;<span class="hljs-name">br</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;h2&quot;</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;hitokoto&quot;</span>&gt;</span><br>    &lt;% if(theme.fun_features.typing.enable == false) &#123; %&gt;<br>    &lt;%- hitokoto %&gt;<br>    &lt;% &#125; %&gt;<br><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br>&lt;% &#125; %&gt;<br><br>&lt;% if(is_post()) &#123; %&gt;<br>&lt;%- partial(&#x27;_partial/post-meta&#x27;) %&gt;<br>&lt;% &#125; %&gt;<br><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br></code></pre></td></tr></table></figure><p>这个部分设置显示hitokoto的样式和位置，不设置这个会报关于<code>typing("hitokoto", data.hitokoto)</code>的错误</p><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs crmsh">TypeError: Cannot <span class="hljs-keyword">read</span> <span class="hljs-keyword">property</span><span class="hljs-title"> </span>&#x27;tagName&#x27; of null<br></code></pre></td></tr></table></figure><h2 id="修改配置">修改配置</h2><p>在<code>source\_data</code>目录下修改<strong>主题配置</strong>文件<code>fluid_config.yml</code>，在<code>index</code>下设置hitokoto的开关</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-comment">#---------------------------</span><br><span class="hljs-comment"># 首页</span><br><span class="hljs-comment"># Index Page</span><br><span class="hljs-comment">#---------------------------</span><br><span class="hljs-attr">index:</span><br><span class="hljs-comment"># 添加hitokoto</span><br>  <span class="hljs-attr">slogan:</span>  <span class="hljs-comment"># 首页副标题的独立设置</span><br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span>  <span class="hljs-comment"># 为 false 则不显示任何内容</span><br>    <span class="hljs-attr">text:</span> <span class="hljs-string">&#x27;More haste, less speed.&#x27;</span>  <span class="hljs-comment"># 为空则按 hexo config.subtitle 显示</span><br>  <span class="hljs-attr">hitokoto:</span>  <span class="hljs-comment"># 非post页面显示一言</span><br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span>  <span class="hljs-comment"># slogan 和 hitokoto 不能同时启用，优先显示hitokoto</span><br></code></pre></td></tr></table></figure><ul><li>当<code>theme.index.hitokoto.enable == true</code>时，slogan里的text不在显示，因此只有关闭hitokoto才能在首页显示slogan的text或页面的subtitle</li></ul><h2 id="加入出处">加入出处</h2><ol type="1"><li>如果想加入出处，可在打印<code>data.hitokoto</code>后加入<code>data.from</code>，以及相应的格式</li></ol><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs html">typing(&quot;hitokoto&quot;, &#x27;『&#x27; + data.hitokoto + &#x27;』&#x27; + &#x27;<span class="hljs-tag">&lt;<span class="hljs-name">br</span> /&gt;</span> <span class="hljs-tag">&lt;<span class="hljs-name">h5</span>&gt;</span>&#x27;+ &#x27;——&#x27; + &#x27;「&#x27; + data.from + &#x27;」&#x27; + &#x27;<span class="hljs-tag">&lt;/<span class="hljs-name">h5</span>&gt;</span>&#x27;)<br></code></pre></td></tr></table></figure><ol start="2" type="1"><li>另一种显示出处的方法是另起一行打印<code>data.from</code>，</li></ol><figure class="highlight js"><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><code class="hljs js"><span class="hljs-title function_">fetch</span>(<span class="hljs-string">&#x27;https://v1.hitokoto.cn&#x27;</span>)<br>.<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> response.<span class="hljs-title function_">json</span>())<br>.<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">data</span> =&gt;</span> &#123;<br>    <span class="hljs-title function_">typing</span>(<span class="hljs-string">&quot;hitokoto&quot;</span>, data.<span class="hljs-property">hitokoto</span>)<br>    <span class="hljs-title function_">typing</span>(<span class="hljs-string">&quot;hitofrom &quot;</span>, data.<span class="hljs-property">from</span>)<br>&#125;)<br>.<span class="hljs-title function_">catch</span>(<span class="hljs-variable language_">console</span>.<span class="hljs-property">error</span>)<br></code></pre></td></tr></table></figure><ul><li>并在<code>layout.ejs</code>添加<code>&lt;%- hitofrom %&gt;</code></li></ul><figure class="highlight html"><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><code class="hljs html">&lt;% if(!is_post()) &#123; %&gt;<br><span class="hljs-tag">&lt;<span class="hljs-name">br</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;h2&quot;</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;hitokoto&quot;</span>&gt;</span><br>    &lt;% if(theme.fun_features.typing.enable == false) &#123; %&gt;<br>    &lt;%- hitokoto %&gt;<br>    &lt;% &#125; %&gt;<br><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">br</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;h2&quot;</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;hitofrom&quot;</span>&gt;</span><br>    &lt;% if(theme.fun_features.typing.enable == false) &#123; %&gt;<br>    &lt;%- hitofrom %&gt;<br>    &lt;% &#125; %&gt;<br><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br>&lt;% &#125; %&gt;<br></code></pre></td></tr></table></figure><ul><li>第一种是打印一段话，从头到尾只有一个cursorChar，但样式不太好改</li><li>第二种是打印两段话，会出现视觉混乱(个人觉得)，样式方便调整</li></ul><h2 id="总结">总结</h2><p>当然这个还可以继续改下去，例如添加出处(hitofrom)、设置循环(loop)、修改样式等。</p><p>最后也是最重要的，感谢tanxinzheng<sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[Code World](http://tanxinzheng.github.io/)">[3]</span></a></sup>(虽然不认识，但是新知识get！😁)。</p><h2 id="参考">参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1"class="footnote-text"><span><a href="https://developer.hitokoto.cn/">一言开发者中心</a><a href="#fnref:1" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><ahref="https://blog.bill.moe/add-hitokoto/">为您的Hexo博客添加Hitokoto一言功能</a><a href="#fnref:2" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:3"class="footnote-text"><span><a href="http://tanxinzheng.github.io/">CodeWorld</a><a href="#fnref:3" rev="footnote" class="footnote-backref">↩︎</a></span></span></li></ol></div></section>]]></content>
    
    
    <summary type="html">介绍如何改造在首页 Slogan 上显示一言(hitokoto)</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 云服务备份与使用 Jupyter</title>
    <link href="https://fluid-dev.cn/posts/hexo-server/"/>
    <id>https://fluid-dev.cn/posts/hexo-server/</id>
    <published>2020-05-28T06:30:00.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：pxxyyz</p> <p>原文地址：<a href="https://pxxyyz.com/posts/32990/" class="uri">https://pxxyyz.com/posts/32990/</a>、<a href="https://pxxyyz.com/posts/60533/" class="uri">https://pxxyyz.com/posts/60533/</a></p>           </div><h2 id="前言">前言</h2><p>记录hexo博客遇到的问题：</p><ul><li>免密git</li><li>自动备份</li><li>云服务器开启<code>Jupyter Notebook</code></li><li>在博客的菜单访问<code>Jupyter</code>（使用<code>Nginx</code>重定向实现url访问端口）</li><li>公式渲染引擎</li></ul><h2 id="云服务器备份">云服务器备份</h2><p>参考「Hexo博客部署到腾讯云服务器」<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[Hexo博客部署到腾讯云服务器](https://www.muyiio.com/2020/03/28/hexo-bo-ke-bu-shu-dao-teng-xun-yun-fu-wu-qi/)">[1]</span></a></sup>后遇到了两个问题：</p><ol type="1"><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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">deploy:</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">git</span><br>    <span class="hljs-attr">repo:</span> <span class="hljs-string">root@***(服务器ip,内网外网都行):/home/git/blog.git</span>    <span class="hljs-comment">#仓库地址</span><br>    <span class="hljs-attr">branch:</span> <span class="hljs-string">master</span>    <span class="hljs-comment">#分支</span><br></code></pre></td></tr></table></figure></li><li><p>备份时hexo自带的backup无效</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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">backup:</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">git</span><br>    <span class="hljs-attr">repo:</span> <span class="hljs-string">root@***(服务器ip,内网外网都行):/home/git/backup.git</span>    <span class="hljs-comment">#仓库地址</span><br>    <span class="hljs-attr">branch:</span> <span class="hljs-string">master</span>    <span class="hljs-comment">#分支</span><br></code></pre></td></tr></table></figure></li></ol><h3 id="免密git">免密git</h3><p>在这一部分参照了「使用Git+Hooks实现Hexo站点自动部署到CentOS服务器上」<sup id="fnref:2" class="footnote-ref"><a href="#fn:2" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[使用Git+Hooks实现Hexo站点自动部署到CentOS服务器上](https://liujunzhou.top/deployer/)">[2]</span></a></sup>的配置SSH免密登陆步骤。</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><code class="hljs bash">$ ssh-copy-id -i ~/.ssh/id_rsa.pub your_user_name@HostIP  //添加公钥<br>$ ssh your_user_name@HostIP //验证是否添加成功<br></code></pre></td></tr></table></figure><p>因为部署时用的root上传，因此这里的<code>your_user_name</code>设置<code>git</code>和<code>root</code>两个。添加成功后<code>ssh -v git@HostIP</code>和<code>ssh -v root@HostIP</code>显示<code>Welcome to XXX !</code></p><h3 id="自动备份">自动备份</h3><p>这里我按照「deploy的流程在服务器设置了自动化备份」<sup id="fnref:1" class="footnote-ref"><a href="#fn:1" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[Hexo博客部署到腾讯云服务器](https://www.muyiio.com/2020/03/28/hexo-bo-ke-bu-shu-dao-teng-xun-yun-fu-wu-qi/)">[1]</span></a></sup>，主要思路是在服务器设置一个独立的文件夹<code>backup</code>，再用类似<strong>deploy</strong>的钩子<code>blog.git</code>，构造一个备份的钩子<code>deploy.git</code>将博客的备份文件上传。</p><ul><li><p>获取<code>root</code>权限</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ su root<br></code></pre></td></tr></table></figure></li><li><p>建立<code>git</code>仓库</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><code class="hljs bash">$ <span class="hljs-built_in">cd</span> /home/backup<br>$ git init --bare backup.git<br></code></pre></td></tr></table></figure></li><li><p>修改<code>backup.git</code>权限</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ <span class="hljs-built_in">chown</span> git:git -R backup.git<br></code></pre></td></tr></table></figure></li><li><p>在 <code>/home/hexo/backup.git</code> 下，有一个自动生成的<code>hooks</code> 文件夹，我们创建一个新的 <code>git</code> 钩子<code>post-receive</code>，用于自动部署。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ vim backup.git/hooks/post-receive<br></code></pre></td></tr></table></figure></li><li><p>按 <code>i</code>键进入文件的编辑模式，在该文件中添加两行代码（将下边的代码粘贴进去)，指定Git 的工作树（源代码）和 Git 目录</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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash </span><br>git --work-tree=/home/backup --git-dir=/home/git/backup.git remote add origin<br>git --work-tree=/home/backup --git-dir=/home/git/backup.git checkout -f<br><span class="hljs-comment"># git --work-tree=/home/backup --git-dir=/home/git/backup.git checkout -b master # 创建切换分支</span><br>git --work-tree=/home/backup --git-dir=/home/git/backup.git push origin master <span class="hljs-comment"># 提交代码至分支</span><br></code></pre></td></tr></table></figure></li><li><p>按 <code>Esc</code> 键退出编辑模式，输入<code>:wq</code>保存退出。（先输入<code>：</code>，然后输入<code>wq</code>回车）</p></li><li><p>修改文件权限，使得其可执行。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ <span class="hljs-built_in">chmod</span> +x /home/git/backup.git/hooks/post-receive<br></code></pre></td></tr></table></figure></li><li><p>博客根目录<code>_config</code>下增加(因为服务器没有分支，默认是<code>master</code>，使用<code>backup</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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">deploy:</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">git</span><br>    <span class="hljs-attr">repo:</span> <span class="hljs-string">root@***(服务器ip,内网外网都行):/home/git/backup.git</span>    <span class="hljs-comment">#仓库地址</span><br>    <span class="hljs-attr">branch:</span> <span class="hljs-string">master</span>    <span class="hljs-comment">#分支</span><br></code></pre></td></tr></table></figure></li><li><p>备份<code>hexo backup</code>(使用 <code>Hexo-Git-Backup</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><code class="hljs bash">$ hexo clean<br>$ hexo g<br>$ hexo b<br></code></pre></td></tr></table></figure></li></ul><p class="note note-primary">这个地方走了不少弯路，因为backup阶段每次都提示错误：</p><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs livecodeserver">fatal: <span class="hljs-string">&#x27;xxx&#x27;</span> does <span class="hljs-keyword">not</span> appear <span class="hljs-built_in">to</span> be <span class="hljs-keyword">a</span> git repository<br>fatal: Could <span class="hljs-keyword">not</span> <span class="hljs-built_in">read</span> <span class="hljs-built_in">from</span> remote repository.<br></code></pre></td></tr></table></figure><p>我通过搜索<code>fatal-does-not-appear-to-be-a-git-repository</code>找到解决思路，用<code>Git命令</code>自动备份。详细参见「HEXO博客实现自动备份」<sup id="fnref:3" class="footnote-ref"><a href="#fn:3" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[HEXO博客实现自动备份](https://cwyaml.github.io/2017/03/07/backup/)">[3]</span></a></sup>。</p><ul><li><p>安装 <code>shelljs</code> 模块</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ npm install --save shelljs<br></code></pre></td></tr></table></figure></li><li><p>编写自动备份脚本：主题目录下<code>scripts</code>文件夹下新建一个<code>js</code>文件，文件名随意取，例如<code>update.js</code>。</p></li></ul><figure class="highlight js"><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><code class="hljs js"><span class="hljs-built_in">require</span>(<span class="hljs-string">&#x27;shelljs/global&#x27;</span>);<br><span class="hljs-keyword">try</span> &#123;<br>    <span class="hljs-comment">// hexo.on(&#x27;deployAfter&#x27;, function() &#123;         //当deploy完成后执行备份</span><br>    hexo.<span class="hljs-title function_">on</span>(<span class="hljs-string">&#x27;backupAfter&#x27;</span>, <span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) &#123;            <span class="hljs-comment">//当backup完成后执行备份</span><br>        <span class="hljs-title function_">run</span>();<br>    &#125;);<br>&#125; <span class="hljs-keyword">catch</span> (e) &#123;<br>    <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">&quot;产生了一个错误&lt;(￣3￣)&gt; !，错误详情为：&quot;</span> + e.<span class="hljs-title function_">toString</span>());<br>&#125;<br><span class="hljs-keyword">function</span> <span class="hljs-title function_">run</span>(<span class="hljs-params"></span>) &#123;<br>    <span class="hljs-keyword">if</span> (!<span class="hljs-title function_">which</span>(<span class="hljs-string">&#x27;git&#x27;</span>)) &#123;<br>        <span class="hljs-title function_">echo</span>(<span class="hljs-string">&#x27;Sorry, this script requires git&#x27;</span>);<br>        <span class="hljs-title function_">exit</span>(<span class="hljs-number">1</span>);<br>    &#125; <span class="hljs-keyword">else</span> &#123;<br>        <span class="hljs-title function_">echo</span>(<span class="hljs-string">&quot;======================Auto Backup Begin===========================&quot;</span>);<br>        <span class="hljs-title function_">cd</span>(<span class="hljs-string">&#x27;XXXXXXX&#x27;</span>);    <span class="hljs-comment">//此处修改为Hexo根目录路径</span><br>        <span class="hljs-keyword">if</span> (<span class="hljs-title function_">exec</span>(<span class="hljs-string">&#x27;git add .&#x27;</span>).<span class="hljs-property">code</span> !== <span class="hljs-number">0</span>) &#123;<br>            <span class="hljs-title function_">echo</span>(<span class="hljs-string">&#x27;Error: Git add failed&#x27;</span>);<br>            <span class="hljs-title function_">exit</span>(<span class="hljs-number">1</span>);<br>        &#125;<br>        <span class="hljs-keyword">if</span> (<span class="hljs-title function_">exec</span>(<span class="hljs-string">&#x27;git commit -m &quot;Form auto backup script\&#x27;s commit&quot;&#x27;</span>).<span class="hljs-property">code</span> !== <span class="hljs-number">0</span>) &#123;<br>            <span class="hljs-keyword">if</span> (<span class="hljs-title function_">exec</span>(<span class="hljs-string">&#x27;git remote add origin your_user_name@HostIP:/home/git/backup.git&#x27;</span>).<span class="hljs-property">code</span> !== <span class="hljs-number">0</span>)&#123;       <span class="hljs-comment">//修改访问服务器方式</span><br>                <span class="hljs-keyword">if</span> (<span class="hljs-title function_">exec</span>(<span class="hljs-string">&#x27;git push origin master&#x27;</span>).<span class="hljs-property">code</span> !== <span class="hljs-number">0</span>) &#123;<br>                    <span class="hljs-title function_">echo</span>(<span class="hljs-string">&#x27;Error: Git push failed&#x27;</span>);<br>                    <span class="hljs-title function_">exit</span>(<span class="hljs-number">1</span>);<br>                &#125;<br>            &#125; <span class="hljs-keyword">else</span> &#123;<br>                <span class="hljs-title function_">echo</span>(<span class="hljs-string">&#x27;Error: Git commit failed&#x27;</span>);<br>                <span class="hljs-title function_">exit</span>(<span class="hljs-number">1</span>);<br>            &#125;<br>        &#125;<br>        <span class="hljs-keyword">if</span> (<span class="hljs-title function_">exec</span>(<span class="hljs-string">&#x27;git push origin master&#x27;</span>).<span class="hljs-property">code</span> !== <span class="hljs-number">0</span>) &#123;<br>            <span class="hljs-title function_">echo</span>(<span class="hljs-string">&#x27;Error: Git push failed&#x27;</span>);<br>            <span class="hljs-title function_">exit</span>(<span class="hljs-number">1</span>);<br>        &#125;<br>        <span class="hljs-title function_">echo</span>(<span class="hljs-string">&quot;==================Auto Backup Complete============================&quot;</span>)<br>    &#125;<br>&#125;<br></code></pre></td></tr></table></figure><p>注意：</p><ul><li>在<code>Hexo根目录</code>或在主题目录下的<code>scripts</code>文件夹<code>js</code>在启动时就会自动载入，因此建议放在主题目录下，避免不必要的问题，例如<code>Blog/themes/fluid/scripts/update.js</code>。</li><li>此<code>backup.js</code>是在<code>hexo backup</code>运行后<code>backupAfter</code>自动触发的，因此可以在其他仓库备份(如<code>github</code>和<code>coding</code>)后实现服务器的自动备份。</li><li><code>git</code>远程仓库在服务器，所以push在服务器端的<code>home/git/backup.git</code>里<code>post-receive</code>钩子中。</li><li>由于设定了<code>git</code>免密设置，因此使用<code>backup.git</code>操作不需要重复的输入密码。</li></ul><p>在<code>_config.yml</code>下设置备份配置。<strong>注意：<code>backup</code>下不要有服务器的<code>repo</code></strong>，因为在<code>scripts</code>下<code>backup.js</code>已实现<code>git push</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><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">backup:</span><br>    <span class="hljs-attr">type:</span> <span class="hljs-string">git</span><br>    <span class="hljs-attr">message:</span> <span class="hljs-string">&#x27;backup updata: &#123;&#123;now(&quot;YYYY-MM-DD HH/mm/ss&quot;)&#125;&#125;&#x27;</span><br>    <span class="hljs-comment">## theme: fluid #主题</span><br>    <span class="hljs-attr">repo:</span> <span class="hljs-comment">#XXX为用户地址或IP地址</span><br>        <span class="hljs-attr">github:</span> <span class="hljs-string">git@github.com:XXX.github.io.git,backup</span><br>        <span class="hljs-attr">coding:</span> <span class="hljs-string">git@e.coding.net:XXX.git,backup</span><br>        <span class="hljs-comment">## hexo: root@<span class="hljs-doctag">XXX:</span>/home/git/backup.git,master</span><br></code></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><code class="hljs bash">$ hexo clean <br>$ hexo g <br>$ hexo d <br>$ hexo b<br></code></pre></td></tr></table></figure><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><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></pre></td><td class="code"><pre><code class="hljs bash">$ hexo b<br>INFO  Start backup: git<br>The file will have its original line endings <span class="hljs-keyword">in</span> your working directory<br>[master 79b18cc] backup updata: XXXX<br> 2 files changed, 143 insertions(+), 4 deletions(-)<br>Branch <span class="hljs-string">&#x27;master&#x27;</span> <span class="hljs-built_in">set</span> up to track remote branch <span class="hljs-string">&#x27;backup&#x27;</span> from <span class="hljs-string">&#x27;github&#x27;</span>.<br>To github.com:XXXXXX<br>   89e022d..79b18cc  master -&gt; backup<br>Branch <span class="hljs-string">&#x27;master&#x27;</span> <span class="hljs-built_in">set</span> up to track remote branch <span class="hljs-string">&#x27;backup&#x27;</span> from <span class="hljs-string">&#x27;coding&#x27;</span>.<br>To e.coding.net:XXXXXX<br>   89e022d..79b18cc  master -&gt; backup<br>INFO  Backup <span class="hljs-keyword">done</span>: git<br>======================Auto Backup Begin===========================<br>On branch master<br>Your branch is up to <span class="hljs-built_in">date</span> with <span class="hljs-string">&#x27;coding/backup&#x27;</span>.<br><br>nothing to commit, working tree clean<br>fatal: remote origin already exists.<br>remote: usage: git remote add [&lt;options&gt;] &lt;name&gt; &lt;url&gt;<br>remote:<br>remote:     -f, --fetch           fetch the remote branches<br>remote:     --tags                import all tags and associated objects when fetching<br>remote:                           or <span class="hljs-keyword">do</span> not fetch any tag at all (--no-tags)    <br>remote:     -t, --track &lt;branch&gt;  branch(es) to track<br>remote:     -m, --master &lt;branch&gt;<br>remote:                           master branch<br>remote:     --mirror[=(push|fetch)]<br>remote:                           <span class="hljs-built_in">set</span> up remote as a mirror to push to or fetch from<br>remote:<br>remote: fatal: <span class="hljs-string">&#x27;origin&#x27;</span> does not appear to be a git repository<br>remote: fatal: Could not <span class="hljs-built_in">read</span> from remote repository.<br>remote:<br>remote: Please make sure you have the correct access rights<br>remote: and the repository exists.<br>remote: fatal: not a git repository (or any of the parent directories): .git    <br>To XXXXXX:/home/git/backup.git<br>   89e022d..79b18cc  master -&gt; master<br>Everything up-to-date<br>==================Auto Backup Complete============================<br></code></pre></td></tr></table></figure><p>服务器的文件夹<code>/home/backup</code>下可看到<code>Hexo backup</code>的备份文件，服务器端备份的文件与<code>github</code>或<code>coding</code>备份文件一致。同时，文件夹<code>/home/hexo</code>是<code>hexo deploy</code>的部署文件，通过<code>Nginx</code>提供<code>Web 服务</code>。这就实现了服务器部署和备份的自动化操作。</p><div class="note note-primary">            <p><strong>Tips</strong>:如果遇到程序没有报错但文件夹上传失败时，可以手动删除<code>Hexo</code>根目录下的<code>.deploy_git</code> 文件夹，再重新部署和备份。</p>           </div><h2 id="访问jupyter">访问Jupyter</h2><p>下面以域名<code>pxxyyz.com</code>为例，首先需要在服务器开启<code>Jupyter</code><sup id="fnref:4" class="footnote-ref"><a href="#fn:4" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[搭建 ipython/jupyter notebook 服务器](https://bitmingw.com/2017/07/09/run-jupyter-notebook-server/)">[4]</span></a></sup></p><h3 id="安装jupyter">安装Jupyter</h3><ul><li>安装<code>Anaconda</code></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><code class="hljs bash">$ <span class="hljs-built_in">mkdir</span> anaconda //创建目录<br>$ <span class="hljs-built_in">cd</span> anaconda    //进入目录<br>// 在镜像站找到安装包并下载<br>$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2020.02-Linux-x86_64.sh<br>$ bash Anaconda3-2020.02-Linux-x86_64.sh  //安装anaconda3<br></code></pre></td></tr></table></figure><ul><li>生成<code>Jupyter Notebook</code>配置文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ jupyter notebook --generate-config<br></code></pre></td></tr></table></figure><ul><li>打开<code>ipython</code>并设置登入密码</li></ul><figure class="highlight python"><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><code class="hljs python">ipython <br>In [<span class="hljs-number">1</span>]: <span class="hljs-keyword">from</span> IPython.lib <span class="hljs-keyword">import</span> passwd<br>In [<span class="hljs-number">2</span>]: passwd()                         <span class="hljs-comment">#设置Jupyter Notebook密码</span><br>Enter password: <br>Verify password: <br>Out[<span class="hljs-number">2</span>]: <span class="hljs-string">&#x27;&#x27;</span>                               <span class="hljs-comment">#生成的密钥在配置文件有用</span><br></code></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></pre></td><td class="code"><pre><code class="hljs bash">$ vim ~/.jupyter/jupyter_notebook_config.py<br></code></pre></td></tr></table></figure><ul><li>按 <code>i</code> 键进入文件的编辑模式，在该文件中添加代码，按<code>Esc</code> 键退出编辑模式，输入<code>:wq</code>保存退出。（先输入<code>:</code>，然后输入<code>wq</code>回车）</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></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-comment"># 设置所有ip地址皆可访问</span><br>c.NotebookApp.ip=<span class="hljs-string">&#x27;*&#x27;</span> <br><span class="hljs-comment"># 输入密码的哈希值，见Out[2]</span><br>c.NotebookApp.password = u<span class="hljs-string">&#x27;sha1:XXX&#x27;</span><br><span class="hljs-comment"># 禁止自动打开浏览器</span><br>c.NotebookApp.open_browser = False  <br><span class="hljs-comment"># 指定端口，需要在服务器安全组开发该端口</span><br>c.NotebookApp.port =8888 <br><span class="hljs-comment"># 远程访问</span><br>c.NotebookApp.allow_remote_access = True <br><span class="hljs-comment"># 使用mathjax，可输入公式</span><br>c.NotebookApp.enable_mathjax = True<br></code></pre></td></tr></table></figure><ul><li>启动<code>Jupyter</code></li></ul><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><code class="hljs bash">$ <span class="hljs-built_in">nohup</span> jupyter notebook --allow-root &amp; <br><span class="hljs-comment"># nohup避免关闭终端则终止了Jupyter 程序的运行，--allow-root允许root权限，&amp; 将程序放入后台运行</span><br></code></pre></td></tr></table></figure><ul><li>打开端口步骤：本实例安全组-&gt;配置规则-&gt;入方向-&gt;手动添加</li></ul><center><table><thead><tr class="header"><th style="text-align: center;">授权策略</th><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 class="odd"><td style="text-align: center;">允许</td><td style="text-align: center;">100</td><td style="text-align: center;">自定义 TCP</td><td style="text-align: center;">目的:8888/8888</td><td style="text-align: center;">源:0.0.0.0/0</td></tr></tbody></table></center><ul><li>浏览器访问<code>Jupyter notebook</code>(移动端或桌面端)，并输入刚才配置的密码即可使用</li></ul><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs html">http://HostIP:8888<br>http://域名:8888<br></code></pre></td></tr></table></figure><p><strong>注意</strong>：</p><ol type="1"><li>第二种方式需要域名解析到服务器公网IP，域名等价于公网IP</li><li><code>https://HostIP:8888</code>访问出错，<code>https://域名:8888</code>同理</li></ol><ul><li>anaconda换源，分别测试一下下载速度和稳定性，自行选择最优的</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><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><code class="hljs bash"><span class="hljs-comment"># 添加清华源</span><br>$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/<br>$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/<br>$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge <br>$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/<br>$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/<br><br><span class="hljs-comment"># 添加上交源</span><br>$ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/ <br>$ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/<br>$ conda config --add channels https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge/ <br><br><span class="hljs-comment"># 添加中科大源</span><br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/<br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/<br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/<br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/<br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/<br>$ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/<br><br><span class="hljs-comment"># 设置搜索时显示通道地址 有资源显示源地址</span><br>$ conda config --<span class="hljs-built_in">set</span> show_channel_urls <span class="hljs-built_in">yes</span><br><br><span class="hljs-comment"># 换回默认源(重置用)</span><br>$ conda config --remove-key channels<br></code></pre></td></tr></table></figure><ul><li>可以在<code>Jupyter notebook</code>的工作目录中上传或下载<code>.ipynb</code>文件，当然别的文件也可以。</li></ul><h3 id="nginx-重定向">Nginx 重定向</h3><p>希望在我的博客中添加一个菜单按钮直接访问我的<code>Jupyter notebook</code>。然而菜单链接是通过<code>url_for</code>自动生成的，如添加<code>link: ':8888'</code>，生成的是<code>pxxyyz.com/:8888/</code>，而不是<code>pxxyyz.com:8888</code>。当然，可以设置链接为<code>link: 'pxxyyz.com:8888'</code>，直接且简单，但这不能学到一些有趣的东西！</p><div class="note note-primary">            <p>下面通过特点子页面来访问域名的指定端口，即通过<code>pxxyyz.com/jupyter</code>访问<code>pxxyyz.com:8888</code></p>           </div><ul><li>在此之前上传了<code>SSL证书</code>并配置<code>HTTPS</code><sup id="fnref:5" class="footnote-ref"><a href="#fn:5" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[hexo部署服务器之配置HTTPS](https://www.kylin.show/25251.html)">[5]</span></a></sup></li><li>修改服务器配置文件</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ vim /etc/nginx/nginx.conf<br></code></pre></td></tr></table></figure><ul><li>按 <code>i</code>键进入文件的编辑模式，在该文件找到<code>server</code>，修改代码，按<code>Esc</code> 键退出编辑模式，输入<code>:wq</code>保存退出。（先输入<code>:</code>，然后输入<code>wq</code>回车）</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><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></pre></td><td class="code"><pre><code class="hljs bash">  server &#123;<br>      listen       443 ssl;# 80 default_server;<br>      <span class="hljs-comment"># listen       [::]:80 default_server;</span><br>      server_name  pxxyyz.com;<br>      root         /home/hexo;<br>      <span class="hljs-comment"># ssl on; # 老版本指令</span><br>      ssl_certificate /etc/nginx/conf/XXXXbundle.crt;<br>      ssl_certificate_key /etc/nginx/conf/XXXX.key;<br>      ssl_session_timeout 5m;<br>      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;<br>      ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4!DHE;<br>      ssl_prefer_server_ciphers on;<br><br>      <span class="hljs-comment"># Load configuration files for the default server block.</span><br>      include /etc/nginx/default.d/*.conf;<br><br>      location / &#123;<br>      &#125;<br><br><span class="hljs-comment"># http://pxxyyz.com/jupyter/ to http://pxxyyz.com:8888</span><br>      location ~ /jupyter/?$ &#123;<br>        <span class="hljs-built_in">return</span> 302 http://pxxyyz.com:8888;<br>      &#125;<br>      <br>      error_page 404 /404.html;<br>          location = /40x.html &#123;<br>      &#125;<br><br>      error_page 500 502 503 504 /50x.html;<br>          location = /50x.html &#123;<br>      &#125;<br>  &#125;<br>  server &#123; <span class="hljs-comment">#把http的域名请求转成https</span><br>      listen 80;<br>      server_name pxxyyz.com;<br>      <span class="hljs-built_in">return</span> 301 https://$host<span class="hljs-variable">$request_uri</span>;<br>  &#125;<br></code></pre></td></tr></table></figure><ul><li>重启<code>nginx</code> 并检查配置</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></pre></td><td class="code"><pre><code class="hljs bash">$ service nginx restart<br><span class="hljs-comment"># systemctl restart nginx.service</span><br>$ nginx -t<br><br><span class="hljs-comment"># 得到结果是</span><br><span class="hljs-comment"># nginx: the configuration file /etc/nginx/nginx.conf syntax is ok</span><br><span class="hljs-comment"># nginx: configuration file /etc/nginx/nginx.conf test is successful</span><br></code></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></pre></td><td class="code"><pre><code class="hljs bash">server &#123;<br>    listen 80;<br>    server_name pxxyyz.com;<br>    location /jupyter &#123;<br>          proxy_pass http://pxxyyz.com:8888/tree?<br>     &#125;<br>  &#125;<br></code></pre></td></tr></table></figure><ul><li><p>分析</p><ul><li><p>用<code>proxy_pass</code>得到的重定向是<code>https://pxxyyz.com/jupyter</code></p></li><li><p>对应的服务器访问的是<code>https://HostIP:8888</code></p></li><li><p>正确的<code>Jupyter notebook</code>访问地址却是<code>http://HostIP:8888</code></p></li><li><p>因此问题出在<strong>http的域名强制转成https</strong></p></li><li><p>解决方法：遇到指定链接用<code>return 302</code>返回<strong>http</strong>从而得到正确的结果<sup id="fnref:6" class="footnote-ref"><a href="#fn:6" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[NGINX rewrite location to another port](https://stackoverflow.com/questions/50734724/nginx-rewrite-location-to-another-port)">[6]</span></a></sup></p></li><li><p>结果：</p><ul><li><code>https://pxxyyz.com/jupyter</code>、<code>http://pxxyyz.com/jupyter</code>、<code>http://pxxyyz.com:8888</code>和<code>http://HostIP:8888</code>均能打开<code>Jupyter notebook</code></li><li>但<strong>IP的SSL证书不免费</strong>！<code>https+port</code>的组合访问会出错。</li></ul></li></ul></li></ul><h2 id="补充">补充</h2><h3 id="数学公式">数学公式</h3><p>在此补充一下之前公式不显示的问题。虽然<ahref="https://hexo.fluid-dev.com/docs/">Fluid</a>主题支持<strong>LaTeX数学公式</strong>，但是需要手动操作，而且我按照<ahref="https://hexo.fluid-dev.com/docs/guide/#latex-%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F">教程</a>开启本功能<code>mathjax</code>没有成功，即公式在网页里并没有被渲染和转换。通过网上查找，发现解决这类问题的思路主要是换渲染引擎<sup id="fnref:7" class="footnote-ref"><a href="#fn:7" rel="footnote"><spanclass="hint--top hint--rounded"aria-label="[如何在 hexo 中支持 Mathjax？](https://blog.csdn.net/u014630987/article/details/78670258)">[7]</span></a></sup>，例如<code>pandoc</code>、<code>mathjax</code>、<code>katex</code>。我目前使用<code>mathjax</code>，操作如下：</p><ul><li><p><strong>卸载</strong>默认引擎，并<strong>安装</strong>这个新的渲染引擎</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><code class="hljs bash">$ npm uninstall hexo-renderer-marked --save <br>$ npm install hexo-renderer-kramed --save<br></code></pre></td></tr></table></figure></li><li><p>修改<code>/node_modules/hexo-renderer-kramed/lib/renderer.js</code></p><figure class="highlight js"><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><code class="hljs js"><span class="hljs-comment">// Change inline math rule</span><br><span class="hljs-keyword">function</span> <span class="hljs-title function_">formatText</span>(<span class="hljs-params">text</span>) &#123;<br><span class="hljs-comment">// Fit kramed&#x27;s rule: $$ + \1 + $$</span><br><span class="hljs-comment">// 直接返回text</span><br><span class="hljs-comment">// return text.replace(/`\$(.*?)\$`/g, &#x27;$$$$$1$$$$&#x27;);</span><br><span class="hljs-keyword">return</span> text;<br>&#125;<br></code></pre></td></tr></table></figure></li><li><p>修改hexo的渲染源码<code>/node_modules/kramed/lib/rules/inline.js</code></p><figure class="highlight js"><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><code class="hljs js"><span class="hljs-comment">// 去掉`\\`的额外转义，第11行，将其修改为</span><br><span class="hljs-comment">// escape: /^\\([\\`*&#123;&#125;\[\]()# +\-.!_&gt;])/, </span><br><span class="hljs-attr">escape</span>: <span class="hljs-regexp">/^\\([`*&#123;&#125;\[\]()# +\-.!_&gt;])/</span>,<br><span class="hljs-comment">// 将em标签对应的符号中，去掉`_`，第20行，将其修改为</span><br><span class="hljs-comment">// em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,    </span><br><span class="hljs-attr">em</span>: <span class="hljs-regexp">/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/</span>,<br></code></pre></td></tr></table></figure></li><li><p>停止使用 <code>hexo-math</code>，安装<code>hexo-renderer-mathjax</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><code class="hljs bash">$ npm uninstall hexo-math --save<br>// 不知道是不是必要的<br>$ npm install hexo-renderer-mathjax --save<br></code></pre></td></tr></table></figure></li><li><p>更新 <code>Mathjax</code> 的 <code>CDN</code>链接，打开<code>/node_modules/hexo-renderer-mathjax/mathjax.html</code>，把<code>script</code>更改为：</p><figure class="highlight html"><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><code class="hljs html">// <span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span> <br>// 网上推荐的上面这个，但我使用失败了，推荐下面这个，亲测可行<br><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure></li><li><p>按照<a href="https://hexo.fluid-dev.com/docs/">Fluid</a>的<ahref="https://hexo.fluid-dev.com/docs/guide/#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B">快速开始</a>，需要修改<strong>主题配置</strong>，打开<code>/source/_data/fluid_config.yml</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><code class="hljs yml"><span class="hljs-attr">post:</span><br>  <span class="hljs-attr">math:</span>  <br>    <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span>  <br>    <span class="hljs-attr">specific:</span> <span class="hljs-literal">false</span>   <br>    <span class="hljs-attr">engine:</span> <span class="hljs-string">mathjax</span><br></code></pre></td></tr></table></figure></li><li><p>在根目录下修改<code>_config.yml</code>，添加</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">mathjax:</span> <span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure></li><li><p>在<code>Front-matter</code>中打开<code>MathJax</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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-meta">---</span><br>  <span class="hljs-attr">mathjax:</span> <span class="hljs-literal">true</span><br><span class="hljs-meta">---</span><br></code></pre></td></tr></table></figure></li><li><p>显示数学公式</p><figure class="highlight latex"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs latex"><span class="hljs-params">#</span> 不空行会出bug<br><span class="hljs-built_in">$</span><span class="hljs-built_in">$</span><span class="hljs-keyword">\Sigma</span>(&#123;n&#125; ; &#123;p&#125;)=<span class="hljs-keyword">\left</span><span class="hljs-keyword">\&#123;</span><span class="hljs-keyword">\left</span>(<span class="hljs-keyword">\zeta</span><span class="hljs-built_in">_</span>&#123;1&#125;, <span class="hljs-keyword">\ldots</span>, <span class="hljs-keyword">\zeta</span><span class="hljs-built_in">_</span>&#123;r&#125;<span class="hljs-keyword">\right</span>) <span class="hljs-keyword">\in</span> <span class="hljs-keyword">\mathbb</span>&#123;C&#125;<span class="hljs-built_in">^</span>&#123;n<span class="hljs-built_in">_</span>&#123;1&#125;&#125; <span class="hljs-keyword">\times</span> <span class="hljs-keyword">\cdots</span> <span class="hljs-keyword">\times</span> <span class="hljs-keyword">\mathbb</span>&#123;C&#125;<span class="hljs-built_in">^</span>&#123;n<span class="hljs-built_in">_</span>&#123;r&#125;&#125;: <span class="hljs-keyword">\sum</span><span class="hljs-built_in">_</span>&#123;k=1&#125;<span class="hljs-built_in">^</span>&#123;r&#125;<span class="hljs-keyword">\left</span><span class="hljs-keyword">\|</span>&#123;<span class="hljs-keyword">\zeta</span>&#125;<span class="hljs-built_in">_</span>&#123;k&#125;<span class="hljs-keyword">\right</span><span class="hljs-keyword">\|</span><span class="hljs-built_in">^</span>&#123;2 p<span class="hljs-built_in">_</span>&#123;k&#125;&#125; &lt; 1<span class="hljs-keyword">\right</span><span class="hljs-keyword">\&#125;</span><span class="hljs-built_in">$</span><span class="hljs-built_in">$</span><br></code></pre></td></tr></table></figure></li></ul><p><span class="math display">\[\Sigma({n} ;{p})=\left\{\left(\zeta_{1}, \ldots, \zeta_{r}\right) \in\mathbb{C}^{n_{1}} \times \cdots \times \mathbb{C}^{n_{r}}:\sum_{k=1}^{r}\left\|{\zeta}_{k}\right\|^{2 p_{k}} &lt;1\right\}\]</span></p><div class="note note-primary">            <p>因为<code>hexo-renderer-kramed</code> 和<code>hexo-renderer-marked</code>均不支持<code>emoji</code> 功能，使用:smile: :blush: :smiley: :smirk:在Typora可以正常显示表情，在网页上显示的是<code>:smile: :blush: :smiley: :smirk:</code>，因此，可以直接复制<code>emoji</code>表情😄😊😃😏。</p>           </div><p>经过<strong><ahref="https://zkqiang.cn/">强哥</a></strong>提醒，需要额外使用插件<code>hexo-filter-github-emojis</code>来支持<code>hexo</code>的 <code>emoji</code> 。</p><p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ npm install hexo-filter-github-emojis --save<br></code></pre></td></tr></table></figure></p><p>在根目录下<code>_config.yml</code>添加配置</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></pre></td><td class="code"><pre><code class="hljs yml"><span class="hljs-attr">githubEmojis:</span><br>  <span class="hljs-attr">enable:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">className:</span> <span class="hljs-string">github-emoji</span><br>  <span class="hljs-attr">inject:</span> <span class="hljs-literal">true</span><br>  <span class="hljs-attr">styles:</span><br>  <span class="hljs-attr">customEmojis:</span><br></code></pre></td></tr></table></figure></p><p>正文<code>markdown</code>用如下格式使用 <code>emoji</code></p><p><figure class="highlight django"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs django"><span class="language-xml"># 不空行会出bug</span><br><span class="language-xml"></span><span class="hljs-template-tag">&#123;% <span class="hljs-name">raw</span> %&#125;</span><span class="hljs-template-tag">&#123;% <span class="hljs-name">github_emoji</span> emoji %&#125;</span><span class="hljs-template-tag">&#123;% <span class="hljs-name">endraw</span> %&#125;</span><br></code></pre></td></tr></table></figure></p><p>正如上面所说，Hexo 默认情况下 <code>:emoji:</code>不能正确显示表情，如<code>:tada:</code>，而该插件通过<code>{%github_emoji tada%}(github_emoji tada)</code> 即可显示这个 emoji，其他调用格式可以看 <code>hexo-filter-github-emojis</code> 的<ahref="https://github.com/crimx/hexo-filter-github-emojis">官方文档</a>。</p><h3 id="一键三连">一键三连</h3><p>前面提到的在根目录下使用<code>Git Bash Here</code>输入下面指令有些繁琐。</p><p><figure class="highlight sas"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs sas">$ hexo clean <span class="hljs-variable">&amp;&amp;</span> hexo g <span class="hljs-variable">&amp;&amp;</span> hexo d <span class="hljs-variable">&amp;&amp;</span> hexo b<br></code></pre></td></tr></table></figure></p><p>现在用<code>.bat</code>文件简化，可以分别保存。其中<strong>第四行的地址为根目录</strong>。</p><figure class="highlight livescript"><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><code class="hljs livescript">:: 一键预览<br>@echo <span class="hljs-literal">on</span><br>D:<br>cd D:<span class="hljs-string">\github\Hexo-Blog</span><br>hexo clean &amp;&amp; hexo g &amp;&amp; hexo s<br></code></pre></td></tr></table></figure><figure class="highlight livescript"><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><code class="hljs livescript">:: 一键部署<br>@echo <span class="hljs-literal">on</span><br>D:<br>cd D:<span class="hljs-string">\github\Hexo-Blog</span><br>hexo clean &amp;&amp; hexo g &amp;&amp; hexo d<br></code></pre></td></tr></table></figure><figure class="highlight sas"><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><code class="hljs sas">:: 一键部署+备份<br>@echo <span class="hljs-keyword">on</span><br>D:<br>cd D:\github\Hexo-Blog<br>hexo clean <span class="hljs-variable">&amp;&amp;</span> hexo g <span class="hljs-variable">&amp;&amp;</span> hexo d <span class="hljs-variable">&amp;&amp;</span> hexo b<br></code></pre></td></tr></table></figure><p><strong>一键预览</strong>的窗口支持实时修改实时显示，即文档修改保存后，刷新可得修改后的预览页面。如果做到ssh免密登入，部署与备份也能一键完成。</p><div class="note note-danger" style="text-align:center;color:#0000FF;">免密会带来安全隐患，部署和备份文件最好设置为<div class="label label-default"style="color:#FF0000;font-size:1.2em;font-weight: bold;">私密</div></div><h2 id="参考">参考</h2><section class="footnotes"><div class="footnote-list"><ol><li><span id="fn:1" class="footnote-text"><span><ahref="https://www.muyiio.com/2020/03/28/hexo-bo-ke-bu-shu-dao-teng-xun-yun-fu-wu-qi/">Hexo博客部署到腾讯云服务器</a><a href="#fnref:1" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:2" class="footnote-text"><span><ahref="https://liujunzhou.top/deployer/">使用Git+Hooks实现Hexo站点自动部署到CentOS服务器上</a><a href="#fnref:2" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:3" class="footnote-text"><span><ahref="https://cwyaml.github.io/2017/03/07/backup/">HEXO博客实现自动备份</a><a href="#fnref:3" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:4" class="footnote-text"><span><ahref="https://bitmingw.com/2017/07/09/run-jupyter-notebook-server/">搭建ipython/jupyter notebook 服务器</a><br /><a href="#fnref:4" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:5" class="footnote-text"><span><ahref="https://www.kylin.show/25251.html">hexo部署服务器之配置HTTPS</a><a href="#fnref:5" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:6" class="footnote-text"><span><ahref="https://stackoverflow.com/questions/50734724/nginx-rewrite-location-to-another-port">NGINXrewrite location to another port</a><br /><a href="#fnref:6" rev="footnote" class="footnote-backref">↩︎</a></span></span></li><li><span id="fn:7" class="footnote-text"><span><ahref="https://blog.csdn.net/u014630987/article/details/78670258">如何在hexo 中支持 Mathjax？</a><br /><a href="#fnref:7" rev="footnote" class="footnote-backref">↩︎</a></span></span></li></ol></div></section>]]></content>
    
    
    <summary type="html">尝试用服务器来丰富博客内容，主要包括服务器端的备份(hexo b)和Jupyter的设定</summary>
    
    
    
    <category term="实用技巧" scheme="https://fluid-dev.cn/categories/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/"/>
    
    
    <category term="部署" scheme="https://fluid-dev.cn/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>常见静态网站托管平台使用及多节点部署方案</title>
    <link href="https://fluid-dev.cn/posts/hexo-static/"/>
    <id>https://fluid-dev.cn/posts/hexo-static/</id>
    <published>2020-05-27T07:00:00.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：Vince<br /> 原文地址：<a href="https://i.vince.pub/p/hexo-static/" class="uri">https://i.vince.pub/p/hexo-static/</a></p>           </div><h2 id="前言">前言</h2><p>对于 Hexo来说，我们使用它来部署博客是因为无后端运维和高速渲染页面等优点。选择一个合适的托管平台对于博客来说十分重要，可以免费使用且稳定高速的平台是不存在的，我们总是需要做出妥协。我使用了Github Pages、Coding Pages、Gitee Pages、Netlify 和 Vercel来部署博客，以下为我的使用报告。</p><h2 id="常见托管平台">常见托管平台</h2><figure><imgsrc="https://cdn.jsdelivr.net/gh/vinceying/static@main/images/blog_fluid/static_list.svg"alt="节点" /><figcaption aria-hidden="true">节点</figcaption></figure><h3 id="github-pages">Github Pages</h3><p><span class="label label-primary">免费</span><spanclass="label label-success">扩展性强</span><spanclass="label label-danger">无限制性</span></p><p>使用体验：可以与仓库无缝对接，高效部署，但是没用设置国内节点，在国内访问速度较慢，作为一个海外节点还是非常不错的。相对而言，使用jsdelivr 来加速网站相关文件可以满足基本使用。查看 Github Status，Pages服务会出现偶尔挂掉的情况，但多数仓库文档、演示等都选择了 Github Pages服务。</p><p>使用及扩展：提供二级域名，支持域名绑定及免费 SSL证书。网站内容与仓库保存一致，自动推送。通过使用 Github Actions具有较强扩展性。</p><h3 id="netlify">Netlify</h3><p><span class="label label-primary">免费</span><spanclass="label label-success">扩展性强</span><spanclass="label label-danger">无限制性</span></p><p>使用体验：Netlify 的节点设置在海外，但 Netlify的服务速度尚可，国内部分地区可以到达高速服务。在使用 CDN的情况下，把网站部署在 Netlify 是可以比较好的选择。Vuejs 和 Hexo的官网都部署在 Netlify 上，其稳定性可想而知。Netlify虽然拥有付费功能，但是基本上我们需要使用到的服务都免费。</p><p>使用及扩展：提供二级域名，支持域名绑定及免费 SSL 证书。Netlify 支持Github 或者 Gitlab 等账号登录，如果仓库已经是静态网站文件，每次 Push到仓库 Netlify 都会自动部署。支持 BuildCommand，源文件也可以通过提供的环境自动编译或渲染，类似于一款 CI，与Github Pages 功能相近。</p><h3 id="vercel">Vercel</h3><p><span class="label label-primary">免费</span><spanclass="label label-success">扩展性强</span><spanclass="label label-danger">无限制性</span></p><p>使用体验：Vercel 的体验情况总体和 Netlify相近，节点设置在海外，访问速度尚可。前身是now.sh，作为一个高质量的静态托管平台，Vercel的使用体验非常好，是一个可选的优秀平台。</p><p>使用及扩展：提供二级域名，支持域名绑定及免费 SSL 证书。支持 Github或者 Gitlab 等账号登录，如果仓库已经是静态网站文件，每次 Push到仓库都会自动部署。Vercel 打出了 free forever的口号，也就是说在非商用的情况下，个人可以永久免费使用。支持设置环境并执行相关命令，自动部署不在话下。</p><h3 id="coding">Coding</h3><p><span class="label label-primary">免费</span><spanclass="label label-success">一般扩展性</span><spanclass="label label-danger">限制性</span></p><p>使用体验：Coding是腾讯系的一个国内托管平台，对于人数较少的团体实行免费制度。服务器节点部署在国内，在国内使用访问速度较快。也是国内开放程度比较高的一个代码托管平台了，静态网站功能Coding 最近改版了一下，相对于之前来说更稳定了一些。</p><p>使用及扩展：提供二级域名，支持域名绑定及免费 SSL 证书。基于Kubernetes 的持续部署，可以人我们体验到与 DevOps体系紧密结合的持续部署能力。持续中提供静态网站托管，但是静态网站托管需要实名和绑定手机号。</p><h3 id="gitee">Gitee</h3><p><span class="label label-primary">免费（国内限制）</span><spanclass="label label-success">扩展性较低</span><spanclass="label label-danger">限制性强</span></p><p>使用体验：Gitee 是一个国内托管平台，对比 coding来说较为封闭。静态托管功能上拥有较大限制，且无法自动部署，功能残缺。</p><p>使用及扩展：提供二级域名，非付费版不支持自动部署、域名绑定及免费 SSL证书。如果强制使用 https，可能会造成样式文件失效等问题。</p><h3 id="tcb">TCB</h3><p><span class="label label-primary">付费</span><spanclass="label label-success">扩展性高</span><spanclass="label label-danger">一般限制性</span></p><p>使用体验：TCB(Tencent CloudBase）采用 serverless架构，提供静态托管服务。我的主站就是使用TCB，相对而言因为付费了，所以效果较好，在全国各地有 CDN节点，目前使用是因为腾讯的赞助计划，如果赞助计划失效了，价格过高可能会考虑切换平台。空间较大，流量较多，已经充当CDN 使用了。</p><p>使用及扩展：提供二级域名，支持自动部署及 免费SSL 证书，但是 SSL证书申请可能需要备案。扩展性较强，可以使用 CLI 工具或者 TencentCloudBase Github Action 来部署。</p><h2 id="多节点部署方案">多节点部署方案</h2><p><img src="https://cdn.vince.pub/blog-file/photo/2fc062cb1.png" /></p><h3 id="几个仓库">几个仓库</h3><h4 id="hexo-源码仓库">Hexo 源码仓库</h4><p>从图中可以看到使用了 <code>Blog-Source</code> 这个仓库为 Hexo源码仓库，这个仓库有一个使用了两个 GithubActions，一个用来渲染博客文件并推送到 TCB静态托管平台，一个用来渲染博客文件推送到各个 Git 仓库，理论上一个 Action也可以完成这些任务，但是便于管理我选择了两个 Action。</p><p>推送至各个 Git 仓库</p><figure class="highlight nix"><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></pre></td><td class="code"><pre><code class="hljs nix"><span class="hljs-params">name:</span> Deploy to Repo(Github, Coding, Gitee)<br><span class="hljs-params">on:</span> [push]<br><span class="hljs-params">jobs:</span><br>  <span class="hljs-params">build:</span><br>    <span class="hljs-params">runs-on:</span> ubuntu-latest<br>    <span class="hljs-params">env:</span> <br>      <span class="hljs-params">hTZ:</span> Asia<span class="hljs-symbol">/Shanghai</span><br>    <span class="hljs-params">steps:</span><br>    <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Checkout<br>      <span class="hljs-params">uses:</span> actions<span class="hljs-operator">/</span>checkout@v2<br>      <span class="hljs-params">with:</span><br>        <span class="hljs-params">ref:</span> master<br>    <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Update Submodule<br>      <span class="hljs-params">run:</span> |<br>        git submodule init<br>        git submodule update <span class="hljs-operator">-</span>-remote<br>    <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Setup Node<br>      <span class="hljs-params">uses:</span> actions<span class="hljs-operator">/</span>setup-node@v1<br>      <span class="hljs-params">with:</span><br>        <span class="hljs-params">node-version:</span> <span class="hljs-string">&quot;10.x&quot;</span><br>    <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Hexo Generate<br>      <span class="hljs-params">run:</span> |<br>        rm <span class="hljs-operator">-</span>f .yarnclean<br>        yarn <span class="hljs-operator">-</span>-frozen-lockfile <span class="hljs-operator">-</span>-ignore-engines <span class="hljs-operator">-</span>-ignore-optional <span class="hljs-operator">-</span>-non-interactive <span class="hljs-operator">-</span>-silent <span class="hljs-operator">-</span>-ignore-scripts <span class="hljs-operator">-</span>-production<span class="hljs-operator">=</span><span class="hljs-literal">false</span><br>        rm <span class="hljs-operator">-</span>rf <span class="hljs-symbol">./public</span><br>        yarn run hexo clean<br>        yarn run hexo generate<br>    <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Hexo Deploy<br>      <span class="hljs-params">env:</span><br>        <span class="hljs-params">SSH_PRIVATE:</span> $&#123;&#123; secrets.SSH_PRIVATE &#125;&#125;<br>        <span class="hljs-params">GIT_NAME:</span> vinceying<br>        <span class="hljs-params">GIT_EMAIL:</span> admin@vicne.pub<br>      <span class="hljs-params">run:</span> |<br>        mkdir <span class="hljs-operator">-</span>p ~<span class="hljs-operator">/</span>.ssh<span class="hljs-symbol">/</span><br>        echo <span class="hljs-string">&quot;$SSH_PRIVATE&quot;</span> | tr <span class="hljs-operator">-</span>d &#x27;\r&#x27; <span class="hljs-operator">&gt;</span> <span class="hljs-symbol">~/.ssh/id_rsa</span><br>        chmod <span class="hljs-number">600</span> <span class="hljs-symbol">~/.ssh/id_rsa</span><br>        ssh-keyscan e.coding.net <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span> <span class="hljs-symbol">~/.ssh/known_hosts</span><br>        ssh-keyscan github.com <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span> <span class="hljs-symbol">~/.ssh/known_hosts</span><br>        ssh-keyscan gitee.com <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span> <span class="hljs-symbol">~/.ssh/known_hosts</span><br>        git config <span class="hljs-operator">-</span>-global user.name <span class="hljs-string">&quot;$GIT_NAME&quot;</span><br>        git config <span class="hljs-operator">-</span>-global user.email <span class="hljs-string">&quot;$GIT_EMAIL&quot;</span><br>        yarn run hexo deploy<br></code></pre></td></tr></table></figure><p>推送至 TCB</p><figure class="highlight nix"><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></pre></td><td class="code"><pre><code class="hljs nix"><span class="hljs-params">name:</span> Deploy to Tencent CloudBase<br><span class="hljs-params">on:</span> push<br><span class="hljs-params">jobs:</span><br>  <span class="hljs-params">build:</span><br>    <span class="hljs-params">runs-on:</span> ubuntu-latest<br>    <span class="hljs-params">env:</span><br>      <span class="hljs-params">TZ:</span> Asia<span class="hljs-symbol">/Shanghai</span><br>    <span class="hljs-params">name:</span> Deploy Hexo Souce Repo to Tencent CloudBase<br>    <span class="hljs-params">steps:</span><br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Checkout<br>        <span class="hljs-params">uses:</span> actions<span class="hljs-operator">/</span>checkout@v2<br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Setup Node<br>        <span class="hljs-params">uses:</span> actions<span class="hljs-operator">/</span>setup-node@v1<br>        <span class="hljs-params">with:</span><br>          <span class="hljs-params">node-version:</span> &#x27;<span class="hljs-number">10</span>.x&#x27;<br>      <span class="hljs-comment"># NPM 环境及 Hexo 部署</span><br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> NPM<br>        <span class="hljs-params">run:</span> npm install<br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Clean<br>        <span class="hljs-params">run:</span> <span class="hljs-symbol">./node_modules/.bin/hexo</span> clean<br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Generate<br>        <span class="hljs-params">run:</span> <span class="hljs-symbol">./node_modules/.bin/hexo</span> generate<br>      <span class="hljs-comment"># Deploy static to Tencent CloudBase</span><br>      <span class="hljs-operator">-</span> <span class="hljs-params">name:</span> Deploy static to Tencent CloudBase<br>        <span class="hljs-params">id:</span> deployStatic<br>        <span class="hljs-params">uses:</span> TencentCloudBase<span class="hljs-operator">/</span>cloudbase-action@v1.<span class="hljs-number">1.1</span><br>        <span class="hljs-params">with:</span><br>          <span class="hljs-params">secretId:</span> $&#123;&#123; secrets.SECRET_ID &#125;&#125;<br>          <span class="hljs-params">secretKey:</span> $&#123;&#123; secrets.SECRET_KEY &#125;&#125;<br>          <span class="hljs-params">envId:</span> $&#123;&#123; secrets.ENV_ID &#125;&#125;<br>          <span class="hljs-params">staticSrcPath:</span> public<br></code></pre></td></tr></table></figure><h4 id="github-博客页面仓库">Github 博客页面仓库</h4><p>这个作为使用 Github Pages 服务的仓库，同时在 Netlify 和 Vercel的选择为源仓库，在每次推送至本仓库时，Netlify 和 Vercel都会自动部署新文件。</p><h4 id="cdn-文件仓库">CDN 文件仓库</h4><p>这个仓库作为管理和存放一些需要推送到 CDN 的文件，比如 css文件、图片和视频等，首先是为了便于管理及通过 Github Actions推送 到TCB，其次是为了使用 Jsdelivr CDN 服务作为备用 CDN。</p><h3 id="方案优点">方案优点</h3><ul><li>高效自动化，利用 Github Actions,每次只要 Push 到<code>Blog-Souce</code>和<code>Blog-file</code>仓库就可以全仓库和全节点同步。</li><li>便于管理文件，当主 CDN 失效后，直接替换 CDN 地址链接即可完成启用备用CDN，且备份了文件。</li><li>多设备管理，当切换设备后，直接在不安装环境的情况下直接 Clone即可管理博客，但调试方面还是需要安装环境。特别是在 Github 的云端IDE-Codespace 正式发布后，可以完全通过仓库管理博客。</li></ul>]]></content>
    
    
    <summary type="html">择一个合适的托管平台对于博客来说十分重要，可以免费使用且稳定高速的平台是不存在的，我们总是需要做出妥协。</summary>
    
    
    
    <category term="实用技巧" scheme="https://fluid-dev.cn/categories/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/"/>
    
    
    <category term="部署" scheme="https://fluid-dev.cn/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
  </entry>
  
  <entry>
    <title>利用 GitHub Actions 自动部署 Hexo 博客</title>
    <link href="https://fluid-dev.cn/posts/actions-deploy/"/>
    <id>https://fluid-dev.cn/posts/actions-deploy/</id>
    <published>2020-05-23T11:00:00.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言">前言</h2><p>本文主要讲如何将 GitHub Actions 应用于 Hexo 部署中，如果还不太熟悉GitHub Actions 可以看<ahref="https://zkqiang.cn/posts/e8ed6836/">这篇文章</a>，简单地说 Actions就是在设定的时机触发创建一个虚拟云环境，然后执行一连串动作，从而实现自动部署的功能。</p><h2 id="创建工作流">创建工作流</h2><p>首先要保证你的 Hexo 博客项目是全部提交到 GitHub仓库中，然后在博客目录下创建 <code>.github/workflows/xxx.yml</code>文件，文件名任意。</p><p>文件内容如下，根据自己的需求增删 step：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span>                      <span class="hljs-comment"># Actions 显示的名字，随意设置</span><br><br><span class="hljs-attr">on:</span> [<span class="hljs-string">push</span>]                        <span class="hljs-comment"># 监听到 push 事件后触发</span><br><br><span class="hljs-attr">jobs:</span><br>  <span class="hljs-attr">build:</span><br><br>    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span><br><br>    <span class="hljs-attr">steps:</span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Checkout</span>              <span class="hljs-comment"># 拉取当前执行 Actions 仓库的指定分支</span><br>      <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v2</span><br>      <span class="hljs-attr">with:</span><br>        <span class="hljs-attr">ref:</span> <span class="hljs-string">master</span><br><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Update</span> <span class="hljs-string">Submodule</span>      <span class="hljs-comment"># 如果仓库有 submodule，在这里更新，没有则删掉此步骤</span><br>      <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">        git submodule init</span><br><span class="hljs-string">        git submodule update --remote</span><br><span class="hljs-string"></span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Setup</span> <span class="hljs-string">Node</span>            <span class="hljs-comment"># 安装 Node 环境</span><br>      <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/setup-node@v1</span><br>      <span class="hljs-attr">with:</span><br>        <span class="hljs-attr">node-version:</span> <span class="hljs-string">&quot;10.x&quot;</span><br><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Hexo</span> <span class="hljs-string">Generate</span>         <span class="hljs-comment"># 安装 Hexo 依赖并且生成静态文件</span><br>      <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">        rm -f .yarnclean</span><br><span class="hljs-string">        yarn --frozen-lockfile --ignore-engines --ignore-optional --non-interactive --silent --ignore-scripts --production=false</span><br><span class="hljs-string">        rm -rf ./public</span><br><span class="hljs-string">        yarn run hexo clean</span><br><span class="hljs-string">        yarn run hexo generate</span><br><span class="hljs-string"></span><br>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Hexo</span> <span class="hljs-string">Deploy</span>           <span class="hljs-comment"># 部署步骤，这里以 hexo deploy 为例</span><br>      <span class="hljs-attr">env:</span><br>        <span class="hljs-attr">SSH_PRIVATE:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.SSH_PRIVATE</span> <span class="hljs-string">&#125;&#125;</span><br>        <span class="hljs-attr">GIT_NAME:</span> <span class="hljs-string">yourname</span><br>        <span class="hljs-attr">GIT_EMAIL:</span> <span class="hljs-string">your@email.com</span><br>      <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">        mkdir -p ~/.ssh/</span><br><span class="hljs-string">        echo &quot;$SSH_PRIVATE&quot; | tr -d &#x27;\r&#x27; &gt; ~/.ssh/id_rsa</span><br><span class="hljs-string">        chmod 600 ~/.ssh/id_rsa</span><br><span class="hljs-string">        ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts</span><br><span class="hljs-string">        git config --global user.name &quot;$GIT_NAME&quot;</span><br><span class="hljs-string">        git config --global user.email &quot;$GIT_EMAIL&quot;</span><br><span class="hljs-string">        yarn run hexo deploy</span><br></code></pre></td></tr></table></figure><p>只要配置了 hexo deploy 的都可以通过上面这种方式部署，注意如果是在其他Pages 部署（比如Coding Pages 或者 码云 Pages），<code>ssh-keyscan</code>需要进行增改：</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-comment"># github、gitee 和 coding 三种 Pages 的示例，根据需求替换上例中语句，需要注意的是 coding 是使用二级域名。</span><br><span class="hljs-string">ssh-keyscan</span> <span class="hljs-string">github.com</span> <span class="hljs-string">&gt;&gt;</span> <span class="hljs-string">~/.ssh/known_hosts</span><br><span class="hljs-string">ssh-keyscan</span> <span class="hljs-string">gitee.com</span> <span class="hljs-string">&gt;&gt;</span> <span class="hljs-string">~/.ssh/known_hosts</span><br><span class="hljs-string">ssh-keyscan</span> <span class="hljs-string">e.coding.net</span> <span class="hljs-string">&gt;&gt;</span> <span class="hljs-string">~/.ssh/known_hosts</span><br></code></pre></td></tr></table></figure><p>然后 <code>${{ secrets.SSH_PRIVATE }}</code>这种调用方式，需要提前在下图中设置常量：</p><p><imgsrc="https://fluid.s3.bitiful.net/actions-deploy/1.png?w=1280&amp;fmt=webp" /></p><p>这样做可以避免敏感数据放在 yml文件中被泄漏，即使你是私有仓库也建议这样做，因为设置的常量是无法被二次查看的，就算你账号被盗也不用担心。</p><h2 id="常用步骤配置">常用步骤配置</h2><p>以上是以部署 hexo deploy为例，下面再提供几种其他常见的部署配置，注意修改你自己的变量参数。</p><h3 id="阿里云-oss">阿里云 OSS</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span> <span class="hljs-string">to</span> <span class="hljs-string">OSS</span><br>  <span class="hljs-attr">env:</span><br>    <span class="hljs-attr">OSS_AccessKeyID:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.ACCESS_KEY_ID</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">OSS_AccessKeySecret:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.ACCESS_KEY_SECRET</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">OSS_EndPoint:</span> <span class="hljs-string">oss-ap-southeast-1.aliyuncs.com</span><br>    <span class="hljs-attr">OSS_Bucket:</span> <span class="hljs-string">fluid-dev</span><br>  <span class="hljs-attr">run:</span> <span class="hljs-string">|</span><br><span class="hljs-string">    wget -q http://gosspublic.alicdn.com/ossutil/1.6.10/ossutil64</span><br><span class="hljs-string">    chmod +x ./ossutil64</span><br><span class="hljs-string">    ./ossutil64 config -e $OSS_EndPoint -i $OSS_AccessKeyID -k $OSS_AccessKeySecret -L CH</span><br><span class="hljs-string">    ./ossutil64 rm -r -f oss://$OSS_Bucket/</span><br><span class="hljs-string">    ./ossutil64 cp -r -f ./public oss://$OSS_Bucket/</span><br></code></pre></td></tr></table></figure><h3 id="腾讯云-cos">腾讯云 COS</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span> <span class="hljs-string">to</span> <span class="hljs-string">COS</span><br>  <span class="hljs-attr">uses:</span> <span class="hljs-string">zkqiang/tencent-cos-action@v0.1.0</span><br>  <span class="hljs-attr">with:</span><br>    <span class="hljs-attr">args:</span> <span class="hljs-string">delete</span> <span class="hljs-string">-r</span> <span class="hljs-string">-f</span> <span class="hljs-string">/</span> <span class="hljs-string">&amp;&amp;</span> <span class="hljs-string">upload</span> <span class="hljs-string">-r</span> <span class="hljs-string">./public/</span> <span class="hljs-string">/</span><br>    <span class="hljs-attr">secret_id:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.SECRET_ID</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">secret_key:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.SECRET_KEY</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">bucket:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.BUCKET</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">region:</span> <span class="hljs-string">ap-shanghai</span><br></code></pre></td></tr></table></figure><h3 id="腾讯云开发">腾讯云开发</h3><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span> <span class="hljs-string">to</span> <span class="hljs-string">Tencent</span> <span class="hljs-string">CloudBase</span><br>  <span class="hljs-attr">uses:</span> <span class="hljs-string">TencentCloudBase/cloudbase-action@v1.1.1</span><br>  <span class="hljs-attr">with:</span><br>    <span class="hljs-attr">secretId:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.SECRET_ID</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">secretKey:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.SECRET_KEY</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">envId:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.ENV_ID</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">staticSrcPath:</span> <span class="hljs-string">./public</span><br></code></pre></td></tr></table></figure><h3 id="服务器">服务器</h3><p>如果是直接部署在服务器上，需要通过 FTP/SFTP协议来完成上传操作，因此确保你的服务器开启了 FTP 服务。如果使用FTP-Deploy-Action 的话，需要注意的是因为 <code>./public</code>是在流程中生成的文件，需要添加 <code>.git-ftp-include</code>文件后方可推送，具体请查看相关 <ahref="https://github.com/SamKirkland/FTP-Deploy-Action#build-and-publish-reactangularvue-website/">README</a>中的相关内容。</p><figure class="highlight yaml"><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><code class="hljs yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Deploy</span> <span class="hljs-string">to</span> <span class="hljs-string">Server</span><br>  <span class="hljs-attr">uses:</span> <span class="hljs-string">SamKirkland/FTP-Deploy-Action@3.1.1</span><br>  <span class="hljs-attr">with:</span><br>    <span class="hljs-attr">ftp-server:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.FTP_SERVER</span> <span class="hljs-string">&#125;&#125;</span>      <span class="hljs-comment"># eg: ftp://ftp.xxx.com:22/mypath</span><br>    <span class="hljs-attr">ftp-username:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.FTP_USERNAME</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">ftp-password:</span> <span class="hljs-string">$&#123;&#123;</span> <span class="hljs-string">secrets.FTP_PASSWORD</span> <span class="hljs-string">&#125;&#125;</span><br>    <span class="hljs-attr">local-dir:</span> <span class="hljs-string">./public</span><br></code></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">将 GitHub Actions 应用于 Hexo 部署中，让你不再为部署浪费时间。</summary>
    
    
    
    <category term="实用技巧" scheme="https://fluid-dev.cn/categories/%E5%AE%9E%E7%94%A8%E6%8A%80%E5%B7%A7/"/>
    
    
    <category term="部署" scheme="https://fluid-dev.cn/tags/%E9%83%A8%E7%BD%B2/"/>
    
    <category term="示例" scheme="https://fluid-dev.cn/tags/%E7%A4%BA%E4%BE%8B/"/>
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>搭配 Fluid 如何优雅的写一篇文章</title>
    <link href="https://fluid-dev.cn/posts/fluid-write/"/>
    <id>https://fluid-dev.cn/posts/fluid-write/</id>
    <published>2020-05-13T09:39:30.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：Vince<br /> 原文地址：<a href="https://i.vince.pub/p/fluid-write/" class="uri">https://i.vince.pub/p/fluid-write/</a></p>           </div><h2 id="前言">前言</h2><p>Fluid是一款很十分优雅的主题，那么写一篇优雅的文章搭配它呢？以下会从几个方面来简述，主要还是做几个推荐。</p><h2 id="文章内容">文章内容</h2><h3 id="熟悉-markdown-语法">熟悉 Markdown 语法</h3><p>对于使用 Hexo 的大多数人来说，相信对 Markdown的语法不会陌生。熟练掌握 Markdown语法对我们的写作拥有极大的帮助，这里用少用的表格和脚注来举个例子。至于为什么有些公式、流程图无法渲染，是因为<strong>Markdown 追求简洁式写作，默认渲染器不支持复杂渲染。</strong></p><h4 id="表格">表格</h4><table><thead><tr class="header"><th>站点</th><th style="text-align: center;">地址</th><th style="text-align: right;">介绍</th></tr></thead><tbody><tr class="odd"><td>Fluid Docs</td><td style="text-align: center;">https://hexo.fluid-dev.com/docs/</td><td style="text-align: right;">Fluid 官方文档</td></tr><tr class="even"><td>Hexo-theme-fluid</td><tdstyle="text-align: center;">https://github.com/fluid-dev/hexo-theme-fluid</td><td style="text-align: right;">Fluid Github Repo</td></tr><tr class="odd"><td>Fluid Blog</td><td style="text-align: center;">https://hexo.fluid-dev.com/</td><td style="text-align: right;">Fluid 官方博客</td></tr></tbody></table><figure class="highlight gherkin"><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><code class="hljs gherkin">站点|<span class="hljs-string">地址</span>|<span class="hljs-string">介绍</span><br><span class="hljs-string">--</span>|<span class="hljs-string">:--:</span>|<span class="hljs-string">--:</span><br><span class="hljs-string">Fluid Docs</span>|<span class="hljs-string">https://hexo.fluid-dev.com/docs/</span>|<span class="hljs-string">Fluid 官方文档</span><br><span class="hljs-string">Hexo-theme-fluid</span>|<span class="hljs-string">https://github.com/fluid-dev/hexo-theme-fluid</span>|<span class="hljs-string">Fluid Github Repo</span><br><span class="hljs-string">Fluid Blog</span>|<span class="hljs-string">https://hexo.fluid-dev.com/</span>|<span class="hljs-string">Fluid 官方博客</span><br></code></pre></td></tr></table></figure><h4 id="脚注">脚注</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><code class="hljs markdown">脚注演示[^1]<br>[<span class="hljs-symbol">^1</span>]: <span class="hljs-link">脚注内容演示</span><br></code></pre></td></tr></table></figure><h3 id="善用-html">善用 HTML</h3><p>我们可以在 Markdown 中插入一些简单的 HTML 代码或 CSS片段来获得更多扩展，使得文章内容更具有多样性。以下演示几个简单功能。</p><p><a id="demo">跳转位置演示（跳转位置设置点）</a></p><h4 id="文字颜色">文字颜色</h4><p><span style="color: #519D9E; ">#519D9E颜色演示</span></p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">span</span>  <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;color: #519D9E; &quot;</span>&gt;</span>#519D9E颜色演示<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br></code></pre></td></tr></table></figure><hr /><h4 id="文字大小">文字大小</h4><p><span style="font-size:0.7em;">0.7em 文字大小演示</span></p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">span</span>  <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;font-size:0.7em;&quot;</span>&gt;</span>0.7em 文字大小演示<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br></code></pre></td></tr></table></figure><hr /><h4 id="文字位置">文字位置</h4><p style="text-align:center">内容居中演示</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;text-align:center&quot;</span>&gt;</span>内容居中演示<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span> # 可以修改 text-align 参数来设置文字位置。<br></code></pre></td></tr></table></figure><hr /><h4 id="页内跳转">页内跳转</h4><p><a href="#demo">点击到达跳转位置演示</a></p><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs livecodeserver">&lt;<span class="hljs-keyword">a</span> href=<span class="hljs-string">&quot;#demo&quot;</span>&gt;点击到达跳转位置演示&lt;/<span class="hljs-keyword">a</span>&gt; <span class="hljs-comment"># 在需要跳转的地方添加此代码。</span><br>&lt;<span class="hljs-keyword">a</span> id=<span class="hljs-string">&quot;demo&quot;</span>&gt;跳转位置演示（跳转位置设置点）&lt;/<span class="hljs-keyword">a</span>&gt; <span class="hljs-comment"># 在跳转位置添加次代码。</span><br></code></pre></td></tr></table></figure><hr /><h4 id="综合演示">综合演示</h4><p style="text-align:center;color:#8EC0E4;font-size:1.5em;font-weight: bold;">综合演示<br /><br><br />优雅使用 Fluid 写文章</p><figure class="highlight xml"><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><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">style</span>=<span class="hljs-string">&quot;text-align:center;color:#8EC0E4;font-size:1.5em;font-weight: bold;&quot;</span>&gt;</span><br>综合演示<br><span class="hljs-tag">&lt;<span class="hljs-name">br</span>&gt;</span><br>优雅使用 Fluid 写文章<br><span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br><br></code></pre></td></tr></table></figure><h4 id="iframe-页面镶套">iframe 页面镶套</h4><p>iframe 页面镶套可以帮助我们更好的展示一个页面。比如以下演示页面。</p><iframe src="https://hexo.fluid-dev.com/" width="100%" height="650" name="topFrame" scrolling="yes" noresize="noresize" frameborder="0" id="topFrame"></iframe><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs routeros">&lt;iframe <span class="hljs-attribute">src</span>=<span class="hljs-string">&quot;https://hexo.fluid-dev.com/&quot;</span> <span class="hljs-attribute">width</span>=<span class="hljs-string">&quot;100%&quot;</span> <span class="hljs-attribute">height</span>=<span class="hljs-string">&quot;500&quot;</span> <span class="hljs-attribute">name</span>=<span class="hljs-string">&quot;topFrame&quot;</span> <span class="hljs-attribute">scrolling</span>=<span class="hljs-string">&quot;yes&quot;</span>  <span class="hljs-attribute">noresize</span>=<span class="hljs-string">&quot;noresize&quot;</span> <span class="hljs-attribute">frameborder</span>=<span class="hljs-string">&quot;0&quot;</span> <span class="hljs-attribute">id</span>=<span class="hljs-string">&quot;topFrame&quot;</span>&gt;&lt;/iframe&gt;<br></code></pre></td></tr></table></figure><p>一些参数说明，<code>width="100%"</code>为宽度自适应，高度请根据实际需求跳转，<strong>注意移动端页面是否匹配。</strong><code>scrolling</code> 为滚动条参数。<code>frameborder</code>为边框参数。<code>noresize</code> 属性规定用户无法调整框架的大小。</p><h4 id="details-标签">details 标签</h4><p>用于展示代码较多需要折叠或折叠相关内容，以下为演示，<code>summary</code>填写显示名称。</p><details><summary>Demo</summary><figure class="highlight go"><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><code class="hljs go"><span class="hljs-keyword">type</span> Map <span class="hljs-keyword">struct</span> &#123;<br>  mu Mutex<br>  read atomic.Value<br>  dirty <span class="hljs-keyword">map</span>[<span class="hljs-keyword">interface</span>&#123;&#125;]*entry<br>  misses <span class="hljs-type">int</span><br>&#125;<br></code></pre></td></tr></table></figure></details><p>对应的实现代码：</p><figure class="highlight text"><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></pre></td><td class="code"><pre><code class="hljs text">&lt;details&gt;<br>&lt;summary&gt;Demo&lt;/summary&gt;<br>```go<br>type Map struct &#123;<br>  mu Mutex<br>  read atomic.Value<br>  dirty map[interface&#123;&#125;]*entry<br>  misses int<br>&#125;<br>\```<br>&lt;/details&gt;<br></code></pre></td></tr></table></figure><h3 id="善用-tag-组件">善用 Tag 组件</h3><p>Fluid 内置了许多 Tag组件，包含便签、行内标签（已知不会出现间隔，谨慎使用）、勾选框、按钮和组图，可以使用这些组件来丰富文章内容，具体点击查看官方文档查看，<strong><ahref="https://hexo.fluid-dev.com/docs/guide/#tag-%E6%8F%92%E4%BB%B6">点击跳转到Fluid Doc</a></strong>。</p><h2 id="配图">配图</h2><p>众所周知，<strong>博客好不好看，配图占一半</strong>。这里给大家推荐几个我常用找配图的地方。<strong>另外，请遵循相关网站的版权协议。</strong></p><h3 id="wallpaper-hub">Wallpaper Hub</h3><figure><imgsrc="https://cdn.jsdelivr.net/gh/vinceying/static@main/images/blog_fluid/2020-04-17_175244.png"alt="Wallpaper Hub" /><figcaption aria-hidden="true">Wallpaper Hub</figcaption></figure><p><strong><a href="https://wallpaperhub.app/">点击跳转到 WallpaperHub</a></strong></p><h3 id="wallhaven">Wallhaven</h3><figure><imgsrc="https://cdn.jsdelivr.net/gh/vinceying/static@main/images/blog_fluid/2020-04-17_174841.png"alt="Wallhaven" /><figcaption aria-hidden="true">Wallhaven</figcaption></figure><p><strong><a href="https://wallhaven.cc/">点击跳转到Wallhaven</a></strong></p><h3 id="unsplash">Unsplash</h3><figure><imgsrc="https://cdn.jsdelivr.net/gh/vinceying/static@main/images/blog_fluid/2020-05-14_000557.png"alt="Unsplash" /><figcaption aria-hidden="true">Unsplash</figcaption></figure><p><strong><a href="https://unsplash.com/">点击跳转到Unsplash</a></strong></p>]]></content>
    
    
    <summary type="html">Fluid 是一款很优雅的主题，主要介绍从使用主题拓展和配图来写作。</summary>
    
    
    
    <category term="主题示例" scheme="https://fluid-dev.cn/categories/%E4%B8%BB%E9%A2%98%E7%A4%BA%E4%BE%8B/"/>
    
    
    <category term="示例" scheme="https://fluid-dev.cn/tags/%E7%A4%BA%E4%BE%8B/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="Fluid" scheme="https://fluid-dev.cn/tags/Fluid/"/>
    
  </entry>
  
  <entry>
    <title>使用 Rainbow 展示随机的英语句子</title>
    <link href="https://fluid-dev.cn/posts/hexo-rainbow/"/>
    <id>https://fluid-dev.cn/posts/hexo-rainbow/</id>
    <published>2020-05-08T09:12:56.000Z</published>
    <updated>2026-04-05T19:28:51.547Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：吃白饭<br /> 原文地址：<a href="https://eatrice.top/post/Rainbow/" class="uri">https://eatrice.top/post/Rainbow/</a></p>           </div><p>访问 <a href="https://rainbow.eatrice.top/">Rainbow</a> 吧！</p><h2 id="介绍">介绍</h2><p>Rainbow - 一朵彩虹是<code>EatRiceTeam</code>建立的一个旨在收集优美英语句子的一套网站。演示网站地址为：<ahref="https://rainbow.eatrice.top/">https://rainbow.eatrice.top/</a></p><p>我们希望能够与大家分享我们在日常的学习生活中遇到的优美的英语句子，希望它能像彩虹一样，美丽天空，温暖人心。</p><p>其由<code>C#</code>开发，基于<code>ASP.NET Core 2.2</code>框架。包括<code>Web API</code>提供导出<code>JSON</code>的数据接口，和基于<code>MVC</code>的动态展示网站。</p><h2 id="关于rainbow">关于Rainbow</h2><p>Rainbow 收集的英语句子的要求为：</p><ol type="1"><li>读起来感觉很优美的文章句子段落或诗歌节选；</li><li>含义特别丰富且引人深思的鸡汤或哲学句子；</li><li>句子奇怪，但意义完整且显得很有个性的电影台词；</li><li>你特别喜欢，且引起你感情上共鸣的英语歌词。</li></ol><p>Rainbow 创建的初衷是替代我们的个人网站目前正在使用的 一言，我们希望自己能够自己定义一句话的意思和表现形式。目前句子库不是特别丰富，收集的资源有限，所以欢迎大家投稿，并发表自己的看法。</p><h2 id="给rainbow投稿">给Rainbow投稿</h2><p>我们希望找到小伙伴们和我们一起充实我们的句子库，希望大家能够将自己珍藏的句子分享给我们：</p><p><strong>投稿要求</strong>：</p><ol type="1"><li>提供完整的句子</li><li>提供句子的作者</li><li>提供句子的来源，如书名、文章名、电影名、歌曲名等。</li></ol><p>投稿方式：</p><ol type="1"><li><p><ahref="mailto:qiqi@eatrice.top">EatRice的邮箱：qiqi@eatrice.top</a></p></li><li><p><ahref="dipper.ruru@gmail.com">Courir的邮箱：dipper.ruru@gmail.com</a></p></li><li><p>在本页下方留言</p></li><li><p>好友QQ或微信直接发送</p></li></ol><h2 id="使用方法">使用方法</h2><h3 id="数据接口">数据接口</h3><p>目前语句库饱含了三种类型的语句：reading、movies、songs</p><p>需要从语句库中随机获得语句的<code>Json</code>格式的接口：<code>https://api.eatrice.top/</code></p><p>需要按照三个单独分类请求语句的接口：<br /><code>https://api.eatrice.top/reading/</code><br /><code>https://api.eatrice.top/movies/</code><br /><code>https://api.eatrice.top/songs/</code></p><p>获取所有的句子接口：<code>https://api.eatrice.top/GetAll/</code></p><p>需要根据语句ID请求语句的接口：<code>https://api.eatrice.top/?ID=10001</code><br />ID编号从10001开始增加，若该ID不存在则随机返回语句，同<code>https://api.eatrice.top/</code></p><p>返回的数据格式如下：<br /><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><code class="hljs json"><span class="hljs-punctuation">&#123;</span><br>    <span class="hljs-attr">&quot;Content&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Because I am your mom,It counts the most because I know you the most.&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;Author&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Stephen Chbosky&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;Source&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;Wonder&quot;</span><span class="hljs-punctuation">,</span><br>    <span class="hljs-attr">&quot;ID&quot;</span><span class="hljs-punctuation">:</span> <span class="hljs-string">&quot;10009&quot;</span><br><span class="hljs-punctuation">&#125;</span><br></code></pre></td></tr></table></figure><br />其中，<code>Content</code>为句子内容<br /><code>Author</code>为句子作者<br /><code>Source</code>为句子来源<br /><code>ID</code>为句子ID</p><h3 id="展示网站">展示网站</h3><p>展示网站为 Rainbow 提供展示界面。和说明文档。</p><p>Rainbow的展示网站为：https://rainbow.eatrice.top/<br />欢迎大家访问和提供意见😊😊😊。</p><figure><imgsrc="https://fluid.s3.bitiful.net/hexo-rainbow/1.png?w=1280&amp;fmt=webp"alt="效果图" /><figcaption aria-hidden="true">效果图</figcaption></figure><h2 id="安装">安装</h2><p>在需要添加 <code>rainbow</code> 的地方添加一个占位符:</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;rainbow&quot;</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;&#x27;</span>&gt;</span>🌈 获取中...<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br></code></pre></td></tr></table></figure><p>在申明div之后，搭配数据请求脚本</p><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="language-javascript"></span><br><span class="language-javascript"><span class="hljs-title function_">fetch</span>(<span class="hljs-string">&#x27;https://api.eatrice.top&#x27;</span>)</span><br><span class="language-javascript">  .<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> response.<span class="hljs-title function_">json</span>())</span><br><span class="language-javascript">  .<span class="hljs-title function_">then</span>(<span class="hljs-function"><span class="hljs-params">data</span> =&gt;</span> &#123;</span><br><span class="language-javascript">    <span class="hljs-keyword">var</span> rainbow = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&#x27;rainbow&#x27;</span>);</span><br><span class="language-javascript">    rainbow.<span class="hljs-property">innerHTML</span> = data.<span class="hljs-property">Content</span>;</span><br><span class="language-javascript">    rainbow.<span class="hljs-property">href</span> = <span class="hljs-string">&quot;https://rainbow.eatrice.top/?ID=&quot;</span> + data.<span class="hljs-property">ID</span>;</span><br><span class="language-javascript">  &#125;)</span><br><span class="language-javascript">  .<span class="hljs-title function_">catch</span>(<span class="hljs-variable language_">console</span>.<span class="hljs-property">error</span>)</span><br><span class="language-javascript"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure><p>就能在网站上看到你的 rainbow 啦！</p><h2 id="开源">开源</h2><p>项目已在<code>github</code>上开源</p><ul><li>项目地址：<ahref="https://github.com/QiQiWan/rainbow/">https://github.com/QiQiWan/rainbow/</a></li><li>项目仓库：<ahref="https://github.com/QiQiWan/rainbow/">git@github.com:QiQiWan/rainbow.git</a></li></ul><h2 id="贡献者">贡献者</h2><p><a href="https://eatrice.top">EatRice-https://eatrice.top</a><br /><ahref="https://ruru.eatrice.top">上屋顶看北斗七星-https://ruru.eatrice.top</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note note-success&quot;&gt;
            &lt;p&gt;本文由 Fluid 用户授权转载，版权归原作者所有。&lt;/p&gt; &lt;p&gt;本文作者：吃白饭&lt;br /&gt; 原文地址：&lt;a href=&quot;https://eatrice.top/post/Rainb</summary>
      
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
  <entry>
    <title>Hexo 暗黑模式</title>
    <link href="https://fluid-dev.cn/posts/hexo-darkmode/"/>
    <id>https://fluid-dev.cn/posts/hexo-darkmode/</id>
    <published>2020-04-23T10:04:57.000Z</published>
    <updated>2026-04-05T19:28:51.546Z</updated>
    
    <content type="html"><![CDATA[<div class="note note-success">            <p>本文由 Fluid 用户授权转载，版权归原作者所有。</p> <p>本文作者：Royce<br /> 原文地址：<a href="https://royce2003.top/posts/41212.html" class="uri">https://royce2003.top/posts/41212.html</a></p>           </div><div class="note note-warning">            <p>Fluid 开发组注：主题最新版本已支持暗色模式，本文仅用于学习交流。</p>           </div><p>大概花了一个晚上搞暗黑模式，之后陆续优化了下<br />目前博客已经基本上适配完成了<br />目前是三种方案（优先级递减）<br />1. 媒体查询<br />2. 定时开启<br />3. localStorage/sessionStorage 查询</p><p><code>媒体查询</code>，判断系统是否处于暗黑模式，支持大部分系统<br />Win10 需要浏览器开启软件深色模式<br />Android同理，需要浏览器支持手机开启夜间模式的时候将自身切换到神色模式，目前Chrome 支持，Edge 不支持，其他没测<br />iOS、MacOS 上的 Safari 也支持</p><p><code>定时开启</code>，在规定时间自动开启，如果在该时间段内取消了暗黑模式，能一直保持</p><p><code>localStorage/sessionStorage 查询</code>，能一直保持某一个模式的依赖</p><h3 id="html">HTML</h3><p>在 <code>\themes\fluid\layout\layout.ejs</code> 中找到<code>&lt;body&gt;</code>，在其之后加入如下代码</p><figure class="highlight html"><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></pre></td><td class="code"><pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;dark&quot;</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&quot;switchDarkMode()&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="language-javascript"></span><br><span class="language-javascript">  <span class="hljs-keyword">var</span> isNight = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>().<span class="hljs-title function_">getHours</span>() &gt;= <span class="hljs-number">22</span> || <span class="hljs-keyword">new</span> <span class="hljs-title class_">Date</span>().<span class="hljs-title function_">getHours</span>() &lt; <span class="hljs-number">7</span>; <span class="hljs-comment">// 指定时间</span></span><br><span class="language-javascript">  <span class="hljs-comment">// 依次判断 系统暗黑模式 指定时间 缓存 dark</span></span><br><span class="language-javascript">  <span class="hljs-keyword">if</span>( <span class="hljs-title function_">matchMedia</span>(<span class="hljs-string">&#x27;(prefers-color-scheme: dark)&#x27;</span>).<span class="hljs-property">matches</span> || isNight || <span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">getItem</span>(<span class="hljs-string">&#x27;dark&#x27;</span>) === <span class="hljs-string">&#x27;1&#x27;</span>) &#123;</span><br><span class="language-javascript">    <span class="hljs-keyword">if</span>(!(isNight&amp;&amp;<span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">getItem</span>(<span class="hljs-string">&#x27;noDark&#x27;</span>) === <span class="hljs-string">&#x27;1&#x27;</span>)) &#123;</span><br><span class="language-javascript">      <span class="hljs-variable language_">document</span>.<span class="hljs-property">body</span>.<span class="hljs-property">classList</span>.<span class="hljs-title function_">add</span>(<span class="hljs-string">&#x27;dark&#x27;</span>);</span><br><span class="language-javascript">    &#125;</span><br><span class="language-javascript">  &#125;</span><br><span class="language-javascript">  <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">&#x27;dark&#x27;</span>).<span class="hljs-property">innerHTML</span> = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">&quot;body&quot;</span>).<span class="hljs-property">classList</span>.<span class="hljs-title function_">contains</span>(<span class="hljs-string">&quot;dark&quot;</span>)?<span class="hljs-string">&quot;🌙&quot;</span>:<span class="hljs-string">&quot;🌞&quot;</span>;</span><br><span class="language-javascript"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span><br></code></pre></td></tr></table></figure><div class="note note-danger">            <p>注意！一定紧跟在 <code>body</code> 标签之后，否则会出现闪烁</p>           </div><h3 id="js">JS</h3><p>在自定义 JS 中把下面代码加进去，直接加到 <code>&lt;/body&gt;</code>之前也行</p><figure class="highlight js"><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><code class="hljs js"><span class="hljs-comment">//点击事件</span><br><span class="hljs-keyword">function</span> <span class="hljs-title function_">switchDarkMode</span>(<span class="hljs-params"></span>) &#123;<br><span class="hljs-keyword">if</span> ($(<span class="hljs-string">&#x27;body&#x27;</span>).<span class="hljs-title function_">hasClass</span>(<span class="hljs-string">&#x27;dark&#x27;</span>)) &#123;<br>$(<span class="hljs-string">&quot;#dark&quot;</span>).<span class="hljs-title function_">html</span>(<span class="hljs-string">&quot;🌞&quot;</span>);<br><span class="hljs-variable language_">document</span>.<span class="hljs-property">body</span>.<span class="hljs-property">classList</span>.<span class="hljs-title function_">remove</span>(<span class="hljs-string">&#x27;dark&#x27;</span>);<br><span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">setItem</span>(<span class="hljs-string">&#x27;noDark&#x27;</span>, <span class="hljs-string">&#x27;1&#x27;</span>);<br><span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">setItem</span>(<span class="hljs-string">&#x27;dark&#x27;</span>, <span class="hljs-string">&#x27;0&#x27;</span>);<br>&#125; <span class="hljs-keyword">else</span> &#123;<br>$(<span class="hljs-string">&quot;#dark&quot;</span>).<span class="hljs-title function_">html</span>(<span class="hljs-string">&quot;🌙&quot;</span>); <br><span class="hljs-variable language_">document</span>.<span class="hljs-property">body</span>.<span class="hljs-property">classList</span>.<span class="hljs-title function_">add</span>(<span class="hljs-string">&#x27;dark&#x27;</span>);<br><span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">setItem</span>(<span class="hljs-string">&#x27;dark&#x27;</span>, <span class="hljs-string">&#x27;1&#x27;</span>);<br><span class="hljs-variable language_">localStorage</span>.<span class="hljs-title function_">setItem</span>(<span class="hljs-string">&#x27;noDark&#x27;</span>, <span class="hljs-string">&#x27;0&#x27;</span>);<br>&#125;<br>&#125;<br></code></pre></td></tr></table></figure><h3 id="css">CSS</h3><p>在自定义 CSS 中加入代码</p><div class="note note-primary">            <p>可以用 <code>stylus</code>，能少些写<br /> 但是引入时记得后缀还是 <code>.css</code> 不要变</p>           </div><p>下面是我的样式代码，基本覆盖所有内容<br />有配上些注释，根据自身情况修改，注意缩进</p><figure class="highlight stylus"><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><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br></pre></td><td class="code"><pre><code class="hljs stylus"><span class="hljs-comment">/* 切换按钮 */</span><br><span class="hljs-selector-id">#dark</span><br>  <span class="hljs-attribute">cursor</span> pointer<br>  <span class="hljs-attribute">position</span> fixed<br>  <span class="hljs-attribute">right</span> <span class="hljs-number">40px</span><br>  <span class="hljs-attribute">bottom</span> <span class="hljs-number">98px</span><br>  <span class="hljs-attribute">width</span> <span class="hljs-number">16px</span><br>  <span class="hljs-attribute">height</span> <span class="hljs-number">14px</span><br>  <span class="hljs-attribute">z-index</span> <span class="hljs-number">100</span><br>  <span class="hljs-attribute">font-size</span> <span class="hljs-number">20px</span><br><br><span class="hljs-comment">/*暗黑模式*/</span><br><span class="hljs-selector-class">.dark</span><br>  <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br><br>  <span class="hljs-comment">/* 背景遮罩 */</span><br>  <span class="hljs-selector-class">.mask</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-built_in">rgba</span>(<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,<span class="hljs-number">0</span>,.<span class="hljs-number">7</span>) <span class="hljs-meta">!important</span><br><br>  <span class="hljs-comment">/* 主体 */</span><br>  <span class="hljs-selector-id">#board</span> <br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br>  <br>  <span class="hljs-selector-tag">img</span>  <br>    <span class="hljs-attribute">filter</span> <span class="hljs-built_in">brightness</span>(<span class="hljs-number">50%</span>) // 图片亮度<br><br>  <span class="hljs-selector-tag">p</span><br>  <span class="hljs-selector-class">.index-info</span> <span class="hljs-selector-tag">a</span>  <br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span> <span class="hljs-meta">!important</span><br><br>  <span class="hljs-selector-class">.markdown-body</span><br>    <span class="hljs-selector-tag">h1</span>,<span class="hljs-selector-tag">h2</span>,<span class="hljs-selector-tag">h3</span>,<span class="hljs-selector-tag">h4</span>,<span class="hljs-selector-tag">h5</span>,<span class="hljs-selector-tag">h6</span>,s,<span class="hljs-selector-tag">li</span>  <br>      <span class="hljs-attribute">color</span>:<span class="hljs-number">#a09c9c</span> <span class="hljs-meta">!important</span><br>    <br><br>  <span class="hljs-comment">/* 顶栏 */</span><br>  <span class="hljs-selector-class">.navbar-col-show</span><br>  <span class="hljs-selector-class">.top-nav-collapse</span>  <br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br>    <br>  <span class="hljs-selector-class">.navbar</span> <span class="hljs-selector-tag">a</span>  <br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span> <span class="hljs-meta">!important</span><br>    <br>  <span class="hljs-selector-class">.animated-icon</span> <span class="hljs-selector-tag">span</span>   <span class="hljs-comment">/* 手机端 */</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#a09c9c</span><br><br><br>  <span class="hljs-comment">/* page-number */</span><br>  <span class="hljs-selector-class">.pagination</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span><br>  <span class="hljs-selector-class">.pagination</span> <span class="hljs-selector-class">.current</span>  <br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#6b6b6b73</span>;<br><br><br>  <span class="hljs-comment">/* 打字机 */</span><br>  <span class="hljs-selector-id">#subtitle</span><br>  <span class="hljs-selector-class">.dark</span><span class="hljs-selector-class">.typed-cursor--blink</span><br>  <span class="hljs-selector-class">.scroll-down-arrow</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#dfdfdf</span><br><br><br>  <span class="hljs-comment">/* back to top */</span><br>  <span class="hljs-selector-id">#scroll-top-button</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br><br>    <span class="hljs-selector-tag">i</span><br>      <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br>    <br><br>  <span class="hljs-comment">/* Toc */</span><br>  <span class="hljs-selector-class">.tocbot-list</span> <span class="hljs-selector-tag">a</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br><br>  <span class="hljs-selector-class">.tocbot-active-link</span><br>  <span class="hljs-selector-tag">footer</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#1abc9c</span> <span class="hljs-meta">!important</span><br><br><br>  <span class="hljs-comment">/* footer */</span><br>  <span class="hljs-selector-tag">footer</span><br>  <span class="hljs-selector-tag">footer</span> <span class="hljs-selector-tag">a</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br>    <br><br>  <span class="hljs-comment">/* 归档页 */</span><br>  <span class="hljs-selector-class">.list-group-item</span><br>    <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br>    <br>  <span class="hljs-selector-class">.list-group-item</span><span class="hljs-selector-pseudo">:hover</span><br>  <span class="hljs-selector-class">.tagcloud</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#46484d</span><br><br><br>  <span class="hljs-comment">/* 友链页 */</span><br>  <span class="hljs-selector-class">.links</span><br>    <span class="hljs-selector-class">.card</span>  <br>      <span class="hljs-attribute">background-color</span> <span class="hljs-number">#282c34</span><br>        <br>    <span class="hljs-selector-class">.card-body</span><span class="hljs-selector-pseudo">:hover</span>  <br>      <span class="hljs-attribute">background-color</span> <span class="hljs-number">#46484d</span><br>        <br>    <span class="hljs-selector-class">.link-title</span><br>    <span class="hljs-selector-class">.link-intro</span>  <br>      <span class="hljs-attribute">color</span> <span class="hljs-number">#a09c9c</span><br>    <br><br>  <span class="hljs-comment">/* note标签 配色有点丑 */</span><br>  <span class="hljs-selector-class">.note-info</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#3b5359</span><br>    <span class="hljs-attribute">border-color</span> <span class="hljs-number">#006d80</span><br><br>  <span class="hljs-selector-class">.note-danger</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#783f42</span><br>    <span class="hljs-attribute">border-color</span> <span class="hljs-number">#670009</span><br><br>  <span class="hljs-selector-class">.note-success</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#2a3e2e</span><br>    <span class="hljs-attribute">border-color</span> <span class="hljs-number">#005915</span><br><br>  <span class="hljs-selector-class">.note-warning</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#5b543e</span><br>    <span class="hljs-attribute">border-color</span> <span class="hljs-number">#846500</span><br><br>  <span class="hljs-selector-class">.note-primary</span><br>    <span class="hljs-attribute">background-color</span> <span class="hljs-number">#455a6f</span><br>    <span class="hljs-attribute">border-color</span> <span class="hljs-number">#004188</span><br></code></pre></td></tr></table></figure><h3 id="localstorage">localStorage</h3><p>仔细观察刚刚的 js 代码，在其中用到了 localStorage<br />相当于一个标记，除非被手动清除，否则将会永久保存。</p><p>下面是支持该特性的最低版本</p><p><imgsrc="https://rmt.dogedoge.com/fetch/royce/storage/darkmode/01.png?w=1280&amp;fmt=webp" /></p><p>可以在浏览器控制台中查看他们的值</p><p><imgsrc="https://rmt.dogedoge.com/fetch/royce/storage/darkmode/02.png?w=1280&amp;fmt=webp" /></p><hr /><p>参考 <ahref="https://crosschannel.cc/daily/hexo%E6%B7%BB%E5%8A%A0%E6%9A%97%E8%89%B2%E6%A8%A1%E5%BC%8F.html">https://crosschannel.cc/daily/hexo添加暗色模式.html</a></p>]]></content>
    
    
    <summary type="html">大概花了一个晚上给 Fluid 搞了暗黑模式，之后陆续优化了下，目前博客已经基本上适配完成了，目前有三种方案。</summary>
    
    
    
    <category term="功能增强" scheme="https://fluid-dev.cn/categories/%E5%8A%9F%E8%83%BD%E5%A2%9E%E5%BC%BA/"/>
    
    
    <category term="Hexo" scheme="https://fluid-dev.cn/tags/Hexo/"/>
    
    <category term="用户经验" scheme="https://fluid-dev.cn/tags/%E7%94%A8%E6%88%B7%E7%BB%8F%E9%AA%8C/"/>
    
    <category term="花里胡哨" scheme="https://fluid-dev.cn/tags/%E8%8A%B1%E9%87%8C%E8%83%A1%E5%93%A8/"/>
    
  </entry>
  
</feed>
