<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>真城 mashiro</title><description>久居则安的小窝</description><link>https://blog.mashiro.su/</link><language>zh_CN</language><item><title>浮世一隅，我来胡言乱语</title><link>https://blog.mashiro.su/posts/talk/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/talk/</guid><description>不定时更新的说说</description><pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;code&gt;25/1/1&lt;/code&gt;元旦快乐&lt;/h2&gt;
&lt;p&gt;考完试已经两天了，终于已经解放了&lt;br /&gt;
已经买好去长沙的票&lt;br /&gt;
准备玩上两天先啦&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;24/12/13&lt;/code&gt; 今天又是周五，无课&lt;/h2&gt;
&lt;p&gt;之前考的电路系统计算机算法&lt;code&gt;被老师捞了&lt;/code&gt;&lt;br /&gt;
真的很感谢老师捞捞&lt;br /&gt;
真的十几题简答、计算我就写了三四题都能被捞&lt;br /&gt;
大大前天考的&lt;code&gt;数字电子技术&lt;/code&gt;还挺简单的&lt;br /&gt;
学了两三天就差不多了感觉&lt;br /&gt;
一周多继续&lt;code&gt;加油&lt;/code&gt;吧&lt;br /&gt;
考完了就可以回家了！！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;24/12/3&lt;/code&gt; 这是第一条说说，也是第一话&lt;/h2&gt;
&lt;p&gt;今天是考了一门&lt;code&gt;电路系统分析的计算机算法&lt;/code&gt;&lt;br /&gt;
我TM昨天才开始看知识点，例题是一道没写&lt;br /&gt;
不出意外的，空了一大堆，希望老师能捞一捞&lt;br /&gt;
并且决定明天开始好好复习(其实还没开始学)&lt;br /&gt;
为了三周之后的全科期末&lt;br /&gt;
这是今天的心情bad&lt;/p&gt;
</content:encoded></item><item><title>使用workers自动登录serv00,ct8保活</title><link>https://blog.mashiro.su/posts/serv00/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/serv00/</guid><description>使用Cloudflare workers自动登录serv00，ct8保活</description><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;效果展示&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://img.yukino.top/file/1732430099665_1000125556.jpg&quot; alt=&quot;1000125556.jpg&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;1. 开始配置cloudflare workers&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;创建workers项目&lt;/strong&gt;&lt;br /&gt;
首先打开我们搭大善人cloudflare&lt;br /&gt;
名字随便取&lt;br /&gt;
&lt;img src=&quot;https://img.yukino.top/file/1731833748994_2024-11-17-165245.png&quot; alt=&quot;2024-11-17-165245.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编辑代码&lt;/strong&gt;
&lt;img src=&quot;https://img.yukino.top/file/1731833748465_2024-11-17_165424.png&quot; alt=&quot;2024-11-17_165424.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复制代码进去并点击部署&lt;/strong&gt;&lt;br /&gt;
代码在文章底下&lt;br /&gt;
&lt;img src=&quot;https://img.yukino.top/file/1731834168506_2024-11-17_170024.png&quot; alt=&quot;2024-11-17_170024.png&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2. 添加两个环境变量&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;变量名：&lt;code&gt;ACCOUNTS_JSON&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[  
 { &quot;username&quot;: &quot;name&quot;, &quot;password&quot;: &quot;serv00password&quot;, &quot;panelnum&quot;: &quot;13(我的是13)&quot;, &quot;type&quot;: &quot;serv00&quot; },
 { &quot;username&quot;: &quot;ct8user1&quot;, &quot;password&quot;: &quot;ct8password1&quot;, &quot;type&quot;: &quot;ct8&quot; }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;变量名：&lt;code&gt;TELEGRAM_JSON&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 &quot;telegramBotToken&quot;: &quot;机器人的Token&quot;,
 &quot;telegramBotUserId&quot;: &quot;你的ChatID&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://img.yukino.top/file/1732430979024_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-24%20144909.png&quot; alt=&quot;144909.png&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;3. 设置定时任务&lt;/h2&gt;
&lt;p&gt;我在这里设置每10天执行一次&lt;br /&gt;
&lt;img src=&quot;https://img.yukino.top/file/1732431179865_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-24%20145235.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;4. 检查是否部署成功&lt;/h2&gt;
&lt;p&gt;在编辑代码处手动触发&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击&lt;strong&gt;设定时间&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;再点击&lt;strong&gt;触发计划事件&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;触发之后前往tg查看是否收到消息。
&lt;img src=&quot;https://img.yukino.top/file/1731828030871_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-17%20142418.png&quot; alt=&quot;查询&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;workers代码&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;addEventListener(&apos;fetch&apos;, event =&amp;gt; {
  event.respondWith(handleRequest(event.request))
})

addEventListener(&apos;scheduled&apos;, event =&amp;gt; {
  event.waitUntil(handleScheduled(event.scheduledTime))
})

async function handleRequest(request) {
  return new Response(&apos;Worker is running&apos;)
}

async function handleScheduled(scheduledTime) {
  const accounts = JSON.parse(ACCOUNTS_JSON)
  const results = await loginAccounts(accounts)
  await sendSummary(results)
}

async function loginAccounts(accounts) {
  const results = []
  for (const account of accounts) {
    const result = await loginAccount(account)
    results.push({ ...account, ...result })
    await delay(Math.floor(Math.random() * 8000) + 1000)
  }
  return results
}

function generateRandomUserAgent() {
  const browsers = [&apos;Chrome&apos;, &apos;Firefox&apos;, &apos;Safari&apos;, &apos;Edge&apos;, &apos;Opera&apos;];
  const browser = browsers[Math.floor(Math.random() * browsers.length)];
  const version = Math.floor(Math.random() * 100) + 1;
  const os = [&apos;Windows NT 10.0&apos;, &apos;Macintosh&apos;, &apos;X11&apos;];
  const selectedOS = os[Math.floor(Math.random() * os.length)];
  const osVersion = selectedOS === &apos;X11&apos; ? &apos;Linux x86_64&apos; : selectedOS === &apos;Macintosh&apos; ? &apos;Intel Mac OS X 10_15_7&apos; : &apos;Win64; x64&apos;;

  return `Mozilla/5.0 (${selectedOS}; ${osVersion}) AppleWebKit/537.36 (KHTML, like Gecko) ${browser}/${version}.0.0.0 Safari/537.36`;
}

async function loginAccount(account) {
  const { username, password, panelnum, type } = account
  let url = type === &apos;ct8&apos; 
    ? &apos;https://panel.ct8.pl/login/?next=/&apos; 
    : `https://panel${panelnum}.serv00.com/login/?next=/`

  const userAgent = generateRandomUserAgent();

  try {
    const response = await fetch(url, {
      method: &apos;GET&apos;,
      headers: {
        &apos;User-Agent&apos;: userAgent,
      },
    })

    const pageContent = await response.text()
    const csrfMatch = pageContent.match(/name=&quot;csrfmiddlewaretoken&quot; value=&quot;([^&quot;]*)&quot;/)
    const csrfToken = csrfMatch ? csrfMatch[1] : null

    if (!csrfToken) {
      throw new Error(&apos;CSRF token not found&apos;)
    }

    const initialCookies = response.headers.get(&apos;set-cookie&apos;) || &apos;&apos;

    const formData = new URLSearchParams({
      &apos;username&apos;: username,
      &apos;password&apos;: password,
      &apos;csrfmiddlewaretoken&apos;: csrfToken,
      &apos;next&apos;: &apos;/&apos;
    })

    const loginResponse = await fetch(url, {
      method: &apos;POST&apos;,
      headers: {
        &apos;Content-Type&apos;: &apos;application/x-www-form-urlencoded&apos;,
        &apos;Referer&apos;: url,
        &apos;User-Agent&apos;: userAgent,
        &apos;Cookie&apos;: initialCookies,
      },
      body: formData.toString(),
      redirect: &apos;manual&apos;
    })

    console.log(`Login response status: ${loginResponse.status}`)
    console.log(`Login response headers: ${JSON.stringify(Object.fromEntries(loginResponse.headers))}`)

    const loginResponseBody = await loginResponse.text()
    console.log(`Login response body: ${loginResponseBody.substring(0, 200)}...`)

    if (loginResponse.status === 302 &amp;amp;&amp;amp; loginResponse.headers.get(&apos;location&apos;) === &apos;/&apos;) {
      const loginCookies = loginResponse.headers.get(&apos;set-cookie&apos;) || &apos;&apos;
      const allCookies = combineCookies(initialCookies, loginCookies)

      const dashboardResponse = await fetch(url.replace(&apos;/login/&apos;, &apos;/&apos;), {
        headers: {
          &apos;Cookie&apos;: allCookies,
          &apos;User-Agent&apos;: userAgent,
        }
      })
      const dashboardContent = await dashboardResponse.text()
      console.log(`Dashboard content: ${dashboardContent.substring(0, 200)}...`)

      if (dashboardContent.includes(&apos;href=&quot;/logout/&quot;&apos;) || dashboardContent.includes(&apos;href=&quot;/wyloguj/&quot;&apos;)) {
        const nowUtc = formatToISO(new Date())
        const nowBeijing = formatToISO(new Date(Date.now() + 8 * 60 * 60 * 1000))
        const message = `账号 ${username} (${type}) 于北京时间 ${nowBeijing}（UTC时间 ${nowUtc}）登录成功！`
        console.log(message)
        await sendTelegramMessage(message)
        return { success: true, message }
      } else {
        const message = `账号 ${username} (${type}) 登录后未找到登出链接，可能登录失败。`
        console.error(message)
        await sendTelegramMessage(message)
        return { success: false, message }
      }
    } else if (loginResponseBody.includes(&apos;Nieprawidłowy login lub hasło&apos;)) {
      const message = `账号 ${username} (${type}) 登录失败：用户名或密码错误。`
      console.error(message)
      await sendTelegramMessage(message)
      return { success: false, message }
    } else {
      const message = `账号 ${username} (${type}) 登录失败，未知原因。请检查账号和密码是否正确。`
      console.error(message)
      await sendTelegramMessage(message)
      return { success: false, message }
    }
  } catch (error) {
    const message = `账号 ${username} (${type}) 登录时出现错误: ${error.message}`
    console.error(message)
    await sendTelegramMessage(message)
    return { success: false, message }
  }
}

function combineCookies(cookies1, cookies2) {
  const cookieMap = new Map()
  
  const parseCookies = (cookieString) =&amp;gt; {
    cookieString.split(&apos;,&apos;).forEach(cookie =&amp;gt; {
      const [fullCookie] = cookie.trim().split(&apos;;&apos;)
      const [name, value] = fullCookie.split(&apos;=&apos;)
      if (name &amp;amp;&amp;amp; value) {
        cookieMap.set(name.trim(), value.trim())
      }
    })
  }

  parseCookies(cookies1)
  parseCookies(cookies2)

  return Array.from(cookieMap.entries()).map(([name, value]) =&amp;gt; `${name}=${value}`).join(&apos;; &apos;)
}

async function sendSummary(results) {
  const successfulLogins = results.filter(r =&amp;gt; r.success)
  const failedLogins = results.filter(r =&amp;gt; !r.success)

  let summaryMessage = &apos;登录结果统计：\n&apos;
  summaryMessage += `成功登录的账号：${successfulLogins.length}\n`
  summaryMessage += `登录失败的账号：${failedLogins.length}\n`

  if (failedLogins.length &amp;gt; 0) {
    summaryMessage += &apos;\n登录失败的账号列表：\n&apos;
    failedLogins.forEach(({ username, type, message }) =&amp;gt; {
      summaryMessage += `- ${username} (${type}): ${message}\n`
    })
  }

  console.log(summaryMessage)
  await sendTelegramMessage(summaryMessage)
}

async function sendTelegramMessage(message) {
  const telegramConfig = JSON.parse(TELEGRAM_JSON)
  const { telegramBotToken, telegramBotUserId } = telegramConfig
  const url = `https://api.telegram.org/bot${telegramBotToken}/sendMessage`
  
  try {
    await fetch(url, {
      method: &apos;POST&apos;,
      headers: { &apos;Content-Type&apos;: &apos;application/json&apos; },
      body: JSON.stringify({
        chat_id: telegramBotUserId,
        text: message
      })
    })
  } catch (error) {
    console.error(&apos;Error sending Telegram message:&apos;, error)
  }
}

function formatToISO(date) {
  return date.toISOString().replace(&apos;T&apos;, &apos; &apos;).replace(&apos;Z&apos;, &apos;&apos;).replace(/\.\d{3}Z/, &apos;&apos;)
}

function delay(ms) {
  return new Promise(resolve =&amp;gt; setTimeout(resolve, ms))
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>随机图api文档</title><link>https://blog.mashiro.su/posts/cloudflare_rd-api/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/cloudflare_rd-api/</guid><description>随机图api的使用笔记</description><pubDate>Sat, 23 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;source:&lt;/strong&gt; &lt;a&gt;ToLove-Ru&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;基本格式&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;https://api.yukino.top/pics/rpic&lt;/code&gt;&lt;br /&gt;
无附加参数返回图集:&lt;code&gt;anime&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;参数格式&lt;/h2&gt;
&lt;p&gt;在 URL 查询字符串中，参数格式为 &lt;code&gt;&amp;lt;参数名=&amp;lt;1或者0&lt;/code&gt;；多个参数之间使用 &lt;code&gt;&amp;amp;&lt;/code&gt; 连接。&lt;/p&gt;
&lt;p&gt;当指定多个参数时，它们的关系是“和，并且”（即 SQL 中的 &lt;code&gt;AND&lt;/code&gt;）。&lt;br /&gt;
示例：&lt;code&gt;https://api.yukino.top/pics/rpic?class=scenery&amp;amp;landscape=1&amp;amp;nobjn&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;查询参数&lt;/h2&gt;
&lt;p&gt;:::note[参数类型]
&lt;code&gt;class&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;landscape&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;ua&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;near_square&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;big_size&lt;/code&gt;, &lt;code&gt;mid_size&lt;/code&gt;, &lt;code&gt;small_size&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;big_res&lt;/code&gt;, &lt;code&gt;mid_res&lt;/code&gt;, &lt;code&gt;small_res&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;nobjn&lt;/code&gt;&lt;br /&gt;
:::&lt;/p&gt;
&lt;p&gt;:::tip[参数用法]&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;class&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;选择随机图片的图片集。可供选择的图片集见：&lt;code&gt;数据库的表&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果不指定，默认为 &lt;code&gt;anime&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;landscape&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果不提供该参数，那么默认两种图片都在随机范围之内，也就是sql语句中不会有该条件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1: 横向图片&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;非1: 纵向图片&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;ua&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果不提供该参数且也未提供 landscape，那么默认两种方向图片都在随机范围之内。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果提供 &lt;code&gt;ua&lt;/code&gt;，会忽略掉 &lt;code&gt;landscape&lt;/code&gt; 的值，根据浏览器请求的 &lt;code&gt;User-Agent&lt;/code&gt; 来判断是否为移动端，如果是移动端，则 &lt;code&gt;ua&lt;/code&gt; 会被 &lt;code&gt;landscape=0&lt;/code&gt; 替换（返回纵向图片），否则 &lt;code&gt;ua&lt;/code&gt; 会被 &lt;code&gt;landscape=1&lt;/code&gt; 替换（返回横向图片）。也就是说，自动识别移动端和 PC 端。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;该参数不需要任何值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;near_square&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果不提供该参数，那么默认两种图片都在随机范围之内，也就是sql语句中不会有该条件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1: 近方形图片，即宽高比在 0.909 ~ 1.1 之间的图片&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;非1: 非近方形图片，即宽高比不在 0.909 ~ 1.1 之间的图片&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;big_size&lt;/code&gt;, &lt;code&gt;mid_size&lt;/code&gt;, &lt;code&gt;small_size&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果不提供该参数，那么默认三种图片都在随机范围之内，也就是sql语句中不会有该条件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;哪一项为1，就会查询出该尺寸的图片；哪一项为非1，就不会查询出该尺寸的图片。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;big_res&lt;/code&gt;, &lt;code&gt;mid_res&lt;/code&gt;, &lt;code&gt;small_res&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果不提供该参数，那么默认三种图片都在随机范围之内，也就是sql语句中不会有该条件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;哪一项为1，就会查询出该分辨率的图片；哪一项为非1，就不会查询出该分辨率的图片。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;nobjn&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;如果不提供该参数，那么默认两种图片都在随机范围之内，也就是sql语句中不会有该条件。否则，将过滤掉 bjn 图片。&lt;/li&gt;
&lt;li&gt;bjn 图片是指衣着有些暴露的图片，包括但不限于泳装等。若对此类图片有所顾虑，可以使用该参数。&lt;/li&gt;
&lt;li&gt;不能指定只要bjn参数的图片。
:::&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>如何修改openwrt系统的ip</title><link>https://blog.mashiro.su/posts/openwrt_change_ip/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/openwrt_change_ip/</guid><description>在命令行中修改openwrt的ip地址</description><pubDate>Wed, 20 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Cover image source: &lt;a&gt;ToLove-Ru&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;输入&lt;br /&gt;
&lt;code&gt;vim /etc/config/network&lt;/code&gt;
&lt;img src=&quot;https://img.yukino.top/file/1732086015615_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-20%20145321.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;修改&lt;br /&gt;
&lt;code&gt;option ipaddr&lt;/code&gt;
:::note[注意]
因为使用的是vim编辑器&lt;br /&gt;
编辑之前摁&lt;code&gt;i&lt;/code&gt;进入编辑模式&lt;br /&gt;
编辑完成先摁&lt;code&gt;esc&lt;/code&gt;&lt;br /&gt;
然后先输入冒号&lt;code&gt;:&lt;/code&gt; 再 &lt;code&gt;wq&lt;/code&gt;&lt;br /&gt;
意思是write quit(保存并退出编辑模式)&lt;br /&gt;
最后&lt;code&gt;回车&lt;/code&gt;&lt;br /&gt;
这样才是修改成功
:::
&lt;img src=&quot;https://img.yukino.top/file/1732086019655_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-20%20145356.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;在iStoreOS下&lt;/h2&gt;
&lt;p&gt;可以直接&lt;code&gt;quickstart&lt;/code&gt;修改&lt;br /&gt;
选择&lt;code&gt;Change LAN IP&lt;/code&gt;&lt;br /&gt;
根据提示输入&lt;code&gt;ip&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;网关gateway&lt;/code&gt; 主路由ip&lt;br /&gt;
&lt;code&gt;掩码netmask&lt;/code&gt; 一般是&lt;code&gt;255.255.255.0&lt;/code&gt;
&lt;img src=&quot;https://img.yukino.top/file/1732087206686_%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202024-11-20%20151951.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>记录一些脚本</title><link>https://blog.mashiro.su/posts/collection_scripts/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/collection_scripts/</guid><description>一些经常用得上的脚本代码</description><pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;img source:&lt;/strong&gt;&lt;a&gt;明日方舟arknight&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h3&gt;科技lion的一键脚本&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;升级和装curl&lt;br /&gt;
&lt;code&gt;apt update -y  &amp;amp;&amp;amp; apt install -y curl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;运行脚本&lt;br /&gt;
&lt;code&gt;bash &amp;lt;(curl -sL kejilion.sh)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3&gt;iStoreOS的备份&lt;/h3&gt;
&lt;p&gt;生成备份文件&lt;br /&gt;
&lt;code&gt;wget -O backup.run https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/backup/backup.run &amp;amp;&amp;amp; sh backup.run&lt;/code&gt;&lt;br /&gt;
位置 &lt;code&gt;/tmp/upload/backup.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;恢复&lt;br /&gt;
&lt;code&gt;wget -O restore.run https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/backup/restore.run &amp;amp;&amp;amp; sh restore.run&lt;/code&gt;&lt;br /&gt;
将备份文件上传至 &lt;code&gt;/tmp/upload/backup.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;3x-ui&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;bash &amp;lt;(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;s-ui&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;bash &amp;lt;(curl -Ls https://raw.githubusercontent.com/alireza0/s-ui/master/install.sh)&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;openclash依赖安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#nftables  
opkg update  
opkg install coreutils-nohup bash dnsmasq-full curl ca-certificates ip-full libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;#iptables
opkg update
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;qbittorrent 4.3.9一键安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/networkdu/qb439/refs/heads/main/install.sh &amp;amp;&amp;amp; chmod +x install.sh &amp;amp;&amp;amp; ./install.sh
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>兰空图床随机返图</title><link>https://blog.mashiro.su/posts/lskypro_imgbed/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/lskypro_imgbed/</guid><description>基于兰空图床制作一个随机返回图片的链接</description><pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;兰空图床docker配置&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;docker-compose&lt;/code&gt;配置如下&lt;br /&gt;
集成了&lt;code&gt;mysql&lt;/code&gt; &lt;code&gt;redis&lt;/code&gt;&lt;br /&gt;
需要自己稍微配置一下(略)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;services:
  lskypro:
    image: coldpig/lskypro-docker:latest
    restart: unless-stopped
    hostname: lskypro
    container_name: lskypro
    volumes:
      - /vol2/1000/docker/lskypro/html:/var/www/html
      - /vol2/1000/media/picture:/mnt
    ports:
      - &quot;9080:80&quot;
  lskypro_mysql:
    image: mysql:5.7.37
    restart: unless-stopped
    hostname: lskypro_mysql
    container_name: lskypro_mysql
    # 修改加密规则
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - /vol2/1000/docker/lskypro/mysql/data:/var/lib/mysql
      - /vol2/1000/docker/lskypro/mysql/conf:/etc/mysql
      - /vol2/1000/docker/lskypro/mysql/log:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: lhcssg445723100 # 数据库root用户密码（请自行修改密码）
      MYSQL_DATABASE: lskypro  # 给 lsky-pro 用的数据库名称
  lskypro_adminer:
    image: adminer:latest
    container_name: lskypro_adminer
    hostname: lskypro_adminer
    restart: unless-stopped
    ports:
      - 18080:8080
    environment:
      - ADMINER_DEFAULT_SERVER=lskypro_mysql
  lskypro_redis:
    image: redis:latest
    container_name: lskypro_redis
    hostname: lskypro_redis
    restart: unless-stopped
    ports:
      - &quot;6379:6379&quot;
    volumes:
      - /vol2/1000/docker/lskypro/redis/redis.conf:/etc/redis/redis.conf 
      - /vol2/1000/docker/lskypro/redis/data:/data
    command: redis-server /etc/redis/redis.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;docker映射关系 &lt;code&gt;/vol2/1000/docker/lskypro/html:/var/www/html&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;创建图床文件夹，对应容器内地址&lt;br /&gt;
横屏图片 pc端  &lt;code&gt;/var/www/html/storage/app/random/pc&lt;/code&gt;&lt;br /&gt;
竖屏图片 移动端  &lt;code&gt;/var/www/html/storage/app/random/pe&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;兰空图床配置&lt;/h2&gt;
&lt;h4&gt;创建存储策略&lt;/h4&gt;
&lt;p&gt;如图所示创建存储策略&lt;br /&gt;
注意域名改成自己的域名&lt;br /&gt;
确认该域名可以访问到图床&lt;br /&gt;
&lt;img src=&quot;https://img.yukino.top/file/1732014605778_67243d034e994.webp&quot; alt=&quot;67243d034e994.webp&quot; /&gt;
&lt;img src=&quot;https://img.yukino.top/file/1732014606532_67243e77d5b30.webp&quot; alt=&quot;67243e77d5b30.webp&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;新建存储策略
名字：pc
访问地址：https://yourdomain/c
储存路径：/var/www/html/storage/app/random/pc
名字：mobile
访问地址：https://yourdomain/e
储存路径：/var/www/html/storage/app/random/pe
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;随机返图脚本&lt;/h2&gt;
&lt;p&gt;自动判断接受设备的类型&lt;br /&gt;
根据设备类型返回pc(横屏)或pe(竖屏)里的图&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建脚本  &lt;code&gt;random.php&lt;/code&gt;&lt;br /&gt;
创建php脚本保存在 &lt;code&gt;/html/storage/app/random&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

header(&apos;Access-Control-Allow-Origin: *&apos;); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file-&amp;gt;isFile() &amp;amp;&amp;amp; preg_match(&apos;/\.(gif|jpg|png|jpeg|webp|bmp)$/i&apos;, $file-&amp;gt;getFilename())) {
            $images[] = $file-&amp;gt;getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) &amp;amp;&amp;amp; (time() - filemtime($cache_file)) &amp;lt; 3600) { // Cache for 1 hour
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

$agent = $_SERVER[&apos;HTTP_USER_AGENT&apos;];
// var_dump($agent);

if (stripos($agent, &apos;android&apos;) !== false || stripos($agent, &apos;iphone&apos;) !== false) {
    $img_array = get_cached_images(&apos;../storage/app/random/pe/&apos;, &apos;peimg_cache.json&apos;);
    if (count($img_array) == 0) {
        die(&apos;没找到pe图片文件。请先上传一些图片到 ./data/storage/app/uploads/pe/ 文件夹&apos;);
    }
    header(&apos;Content-Type: image/png&apos;);
    echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
} else {
    $img_array = get_cached_images(&apos;../storage/app/random/pc/&apos;, &apos;pcimg_cache.json&apos;);
    if (count($img_array) == 0) {
        die(&apos;没找到pc图片文件。请先上传一些图片到 ./data/storage/app/uploads/pc/ 文件夹&apos;);
    }
    header(&apos;Content-Type: image/png&apos;);
    echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;修改路由设置&lt;br /&gt;
打开&lt;code&gt;/html/routes/web.php&lt;/code&gt;&lt;br /&gt;
在大约37行添加如下内容&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;Route::get(&apos;random&apos;, function () {return include storage_path(&apos;/app/randmom/random.php&apos;);});
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;上传图片&lt;br /&gt;
将&lt;strong&gt;横屏图片&lt;/strong&gt;上传至&lt;code&gt;pc&lt;/code&gt;文件夹中&lt;br /&gt;
将&lt;strong&gt;竖屏图片&lt;/strong&gt;上传至&lt;code&gt;pe&lt;/code&gt;文件夹中&lt;br /&gt;
可以在兰空的面板里面上传至对应的存储策略&lt;br /&gt;
也可以直接把图片存到对应文件夹&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用方法&lt;br /&gt;
在域名后面加&lt;code&gt;/random&lt;/code&gt;即可&lt;br /&gt;
如&lt;code&gt;https://domain.com/random&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;单独随机返图脚本（无判断pc mobile）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;新建脚本&lt;code&gt;pc.php&lt;/code&gt;&lt;br /&gt;
用于返回横屏图片&lt;br /&gt;
保存在&lt;code&gt;html/storage/app/random&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

header(&apos;Access-Control-Allow-Origin: *&apos;); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file-&amp;gt;isFile() &amp;amp;&amp;amp; preg_match(&apos;/\.(gif|jpg|png|jpeg|webp|bmp)$/i&apos;, $file-&amp;gt;getFilename())) {
            $images[] = $file-&amp;gt;getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) &amp;amp;&amp;amp; (time() - filemtime($cache_file)) &amp;lt; 3600) { // 缓存 1 小时
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

// 获取同目录下 pc 文件夹的图片
$img_array = get_cached_images(&apos;../storage/app/random/pc/&apos;, &apos;pcimg_cache.json&apos;);
if (count($img_array) == 0) {
    echo json_encode([&apos;error&apos; =&amp;gt; &apos;没有找到 PC 图片文件。请先上传一些图片到 ./data/storage/app/uploads/pc/ 文件夹&apos;]);
    exit;
}

// 随机选择一张图片并返回
header(&apos;Content-Type: image/png&apos;);
echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;新建脚本&lt;code&gt;pe.php&lt;/code&gt;&lt;br /&gt;
用于返回竖屏图片&lt;br /&gt;
pe文件夹同理&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

header(&apos;Access-Control-Allow-Origin: *&apos;); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file-&amp;gt;isFile() &amp;amp;&amp;amp; preg_match(&apos;/\.(gif|jpg|png|jpeg|webp|bmp)$/i&apos;, $file-&amp;gt;getFilename())) {
            $images[] = $file-&amp;gt;getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) &amp;amp;&amp;amp; (time() - filemtime($cache_file)) &amp;lt; 3600) { // 缓存 1 小时
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

$img_array = get_cached_images(&apos;../storage/app/random/pe/&apos;, &apos;peimg_cache.json&apos;);
if (count($img_array) == 0) {
    echo json_encode([&apos;error&apos; =&amp;gt; &apos;没有找到 PE 图片文件。请先上传一些图片到 ./data/storage/app/uploads/pe/ 文件夹&apos;]);
    exit;
}

header(&apos;Content-Type: image/png&apos;);
echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;路由设置
打开&lt;code&gt;/html/routes/web.php&lt;/code&gt;
添加如下内容&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;Route::get(&apos;pc&apos;, function () {return include storage_path(&apos;/app/randmom/pe.php&apos;);});
Route::get(&apos;pe&apos;, function () {return include storage_path(&apos;/app/randmom/pe.php&apos;);});
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;根据需要选择地址&lt;br /&gt;
需要横屏图片使用&lt;code&gt;htps://domain.com/pc&lt;/code&gt;&lt;br /&gt;
需要竖屏图片使用&lt;code&gt;htps://domain.com/pe&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>使用Fuwari的小技巧</title><link>https://blog.mashiro.su/posts/guide/</link><guid isPermaLink="true">https://blog.mashiro.su/posts/guide/</guid><description>How to use this blog template.</description><pubDate>Sat, 09 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Cover image source: &lt;a href=&quot;https://www.bilibili.com/bangumi/play/ep248693?spm_id_from=333.337.0.0&amp;amp;from_spmid=666.25.episode.0&quot;&gt;樱花庄的宠物女孩&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This blog template is built with &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;. For the things that are not mentioned in this guide, you may find the answers in the &lt;a href=&quot;https://docs.astro.build/&quot;&gt;Astro Docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Front-matter of Posts&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;---
title: 我的博客标题
published: 2024-03-09 (你猜)
description: 文章的一段简介.
image: ./cover.jpg
tags: [Foo, Bar]  //标签
category: Front-end //文章的分类
draft: false //草稿
---
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The title of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The date the post was published.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A short description of the post. Displayed on index page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The cover image path of the post.&amp;lt;br/&amp;gt;1. Start with &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt;: Use web image&amp;lt;br/&amp;gt;2. Start with &lt;code&gt;/&lt;/code&gt;: For image in &lt;code&gt;public&lt;/code&gt; dir&amp;lt;br/&amp;gt;3. With none of the prefixes: Relative to the markdown file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The tags of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The category of the post.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;draft&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If this post is still a draft, which won&apos;t be displayed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Where to Place the Post Files&lt;/h2&gt;
&lt;p&gt;Your post files should be placed in &lt;code&gt;src/content/posts/&lt;/code&gt; directory. You can also create sub-directories to better organize your posts and assets.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/content/posts/
├── post-1.md
└── post-2/
    ├── cover.png
    └── index.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::tip
tip
:::&lt;/p&gt;
&lt;p&gt;:::note
note
:::&lt;/p&gt;
&lt;p&gt;:::warning
warning
:::&lt;/p&gt;
&lt;p&gt;:::important
important
:::&lt;/p&gt;
&lt;p&gt;:::caution
caution
:::&lt;/p&gt;
&lt;p&gt;:::note[笔记]
笔记内容
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::note[笔记]
笔记内容
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;脚注&lt;/h3&gt;
&lt;p&gt;椎名真白[^1]赛高
[^1]: shiina mashiro&lt;img src=&quot;https://img.yukino.top/file/1732028991901_1732028913163.jpg&quot; alt=&quot;1732028913163.jpg&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;分界线: ----&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;有序列表&lt;br /&gt;
&lt;strong&gt;如何玩到明日方舟&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载&lt;strong&gt;明日方舟&lt;/strong&gt;&lt;br /&gt;
在官方或应用商店下载《明日方舟》客户端。&lt;/li&gt;
&lt;li&gt;安装并打开游戏&lt;br /&gt;
完成安装后，点击图标启动游戏。&lt;/li&gt;
&lt;li&gt;注册/登录账号&lt;br /&gt;
选择已有账号登录或创建新账号。&lt;/li&gt;
&lt;li&gt;开始游戏！&lt;br /&gt;
进入主界面，点击“开始游戏”开始冒险。&lt;/li&gt;
&lt;li&gt;现在就愉快的玩耍吧！&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;无序列表&lt;br /&gt;
&lt;strong&gt;为什么要抽取能天使？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;强力输出&lt;/strong&gt;：能天使拥有高爆发和持续输出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;技能多样&lt;/strong&gt;：技能组合灵活，适应多种战况。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高效辅助&lt;/strong&gt;：不仅输出强大，还能提供队伍支援。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;角色魅力&lt;/strong&gt;：外形和性格都非常受欢迎，粉丝众多。&lt;/li&gt;
&lt;li&gt;现在就愉快的玩耍吧！&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3&gt;添加视频&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;---
title: Include Video in the Post
published: 2023-10-19
// ...
---

&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;YouTube&lt;/h2&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;100%&quot; height=&quot;468&quot; src=&quot;https://www.youtube.com/embed/5gIf0_xpFPI?si=N1WTorLKL0uwLsU_&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
</content:encoded></item></channel></rss>