{"title":"\u963f\u677e\u7684\u535a\u5ba2","subtitle":"\u4e00\u4f4d\u666e\u901a\u7684\u5976\u7238\uff0c\u4e00\u4e2a\u4e0d\u51fa\u540d\u7684\u7a0b\u5e8f\u5458\uff0c\u6b63\u5728\u52aa\u529b\u8d5a\u94b1\u548c\u611f\u53d7\u751f\u6d3b","updated":"2026-01-19T18:41:45-08:00","id":"https:\/\/xiaoshame.github.io\/","link":[{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/"}},{"@attributes":{"rel":"self","type":"application\/atom+xml","href":"https:\/\/xiaoshame.github.io\/atom.xml"}}],"author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","generator":"Hugo","entry":[{"title":"\n\u7406\u8d22\u4fe1\u606f\u6e90\u548c\u5957\u5229\u65b9\u6cd5\u6574\u7406","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/","updated":"2025-12-19T13:54:10+08:00","published":"2025-12-19T13:54:10+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u6574\u7406\u65e5\u5e38\u770b\u7684\u7406\u8d22\u4fe1\u606f\u6e90\u548c\u901a\u8fc7\u4fe1\u606f\u5dee\u5957\u5229\u65b9\u6cd5","content":"\n<p>\u6c47\u603b\u68b3\u7406\u4e0b\u7406\u8d22\u65b9\u9762\u7684\u4fe1\u606f<\/p>\n<h2 id=\"\u4fe1\u606f\u6e90\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/#\u4fe1\u606f\u6e90\" class=\"anchor-link\" aria-label=\"\u4fe1\u606f\u6e90\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/#contents:\u4fe1\u606f\u6e90\" class=\"headings\">\u4fe1\u606f\u6e90<\/a><\/h2>\n<ol>\n<li>X Mistery\uff0c\u5927\u76d8\u6700\u8fd1\u7684\u8d70\u52bf\u548c\u5224\u65ad\uff0c\u4ea4\u6613\u7b56\u7565\uff0c\u8d8b\u52bf\u5224\u65ad<\/li>\n<li>\u516c\u4f17\u53f7 \u732b\u7b14\u5200,\u65e5\u5e38\u8d22\u7ecf\u76f8\u5173\u7684\u4e8b\u4ef6<\/li>\n<li>\u89c6\u9891\u53f7 \u859b\u677e\u9e2d\uff0c\u91cd\u70b9\u770b\u6bcf\u5929\u7684\u5207\u7247\uff0c\u83b7\u53d6\u9488\u5bf9\u65b0\u624b\u64cd\u4f5c\u7684\u5efa\u8bae<\/li>\n<\/ol>\n<h2 id=\"\u4fe1\u606f\u5dee\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/#\u4fe1\u606f\u5dee\" class=\"anchor-link\" aria-label=\"\u4fe1\u606f\u5dee\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/information_gap\/#contents:\u4fe1\u606f\u5dee\" class=\"headings\">\u4fe1\u606f\u5dee<\/a><\/h2>\n<ol>\n<li>lof\u57fa\u91d1\u5957\u5229\n<ul>\n<li>lof\u57fa\u91d1\u5177\u5907\u573a\u5916\u8d2d\u4e70\u573a\u5185\u5356\u51fa\u7684\u7279\u70b9\uff0c\u5f53LOF\u57fa\u91d1\u573a\u5185\u6709\u6ea2\u4ef7\u65f6\uff0c\u5c31\u5b58\u5728\u5957\u5229\u7a7a\u95f4\u3002<\/li>\n<li>\u573a\u5185\u7533\u8d2d\u5373\u53ef\u4ee5\u6bcf\u65e5\u51c0\u503c(\u573a\u5916\u4ef7\u683c)\u7533\u8d2d\uff0c\u4efd\u989d\u5230\u8d26\u540e\u76f4\u63a5\u573a\u5185\u5356\u51fa\uff0c\u83b7\u53d6\u573a\u5185\u6ea2\u4ef7\u7684\u5229\u6da6\u3002<\/li>\n<li>\u6ce8\u610f\u5f00\u6237\u65f6\u95ee\u6e05\u695aETF\u4f63\u91d1\uff0c\u514d\u4e94\u4f18\u5148\uff0c\u907f\u514d\u6ea2\u4ef7\u65e0\u6cd5\u8986\u76d6\u624b\u7eed\u8d39\u5bfc\u81f4\u4e8f\u635f\u3002<\/li>\n<li>16\u5f00\u5934\u662f\u6df1\u5e02\u57fa\u91d1,\u4e00\u4e2a\u4eba\u6700\u591a\u53ef\u4ee5\u67096\u4e2a\u6df1\u5e02\u8d26\u53f7\uff0c\u5168\u90e8\u5f00\u901a\u540e\uff0c\u53ef\u4ee5\u5728\u5238\u5546\u901a\u8fc7\u4e00\u6b21\u64cd\u4f5c\uff0c\u591a\u4e2a\u8d26\u53f7\u7533\u8d2d\u5b9e\u73b0\u62d6\u62c9\u673a\u3002<\/li>\n<li><a href=\"https:\/\/www.haoetf.com\/lof\" target=\"_blank\" rel=\"noopener\">LOF\u6ea2\u4ef7\u7f51\u7ad9\u4fe1\u606f\u67e5\u8be2<\/a><\/li>\n<li>\u6700\u8fd1\u767d\u94f6\u6ea2\u4ef730%\uff0c\u57fa\u91d1\u9650\u5236\u4e00\u4e2a\u8eab\u4efd\u8bc1\u53ea\u80fd\u4e00\u4e2a\u8d26\u53f7\u8d2d\u4e70<\/li>\n<\/ul>\n<\/li>\n<li>\u4e2d\u8bc1500\u6edaIC\n<ul>\n<li>\u6eda\u52a8\u64cd\u4f5c\u4e2d\u8bc1500\u80a1\u6307\u671f\u8d27\uff0c\u6838\u5fc3\u5c31\u662f\u8d5aic\u671f\u8d27\u957f\u671f\u5b58\u5728\u7684\u8d34\u6c34\uff0c\u5373\u671f\u8d27\u4ef7\u683c\u4f4e\u4e8e\u73b0\u8d27\u4ef7\u683c\uff0c\u8fdc\u6708\u7684\u4ef7\u683c\u4f4e\u4e8e\u8fd1\u6708\u4ef7\u683c\u3002<\/li>\n<li>\u6708\u521d\u7684\u65f6\u5019\u4e70\u5165\u4e0b\u4e2a\u6708\u5230\u671f\u7684\u5408\u7ea6\uff0c\u7136\u540e\u5728\u4e34\u8fd1\u4ea4\u5272\u65e5\uff08\u6bcf\u4e2a\u6708\u7b2c\u4e09\u4e2a\u661f\u671f\u4e94\uff09\u5356\u51fa\u8be5\u5408\u7ea6\uff0c\u65e0\u7f1d\u8854\u63a5\u7684\u4e70\u5165\u5230\u4e0b\u4e0b\u4e2a\u6708\u7684\u5408\u7ea6\u3002\u901a\u8fc7\u6bcf\u6708\u7684\u6eda\u52a8\u79fb\u4ed3\uff0c\u56e0\u4e3a\u671f\u8d27\u7684\u4ef7\u683c\u4f1a\u5411\u73b0\u8d27\u4ef7\u683c\u9760\u8fd1\uff0c\u6240\u4ee5\u53ef\u4ee5\u83b7\u5f97\u6bcf\u4e2a\u6708\u7684\u8d34\u6c34\u3002<\/li>\n<li>\u6edaic\u672c\u8d28\u4e0a\u662f\u505a\u65f6\u95f4\u7684\u670b\u53cb\uff0c\u5728\u65e0\u6760\u6746\u7684\u60c5\u51b5\u4e0b\uff0c\u4ec5\u4ec5\u9760\u5403\u8d34\u6c34\u5c31\u80fd\u83b7\u5f97\u5927\u698210%\u7684\u6536\u76ca\u3002\u6301\u6709\u65f6\u95f4\u8d85\u8fc75\u5e74\uff0c\u5373\u53ef\u83b7\u5f9750%\u7684\u5b89\u5168\u57ab\uff0c\u4e5f\u5373\u6307\u6570\u4e0b\u8dcc\u4e0d\u8d85\u8fc750%\u5c31\u6709\u6536\u76ca\uff0c\u540e\u9762\u6bcf\u5e7410%\u7684\u8865\u8d34\u90fd\u662f\u6536\u76ca\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u53ef\u8f6c\u503a\u6253\u65b0\n<ul>\n<li>\u591a\u6570\u65b0\u503a\u4e0a\u5e02\u9996\u65e5\u8868\u73b0\u826f\u597d\uff0c\u80fd\u4ee510%-30%\u751a\u81f3\u66f4\u9ad8\u7684\u6ea2\u4ef7\u5356\u51fa\uff0c\u5b9e\u73b0\u5feb\u901f\u56de\u672c\u548c\u76c8\u5229<\/li>\n<li>\u65b0\u7528\u6237\u5f00\u901a\u6743\u9650\uff1a\u9700\u6ee1\u8db3\u6700\u8fd120\u4e2a\u4ea4\u6613\u65e5\u65e5\u574720\u4e07\u5143\u8d44\u4ea7\uff0c\u4e14\u67092\u5e74\u4ee5\u4e0a\u8bc1\u5238\u4ea4\u6613\u7ecf\u9a8c\u3002\u8001\u7528\u6237\uff1a\u57282022\u5e746\u6708\u524d\u5df2\u5f00\u901a\u6743\u9650\u7684\uff0c\u4e0d\u53d7\u65b0\u89c4\u5f71\u54cd\u3002<\/li>\n<li>\u4e2d\u7b7e\u57fa\u672c\u662f1000\u5757\u989d\u5ea6\uff0c\u6caa\u5e02\u4e3a1\u624b\uff0810\u5f20\/1000\u5143\uff09\uff0c\u6df1\u5e02\u4e3a10\u5f20\u3002\u4e0a\u5e02\u5f53\u5929\u5356\u51fa\u8d5a\u53d6\u6ea2\u4ef7\u5373\u53ef<\/li>\n<\/ul>\n<\/li>\n<li>\u79d1\u521b\u677f\u6253\u65b0\n<ul>\n<li>\u5f00\u901a\u6743\u9650\uff1a\u8fd120\u4e2a\u4ea4\u6613\u65e5\u65e5\u5747\u8d44\u4ea7\u4e0d\u4f4e\u4e8e50\u4e07\u4eba\u6c11\u5e01\u3001\u8bc1\u5238\u4ea4\u6613\u7ecf\u9a8c\u6ee124\u4e2a\u6708<\/li>\n<li>\u5e02\u503c\u8981\u6c42\uff1a\u53c2\u4e0e\u7f51\u4e0a\u7533\u8d2d\u524d20\u4e2a\u4ea4\u6613\u65e5\uff08\u542bT-2\u65e5\uff09\uff0c\u65e5\u5747\u6301\u6709\u4e0a\u6d77\u5e02\u573a\u975e\u9650\u552eA\u80a1\u53ca\u5b58\u6258\u51ed\u8bc1\u603b\u5e02\u503c\u9700\u8fbe1\u4e07\u5143\uff08\u6df1\u5e02\u5e02\u503c\u4e0d\u8ba1\uff09\u3002<\/li>\n<li>\u7533\u8d2d\u989d\u5ea6\uff1a\u6bcf5000\u5143\u65e5\u5747\u5e02\u503c\u53ef\u7533\u8d2d1\u4e2a\u5355\u4f4d\uff0c\u6bcf\u5355\u4f4d\u4e3a500\u80a1\uff0c\u7533\u8d2d\u6570\u91cf\u9700\u4e3a500\u80a1\u7684\u6574\u6570\u500d\u3002<\/li>\n<li>\u4eca\u5e74\u6469\u5c14\u7ebf\u7a0b\u4e00\u7b7e\u6700\u591a\u8d5a28.69\u4e07\uff0c\u6c90\u66e6\u80a1\u4efd\u9996\u65e5\u5355\u7b7e\u6700\u9ad8\u53ef\u8d5a\u8fd140\u4e07<\/li>\n<li>\u6743\u9650\u5f00\u901a\u540e\u8fd9\u79cd\u70ed\u95e8\u80a1\u53bb\u6478\u4e2a\u5956<\/li>\n<\/ul>\n<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E8%B4%A2%E5%95%86\/","term":"\u8d22\u5546","label":"\u8d22\u5546"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E4%BF%A1%E6%81%AF%E5%B7%AE\/","term":"\u4fe1\u606f\u5dee","label":"\u4fe1\u606f\u5dee"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%90%86%E8%B4%A2\/","term":"\u7406\u8d22","label":"\u7406\u8d22"}}]},{"title":"\n\u4f7f\u7528claw cloud\u514d\u8d39\u90e8\u7f72wewe rss","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/","updated":"2025-07-08T17:08:56+08:00","published":"2025-07-08T17:08:56+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4e92\u8054\u7f51\u6709\u5f88\u591a\u514d\u8d39\u7684\u8d44\u6e90\uff0c\u5408\u7406\u5229\u7528\u53ef\u4ee5\u7701\u65f6\u7701\u529b\u7701\u5fc3","content":"\n<p>\u672c\u6587\u8bb0\u5f55\u4f7f\u7528<a href=\"https:\/\/us-east-1.run.claw.cloud\/\" target=\"_blank\" rel=\"noopener\">claw cloud<\/a>\u514d\u8d39\u8d44\u6e90\uff0c\u90e8\u7f72<a href=\"https:\/\/github.com\/cooderl\/wewe-rss\" target=\"_blank\" rel=\"noopener\">wewe_rss<\/a>\u7684\u64cd\u4f5c\u6d41\u7a0b\u3002<\/p>\n<h3 id=\"\u4f18\u52bf\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#\u4f18\u52bf\" class=\"anchor-link\" aria-label=\"\u4f18\u52bf\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#contents:\u4f18\u52bf\" class=\"headings\">\u4f18\u52bf<\/a><\/h3>\n<ol>\n<li>claw cloud\u4f7f\u7528github\u8d26\u53f7(\u6ce8\u518c\u8d85\u8fc7 180 \u5929)\u767b\u5f55\uff0c\u514d\u8d39\u90015\u7f8e\u5143\/\u6708\u989d\u5ea6<\/li>\n<li>\u53ef\u4ee5\u4f7f\u7528<a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" rel=\"noopener\">dockerhub<\/a>\u4e2d\u955c\u50cf\u8fdb\u884c\u90e8\u7f72<\/li>\n<li>\u57fa\u4e8e\u672c\u6587\u64cd\u4f5c\u6d41\u7a0b\u53ef\u4ee5\u90e8\u7f72\u652f\u6301\u955c\u50cf\u90e8\u7f72\u7684\u670d\u52a1\uff0c\u4f8b\u5982\uff1afreshrss,qinglong\u7b49<\/li>\n<\/ol>\n<h3 id=\"\u64cd\u4f5c\u6b65\u9aa4\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#\u64cd\u4f5c\u6b65\u9aa4\" class=\"anchor-link\" aria-label=\"\u64cd\u4f5c\u6b65\u9aa4\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#contents:\u64cd\u4f5c\u6b65\u9aa4\" class=\"headings\">\u64cd\u4f5c\u6b65\u9aa4<\/a><\/h3>\n<ol>\n<li>\u4f7f\u7528github\u8d26\u53f7\u767b\u5f55\uff0c\u5982\u679c\u65e0\u6cd5\u767b\u5f55\u53ef\u4ee5\u5207\u6362\u9009\u62e9\u5176\u4ed6\u533a\u57df<\/li>\n<li>\u5728dockerhub\u4e2d\u5bfb\u627e\u60f3\u90e8\u7f72\u670d\u52a1\u7684\u955c\u50cf,\u67e5\u770b\u5bf9\u5e94\u670d\u52a1\u7684\u542f\u52a8\u811a\u672c<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">docker run -d \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> --name wewe-rss \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> -p 4000:4000 \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> -e DATABASE_TYPE=sqlite \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> -e AUTH_CODE=123567 \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> -v $(pwd)\/data:\/app\/data \\\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> cooderl\/wewe-rss-sqlite:latest\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol start=\"3\">\n<li>\u4ece\u4e0a\u8ff0\u811a\u672c\u53ef\u4ee5\u83b7\u53d6\u4e09\u4e2a\u4fe1\u606f\n<ol>\n<li>\u955c\u50cf\u540d\uff0ccooderl\/wewe-rss-sqlite<\/li>\n<li>\u73af\u5883\u53d8\u91cfDATABASE_TYPE=sqlite\u548cAUTH_CODE=123567<\/li>\n<li>\u6302\u8f7d\u76ee\u5f55\/data<\/li>\n<li>\u7aef\u53e3<\/li>\n<\/ol>\n<\/li>\n<li>\u5728claw cloud\u4e2d\u70b9\u51fbApp Launchpad -&gt; Create App\uff0c\u7136\u540e\u6309\u7167\u4e0b\u56fe\u5c06\u7b2c\u4e09\u70b9\u4e2d\u4fe1\u606f\u586b\u5165\u76f8\u5e94\u4f4d\u7f6e\uff0c\u70b9\u51fb\u90e8\u7f72\u5373\u53ef\u3002\n<ol>\n<li><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/claw_cloud\/1.png\" alt=\"\u90e8\u7f72\"><\/li>\n<\/ol>\n<\/li>\n<li>cpu\u548c\u5185\u5b58\u6839\u636e\u9700\u8981\u8fdb\u884c\u8c03\u8282\uff0c\u5de6\u8fb9\u6709\u4e00\u5929\u9884\u4f30\u8d39\u7528\uff0c\u4fdd\u8bc1\u6708\u8d39\u7528\u4e0d\u8d855\u7f8e\u5143\uff0c\u5373\u53ef\u957f\u65f6\u95f4\u4f7f\u7528<\/li>\n<\/ol>\n<h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/claw_cloud\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>wewe-rss\u767b\u5f55\u5fae\u4fe1\u8d26\u53f7\u9891\u7e41\u6389\u7ebf\u5bfc\u81f4\u83b7\u53d6\u516c\u4f17\u53f7\u4e0d\u7a33\u5b9a\uff0c\u53ef\u6362\u6210<a href=\"https:\/\/github.com\/rachelos\/we-mp-rss\" target=\"_blank\" rel=\"noopener\">we-mp-rss<\/a> \u4e0d\u8db3\u4e4b\u5904\u662f4\u5929\u5c31\u8981\u626b\u7801\u6388\u6743\u7ef4\u6301\u767b\u5f55\u72b6\u6001<\/li>\n<li>\u4e92\u8054\u7f51\u4e0a\u6709\u5f88\u591a\u514d\u8d39\u7684\u8d44\u6e90\uff0c\u5229\u7528\u597d\u53ef\u4ee5\u6781\u5927\u65b9\u4fbf\u4e2a\u4eba\u65e5\u5e38\u4f7f\u7528\u3002\u63a8\u8350\u51e0\u4e2a\u6211\u4f7f\u7528\u7684\u670d\u52a1\uff0cvercel\/cloudflare\/nic.ua\/aws.amazon.com<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%99%BD%E5%AB%96\/","term":"\u767d\u5ad6","label":"\u767d\u5ad6"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rss\/","term":"RSS","label":"RSS"}}]},{"title":"\n2024\u5e74\u603b\u7ed3","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/","updated":"2025-02-07T16:00:00+08:00","published":"2025-02-07T16:00:00+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n24\u5e74\u4e2a\u4eba\u5de5\u4f5c\u548c\u751f\u6d3b\u603b\u7ed3","content":"\n<p>\u4e00\u6643\u53c8\u8fc7\u53bb\u4e86\u4e00\u5e74\uff0c\u65f6\u95f4\u786e\u5b9e\u8fc7\u5f97\u592a\u5feb\u4e86\u3002\u524d\u6bb5\u65f6\u95f4\u770b\u5230\u4e00\u4e2a\u89c2\u70b9\uff0c\u5c0f\u65f6\u5019\u89c9\u5f97\u65f6\u95f4\u8fc7\u5f97\u6162\uff0c\u662f\u56e0\u4e3a\u6bcf\u5929\u90fd\u53ef\u4ee5\u63a5\u89e6\u5230\u4e0d\u540c\u7684\u4e1c\u897f\u3002\u957f\u5927\u540e\u611f\u89c9\u8fc7\u5f97\u5f88\u5feb\uff0c\u662f\u56e0\u4e3a\u6bcf\u5929\u90fd\u662f\u91cd\u590d\u3002\u60f3\u60f3\u633a\u6709\u9053\u7406\uff0c\u6162\u6162\u505a\u51fa\u6539\u53d8\uff0c\u63d0\u5347\u751f\u6d3b\u8d28\u91cf\u3002<\/p>\n<h3 id=\"\u5de5\u4f5c\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#\u5de5\u4f5c\" class=\"anchor-link\" aria-label=\"\u5de5\u4f5c\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#contents:\u5de5\u4f5c\" class=\"headings\">\u5de5\u4f5c<\/a><\/h3>\n<p>\u516c\u53f8\u4e1a\u52a1\u5e02\u573a\u4efd\u989d\u6301\u7eed\u4e0b\u6ed1\uff0c\u4e3a\u4e86\u6d3b\u4e0b\u53bb\uff0c\u6301\u7eed\u88c1\u5458\uff0c\u76f8\u6bd4\u9ad8\u5cf0\u671f\u4eba\u5458\u5df2\u7ecf\u51cf\u5c1175%\uff0c\u73b0\u5728\u5927\u5bb6\u5bf9\u88c1\u5458\u65e9\u5df2\u4e60\u4ee5\u4e3a\u5e38\u3002\u60f3\u79bb\u804c\u7684\u4eba\u4e5f\u4e0d\u4f1a\u4e3b\u52a8\u79bb\u804c\uff0c\u800c\u662f\u7b49\u5f85\u8003\u6838\u5468\u671f\u4e3b\u52a8\u80cc\u540d\u989d\uff0c\u62ff\u4e00\u7b14\u8d54\u507f\u91d1\u518d\u8d70\uff0c\u4fd7\u79f0\u2018\u4e0a\u8f66\u2019\u3002<\/p>\n<p>\u4f34\u968f\u7740\u4eba\u5458\u51cf\u5c11\uff0c\u516c\u53f8\u9891\u7e41\u8c03\u6574\u7ec4\u7ec7\u7ed3\u6784\uff0c\u5e74\u5e95\u6211\u7684\u56e2\u961f\u548c\u53e6\u5916\u4e00\u4e2a\u56e2\u961f\u5408\u5e76\uff0c\u4eba\u53d8\u5c11\u8d1f\u8d23\u7684\u4e1a\u52a1\u5374\u53cd\u800c\u53d8\u591a\u3002\u5728\u516c\u53f8\u8d70\u4e0b\u5761\u8def\u80cc\u666f\u4e0b\uff0c\u5982\u4f55\u5b89\u629a\u53e6\u5916\u4e00\u4e2a\u56e2\u961f\u7684\u6210\u5458\uff0c\u8ba9\u4ed6\u4eec\u5c3d\u804c\u5c3d\u8d23\u7684\u5de5\u4f5c\uff0c\u786e\u5b9e\u8ba9\u6211\u5934\u75bc\u3002\u540c\u65f6\u53e6\u5916\u4e00\u4e2a\u56e2\u961f\u4e4b\u524d\u8d1f\u8d23\u7684\u4e1a\u52a1\u63a5\u89e6\u5e76\u4e0d\u591a\uff0c\u56e2\u961f\u4e4b\u524d\u53d1\u5c55\u8fc7\u7a0b\u4e2d\u57cb\u4e0b\u7684\u5751\uff0c\u968f\u7740\u8d1f\u8d23\u4eba\u7684\u9000\u51fa\uff0c\u968f\u65f6\u53ef\u80fd\u5f15\u7206\uff0c\u611f\u89c9\u81ea\u5df1\u50cf\u4e00\u4e2a\u706d\u706b\u5458\u3002<\/p>\n<p>\u5728\u8fd9\u5bb6\u516c\u53f8\u5df2\u7ecf\u5de5\u4f5c10\u5e74\uff0c\u4ece\u672a\u60f3\u8fc7\u4f1a\u5728\u4e00\u5bb6\u516c\u53f8\u5de5\u4f5c\u8fd9\u4e48\u4e45\uff0c\u671f\u671b\u516c\u53f8\u53ef\u4ee5\u597d\u8f6c\uff0c\u8ba9\u6211\u53ef\u4ee5\u6109\u5feb\u7684\u642c\u7816\u3002<\/p>\n<h3 id=\"\u751f\u6d3b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#\u751f\u6d3b\" class=\"anchor-link\" aria-label=\"\u751f\u6d3b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#contents:\u751f\u6d3b\" class=\"headings\">\u751f\u6d3b<\/a><\/h3>\n<p>24\u5e74\u91cd\u70b9\u5c31\u662f\u5356\u623f\u3001\u4e70\u623f\u548c\u88c5\u4fee\uff0c\u8fd9\u4e00\u5e74\u5468\u672b\u57fa\u672c\u5c31\u6295\u5728\u8fd9\u4e9b\u4e8b\u60c5\u4e0a\u3002\u62bd\u7a7a\u548c\u8001\u5a46\u5b69\u5b50\u5916\u51fa\u65c5\u884c2\u6b21\uff0c\u6691\u5047\u548c\u5bd2\u5047\u5404\u4e00\u6b21\uff0c\u53bb\u4e86\u90d1\u5dde\u94f6\u57fa\u52a8\u7269\u738b\u56fd\u548c\u666f\u5fb7\u9547\u3002\u5728\u52a8\u7269\u738b\u56fd\u770b\u4e86\u65e0\u4eba\u673a\u8868\u6f14\u548c\u70df\u82b1\u79c0\uff0c\u5c0f\u670b\u53cb\u76f4\u547c\u7cbe\u5f69\u3002\u5728\u666f\u5fb7\u9547\u634f\u6ce5\u5df4\uff0c\u70e7\u73bb\u7483\uff0c\u91cd\u70b9\u662f\u4e70\u4e86\u5f88\u591a\u5c0f\u73a9\u5177\uff0c\u5c0f\u670b\u53cb\u7741\u773c\u5c31\u8981\u4e70\u73a9\u5177\uff0c\u770b\u5230\u4ec0\u4e48\u90fd\u8981\u6478\u4e24\u4e0b\u3002\u56e0\u4e3a\u81ea\u9a7e\uff0c\u6574\u4e2a\u65c5\u7a0b\u5f88\u653e\u677e\uff0c\u975e\u5e38\u81ea\u7531\uff0c\u5c31\u662f\u623f\u4ef7\u592a\u8d35\uff0c\u76f8\u6bd4\u5e73\u65f6\u6da8\u4e86\u5feb3\u500d\u3002<\/p>\n<p>10\u6708\u52301\u6708\u9891\u7e41\u53bb\u533b\u9662\uff0c\u75c5\u6bd2\u611f\u67d3\uff0c\u54b3\u55fd\uff0c\u80a0\u80c3\u708e\uff0c\u6d41\u611f\u8f6e\u756a\u8f70\u70b8\u6211\u4eec\u8fd9\u4e2a\u5c0f\u5bb6\uff0c\u953b\u70bc\u8eab\u4f53\u63d0\u4e0a\u5bb6\u5ead\u8bae\u7a0b\u3002<\/p>\n<p>\u4e3a\u4e86\u7ef4\u6301\u4f53\u91cd\uff0c\u4ece24\u5e74\u4e0b\u534a\u5e74\u5f00\u59cb\uff0c\u665a\u4e0a\u4e0d\u518d\u5403\u7c73\u996d\uff0c\u51cf\u5c11\u78b3\u6c34\u7684\u6444\u5165\uff0c\u4f53\u91cd\u7ef4\u6301\u5728136\u65a4\uff0c\u76ee\u524d\u770b\u6548\u679c\u8fd8\u884c\u3002<\/p>\n<p>24\u5e74\u53ea\u8bfb\u4e862.5\u672c\u7406\u8d22\u7c7b\u7684\u4e66\uff0c\u5c0f\u8bf4\u8bfb\u4e86\u4e0d\u5c11\uff0c\u8981\u51cf\u5c11\u5c0f\u8bf4\u9605\u8bfb\u65f6\u95f4\uff0c\u589e\u52a0\u7406\u8d22\u7c7b\u4e66\u7c4d\u9605\u8bfb\u65f6\u95f4<\/p>\n<p>\u5168\u5e74\u7406\u8d22\u6536\u76ca\u4f30\u8ba16%\uff0c\u8d44\u91d1\u4e3b\u8981\u4ee5\u503a\u57fa\u4e3a\u4e3b\uff0c\u76f8\u6bd4\u80a1\u7968\u57fa\u91d1\u611f\u53d7\u786e\u5b9e\u597d\u4e0d\u5c11\u3002\u7b49\u5f85\u7f8e\u80a1\u56de\u64a4\u540e\uff0c\u5f00\u59cb\u5b9a\u6295\u7f8e\u80a1\u3002<\/p>\n<p>\u5728\u95f2\u9c7c\u4e0a\u5356\u670d\u52a1\uff0c\u5168\u5e74\u8d5a\u4e86200\u96f6\u82b1\u94b1\uff0c\u8981\u60f3\u529e\u6cd5\u591a\u8d5a\u70b9<\/p>\n<h3 id=\"25\u5e74\u76ee\u6807\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#25\u5e74\u76ee\u6807\" class=\"anchor-link\" aria-label=\"25\u5e74\u76ee\u6807\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2024\/#contents:25\u5e74\u76ee\u6807\" class=\"headings\">25\u5e74\u76ee\u6807<\/a><\/h3>\n<ol>\n<li>\u5e26\u5bb6\u4eba\u722c12\u6b21\u5c71\uff0c\u953b\u70bc\u8eab\u4f53<\/li>\n<li>\u8bfb6\u672c\u7406\u8d22\u7c7b\u4e66\u7c4d<\/li>\n<li>\u7406\u8d22\u6536\u76ca6%\uff0c\u5c1d\u8bd5\u7814\u7a76\u5206\u6790\u4e00\u53ea\u80a1\u7968<\/li>\n<li>\u5168\u5e74\u519912\u7bc7\u6587\u7ae0<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%80%BB%E7%BB%93\/","term":"\u603b\u7ed3","label":"\u603b\u7ed3"}}]},{"title":"\n\u5c0f\u767d\u7406\u8d22\u4e4b\u8def","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/","updated":"2025-01-23T16:15:24+08:00","published":"2025-01-23T16:15:24+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4e00\u4e2a\u5c0f\u767d\u6162\u6162\u8ba4\u8bc6\u7406\u8d22\uff0c\u6162\u6162\u63d0\u9ad8\u8d22\u5546","content":"\n<p>\u2003\u2003\u7b2c\u4e00\u6b21\u63a5\u89e6\u57fa\u91d1\u5230\u73b0\u5728\u5df2\u7ecf\u8fc7\u53bb10\u5e74\uff0c\u8fc7\u5f8010\u5e74\u57fa\u672c\u5c31\u662f\u4e8f\u4e8f\u4e8f\uff0c\u94b1\u4e0d\u80fd\u767d\u767d\u6253\u6c34\u6f02\uff0c\u4e70\u70b9\u7ecf\u9a8c\u6559\u8bad\u4e5f\u662f\u597d\u7684\u3002\u540c\u65f6\u5f80\u540e\u51c6\u5907\u6301\u7eed\u5199\u5199\u7406\u8d22\u65b9\u9762\u7684\u7ecf\u9a8c\u603b\u7ed3\u81ea\u6211\u97ad\u7b56\uff0c\u5c31\u4ece\u8fd9\u7bc7\u6587\u7ae0\u5f00\u59cb\u3002<\/p>\n<h3 id=\"\u7406\u8d22\u7ecf\u5386\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/#\u7406\u8d22\u7ecf\u5386\" class=\"anchor-link\" aria-label=\"\u7406\u8d22\u7ecf\u5386\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/#contents:\u7406\u8d22\u7ecf\u5386\" class=\"headings\">\u7406\u8d22\u7ecf\u5386<\/a><\/h3>\n<p>\u2003\u200315\u5e74\u521a\u6bd5\u4e1a\u51e0\u5e74\uff0c\u624b\u4e0a\u6709\u4e00\u70b9\u70b9\u50a8\u84c4\uff0c\u542c\u5468\u56f4\u540c\u4e8b\u8ba8\u8bba\u5728\u80a1\u5e02\u8d5a\u94b1\u548c\u6361\u94b1\u4e00\u6837\u5bb9\u6613\uff0c\u5fc3\u52a8\u4e0d\u5df2\u4e49\u52a1\u53cd\u987e\u51b2\u8fdb\u80a1\u5e02\uff0c\u6295\u51651.8\u4e07\u6700\u7ec8\u4e8f\u635f50%\u79bb\u573a\u3002\u5f53\u65f6\u7684\u81ea\u5df1\u5c31\u662f\u4e00\u4e2a\u5408\u683c\u7684\u97ed\u83dc\uff0c\u5bf9\u57fa\u91d1\/\u80a1\u7968\u5b8c\u5168\u6ca1\u6709\u4e86\u89e3\u5168\u9760\u731c\uff0c\u4e0e\u8d4c\u535a\u65e0\u5f02\u3002\u5f53\u65f6\u4e70\u7684\u57fa\u91d1\u5df2\u7ecf\u5b8c\u5168\u6ca1\u6709\u5370\u8c61\uff0c\u53ea\u8bb0\u5f97\u7528\u5927\u667a\u6167\u5f00\u7684\u8d26\u53f7\uff0c\u5272\u8089\u79bb\u573a\u540e\u5c31\u6ca1\u7528\u8fc7\u5927\u667a\u6167\u4e86\u3002\u552f\u4e00\u5e86\u5e78\u7684\u662f\u5f53\u65f6\u95f2\u94b1\u4e0d\u591a\uff0c\u540c\u65f6\u80c6\u5b50\u5c0f\u6ca1\u6709\u4e0a\u6760\u6746\u3002<\/p>\n<p>\u2003\u200315\u5e74\u5272\u8089\u4f24\u900f\u4e86\u5fc3\uff0c\u5c31\u6ca1\u6709\u518d\u5173\u6ce8\u8fc7\u80a1\u5e02\u3002\u76f4\u523020\u5e74\u540c\u4e8b\u4e4b\u95f4\u5bf9\u80a1\u5e02\u8ba8\u8bba\u53d8\u591a\uff0c\u53c8\u4e86\u89e3\u5230\u4e00\u4e2a\u8bcd\u2018\u5b9a\u6295\u2019\uff0c\u5982\u83b7\u81f3\u5b9d\u91cd\u65b0\u5165\u573a\uff0c25\u5e741\u6708\u4e8f\u635f20%\u5272\u8089\u79bb\u573a\u300220\u5e74\u5165\u573a\u9009\u62e9\u57fa\u91d1\u65f6\u591a\u82b1\u4e86\u4e00\u70b9\u65f6\u95f4\uff0c\u56fd\u5bb6\u8fdb\u5165\u8001\u5e74\u793e\u4f1a\u540e\u533b\u7597\u9700\u6c42\u4f1a\u66b4\u6da8\uff1b\u56fd\u5bb6\u6301\u7eed\u5bf9\u65b0\u80fd\u6e90\u4fdd\u4ef7\u62a4\u822a\uff0c\u4e5f\u662f\u4e00\u4e2a\u4e0d\u9519\u7684\u884c\u4e1a\uff1b\u8eab\u5904\u4e92\u8054\u7f51\u884c\u4e1a\uff0c\u4eab\u53d7\u4e86\u4e92\u8054\u7f51\u5e26\u6765\u7684\u4fbf\u5229\uff0c\u4e2d\u6982\u80a1\u56de\u64a430%\u540e\u89c9\u5f97\u503c\u5f97\u5165\u573a\uff1b\u6d88\u8d39\u662f\u62c9\u52a8\u56fd\u5bb6\u53d1\u5c55\u7684\u9a6c\u8f66\u4e0d\u5bb9\u9519\u8fc7\uff1b\u5c01\u95ed\u517b\u8001\u91d1\u4e5f\u4e0d\u9519\u4ee5\u514d\u81ea\u5df1\u5fcd\u4e0d\u4f4f\u9891\u7e41\u64cd\u4f5c\uff1b\u9009\u5b9a5\u4e2a\u65b9\u5411\u540e\u5f00\u59cb\u4e86\u957f\u671f\u7684\u5b9a\u6295\uff0c\u6700\u521d\u534a\u5e74\u786e\u5b9e\u8d5a\u4e86\u94b1\uff0c\u8fd8\u4e86\u89e3\u4e86\u6b62\u76c8\u7684\u65b9\u6cd5\u3002\u597d\u666f\u4e0d\u957f\uff0c\u6389\u5934\u5f00\u59cb\u4e86\u957f\u8fbe4\u5e74\u7684\u9634\u8dcc\uff0c\u4e86\u89e3\u5230\u5fae\u7b11\u66f2\u7ebf\u5c31\u8fd9\u6837\u6162\u6162\u575a\u6301\u4e0b\u6765\u300223\u5e74\u523024\u5e74\u4e0a\u8bc1\u6307\u6570\u957f\u65f6\u95f4\u5904\u4e8e3000\u70b9\u4e4b\u4e0b\uff0c\u5173\u6ce8UP\u4e3b\u5f00\u542f\u4e86\u52a0\u500d\u5b9a\u6295\uff0c\u56e0\u4e3a\u7406\u8d22\u7684\u8d44\u91d1\u6709\u9650\uff0c\u53ea\u80fd\u7ef4\u6301\u5b9a\u6295\u4e0d\u65ad\u300224\u5e749\u6708\u5e95\u4e00\u6ce2\u4e0a\u6da8\u770b\u5230\u4e86\u56de\u672c\u7684\u5e0c\u671b\uff0c\u540c\u65f6\u89c2\u5bdf\u5230\u81ea\u5df1\u7684\u6536\u76ca\u7387\u548c\u6caa\u6df1300\u9ad8\u5ea6\u91cd\u5408\uff0c\u4f46\u662f\u6da8\u6ca1\u6caa\u6df1300\u9ad8\uff0c\u8dcc\u53cd\u800c\u66f4\u591a\uff0c\u6240\u4ee5\u628a\u57fa\u91d1\u5168\u90e8\u6362\u6210\u4e86\u6caa\u6df1300\u6307\u6570\u57fa\u91d1\u3002\u9ed8\u9ed8\u671f\u5f85\u4e0a\u8bc1\u6307\u6570\u6da8\u52303800\u5c31\u628a\u57fa\u91d1\u90fd\u5356\u6389\uff0c\u6ca1\u60f3\u52301\u6708\u521d\u76f4\u63a5\u6765\u4e86\u4e00\u6ce2\u91cd\u62f3\u6253\u51fb\uff0c\u53c8\u4e8f\u4e86\u56de\u53bb\u3002<\/p>\n<p>\u2003\u2003\u6240\u5e78\u8d2d\u4e70\u6307\u6570\u57fa\u91d1\u7684\u94b1\u90fd\u662f\u77ed\u65f6\u95f4\u4e0d\u9700\u8981\u7528\u7684\u94b1\uff0c\u5bb6\u5ead\u65e5\u5e38\u751f\u6d3b\u548c\u8d2d\u623f\u7684\u94b1\u8d2d\u4e70\u7684\u98ce\u9669\u66f4\u4f4e\u7684\u503a\u5238\u57fa\u91d1\uff0c4\u5e74\u6307\u6570\u57fa\u91d1\u5b9a\u6295\u7684\u6536\u76ca\u548c\u503a\u5238\u57fa\u91d1\u6536\u76ca\u4e00\u6bd4\u77ac\u95f4\u7d22\u7136\u65e0\u5473\u3002\u957f\u65f6\u95f4\u7684\u5b9a\u6295\u548c\u4e8f\u635f\u5bf9\u7f05A\u7684\u8ba4\u77e5\u4e5f\u8d8a\u6765\u8d8a\u6e05\u6670\uff0c\u8d8a\u53d1\u4e0d\u60f3\u5728\u7f05A\u4e2d\u518d\u6d6a\u8d39\u65f6\u95f4\uff0c\u538b\u5230\u9a86\u9a7c\u7684\u6700\u540e\u4e00\u6839\u7a3b\u8349\u662f\uff0c\u770b\u5230\u4e00\u4e2a\u516c\u4f17\u53f7\u4ecb\u7ecd\u4e00\u4e2a3\u4e2a\u6708\u5b9a\u671f\u4ea7\u54c1\u5e74\u5316\u6536\u76ca\u67095%\uff0c\u6700\u7ec8\u4e0b\u5b9a\u51b3\u5b9a\u5c06\u6caa\u6df1300\u6307\u6570\u57fa\u91d1\u5168\u90e8\u5356\u6389\uff0c\u6539\u6210\u4e86\u5b9a\u671f\u4ea7\u54c1\u3002<\/p>\n<p>\u2003\u2003\u5f88\u65e9\u4e4b\u524d\u5c31\u77e5\u9053\u7eb3\u65af\u8fbe\u514b\u548c\u6807\u666e500\uff0c\u540c\u65f6\u4e5f\u77e5\u9053\u5df4\u83f2\u7279\u5bf9\u666e\u901a\u4eba\u7684\u5efa\u8bae\u662f\u5b9a\u6295\u6807\u666e500\uff0c\u4f46\u662f\u77e5\u9053\u4e0e\u884c\u52a8\u4e4b\u95f4\u9e3f\u6c9f\u662f\u5982\u6b64\u4e4b\u5927\uff0c\u7b49\u6211\u60f3\u8d2d\u4e70\u7eb3\u65af\u8fbe\u514b\u548c\u6807\u666e500\u65f6\uff0c\u6307\u6570\u5df2\u7ecf\u5c61\u521b\u65b0\u9ad8\uff0c\u4e0d\u6562\u968f\u610f\u5165\u573a\u5bb3\u6015\u9ad8\u4f4d\u63a5\u76d8\uff0c\u53ea\u80fd\u7b49\u5f85\u65f6\u673a\uff0c\u7b49\u5f85\u56de\u64a4\u5230\u4e00\u5b9a\u7a0b\u5ea6\u540e\u518d\u5165\u573a\u3002\u76ee\u524d\u53ea\u4e70\u4e863000\u5143\u7eb3\u65af\u8fbe\u514b\uff0c\u65b9\u4fbf\u81ea\u5df1\u5bf9\u7f8e\u80a1\u6307\u6570\u7684\u6da8\u8dcc\u6709\u4e00\u5b9a\u7684\u611f\u89e6\u3002<\/p>\n<p>\u2003\u20034\u5e74\u591a\u5b9a\u6295\u7ed3\u679c\u4e8f\u635f\uff0c\u4f46\u4e0e\u7b2c\u4e00\u6b21\u63a5\u89e6\u57fa\u91d1\u4e8f\u635f\u540e\u7684\u611f\u53d7\u5b8c\u5168\u4e0d\u540c\u3002\u4e00\u4e2a\u539f\u56e0\u662f\u8fd9\u7b14\u94b1\u5c5e\u4e8e\u5bb6\u5ead\u957f\u65f6\u95f4\u4e0d\u7528\u7684\u8d44\u91d1\uff0c\u4e8c\u662f\u8fd9\u90e8\u5206\u94b1\u5360\u5bb6\u5ead\u8d44\u4ea7\u6bd4\u4f8b\u4e0d\u9ad8\uff0c\u4e09\u662f\u901a\u8fc7\u5b9e\u64cd\u8d8a\u53d1\u7406\u89e3\u8d22\u5546\u9700\u8981\u57f9\u517b\u548c\u953b\u70bc\u300220\u5e74\u518d\u6b21\u8fdb\u5165\u80a1\u5e02\u4e5f\u662f\u5e0c\u671b\u901a\u8fc7\u7406\u8d22\u4e30\u5bcc\u5bb6\u5ead\u6536\u5165\u6765\u6e90\uff0c\u964d\u4f4e\u5bb6\u5ead\u6536\u5165\u4f9d\u9760\u5de5\u8d44\u5355\u4e00\u6765\u6e90\u7684\u98ce\u9669\uff0c\u540c\u65f6\u5bf9\u81ea\u5df1\u8fdb\u884c\u5f3a\u5236\u50a8\u84c4\u3002\u6536\u83b7\u7ecf\u9a8c\u6539\u8fdb\u540e\u7eed\u7684\u884c\u52a8\u624d\u662f\u8fd9\u6bb5\u7ecf\u5386\u7684\u610f\u4e49\u3002\u4ece\u5c0f\u5230\u5927\u6ca1\u6709\u4eba\u544a\u8bc9\u6211\u7406\u8d22\u76f8\u5173\u7684\u77e5\u8bc6\uff0c\u800c\u56fd\u5916\u8fd8\u6709\u5199\u7ed9\u5c0f\u670b\u53cb\u7684\u7406\u8d22\u4e66\uff0c\u52a0\u4e0a\u5bb6\u957f\u7684\u5f15\u5bfc\uff0c\u53e0\u52a0\u65f6\u95f4\u540e\u533a\u522b\u975e\u5e38\u660e\u663e\u3002<\/p>\n<h3 id=\"\u5f80\u540e\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/#\u5f80\u540e\" class=\"anchor-link\" aria-label=\"\u5f80\u540e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/financial\/lessons_learned\/#contents:\u5f80\u540e\" class=\"headings\">\u5f80\u540e<\/a><\/h3>\n<p>\u2003\u2003\u6bcf\u4e2a\u6708\u5b9a\u6295\u91d1\u989d\u4e0d\u53d8\uff0c\u4f46\u662f\u4f1a\u628a\u94b1\u62103\u90e8\u4efd\uff0c1\u4efd\u7528\u4e8e\u5b9a\u6295\u7eb3\u65af\u8fbe\u514b\uff0c1\u4efd\u5b9a\u6295\u6d77\u5916\u4e2d\u56fd\u4e92\u8054\u7f51\uff0c1\u4efd\u5b9a\u6295\u503a\u5238\u57fa\u91d1\u3002\u503a\u5238\u57fa\u91d1\u4e2d\u7684\u8d44\u91d1\u7528\u4e8e\u540e\u7eed\u57fa\u91d1\u66b4\u8dcc\u540e\u52a0\u500d\u5b9a\u6295\u3002<\/p>\n<p>\u2003\u2003\u5c1d\u8bd5\u8d2d\u4e70\u4e00\u52302\u4e2a\u516c\u53f8\u7684\u80a1\u7968\uff0c\u611f\u53d7\u80a1\u7968\u548c\u57fa\u91d1\u7684\u533a\u522b\u3002<\/p>\n<p>\u2003\u2003\u7ee7\u7eed\u9605\u8bfb\u7406\u8d22\u76f8\u5173\u7684\u4e66\u7c4d\uff0c\u540c\u65f6\u5f15\u5bfc\u5c0f\u670b\u53cb\u5bf9\u94b1\u8fdb\u884c\u7ba1\u7406\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E8%B4%A2%E5%95%86\/","term":"\u8d22\u5546","label":"\u8d22\u5546"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%90%86%E8%B4%A2\/","term":"\u7406\u8d22","label":"\u7406\u8d22"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%80%BB%E7%BB%93\/","term":"\u603b\u7ed3","label":"\u603b\u7ed3"}}]},{"title":"\nAndroid Flutter APP\u9006\u5411\u5206\u6790","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/","updated":"2024-12-13T17:20:06+08:00","published":"2024-12-13T17:20:06+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u5229\u7528blutter\u548cfrida\u5206\u6790Flutter APP\u83b7\u53d6\u52a0\u5bc6key","content":"\n<h3 id=\"\u76f8\u5173\u5de5\u5177\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#\u76f8\u5173\u5de5\u5177\" class=\"anchor-link\" aria-label=\"\u76f8\u5173\u5de5\u5177\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:\u76f8\u5173\u5de5\u5177\" class=\"headings\">\u76f8\u5173\u5de5\u5177<\/a><\/h3>\n<ol>\n<li><a href=\"https:\/\/github.com\/worawit\/blutter\" target=\"_blank\" rel=\"noopener\">blutter<\/a>\uff0cflutter APP \u9759\u6001\u5206\u6790\u8f85\u52a9\u5de5\u5177\n<ol>\n<li>\u6309\u7167\u5b98\u65b9\u6587\u6863\u8fdb\u884c\u5b89\u88c5\n<ol>\n<li>\u5b89\u88c5 git and python 3<\/li>\n<li>git clone <a href=\"mailto:git@github.com\">git@github.com<\/a>:worawit\/blutter.git<\/li>\n<li>\u5b89\u88c5 Visual Studio\u65f6\uff0c\u52fe\u9009&quot;Desktop development with C++&quot; \u548c &quot;windows C++ CMake tools&quot;<\/li>\n<li>\u5728blutter\u4ee3\u7801\u76ee\u5f55\u6267\u884cpython scripts\\init_env_win.py (\u5b89\u88c5libcapstone and libicu4c\u5e93)<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>frida\uff0chook\u5de5\u5177\n<ol>\n<li>\u5b89\u88c5\u53c2\u8003\uff1a<a href=\"https:\/\/www.cnblogs.com\/fuxuqiannian\/p\/17930851.html#\" target=\"_blank\" rel=\"noopener\">frida\u5b89\u88c5\u6b63\u786e\u6d41\u7a0b<\/a><\/li>\n<\/ol>\n<\/li>\n<li>root Android\u624b\u673a(\u5c1d\u8bd5\u4f7f\u7528\u6a21\u62df\u5668\uff0chook so\u65f6\u62a5\u9519)<\/li>\n<li>adb\uff0cAndroid\u8c03\u8bd5\u5de5\u5177<\/li>\n<li>ida\uff0c\u67e5\u770b\u53cd\u6c47\u7f16\u5185\u5bb9<\/li>\n<li>WinHex\uff0c\u67e5\u770b\u6587\u4ef6\u4e8c\u8fdb\u5236<\/li>\n<li>\u4ee3\u7406\u5de5\u5177\uff0c\u65b9\u4fbfblutter\u7f16\u8bd1<\/li>\n<\/ol>\n<h3 id=\"\u5206\u6790\u6d41\u7a0b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#\u5206\u6790\u6d41\u7a0b\" class=\"anchor-link\" aria-label=\"\u5206\u6790\u6d41\u7a0b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:\u5206\u6790\u6d41\u7a0b\" class=\"headings\">\u5206\u6790\u6d41\u7a0b<\/a><\/h3>\n<h4 id=\"blutter\u83b7\u53d6app\u51fd\u6570\u7b26\u53f7\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#blutter\u83b7\u53d6app\u51fd\u6570\u7b26\u53f7\" class=\"anchor-link\" aria-label=\"blutter\u83b7\u53d6app\u51fd\u6570\u7b26\u53f7\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:blutter\u83b7\u53d6app\u51fd\u6570\u7b26\u53f7\" class=\"headings\">blutter\u83b7\u53d6APP\u51fd\u6570\u7b26\u53f7<\/a><\/h4>\n<p>\u4f7f\u7528flutter \u5f00\u53d1\u7684APP\uff0c\u7a0b\u5e8f\u4ee3\u7801\u90fd\u7f16\u8bd1\u5230libapp.so\u4e2d\uff0c\u4f7f\u7528ida\u5206\u6790libapp.so\uff0c\u51fd\u6570\u540d\u7ecf\u8fc7\u6df7\u6dc6\u4e0d\u5229\u4e8e\u5206\u6790\u3002blutter\u901a\u8fc7\u7f16\u8bd1Dart AOT \u8fd0\u884c\u65f6\u6765\u5206\u6790\u5e94\u7528\u7a0b\u5e8f\u83b7\u53d6\u76f8\u5e94\u7684\u51fd\u6570\u540d\u3002<\/p>\n<ol>\n<li>\u5728\u672c\u6587\u7f16\u5199\u65f6\u95f4\u70b9\uff0cblutter\u53ea\u6301\u5206\u6790Dart 3.6.0\u4ee5\u4e0b\u7248\u672c\uff0cdart 3.6.0-0.0.dev \u4ee5\u4e0a\u7248\u672c\u7f16\u8bd1\u62a5\u9519<\/li>\n<li>\u5c0f\u6280\u5de7:\u5982\u679c\u5f85\u5206\u6790\u7684APP\u4f7f\u7528dart 3.6.0\u4ee5\u4e0a\u7684\u7248\u672c\u7f16\u8bd1\uff0cdart3.6.0 \u7248\u672c2024\u5e747\u67082\u53f7\u53d1\u5e03\uff0c\u5bfb\u627e\u6b64\u65f6\u95f4\u70b9\u524dAPP\u7684\u5386\u53f2\u7248\u672c\u8fdb\u884c\u5206\u6790\uff0c\u53ef\u4ee5\u89c4\u907f\u6b64\u95ee\u9898<\/li>\n<li>\u7ba1\u7406\u5458\u6743\u9650\u6253\u5f00x64 Native Tools Command Prompt\n<ol>\n<li>D:\\workspace\\app\\lib\\arm64-v8a \u4e2d\u5b58\u653eapk\u89e3\u538b\u540elib\u4e2d\u7684libapp.so\u548clibflutter.so<\/li>\n<li>\u6267\u884cpython .\\blutter.py D:\\workspace\\app\\lib\\arm64-v8a D:\\workspace\\app\\lib\\arm64-v8a\\output<\/li>\n<li>D:\\workspace\\app\\lib\\arm64-v8a\\output\u4e2d\u4e3ablutter\u5206\u6790\u5b8c\u6210\u540e\u5185\u5bb9<\/li>\n<li>\u5168\u7a0b\u4f7f\u7528\u4ee3\u7406<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h4 id=\"ida-\u9759\u6001\u5206\u6790\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#ida-\u9759\u6001\u5206\u6790\" class=\"anchor-link\" aria-label=\"ida-\u9759\u6001\u5206\u6790\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:ida-\u9759\u6001\u5206\u6790\" class=\"headings\">ida \u9759\u6001\u5206\u6790<\/a><\/h4>\n<ol>\n<li>ida\u6253\u5f00libapp.so\uff0c\u83b7\u53d6\u53cd\u6c47\u7f16\u5185\u5bb9\uff0c\u6b64\u65f6\u51fd\u6570\u540d\u90fd\u662f\u6ca1\u6709\u610f\u4e49<\/li>\n<li>file -&gt; Script file \u52a0\u8f7dblutter\u73af\u8282\u83b7\u5f97\u7684output\\ida_script\\addNames.py\u811a\u672c\uff0c\u8fd8\u539f\u6df7\u6dc6\u540e\u7684\u51fd\u6570\u540d<\/li>\n<li>\u6839\u636e\u9700\u8981\u5206\u6790\u7684\u5185\u5bb9\uff0c\u731c\u6d4b\u53ef\u80fd\u4f7f\u7528\u7684\u51fd\u6570\u540d\uff0c\u8fdb\u884c\u5206\u6790\n<ol>\n<li>\u6211\u731c\u6d4b\u52a0\u5bc6\u51fd\u6570\u662fxxtea\uff0c\u641c\u7d22\u5bf9\u5e94\u51fd\u6570\uff0c\u4f7f\u7528F5\u83b7\u53d6\u4f2a\u4ee3\u7801\u8fdb\u884c\u9605\u8bfb<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h4 id=\"frida-hook\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#frida-hook\" class=\"anchor-link\" aria-label=\"frida-hook\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:frida-hook\" class=\"headings\">frida hook<\/a><\/h4>\n<ol>\n<li>blutter \u5206\u6790\u5b8c\u6210\u540e\uff0c\u4f1a\u751f\u6210\u4e00\u4e2ahook\u811a\u672coutput\\blutter_frida.js<\/li>\n<li>ida\u9759\u6001\u5206\u6790\u73af\u8282\u786e\u5b9a\u9700\u8981hook\u7684\u51fd\u6570\u5730\u5740\uff0c\u4fee\u6539blutter_frida.js\u4e2donLibappLoaded\u51fd\u6570fn_addr\u503c\u5373\u53ef<\/li>\n<li>\u624b\u673a\u5f00\u542f\u5f00\u53d1\u6a21\u5f0f\uff0c\u6253\u5f00adb\u8c03\u8bd5\uff0c\u975e\u5e38\u91cd\u8981<\/li>\n<li>\u67e5\u770bfrida\u7248\u672c\u548c\u67e5\u770b\u624b\u673a\u67b6\u6784,\u4e0b\u8f7d<a href=\"https:\/\/github.com\/frida\/frida\/releases\" target=\"_blank\" rel=\"noopener\">frida_server<\/a>\n<ol>\n<li>\u6211\u4e0b\u8f7d\u7684frida-server-16.5.9-android-arm64.xz\u89e3\u538b\u83b7\u5f97frida-server-16.5.9-android-arm64<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">frida --version <span class=\"c1\">#\u6211\u4f7f\u7528\u7684\u7248\u672c16.5.9 <\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">adb shell\n<\/span><\/span><span class=\"line\"><span class=\"cl\">su\n<\/span><\/span><span class=\"line\"><span class=\"cl\">getprop ro.product.cpu.abi <span class=\"c1\">#\u67e5\u770b\u624b\u673a\u67b6\u6784\uff0c\u771f\u673a\u4e00\u822c\u662farm64-v8a\uff0c\u6a21\u62df\u5668\u4e00\u822c\u662fx86_64\uff0c<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol start=\"5\">\n<li>\u624b\u673a\u4e0a\u542f\u52a8frida_server\u670d\u52a1<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u5c06frida-server-16.5.9-android-arm64\u653e\u5165\u624b\u673a\u78c1\u76d8<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">adb push .\/frida-server-16.5.9-android-arm64 \/data\/local\/tmp\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u542f\u52a8frida-server-16.5.9-android-arm64\u670d\u52a1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">adb shell\n<\/span><\/span><span class=\"line\"><span class=\"cl\">su\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/data\/local\/tmp\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mv frida-server-16.5.9-android-arm64 frida-server\n<\/span><\/span><span class=\"line\"><span class=\"cl\">chmod <span class=\"m\">777<\/span> frida-server\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/frida-server <span class=\"p\">&amp;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol start=\"6\">\n<li>\u4f7f\u7528frida\u811a\u672chook \u51fd\u6570\uff0c\u67e5\u770b\u4fe1\u606f\n<ol>\n<li>\u9644\u52a0\u6210\u529f\u540e\uff0c\u624b\u673a\u4e0a\u64cd\u4f5cAPP,\u89e6\u53d1hook\u51fd\u6570\u6267\u884c\uff0c\u5373\u53ef\u770b\u5230hook\u6253\u5370\u7684\u4fe1\u606f<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">frida-ps -U <span class=\"c1\">##\u67e5\u770b\u5e94\u7528\u8fdb\u7a0bID\uff0c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">frida-ps -Uai <span class=\"c1\">##\u67e5\u770b\u5e94\u7528\u7684\u5305\u540d\u548c\u8fdb\u7a0bID, <\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u65b9\u6cd5\u4e00<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">frida -U -f \u5305\u540d -l blutter_frida.js <span class=\"c1\">##\u5982\u679cAPP\u5df2\u542f\u52a8,-f\u4f1a\u5bfc\u81f4APP\u91cd\u542f\uff0clibapp.app \u6ca1\u6709\u52a0\u8f7d\u6210\u529f\u5bfc\u81f4hook\u5931\u8d25<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u65b9\u6cd5\u4e8c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">frida -U -n \u5e94\u7528\u540d -l blutter_frida.js <span class=\"c1\">## \u5148\u542f\u52a8APP<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u65b9\u6cd5\u4e09\uff1a<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">frida -U -p \u8fdb\u7a0bID -l blutter_frida.js <span class=\"c1\">## \u91c7\u7528\u7684\u6b64\u65b9\u6cd5\u6210\u529f<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol start=\"7\">\n<li>\u64cd\u4f5c\u6d41\u7a0b\u53c2\u8003\uff1a<a href=\"https:\/\/juejin.cn\/post\/7311254319323889699\" target=\"_blank\" rel=\"noopener\">\u3010flutter\u5bf9\u6297\u3011blutter\u4f7f\u7528+ACTF\u4e60\u9898<\/a><\/li>\n<\/ol>\n<h4 id=\"\u6253\u5370hook\u51fd\u6570\u4fe1\u606f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#\u6253\u5370hook\u51fd\u6570\u4fe1\u606f\" class=\"anchor-link\" aria-label=\"\u6253\u5370hook\u51fd\u6570\u4fe1\u606f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:\u6253\u5370hook\u51fd\u6570\u4fe1\u606f\" class=\"headings\">\u6253\u5370hook\u51fd\u6570\u4fe1\u606f<\/a><\/h4>\n<ol>\n<li>blutter_frida.js\u4e2d\u589e\u52a0onLeave\uff0c\u8c03\u7528dumpArgs\u51fd\u6570\u7528\u4e8e\u6253\u5370\u51fd\u6570\u8fd4\u56de\u4fe1\u606f<\/li>\n<li>hook\u7684\u51fd\u6570\u5982\u679c\u6709\u591a\u4e2a\u5165\u53c2\uff0c\u53ef\u4ee5\u5728blutter_frida.js\u4e2donEnter\u6dfb\u52a0\u4ee3\u7801\u8fdb\u884c\u6253\u5370\n<ol>\n<li>\u53c2\u8003:<a href=\"https:\/\/medium.com\/@fnnnr\/ctt2023-hflag-200-pts-4be08927769f\" target=\"_blank\" rel=\"noopener\">CTT2023 Hflag \u2014 200 pts<\/a><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">dumpArgs<\/span><span class=\"p\">(<\/span><span class=\"nx\">step<\/span><span class=\"p\">,<\/span> <span class=\"nx\">address<\/span><span class=\"p\">,<\/span> <span class=\"nx\">bufSize<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">buf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">Memory<\/span><span class=\"p\">.<\/span><span class=\"nx\">readByteArray<\/span><span class=\"p\">(<\/span><span class=\"nx\">address<\/span><span class=\"p\">,<\/span> <span class=\"nx\">bufSize<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;Argument &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">step<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; address &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">address<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39;buffer: &#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">bufSize<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">()<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39;\\n\\n Value:\\n&#39;<\/span> <span class=\"o\">+<\/span><span class=\"nx\">hexdump<\/span><span class=\"p\">(<\/span><span class=\"nx\">buf<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">offset<\/span><span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">length<\/span><span class=\"o\">:<\/span> <span class=\"nx\">bufSize<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">header<\/span><span class=\"o\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">ansi<\/span><span class=\"o\">:<\/span> <span class=\"kc\">false<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Trying interpret that arg is pointer&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;=====================================&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">Memory<\/span><span class=\"p\">.<\/span><span class=\"nx\">readCString<\/span><span class=\"p\">(<\/span><span class=\"nx\">ptr<\/span><span class=\"p\">(<\/span><span class=\"nx\">address<\/span><span class=\"p\">)));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">ptr<\/span><span class=\"p\">(<\/span><span class=\"nx\">address<\/span><span class=\"p\">).<\/span><span class=\"nx\">readCString<\/span><span class=\"p\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">hexdump<\/span><span class=\"p\">(<\/span><span class=\"nx\">ptr<\/span><span class=\"p\">(<\/span><span class=\"nx\">address<\/span><span class=\"p\">)));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span><span class=\"k\">catch<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">){<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;----------------------------------------------------&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">onLibappLoaded<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">fn_addr<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x966e24<\/span><span class=\"p\">;<\/span> <span class=\"err\">##<\/span> <span class=\"nx\">\u6b64\u5904\u4fee\u6539\u4e3a\u4f60\u60f3hook\u7684\u51fd\u6570\u5730\u5740<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">Interceptor<\/span><span class=\"p\">.<\/span><span class=\"nx\">attach<\/span><span class=\"p\">(<\/span><span class=\"nx\">libapp<\/span><span class=\"p\">.<\/span><span class=\"nx\">add<\/span><span class=\"p\">(<\/span><span class=\"nx\">fn_addr<\/span><span class=\"p\">),<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">onEnter<\/span><span class=\"o\">:<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">init<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">context<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"err\">##<\/span> <span class=\"nx\">\u6253\u5370\u7b2c\u4e00\u4e2a\u5165\u53c2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">objPtr<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getArg<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">context<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">tptr<\/span><span class=\"p\">,<\/span> <span class=\"nx\">cls<\/span><span class=\"p\">,<\/span> <span class=\"nx\">values<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getTaggedObjectValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">objPtr<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">cls<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"sb\">@<\/span><span class=\"si\">${<\/span><span class=\"nx\">tptr<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">().<\/span><span class=\"nx\">slice<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sb\"> =`<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringify<\/span><span class=\"p\">(<\/span><span class=\"nx\">values<\/span><span class=\"p\">,<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"err\">##<\/span> <span class=\"nx\">\u6253\u5370\u7b2c\u4e8c\u4e2a\u5165\u53c2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">objPtr1<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getArg<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">context<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">[<\/span><span class=\"nx\">tptr1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">cls1<\/span><span class=\"p\">,<\/span> <span class=\"nx\">values1<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getTaggedObjectValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">objPtr1<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">cls1<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"sb\">@<\/span><span class=\"si\">${<\/span><span class=\"nx\">tptr1<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">().<\/span><span class=\"nx\">slice<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"sb\"> =`<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringify<\/span><span class=\"p\">(<\/span><span class=\"nx\">values1<\/span><span class=\"p\">,<\/span> <span class=\"kc\">null<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">onLeave<\/span><span class=\"o\">:<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">retval<\/span><span class=\"p\">){<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"err\">##<\/span> <span class=\"nx\">\u6253\u5370\u51fd\u6570\u8fd4\u56de\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dumpArgs<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"nx\">retval<\/span><span class=\"p\">,<\/span><span class=\"mi\">500<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/inverse_analysis\/flutter\/1\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>\u672c\u6b21\u5206\u6790APP\u7684\u76ee\u6807\u662f\u83b7\u53d6\u52a0\u5bc6\u51fd\u6570\u7684KEY,\u76f8\u5bf9\u7b80\u5355\uff0c\u56e0\u800c\u53ea\u4f7f\u7528frida \u8fdb\u884chook\u5c31\u53ef\u4ee5\u8fbe\u5230\u76ee\u7684\uff0c\u5982\u679c\u5206\u6790\u7684\u5185\u5bb9\u8f83\u4e3a\u590d\u6742\u9700\u8981\u642d\u914dida\u8c03\u8bd5\u529f\u80fd<\/li>\n<li>\u6700\u521d\u4f7f\u7528\u6a21\u62df\u5668\u8fdb\u884chook\uff0c\u59cb\u7ec8\u65e0\u6cd5\u83b7\u53d6\u5230libapp.so\u7684\u5730\u5740\uff0c\u539f\u56e0\u662f\u6a21\u62df\u5668\u5f00\u8f9f\u4e86\u4e00\u7247\u65b0\u7a7a\u95f4\u5b58\u50a8arm\u7684so\u6587\u4ef6<\/li>\n<li>\u5c1d\u8bd5\u5728\u624b\u673a\u4e2d\u5b89\u88c5\u624b\u673a\u6a21\u62df\u5668\u6765\u6a21\u62dfroot\u73af\u5883,\u6700\u7ec8\u5931\u8d25<\/li>\n<li>\u5c1d\u8bd5\u5728x86_64 windows \u7535\u8111\u4e0a\u8fd0\u884carm\u67b6\u6784\u7684\u6a21\u62df\u5668\uff0c\u6700\u7ec8\u5931\u8d25\uff0c\u76f4\u63a5\u4f7f\u7528\u624b\u673a\u53ef\u4ee5\u63d0\u9ad8\u5e78\u798f\u6307\u6570\n<ol>\n<li>\u53c2\u8003\uff1a<a href=\"https:\/\/blog.csdn.net\/qq_65474192\/article\/details\/138916083\" target=\"_blank\" rel=\"noopener\">\u89e3\u51b3\u65e0\u6cd5\u5728x86\u6a21\u62df\u5668\u4e0afrida-hook\u6389arm\u7684Native\u5c42\u65b9\u6cd5\u7684\u95ee\u9898<\/a>\uff0c\u65e0\u7528<\/li>\n<\/ol>\n<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/flutter\/","term":"Flutter","label":"Flutter"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E9%80%86%E5%90%91\/","term":"\u9006\u5411","label":"\u9006\u5411"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/android\/","term":"Android","label":"Android"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/blutter\/","term":"blutter","label":"blutter"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/frida\/","term":"frida","label":"frida"}}]},{"title":"\n\u4f7f\u7528\u5927\u6a21\u578b\u7f16\u5199chrome\u63d2\u4ef6","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/","updated":"2024-11-05T13:52:52+08:00","published":"2024-11-05T13:52:52+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4f7f\u7528\u5927\u6a21\u578b\u7f16\u5199chrome\u63d2\u4ef6\uff0c\u5220\u9664\u65e0\u6548\u4e66\u7b7e","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u65e5\u79ef\u6708\u7d2f\u6d4f\u89c8\u5668\u4e2d\u6536\u85cf\u7684\u4e66\u7b7e\u7f51\u9875\u8d8a\u6765\u8d8a\u591a\uff0c\u540c\u65f6\u5931\u6548\u7684\u4e66\u7b7e\u4e5f\u8d8a\u6765\u8d8a\u591a\uff0c\u5982\u4f55\u5feb\u901f\u5220\u9664\u65e0\u6548\u7684\u4e66\u7b7e\uff1f\u4e00\u76f4\u60f3\u5199\u4e2achrome\u63d2\u4ef6\uff0c\u8d81\u7740\u8fd9\u4e2a\u673a\u4f1a\uff0c\u7ec3\u7ec3\u624b\u3002<\/p>\n<h3 id=\"\u601d\u8def\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u601d\u8def\" class=\"anchor-link\" aria-label=\"\u601d\u8def\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u601d\u8def\" class=\"headings\">\u601d\u8def<\/a><\/h3>\n<p>\u5927\u6a21\u578b\u7684\u51fa\u73b0\u771f\u662f\u5927\u5927\u964d\u4f4e\u4e86\u7b80\u5355\u9700\u6c42\u5b9e\u73b0\u7684\u6210\u672c\uff0c\u672c\u4eba\u6ca1\u6709\u7cfb\u7edf\u5b66\u4e60\u8fc7js\u76f8\u5173\u77e5\u8bc6\uff0c\u5e73\u65f6\u53ef\u4ee5\u770b\u61c2\u7b80\u5355\u7684js\u4ee3\u7801\uff0c\u590d\u6742\u70b9\u7684\u4ee3\u7801\u9700\u8981\u8fde\u8499\u5e26\u731c\u624d\u80fd\u770b\u61c2\u3002<\/p>\n<p>\u4e3a\u65b9\u4fbf\u5927\u6a21\u578b\u7406\u89e3\uff0c\u6211\u628a\u81ea\u5df1\u7684\u9700\u6c42\u62c6\u89e3\u4e3a3\u4e2a\u6b65\u9aa4\uff1a<\/p>\n<ol>\n<li>\u7f16\u5199chrome\u63d2\u4ef6\u8bfb\u53d6\u6d4f\u89c8\u5668\u4e66\u7b7e\u4fe1\u606f\uff0c\u5e76\u5c55\u793a<\/li>\n<li>\u5bf9\u4e66\u7b7e\u5730\u5740\u8fdb\u884c\u68c0\u6d4b\uff0c\u53ea\u5c55\u793a\u65e0\u6cd5\u8bbf\u95ee\u7684\u4e66\u7b7e\u4fe1\u606f<\/li>\n<li>\u5728\u65e0\u6cd5\u8bbf\u95ee\u7684\u4e66\u7b7e\u4fe1\u606f\u540e\u9762\u589e\u52a0\u5220\u9664\u6309\u94ae\uff0c\u70b9\u51fb\u6309\u94ae\u5220\u9664\u6d4f\u89c8\u5668\u4e2d\u5bf9\u5e94\u7684\u65e0\u6548\u4e66\u7b7e<\/li>\n<\/ol>\n<p>\u9996\u5148\u4f7f\u7528\u7684\u662f\u6587\u5fc3\u4e00\u8a00\u7684\u6587\u5fc3\u5feb\u7801\uff0c\u7ed9\u51fa\u7684\u4ee3\u7801\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002\u6362\u6210GPT4o\uff0c\u7ed9\u51fa\u7684\u4ee3\u7801\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\uff0c\u975e\u5e38\u65b9\u4fbf\uff0c\u70b9\u8d5e\u3002<\/p>\n<h3 id=\"\u5b9e\u8df5\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u5b9e\u8df5\" class=\"anchor-link\" aria-label=\"\u5b9e\u8df5\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u5b9e\u8df5\" class=\"headings\">\u5b9e\u8df5<\/a><\/h3>\n<h4 id=\"\u4e0e\u5927\u6a21\u578b\u6c9f\u901a\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u4e0e\u5927\u6a21\u578b\u6c9f\u901a\" class=\"anchor-link\" aria-label=\"\u4e0e\u5927\u6a21\u578b\u6c9f\u901a\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u4e0e\u5927\u6a21\u578b\u6c9f\u901a\" class=\"headings\">\u4e0e\u5927\u6a21\u578b\u6c9f\u901a<\/a><\/h4>\n<p>\u6309\u7167\u6b65\u9aa4\u8f93\u5165\u5927\u6a21\u578b\uff0c\u83b7\u5f97\u9636\u6bb5\u4ee3\u7801\u540e\uff0c\u9a8c\u8bc1\u6b63\u786e\u6027\u3002\u786e\u8ba4\u76f8\u5173\u4ee3\u7801\u65e0\u8bef\u540e\u5f00\u5c55\u4e0b\u4e00\u6b65\uff0c\u4e00\u6b65\u4e00\u6b65\u8c03\u6574\u540e\uff0c\u6700\u7ec8\u4ee3\u7801\u5b9e\u73b0\u5982\u4e0b\uff1a<\/p>\n<p>manifest.json \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;manifest_version&#34;<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;Bookmark Viewer&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;version&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;1.0&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;description&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;\u6e05\u7406\u65e0\u6548\u4e66\u7b7e\u7684Chrome\u63d2\u4ef6&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;permissions&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;bookmarks&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;webRequest&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;webRequestBlocking&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&lt;all_urls&gt;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;host_permissions&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&lt;all_urls&gt;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;background&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;service_worker&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;background.js&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;action&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;default_popup&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;popup.html&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;default_title&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;View Bookmarks&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;default_icon&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;16&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon16.png&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;48&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon48.png&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;128&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon128.png&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;icons&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;16&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon16.png&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;48&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon48.png&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&#34;128&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;icons\/icon128.png&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>background.js \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u7528\u4e8e\u521d\u59cb\u5316\u7684\u540e\u53f0\u811a\u672c\uff0c\u5f53\u524d\u4e0d\u9700\u8981\u7279\u522b\u529f\u80fd\uff0c\u53ef\u7559\u7a7a\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Bookmark Viewer Background Script Running.&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>popup.js \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><span class=\"lnt\">68\n<\/span><span class=\"lnt\">69\n<\/span><span class=\"lnt\">70\n<\/span><span class=\"lnt\">71\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;DOMContentLoaded&#39;<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">bookmarksList<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;bookmarks&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nx\">createBookmarkNode<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">,<\/span> <span class=\"nx\">isValid<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">isValid<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u521b\u5efa\u4e00\u4e2a\u5217\u8868\u9879\u548c\u951a\u70b9\u4ee5\u663e\u793a\u4e66\u7b7e\u4fe1\u606f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kr\">const<\/span> <span class=\"nx\">li<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;li&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">anchor<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">anchor<\/span><span class=\"p\">.<\/span><span class=\"nx\">href<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">anchor<\/span><span class=\"p\">.<\/span><span class=\"nx\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"si\">}<\/span><span class=\"sb\"> (<\/span><span class=\"si\">${<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"si\">}<\/span><span class=\"sb\">)`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">anchor<\/span><span class=\"p\">.<\/span><span class=\"nx\">target<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;_blank&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">li<\/span><span class=\"p\">.<\/span><span class=\"nx\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">anchor<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u521b\u5efa\u5220\u9664\u6309\u94ae\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kr\">const<\/span> <span class=\"nx\">deleteBtn<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;button&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">deleteBtn<\/span><span class=\"p\">.<\/span><span class=\"nx\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;Delete&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">deleteBtn<\/span><span class=\"p\">.<\/span><span class=\"nx\">onclick<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"nx\">deleteBookmark<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">,<\/span> <span class=\"nx\">li<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">li<\/span><span class=\"p\">.<\/span><span class=\"nx\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">deleteBtn<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">li<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nx\">deleteBookmark<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkId<\/span><span class=\"p\">,<\/span> <span class=\"nx\">li<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u8c03\u7528 Chrome \u7684\u4e66\u7b7e API \u5220\u9664\u4e66\u7b7e\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"nx\">chrome<\/span><span class=\"p\">.<\/span><span class=\"nx\">bookmarks<\/span><span class=\"p\">.<\/span><span class=\"nx\">remove<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkId<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bookmarksList<\/span><span class=\"p\">.<\/span><span class=\"nx\">removeChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">li<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nx\">checkBookmarkValidity<\/span><span class=\"p\">(<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">callback<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">method<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;HEAD&#39;<\/span> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">.<\/span><span class=\"nx\">then<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">status<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">404<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">status<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">500<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">callback<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span><span class=\"k\">else<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">callback<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">.<\/span><span class=\"k\">catch<\/span><span class=\"p\">(()<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">callback<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/ \u8bf7\u6c42\u5931\u8d25\u8ba4\u4e3a\u65e0\u6548\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nx\">traverseBookmarks<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkTreeNodes<\/span><span class=\"p\">,<\/span> <span class=\"nx\">parentElement<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bookmarkTreeNodes<\/span><span class=\"p\">.<\/span><span class=\"nx\">forEach<\/span><span class=\"p\">((<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">children<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u521b\u5efa\u76ee\u5f55\u8282\u70b9\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kr\">const<\/span> <span class=\"nx\">folderLi<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;li&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">folderLi<\/span><span class=\"p\">.<\/span><span class=\"nx\">textContent<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">ul<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">createElement<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;ul&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">folderLi<\/span><span class=\"p\">.<\/span><span class=\"nx\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">ul<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">parentElement<\/span><span class=\"p\">.<\/span><span class=\"nx\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">folderLi<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u9012\u5f52\u904d\u5386\u5b50\u4e66\u7b7e\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"nx\">traverseBookmarks<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">children<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ul<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">checkBookmarkValidity<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">isValid<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">bookmarkNode<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">createBookmarkNode<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmark<\/span><span class=\"p\">,<\/span> <span class=\"nx\">isValid<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">bookmarkNode<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">parentElement<\/span><span class=\"p\">.<\/span><span class=\"nx\">appendChild<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkNode<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">chrome<\/span><span class=\"p\">.<\/span><span class=\"nx\">bookmarks<\/span><span class=\"p\">.<\/span><span class=\"nx\">getTree<\/span><span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkTreeNodes<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">traverseBookmarks<\/span><span class=\"p\">(<\/span><span class=\"nx\">bookmarkTreeNodes<\/span><span class=\"p\">,<\/span> <span class=\"nx\">bookmarksList<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">});<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>popup.html \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-html\" data-lang=\"html\"><span class=\"line\"><span class=\"cl\"><span class=\"cp\">&lt;!DOCTYPE html&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;<\/span><span class=\"nt\">html<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;<\/span><span class=\"nt\">head<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;<\/span><span class=\"nt\">title<\/span><span class=\"p\">&gt;<\/span>Invalid Bookmarks<span class=\"p\">&lt;\/<\/span><span class=\"nt\">title<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;<\/span><span class=\"nt\">style<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">ul<\/span> <span class=\"p\">{<\/span> <span class=\"k\">list-style-type<\/span><span class=\"p\">:<\/span> <span class=\"kc\">none<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">li<\/span> <span class=\"p\">{<\/span> <span class=\"k\">margin<\/span><span class=\"p\">:<\/span> <span class=\"mi\">5<\/span><span class=\"kt\">px<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">button<\/span> <span class=\"p\">{<\/span> <span class=\"k\">margin-left<\/span><span class=\"p\">:<\/span> <span class=\"mi\">10<\/span><span class=\"kt\">px<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;\/<\/span><span class=\"nt\">style<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;\/<\/span><span class=\"nt\">head<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;<\/span><span class=\"nt\">body<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>Invalid Bookmarks<span class=\"p\">&lt;\/<\/span><span class=\"nt\">h1<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;<\/span><span class=\"nt\">ul<\/span> <span class=\"na\">id<\/span><span class=\"o\">=<\/span><span class=\"s\">&#34;bookmarks&#34;<\/span><span class=\"p\">&gt;&lt;\/<\/span><span class=\"nt\">ul<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">&lt;<\/span><span class=\"nt\">script<\/span> <span class=\"na\">src<\/span><span class=\"o\">=<\/span><span class=\"s\">&#34;popup.js&#34;<\/span><span class=\"p\">&gt;&lt;\/<\/span><span class=\"nt\">script<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;\/<\/span><span class=\"nt\">body<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">&lt;\/<\/span><span class=\"nt\">html<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>popup.css \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-css\" data-lang=\"css\"><span class=\"line\"><span class=\"cl\"><span class=\"nt\">body<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">width<\/span><span class=\"p\">:<\/span> <span class=\"mi\">300<\/span><span class=\"kt\">px<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">font-family<\/span><span class=\"p\">:<\/span> <span class=\"n\">Arial<\/span><span class=\"p\">,<\/span> <span class=\"kc\">sans-serif<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">ul<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">list-style-type<\/span><span class=\"p\">:<\/span> <span class=\"kc\">none<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">padding<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">li<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">margin<\/span><span class=\"p\">:<\/span> <span class=\"mi\">5<\/span><span class=\"kt\">px<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">a<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">text-decoration<\/span><span class=\"p\">:<\/span> <span class=\"kc\">none<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">color<\/span><span class=\"p\">:<\/span> <span class=\"kc\">blue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">a<\/span><span class=\"p\">:<\/span><span class=\"nd\">hover<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">text-decoration<\/span><span class=\"p\">:<\/span> <span class=\"kc\">underline<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u5b89\u88c5\u6269\u5c55\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u5b89\u88c5\u6269\u5c55\" class=\"anchor-link\" aria-label=\"\u5b89\u88c5\u6269\u5c55\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u5b89\u88c5\u6269\u5c55\" class=\"headings\">\u5b89\u88c5\u6269\u5c55<\/a><\/h4>\n<p>\u76f8\u5173\u4ee3\u7801\u6309\u7167\u76ee\u5f55\u7ed3\u6784\u653e\u5728\u6587\u4ef6\u4e2d\uff0c\u7136\u540e\u5728chrome\u6d4f\u89c8\u5668-&gt;\u8bbe\u7f6e-&gt;\u6269\u5c55\u7a0b\u5e8f-&gt;\u7ba1\u7406\u6269\u5c55\u7a0b\u5e8f-&gt;\u52a0\u8f7d\u5df2\u89e3\u538b\u7684\u6269\u5c55\u7a0b\u5e8f\uff0c\u52a0\u8f7d\u8be5\u76ee\u5f55\u5373\u53ef\u5b89\u88c5\u63d2\u4ef6\u3002<\/p>\n<p>\u76ee\u5f55\u7ed3\u6784\uff1a\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/chrome_script\/tree.png\" alt=\"tree\"><\/p>\n<h4 id=\"\u8c03\u8bd5\u6269\u5c55\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u8c03\u8bd5\u6269\u5c55\" class=\"anchor-link\" aria-label=\"\u8c03\u8bd5\u6269\u5c55\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u8c03\u8bd5\u6269\u5c55\" class=\"headings\">\u8c03\u8bd5\u6269\u5c55<\/a><\/h4>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/chrome_script\/debug.png\" alt=\"tree\"><\/p>\n<p>\u63d2\u4ef6\u70b9\u53f3\u952e-&gt;\u5ba1\u67e5\u5f39\u51fa\u5185\u5bb9<\/p>\n<ol>\n<li>console\uff0c\u5373\u53ef\u770b\u5230\u65e5\u5fd7\u8f93\u51fa<\/li>\n<li>Sources, \u589e\u52a0\u65ad\u70b9\uff0c\u8c03\u8bd5js\u4ee3\u7801<\/li>\n<\/ol>\n<p><a href=\"https:\/\/github.com\/xiaoshame\/script\/tree\/main\/url_check\" target=\"_blank\" rel=\"noopener\">\u5b8c\u6574\u4ee3\u7801\u5730\u5740<\/a><\/p>\n<h3 id=\"\u5176\u4ed6\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#\u5176\u4ed6\" class=\"anchor-link\" aria-label=\"\u5176\u4ed6\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/chrome_script\/#contents:\u5176\u4ed6\" class=\"headings\">\u5176\u4ed6<\/a><\/h3>\n<p>\u672c\u6253\u7b97\u5c06\u63d2\u4ef6\u4e0a\u4f20chrome\u5b98\u65b9\u5546\u5e97\uff0c\u4f46\u662f\u6ce8\u518c\u5f00\u53d1\u8005\u8d26\u53f7\u9700\u89815\u7f8e\u91d1\uff0c\u6240\u4ee5\u653e\u5f03\u4e86\u3002\u9700\u8981\u7684\u53ef\u4ee5\u4ecegithub\u4e0b\u8f7d\uff0c\u672c\u5730\u5b89\u88c5\u4f7f\u7528\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/chrome\/","term":"chrome","label":"chrome"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/scrite\/","term":"scrite","label":"scrite"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%A4%A7%E6%A8%A1%E5%9E%8B\/","term":"\u5927\u6a21\u578b","label":"\u5927\u6a21\u578b"}}]},{"title":"\n\u81ea\u5efaFreshRSS\u548cRSSHub\u670d\u52a1","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/rss\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/rss\/","updated":"2025-03-18T16:05:07+08:00","published":"2024-10-21T10:50:07+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u81ea\u5efaFreshRSS\u670d\u52a1\uff0c\u4f7f\u7528vercel\u90e8\u7f72RSSHub\u670d\u52a1\u63d0\u5347\u4f7f\u7528\u4f53\u9a8c","content":"\n<p>\u4e4b\u524d\u4f7f\u7528\u4ed6\u4eba\u63d0\u4f9b\u7684<a href=\"https:\/\/github.com\/FreshRSS\/FreshRSS\" target=\"_blank\" rel=\"noopener\">FreshRSS<\/a>\u670d\u52a1\uff0c\u56e0\u4e3a\u7f51\u7ad9\u8bc1\u4e66\u8fc7\u671f\u5bfc\u81f4\u4f7f\u7528\u4e0d\u4fbf\u3002\u6709\u4e00\u53f0\u53ef\u4ee5\u4f7f\u7528\u7684\u670d\u52a1\u5668\uff0c\u5c31\u8003\u8651\u81ea\u5efaFreshRSS\u670d\u52a1\u3002\u540c\u65f6\u65e5\u5e38\u4f7f\u7528\u5b98\u65b9<a href=\"https:\/\/github.com\/DIYgod\/RSSHub\" target=\"_blank\" rel=\"noopener\">RSSHub<\/a>\u670d\u52a1\u8fc7\u7a0b\u4e2d\uff0c\u8ba2\u9605\u6e90\u975e\u5e38\u4e0d\u7a33\u5b9a\uff0c\u7ecf\u5e38\u4e0d\u53ef\u7528\u3002\u53d1\u73b0vercel\u53ef\u4ee5\u90e8\u7f72RSSHub\uff0c\u5b8c\u6210\u76f8\u5e94\u90e8\u7f72\u540e\uff0c\u6574\u4f53\u4f7f\u7528\u611f\u53d7\u5927\u5e45\u63d0\u5347\uff0c\u8bb0\u5f55\u4e0b\u8fc7\u7a0b\uff0c\u65b9\u4fbf\u4ee5\u540e\u4f7f\u7528\u3002<\/p>\n<h2 id=\"freshrss-dockercompose-\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#freshrss-dockercompose-\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"freshrss-dockercompose-\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#contents:freshrss-dockercompose-\u90e8\u7f72\" class=\"headings\">FreshRSS dockercompose \u90e8\u7f72<\/a><\/h2>\n<ol>\n<li>\u81ea\u5907\u4e00\u4e2a\u670d\u52a1\u5668<\/li>\n<li>\u5b89\u88c5docker \u548c docker-compose, \u914d\u7f6edocker-compose.yml<\/li>\n<li>\u542f\u52a8\u6307\u4ee4docker-compose up -d<\/li>\n<li>\u914d\u7f6ecaddy\u914d\u7f6e\u6587\u4ef6caddyfile,\u65b9\u4fbf\u4f7f\u7528\u57df\u540d\u8bbf\u95ee<\/li>\n<li>\u901a\u8fc7\u57df\u540d\u8bbf\u95eefreshRSS,\u521b\u5efa\u7ba1\u7406\u5458\u8d26\u6237\u548c\u914d\u7f6e\u6570\u636e\u5e93\n<ol>\n<li>\u6570\u636e\u5e93\u4fe1\u606f\u5bf9\u5e94Docker Compose \u914d\u7f6e\u6587\u4ef6\u4e2d\u7684 POSTGRES_USER\u3001POSTGRES_PASSWORD\u3001POSTGRES_DB\u3001\u8868\u524d\u7f00\u4efb\u610f\u586b<\/li>\n<li>\u4e3b\u673a\u540d\u8981\u7a0d\u5fae\u6ce8\u610f\u4e00\u4e0b\uff0c\u8981\u7528\u5bb9\u5668\u7684 IP(docker inspect <container id>)<\/li>\n<\/ol>\n<\/li>\n<li>\u624b\u673a\u4e0a\u4f7f\u7528Reeder\u767b\u5f55FreshRSS\n<ol>\n<li>freshRSS \u8bbe\u7f6e-&gt;\u8ba4\u8bc1-&gt;\u5141\u8bb8API\u8bbf\u95ee<\/li>\n<li>freshRSS \u8bbe\u7f6e-&gt;\u8d26\u6237-&gt;API\u7ba1\u7406-&gt;\u8bbe\u7f6eAIP\u5bc6\u7801<\/li>\n<li>Reeder\u4e2d\u4f7f\u7528API\u7ba1\u7406\u4e0b\u7684\u5730\u5740+\u7528\u6237\u540d+API\u5bc6\u7801\u8fdb\u884c\u767b\u5f55<\/li>\n<\/ol>\n<\/li>\n<li><a href=\"https:\/\/blog.ichr.me\/post\/docker-freshrss-setup\/\" target=\"_blank\" rel=\"noopener\">Freshrss\u53c2\u8003\u6587\u6863<\/a><\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-yaml\" data-lang=\"yaml\"><span class=\"line\"><span class=\"cl\"><span class=\"nt\">version<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">&#34;3&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"nt\">services<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">freshrss-db<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">image<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">postgres:17.4<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">container_name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss-db<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">hostname<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss-db<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">restart<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">unless-stopped<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"l\">freshrss-db:\/var\/lib\/postgresql\/data<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">environment<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">POSTGRES_USER<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">POSTGRES_PASSWORD<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">POSTGRES_DB<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">freshrss-app<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">image<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss\/freshrss:latest<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">container_name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss-app<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">hostname<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">freshrss-app<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">restart<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">unless-stopped<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">ports<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"s2\">&#34;7080:80&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">depends_on<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"l\">freshrss-db<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"l\">.\/data:\/var\/www\/FreshRSS\/data<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"l\">.\/extensions:\/var\/www\/FreshRSS\/extensions<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">environment<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">CRON_MIN<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;*\/45&#39;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">TZ<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">Asia\/Shanghai<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"nt\">volumes<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">freshrss-db<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u8865\u5145\u5185\u5bb9\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#\u8865\u5145\u5185\u5bb9\" class=\"anchor-link\" aria-label=\"\u8865\u5145\u5185\u5bb9\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#contents:\u8865\u5145\u5185\u5bb9\" class=\"headings\">\u8865\u5145\u5185\u5bb9<\/a><\/h3>\n<ul>\n<li>FreshRSS \u955c\u50cf\u548c\u5bb9\u5668\u5347\u7ea7\u540e\uff0c\u65e0\u6cd5\u8bbf\u95ee\n<ul>\n<li>\u62a5\u9519\u5185\u5bb9\u63d0\u793a\u4e3a<code>Access to database is denied for `freshrss`: SQLSTATE[08006] [7] connection to server at &quot;172.21.0.3&quot;, port 5432 failed: Connection refused <\/code>, \u6000\u7591\u662f\u5bb9\u5668\u91cd\u542f\u540e\uff0cip\u53d8\u66f4\u5bfc\u81f4<\/li>\n<li>\u67e5\u770b\u5bb9\u5668ip,\u53d1\u73b0ip \u53d8\u6210\u4e86172.21.0.2<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\"># \u8fdb\u5165\u5bb9\u5668 Shell\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker exec -it &lt;\u5bb9\u5668\u540d\u79f0\u6216ID&gt; \/bin\/bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># \u67e5\u770b IP \u5730\u5740\uff08\u5bb9\u5668\u5185\u6267\u884c\uff09\n<\/span><\/span><span class=\"line\"><span class=\"cl\">apt-get update &amp;&amp; apt-get install -y iputils-ping net-tools # \u5982\u679c\u5bb9\u5668\u65e0 ifconfig\/ip \u547d\u4ee4\uff0c\u5148\u5b89\u88c5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ifconfig\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\uff0c\u4f4d\u4e8edocker-compose.yml \u540c\u76ee\u5f55data\/config.php\uff0c\u8c03\u6574pgsql\u7684host\u4e3a172.21.0.2<\/li>\n<li>\u91cd\u542ffreshrss \u5bb9\u5668\uff0c\u95ee\u9898\u89e3\u51b3<\/li>\n<\/ul>\n<h2 id=\"vercel-rsshub-\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#vercel-rsshub-\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"vercel-rsshub-\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#contents:vercel-rsshub-\u90e8\u7f72\" class=\"headings\">Vercel RSSHub \u90e8\u7f72<\/a><\/h2>\n<ol>\n<li>\u56e0\u4e3avercel nodejs \u6700\u9ad8\u7248\u672c\u53ea\u80fd\u9009\u62e9 20.x\uff0c\u5bfc\u81f4\u65e0\u6cd5\u4f7f\u7528RSSHub master\u5206\u652f\u90e8\u7f72\uff0c\u4f7f\u7528legacy \u5206\u652f\u8fdb\u884c\u90e8\u7f72,\u64cd\u4f5c\u6d41\u7a0b\u89c1\u53c2\u8003\u6587\u6863<\/li>\n<li>legacy \u76f8\u6bd4master\u5206\u652f\u7f3a\u5c11\u5f88\u591a\u8def\u7531\uff0c\u9700\u8981\u81ea\u5df1\u6309\u9700\u6dfb\u52a0\u8def\u7531\n<ol>\n<li>\u5728master\u5206\u652f\u627e\u5230\u7f3a\u5c11\u7684\u8def\u7531\uff0c\u590d\u5236\u5230legacy\u5206\u652f\uff0c\u4fee\u6539\u6587\u4ef6\u540d\u5c3e\u7f00ts\u4e3ajs,\u53c2\u8003\u5176\u4ed6\u8def\u7531\u8c03\u6574\u4ee3\u7801\u683c\u5f0f<\/li>\n<li>\u5728\\RSSHub\\lib\\router.js\u4e2d\u6dfb\u52a0\u65b0\u589e\u7684\u8def\u7531\u5730\u5740<\/li>\n<li>\u5982\u679c\u9700\u8981\u4f7f\u7528\u73af\u5883\u53d8\u91cf\uff0c\u5728\\RSSHub\\lib\\config.js\u4e2d\u6dfb\u52a0\uff0c\u5e76\u5728vercel \u5bf9\u5e94\u7684\u9879\u76ee-&gt;\u8bbe\u7f6e-&gt;Environment Variables\u6dfb\u52a0\u76f8\u540c\u73af\u5883\u53d8\u91cf<\/li>\n<\/ol>\n<\/li>\n<li>\u4f7f\u7528vercel \u90e8\u7f72\u7684\u597d\u5904\u6709\n<ol>\n<li>\u56fd\u5185\u5916\u7f51\u7ad9\u7684\u4fe1\u606f\u90fd\u53ef\u4ee5\u76f4\u63a5\u6293\u53d6<\/li>\n<li>\u65e0\u9700\u670d\u52a1\u5668\u53ef\u4ee5\u514d\u8d39\u4f7f\u7528<\/li>\n<\/ol>\n<\/li>\n<li><a href=\"https:\/\/cloud.tencent.com\/developer\/article\/2432561\" target=\"_blank\" rel=\"noopener\">vercel rsshub\u90e8\u7f72\u53c2\u8003\u6587\u6863<\/a><\/li>\n<\/ol>\n<h2 id=\"\u5176\u4ed6\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#\u5176\u4ed6\" class=\"anchor-link\" aria-label=\"\u5176\u4ed6\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rss\/#contents:\u5176\u4ed6\" class=\"headings\">\u5176\u4ed6<\/a><\/h2>\n<ol>\n<li><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/\" target=\"_blank\" rel=\"noopener\">caddy\u7684\u5b89\u88c5\u53c2\u8003\u6587\u6863<\/a><\/li>\n<li><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/630011467\" target=\"_blank\" rel=\"noopener\">\u6c38\u4e45\u514d\u8d39\u57df\u540dPP.UA\u6700\u65b0\u6ce8\u518c\u6307\u5357<\/a><\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rss\/","term":"RSS","label":"RSS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rsshub\/","term":"RSShub","label":"RSShub"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/freshrss\/","term":"FreshRSS","label":"FreshRSS"}}]},{"title":"\n\u5927\u6a21\u578b\u79d1\u666e","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/llm\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/llm\/","updated":"2024-09-06T10:30:30+08:00","published":"2024-09-05T19:58:30+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u5927\u6a21\u578b\u539f\u7406\u79d1\u666e\u548c\u5927\u6a21\u578b\u53ef\u4ee5\u505a\u4e9b\u4ec0\u4e48\u4e8b","content":"\n<p>\u6700\u8fd1\u7f16\u5199\u4e86LLM\u79d1\u666e\u7684PPT\uff0c\u5199\u4e2a\u6587\u7ae0\u68b3\u7406\u4e0b\u81ea\u5df1\u7684\u601d\u8def\u3002<\/p>\n<h3 id=\"\u5927\u6a21\u578b\u7b80\u4ecb\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#\u5927\u6a21\u578b\u7b80\u4ecb\" class=\"anchor-link\" aria-label=\"\u5927\u6a21\u578b\u7b80\u4ecb\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#contents:\u5927\u6a21\u578b\u7b80\u4ecb\" class=\"headings\">\u5927\u6a21\u578b\u7b80\u4ecb<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/1.png\" alt=\"jianjie1\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/2.png\" alt=\"jianjie2\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/3.png\" alt=\"jianjie3\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/4.png\" alt=\"jianjie4\"><\/p>\n<ul>\n<li>\u5927\u6a21\u578b\u53ef\u4ee5\u7528\u4e8e\u6587\u672c\u7c7b\u751f\u6210\u5f0f\u4efb\u52a1\uff1a\u5bf9\u8bdd\uff0c\u95ee\u7b54\uff0c\u641c\u7d22\u7b49\u3002<\/li>\n<li>\u5927\u6a21\u578b\u7684\u8bad\u7ec3\u6210\u672c\u975e\u5e38\u9ad8\uff0c\u6ce8\u5b9a\u662f\u5927\u516c\u53f8\u4e4b\u95f4\u7684\u6e38\u620f\u3002<\/li>\n<li>\u6a21\u578b\u6548\u679c\u6548\u679c\u6700\u597d\u7684\u662fGPT-4o \uff0c\u56fd\u5185\u6a21\u578b\u6548\u679c\u5904\u4e8e\u7b2c\u4e8c\u68af\u961f\u3002<\/li>\n<li>\u4f7f\u7528\u56fd\u5185\u4e91\u5382\u5546\u63d0\u4f9b\u7684\u5927\u6a21\u578b\u670d\u52a1\uff0c\u6210\u672c\u975e\u5e38\u4f4e\uff0c100\u4e07token\u51e0\u5757\u94b1\u3002\u56fd\u5185\u670d\u52a1\u4e00\u4e2a\u6c49\u5b57\u4e00\u4e2atoken\u3002\u56fd\u5916\u670d\u52a1\u4e00\u4e2a\u6c49\u5b57\u7ea63\u4e2atoken\u3002<\/li>\n<li>\u5927\u6a21\u578b\u7684\u4f7f\u7528\u9700\u8981\u63d0\u793a\u8bcd\uff0c\u5728\u8bf7\u6c42\u9891\u7e41\u7684\u4e1a\u52a1\u4e2d\uff0c\u63d0\u793a\u8bcd\u6d88\u8017\u7684token\u6570\u53ef\u80fd\u5360\u5927\u5934\uff0c\u4f30\u7b97\u6210\u672c\u65f6\u4e0d\u8981\u9057\u6f0f\u3002<\/li>\n<\/ul>\n<h3 id=\"\u5927\u6a21\u578b\u539f\u7406\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#\u5927\u6a21\u578b\u539f\u7406\" class=\"anchor-link\" aria-label=\"\u5927\u6a21\u578b\u539f\u7406\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#contents:\u5927\u6a21\u578b\u539f\u7406\" class=\"headings\">\u5927\u6a21\u578b\u539f\u7406<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/5.png\" alt=\"yuanli\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/6.png\" alt=\"yuanli\"><\/p>\n<ul>\n<li>\u5927\u6a21\u578b\u8bad\u7ec3\u9700\u8981\u51c6\u5907\u6d77\u91cf\u7684\u6570\u636e\uff0c\u8fd9\u4e9b\u6570\u636e\u5927\u90e8\u5206\u90fd\u662f\u4e92\u8054\u7f51\u4e0a\u7684\u5185\u5bb9\uff0c\u8fd9\u4e9b\u6570\u636e\u4e2d\u5305\u542b\u5927\u91cf\u901a\u7528\u578b\u77e5\u8bc6\u3002<\/li>\n<li>\u5927\u6a21\u578b\u672c\u8d28\u4e0a\u662f\u901a\u8fc7\u8bad\u7ec3\u7684\u65b9\u5f0f\uff0c\u5c06\u8bad\u7ec3\u6570\u636e\u4e2d\u7684\u4fe1\u606f\u63d0\u53d6\u51fa\u6765\uff0c\u5e76\u5b58\u50a8\u5728\u6a21\u578b\u4e2d\u3002\u4fe1\u606f\u63d0\u53d6\u7684\u8fc7\u7a0b\u662f\u6709\u635f\u7684\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u79cd\u538b\u7f29\u3002\u4e3a\u4e86\u52a0\u5feb\u63d0\u53d6\u8fc7\u7a0b\uff0c\u4f1a\u7528\u5230\u5927\u91cf\u7684GPU\u8d44\u6e90\uff0c\u56e0\u800c\u8bad\u7ec3\u6210\u672c\u975e\u5e38\u9ad8\u3002<\/li>\n<li>\u6a21\u578b\u8bad\u7ec3\u5b8c\u6210\u540e\uff0c\u6a21\u578b\u5185\u90e8\u5b58\u50a8\u7684\u4fe1\u606f\u5c31\u662f\u5bf9\u8bad\u7ec3\u6570\u636e\u7684\u7406\u89e3\u3002\u8bad\u7ec3\u65b9\u5f0f\u4e00\u81f4\uff0c\u8bad\u7ec3\u6570\u636e\u7684\u4fa7\u91cd\u70b9\u4e0d\u540c\uff0c\u6700\u7ec8\u6a21\u578b\u6548\u679c\u4e5f\u4f1a\u4e0d\u540c\uff0c\u64c5\u957f\u7684\u4efb\u52a1\u4e5f\u4f1a\u4e0d\u540c\u3002<\/li>\n<li>\u8bc6\u522b\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u7ed3\u5408\u6a21\u578b\u5185\u90e8\u7684\u4fe1\u606f\u6765\u9884\u6d4b\u8f93\u5165\u6587\u672c\u8be2\u95ee\u7684\u95ee\u9898\u3002<\/li>\n<li>\u6a21\u578b\u5185\u90e8\u6709\u81ea\u6ce8\u610f\u529b\u673a\u5236\uff0c\u9884\u6d4b\u95ee\u9898\u4e0d\u5728\u662f\u6839\u636e\u8f93\u5165\u6587\u672c\u4e2d\u7684\u5355\u4e2a\u8bcd\uff0c\u800c\u662f\u524d\u540e\u5173\u8054\uff0c\u8fdb\u800c\u63d0\u9ad8\u6548\u679c\u3002\u56e0\u4e3a\u8bad\u7ec3\u73af\u8282\u63d0\u53d6\u662f\u6709\u635f\u7684\uff0c\u540c\u65f6\u9884\u6d4b\u4e5f\u6709\u51c6\u786e\u7387\uff0c\u6240\u6709\u6700\u7ec8\u7ed9\u51fa\u7684\u7b54\u6848\u4e0d\u662f100%\u51c6\u786e\u3002<\/li>\n<li>\u8bad\u7ec3\u6570\u636e\u4e2d\u4e0d\u5b58\u5728\u7684\u4fe1\u606f\uff0c\u5927\u6a21\u578b\u65e0\u6cd5\u56de\u7b54\u6216\u8005\u53ea\u80fd\u7f16\u9020\u3002\u89e3\u51b3\u65b9\u6848\u5c31\u662f\u5c06\u76f8\u5173\u7684\u4fe1\u606f\u4f5c\u4e3a\u4e00\u4e2a\u77e5\u8bc6\u5e93\uff0c\u5728\u8be2\u95ee\u65f6\u4f5c\u4e3a\u63d0\u793a\u8bcd\u5185\u5bb9\u4e00\u8d77\u8f93\u5165\u6a21\u578b\u3002<\/li>\n<li>\u5927\u6a21\u578b\u53ea\u5177\u5907\u6587\u672c\u751f\u6210\u80fd\u529b\uff0c\u501f\u52a9\u5176\u4ed6\u7684\u7cfb\u7edf\uff0c\u624d\u80fd\u5b8c\u6210\u9700\u8981\u8054\u7f51\u7684\u4efb\u52a1\u3002<\/li>\n<\/ul>\n<h3 id=\"\u5927\u6a21\u578b\u6848\u4f8b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#\u5927\u6a21\u578b\u6848\u4f8b\" class=\"anchor-link\" aria-label=\"\u5927\u6a21\u578b\u6848\u4f8b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/llm\/#contents:\u5927\u6a21\u578b\u6848\u4f8b\" class=\"headings\">\u5927\u6a21\u578b\u6848\u4f8b<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/7.png\" alt=\"yuanli\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/8.png\" alt=\"yuanli\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/9.png\" alt=\"yuanli\">\n<img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/llm\/10.png\" alt=\"yuanli\"><\/p>\n<ul>\n<li>\u5229\u7528\u5927\u6a21\u578b\u7684\u603b\u7ed3\u548c\u63d0\u53d6\u80fd\u529b\uff0c\u7ed3\u5408\u5185\u90e8\u6587\u6863\u53ef\u4ee5\u8f7b\u677e\u642d\u5efa\u4e00\u4e2a\u548c\u4e1a\u52a1\u7d27\u5bc6\u5173\u8054\u7684\u95ee\u7b54\u7cfb\u7edf\u3002<\/li>\n<li>\u5229\u7528\u5927\u6a21\u578b\u7684\u5bf9\u8bdd\u80fd\u529b\uff0c\u53ef\u4ee5\u63d0\u5347\u667a\u80fd\u5ba2\u670d\u7684\u62df\u4eba\u611f\uff0c\u540c\u65f6\u6302\u8f7d\u7279\u5b9a\u884c\u4e1a\u77e5\u8bc6\u5e93\uff0c\u63d0\u9ad8\u4e13\u4e1a\u95ee\u9898\u56de\u7b54\u51c6\u786e\u7387\u3002<\/li>\n<li>\u5229\u7528\u5927\u6a21\u578b\u7684\u751f\u6210\u80fd\u529b\uff0c\u53ef\u4ee5\u5feb\u901f\u6279\u91cf\u751f\u6210\u7c7b\u4f3c\u7684\u95ee\u9898\u3002\u5bf9\u5237\u9898APP\uff0c\u4f7f\u7528\u6b64\u80fd\u529b\u53ef\u4ee5\u964d\u4f4e\u751f\u6210\u9898\u76ee\u7684\u6210\u672c\u3002<\/li>\n<li>\u5229\u7528\u5927\u6a21\u578b\u7684\u603b\u7ed3\u548c\u63d0\u53d6\u80fd\u529b\uff0c\u53ef\u4ee5\u5bf9\u6587\u6863\u751f\u6210\u6458\u8981\uff0c\u63d0\u9ad8\u83b7\u53d6\u6587\u6863\u5173\u952e\u4fe1\u606f\u7684\u6548\u7387\u3002<\/li>\n<\/ul>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/llm\/","term":"LLM","label":"LLM"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%A4%A7%E6%A8%A1%E5%9E%8B\/","term":"\u5927\u6a21\u578b","label":"\u5927\u6a21\u578b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%A7%91%E6%99%AE\/","term":"\u79d1\u666e","label":"\u79d1\u666e"}}]},{"title":"\n\u88c5\u4fee\u81ea\u6211\u53cd\u601d","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/","updated":"2024-07-22T14:58:48+08:00","published":"2024-07-22T14:58:48+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u88c5\u4fee\u8fc7\u7a0b\u4e2d\u7684\u81ea\u6211\u53cd\u601d\uff0c\u907f\u5751","content":"\n<p>\u76ee\u524d\u5df2\u88c5\u4fee\u5feb2\u4e2a\u6708\uff0c\u603b\u7ed3\u4e0b\u8fd9\u671f\u95f4\u6b63\u786e\u548c\u5931\u8bef\u51b3\u7b56<\/p>\n<h3 id=\"\u6b63\u786e\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/#\u6b63\u786e\" class=\"anchor-link\" aria-label=\"\u6b63\u786e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/#contents:\u6b63\u786e\" class=\"headings\">\u6b63\u786e<\/a><\/h3>\n<ol>\n<li>\u5236\u4f5c\u9884\u7b97\u8868\uff0c\u68b3\u7406\u4e2a\u4eba\u751f\u6d3b\u4e60\u60ef\u8f6c\u6362\u6210\u88c5\u4fee\u9700\u6c42<\/li>\n<li>\u82b1\u94b1\u8bf7\u5916\u90e8\u76d1\u7406\uff08\u88c5\u4fee\u516c\u53f8\u5b89\u6392\u7684\u76d1\u7406\u5c31\u662f\u9a97\u5b50\uff09<\/li>\n<li>\u5bfb\u627e\u672c\u5730\u9760\u8c31\u7684\u88c5\u4fee\u8d44\u6e90\u54c1\u63a7\u4eba\uff0c\u5bf9\u76f8\u5173\u8d44\u6e90\u548c\u5546\u5bb6\u8fdb\u884c\u54c1\u63a7\uff08\u6211\u627e\u7684\u4e00\u4e2a\u672c\u5730\u5c0f\u7ea2\u4e66\u88c5\u4fee\u535a\u4e3b\uff09<\/li>\n<li>\u6ca1\u6709\u627e\u719f\u4eba\uff0c\u4e0d\u9650\u4e8e\u4eb2\u621a\u548c\u4ee5\u524d\u88c5\u4fee\u8ba4\u8bc6\u7684\u4eba\uff08\u73b0\u5728\u56de\u60f3\u7b2c\u4e00\u6b21\u88c5\u4fee\uff0c\u771f\u662f\u5565\u90fd\u4e0d\u61c2\uff0c\u5bf9\u4eba\u7684\u5224\u65ad\u4e5f\u4e0d\u51c6\uff09<\/li>\n<li>\u957f\u8f88\u53c2\u4e0e\u73af\u8282\u8f83\u5c11\uff0c\u53ea\u53c2\u4e0e\u9a8c\u6536<\/li>\n<li>\u6ca1\u6709\u548c\u88c5\u4fee\u516c\u53f8\u7b7e\u5408\u540c\uff0c\u4e0e\u5de5\u957f\uff08\u9879\u76ee\u7ecf\u7406\uff09\u7b7e\u5408\u540c<\/li>\n<\/ol>\n<h3 id=\"\u5931\u8bef\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/#\u5931\u8bef\" class=\"anchor-link\" aria-label=\"\u5931\u8bef\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/2\/#contents:\u5931\u8bef\" class=\"headings\">\u5931\u8bef<\/a><\/h3>\n<ol>\n<li>\u6ca1\u6709\u8bf7\u8bbe\u8ba1\u5e08<\/li>\n<li>\u6ca1\u6709\u63d0\u524d\u548c\u697c\u4e0b\u6253\u597d\u62db\u547c\uff0c\u4e8c\u624b\u623f\u5bb9\u6613\u51fa\u73b0\u4e0b\u6c34\u4e0d\u7545\uff0c\u758f\u901a\u9700\u8981\u4e0e\u697c\u4e0b\u534f\u5546<\/li>\n<li>\u9519\u8fc7\u4e86\u53e3\u7891\u6700\u597d\u7684\u9879\u76ee\u7ecf\u7406<\/li>\n<li>\u53a8\u623f\u548c\u536b\u751f\u95f4\u95e8\u5b9a\u7684\u6bd4\u8f83\u968f\u610f<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E8%A3%85%E4%BF%AE\/","term":"\u88c5\u4fee","label":"\u88c5\u4fee"}}]},{"title":"\nRSShub\u81ea\u5236\u8def\u7531","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/rsshub\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/rsshub\/","updated":"2024-07-09T10:33:07+08:00","published":"2024-07-09T10:33:07+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\nRSSHub\u8def\u7531\u548c\u9605\u8bfb\u7b49\u4e66\u6e90\u5236\u4f5c\uff0c\u90fd\u662f\u5bf9html\u4fe1\u606f\u7684\u89e3\u6790\uff0c\u533a\u522b\u662f\u4e00\u4e2a\u662f\u670d\u52a1\u7aef\u5904\u7406\uff0c\u4e00\u4e2a\u662f\u5728\u5ba2\u6237\u7aef\u5904\u7406\u3002","content":"\n<p>\u5e73\u65f6\u4e3b\u8981\u4f7f\u7528RSS\u770b\u8d44\u8baf\u4fe1\u606f\uff0c\u65e5\u5e38\u4f7f\u7528RSSHub Radar\u6d4f\u89c8\u5668\u63d2\u4ef6\u67e5\u8be2\u7f51\u7ad9RSS\u94fe\u63a5\uff0c\u5f88\u591a\u7f51\u7ad9\u90fd\u65e0\u6cd5\u53d1\u73b0RSS\u94fe\u63a5\uff0c\u4e00\u5ea6\u8ba4\u4e3a\u8fd9\u4e2a\u63d2\u4ef6\u5f88\u9e21\u808b\u3002\u6700\u8fd1\u7814\u7a76\u4e86\u4e0b\uff0c\u8fd9\u4e2a\u63d2\u4ef6\u786e\u5b9e\u5f88\u9e21\u808b\uff0c\u6838\u5fc3\u662fRSSHub\u8fd9\u4e2a\u5f00\u6e90\u9879\u76ee\uff0c\u901a\u8fc7\u642d\u5efa\u81ea\u5b9a\u4e49\u8def\u7531\uff0c\u5c06\u7f51\u7ad9\u4fe1\u606f\u8f6c\u6362\u6210RSS\u4fe1\u606f\u6d41\u3002\u7136\u540e\u4f7f\u7528RSS \u9605\u8bfb\u5668\u8fdb\u884c\u8ba2\u9605\u9605\u8bfb\u3002<\/p>\n<h3 id=\"\u539f\u7406\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rsshub\/#\u539f\u7406\" class=\"anchor-link\" aria-label=\"\u539f\u7406\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rsshub\/#contents:\u539f\u7406\" class=\"headings\">\u539f\u7406<\/a><\/h3>\n<ol>\n<li>\u7f51\u7ad9\u5185\u5bb9\u90fd\u662fhtml\u4fe1\u606f\uff0c\u901a\u8fc7\u5bf9\u7f51\u7ad9html\u5185\u5bb9\u89e3\u6790\uff0c\u6309\u7167RSS\u89c4\u8303\u751f\u6210RSS\u6587\u4ef6\u3002\u5373\u53ef\u4f7f\u7528RSS \u9605\u8bfb\u5668\u8ba2\u9605\u9605\u8bfb\u3002<\/li>\n<li><a href=\"https:\/\/github.com\/DIYgod\/RSSHub\" target=\"_blank\" rel=\"noopener\">RSSHub\u9879\u76ee\u5730\u5740<\/a>\uff0c\u4f7f\u7528RSSHub\u53ea\u7528\u5173\u6ce8\u7f51\u7ad9html\u5185\u5bb9\u7684\u89e3\u6790\uff0c\u5236\u4f5c\u8def\u7531\u5c31\u662f\u6309\u7167\u89c4\u8303\u5bf9\u5185\u5bb9\u8fdb\u884c\u89e3\u6790\u3002<\/li>\n<li>\u53c2\u8003\u9879\u76ee\u4e2d\u4ed6\u4eba\u7f16\u5199\u7684\u8def\u7531\uff0c\u501f\u52a9\u5927\u6a21\u578b\uff0c\u4e0d\u61c2JS\u4e5f\u53ef\u4ee5\u5f88\u7b80\u5355\u5b8c\u6210\u7f51\u7ad9\u8def\u7531\u5236\u4f5c\u3002<\/li>\n<li>\u4f7f\u7528RSS\u9605\u8bfb\u7f51\u7ad9\u5185\u5bb9\u548c\u4e66\u6e90\u5de5\u5177\u9605\u8bfb\u5c0f\u8bf4\u601d\u60f3\u4e0a\u4e00\u81f4\u7684\uff0c\u90fd\u662f\u5bf9\u7f51\u7ad9\u5185\u5bb9\u8fdb\u884c\u89e3\u6790\uff0c\u53ea\u7559\u4e0b\u91cd\u8981\u7684\u5185\u5bb9\u4fe1\u606f\u5c55\u793a\u3002\u533a\u522b\u662f\u4e00\u4e2a\u5bf9\u6e90\u7f51\u7ad9\u6570\u636e\u7684\u5904\u7406\u5728\u670d\u52a1\u7aef\u8fdb\u884c\uff0c\u4e00\u4e2a\u5728\u5ba2\u6237\u7aef\u8fdb\u884c\u3002<\/li>\n<\/ol>\n<h3 id=\"\u5236\u4f5c\u8def\u7531\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/rsshub\/#\u5236\u4f5c\u8def\u7531\" class=\"anchor-link\" aria-label=\"\u5236\u4f5c\u8def\u7531\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/rsshub\/#contents:\u5236\u4f5c\u8def\u7531\" class=\"headings\">\u5236\u4f5c\u8def\u7531<\/a><\/h3>\n<ol>\n<li><a href=\"https:\/\/docs.rsshub.app\/zh\/joinus\/\" target=\"_blank\" rel=\"noopener\">\u5f00\u53d1\u8def\u7531\u5b98\u65b9\u6587\u6863<\/a>\uff0c\u53c2\u8003\u5b98\u65b9\u6587\u6863\u4e0b\u8f7d\u914d\u7f6e\u597d\u5f00\u53d1\u73af\u5883\u3002<\/li>\n<li>\u6253\u5f00\u60f3\u5236\u4f5c\u7684\u7f51\u7ad9F12,\u67e5\u770b\u7f51\u7ad9html\u7ed3\u6784\uff0c\u627e\u5230\u9700\u8981\u89e3\u6790\u7684\u5143\u7d20\u3002<\/li>\n<li>\u53c2\u8003\u4e0b\u8ff0\u4ee3\u7801\uff0c\u6700\u91cd\u8981\u662fhandler\u51fd\u6570\uff0c\u5176\u4ed6\u90fd\u662f\u914d\u7f6e\u4fe1\u606f\u3002handler\u4e2d\u89e3\u6790html\u6807\u7b7e\uff0c\u83b7\u53d6\u9700\u8981\u7684\u4fe1\u606f\u3002\u4e3b\u8981\u5c31\u662f\u6807\u9898\uff0c\u94fe\u63a5\uff0c\u63cf\u8ff0\uff0c\u53d1\u5e03\u65f6\u95f4\u3002\u5982\u679c\u60f3\u5728RSS\u9605\u8bfb\u5668\u4e2d\u76f4\u63a5\u9605\u8bfb\u5b8c\u6574\u7684\u5185\u5bb9\uff0c\u53ef\u4ee5\u5c06\u6587\u7ae0\u5185\u5bb9\u653e\u5728\u63cf\u8ff0(description)\u4e2d\u3002<\/li>\n<li>\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u4e0d\u61c2\u7684\u5c31\u95ee\u5927\u6a21\u578b\uff0c\u4e91\u5382\u5546\u90fd\u63d0\u4f9b\u4e86\u514d\u8d39\u670d\u52a1\uff0c\u80fd\u529b\u90fd\u5dee\u4e0d\u591a\u3002\u5b8c\u6210\u76f8\u5e94\u5f00\u53d1\u540e\uff0c\u5c06\u4ee3\u7801\u90e8\u7f72\u5230\u670d\u52a1\u5668\u4e0a\uff0c\u914d\u7f6e\u597d\u7aef\u53e3\u8f6c\u53d1\u5c31\u53ef\u4ee5\u901a\u8fc7\u57df\u540d\u8ba2\u9605\u3002<\/li>\n<li>\u5982\u679c\u4f7f\u7528\u5b98\u65b9\u63d0\u4f9b\u7684RSSHub\u670d\u52a1\uff0c\u9700\u8981\u63d0\u4ea4PR\u5230RSSHub\u9879\u76ee\uff0c\u7b49\u5f85\u5ba1\u6838\u901a\u8fc7\u540e\u624d\u80fd\u4f7f\u7528\u3002<\/li>\n<li>\u53ef\u4ee5\u9605\u8bfb\u8def\u7531\u4e2d\u4ed6\u4eba\u5236\u4f5c\u7684\u8def\u7531\uff0c\u53d1\u73b0\u611f\u5174\u8da3\u7684\u7f51\u7ad9\uff0c\u67e5\u770bRoute\u7ed3\u6784\uff0c\u4f7f\u7528\u5b98\u65b9\u670d\u52a1\uff0c\u76f4\u63a5\u8ba2\u9605\u4f7f\u7528\u3002<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"kr\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Route<\/span> <span class=\"p\">}<\/span> <span class=\"nx\">from<\/span> <span class=\"s1\">&#39;@\/types&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">parseDate<\/span> <span class=\"p\">}<\/span> <span class=\"nx\">from<\/span> <span class=\"s1\">&#39;@\/utils\/parse-date&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">import<\/span> <span class=\"nx\">got<\/span> <span class=\"nx\">from<\/span> <span class=\"s1\">&#39;@\/utils\/got&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">load<\/span> <span class=\"p\">}<\/span> <span class=\"nx\">from<\/span> <span class=\"s1\">&#39;cheerio&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">export<\/span> <span class=\"kr\">const<\/span> <span class=\"nx\">route<\/span><span class=\"o\">:<\/span> <span class=\"nx\">Route<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">path<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;\/&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">categories<\/span><span class=\"o\">:<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;blog&#39;<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">example<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;\/imhcg&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">radar<\/span><span class=\"o\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">source<\/span><span class=\"o\">:<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;https:\/\/infos.imhcg.cn\/&#39;<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">name<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;Engineering blogs&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maintainers<\/span><span class=\"o\">:<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;xiaoshame&#39;<\/span><span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">handler<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">url<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;https:\/\/infos.imhcg.cn\/&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handler<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">url<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;https:\/\/infos.imhcg.cn\/&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">got<\/span><span class=\"p\">({<\/span> <span class=\"nx\">method<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;get&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">url<\/span> <span class=\"p\">});<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">$<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">load<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">list<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;li&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">.<\/span><span class=\"nx\">map<\/span><span class=\"p\">((<\/span><span class=\"nx\">i<\/span><span class=\"p\">,<\/span> <span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">element<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">title<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">element<\/span><span class=\"p\">.<\/span><span class=\"nx\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a.title&#39;<\/span><span class=\"p\">).<\/span><span class=\"nx\">text<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">link<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">element<\/span><span class=\"p\">.<\/span><span class=\"nx\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a.title&#39;<\/span><span class=\"p\">).<\/span><span class=\"nx\">attr<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;href&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">description<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">element<\/span><span class=\"p\">.<\/span><span class=\"nx\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;p.text&#39;<\/span><span class=\"p\">).<\/span><span class=\"nx\">text<\/span><span class=\"p\">().<\/span><span class=\"nx\">trim<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">dateraw<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">element<\/span><span class=\"p\">.<\/span><span class=\"nx\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;p.time&#39;<\/span><span class=\"p\">).<\/span><span class=\"nx\">text<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">title<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">description<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">link<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">pubDate<\/span><span class=\"o\">:<\/span> <span class=\"nx\">parseDate<\/span><span class=\"p\">(<\/span><span class=\"nx\">dateraw<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;YYYY \u5e74 MM \u6708 DD \u65e5&#39;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">.<\/span><span class=\"nx\">get<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">title<\/span><span class=\"o\">:<\/span> <span class=\"s1\">&#39;Engineering blogs&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">link<\/span><span class=\"o\">:<\/span> <span class=\"nx\">url<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">item<\/span><span class=\"o\">:<\/span> <span class=\"nx\">list<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rss\/","term":"RSS","label":"RSS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rsshub\/","term":"RSShub","label":"RSShub"}}]},{"title":"\n\u8bed\u97f3\u9690\u5199\u672f\u4e4bLSB","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/watermark\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/watermark\/","updated":"2024-07-03T15:48:32+08:00","published":"2024-07-03T15:48:32+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4f7f\u7528LSB\u9690\u5199\u672f\u5b9e\u73b0\u97f3\u9891\u6c34\u5370\u529f\u80fd","content":"\n<p>\u6700\u8fd1\u5de5\u4f5c\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u97f3\u9891\u6c34\u5370\u529f\u80fd\u3002\u4e0d\u5f97\u4e0d\u8bf4\u5927\u6a21\u578b\u786e\u5b9e\u63d0\u9ad8\u4e86\u6548\u7387\uff0c\u4f7f\u7528\u5927\u6a21\u578b\u63d0\u4f9b\u4e86\u5b8c\u6574\u7684\u4ee3\u7801\u6846\u67b6\uff0c\u4ee3\u7801\u8d28\u91cf\u5f88\u9ad8\u53ea\u6709\u51e0\u5904\u9519\u8bef\uff0c\u4fee\u590d\u540e\u5c31\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u76f8\u5173\u4ee3\u7801\u5982\u4e0b\uff0c\u9700\u6c42\u7684\u81ea\u53d6\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">numpy<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">np<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">wave<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">encode_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> \u5c06\u6c34\u5370\u6570\u636e\u7f16\u7801\u4e3a\u4e8c\u8fdb\u5236\u4f4d\u6570\u7ec4\uff0c\u6bcf\u4e2a\u6837\u672c\u4f7f\u7528bits_per_sample\u4f4d\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5047\u8bbewatermark_data\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0c\u6211\u4eec\u9996\u5148\u5c06\u5176\u8f6c\u6362\u4e3a\u5b57\u8282\u6570\u7ec4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u7136\u540e\uff0c\u5c06\u5b57\u8282\u6570\u7ec4\u8f6c\u6362\u4e3a\u4e8c\u8fdb\u5236\u4f4d\u6570\u7ec4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">byte<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">watermark_data<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">_<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">8<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">byte<\/span> <span class=\"o\">&amp;<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">byte<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u622a\u65ad\u6216\u586b\u5145\u4ee5\u5339\u914d\u6240\u9700\u7684\u4f4d\u6570\uff08\u5982\u679c\u9700\u8981\uff09<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8fd9\u91cc\u6211\u4eec\u7b80\u5316\u5904\u7406\uff0c\u5047\u8bbewatermark_bits\u957f\u5ea6\u5408\u9002<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">watermark_bits<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">decode_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> \u5c06\u4e8c\u8fdb\u5236\u4f4d\u6570\u7ec4\u89e3\u7801\u4e3a\u6c34\u5370\u6570\u636e\u5b57\u7b26\u4e32\uff0c\u5047\u8bbe\u6bcf\u4e2a\u6837\u672c\u4f7f\u7528bits_per_sample\u4f4d\uff08\u4f46\u5728\u6b64\u51fd\u6570\u4e2d\u6211\u4eec\u5ffd\u7565\u8fd9\u4e2a\u53c2\u6570\uff0c\u56e0\u4e3a\u89e3\u7801\u65f6\u4e0d\u9700\u8981\u77e5\u9053\u8fd9\u4e2a\u4fe1\u606f\uff09\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5ffd\u7565bits_per_sample\u53c2\u6570\uff0c\u56e0\u4e3a\u6211\u4eec\u5047\u8bbewatermark_bits\u5df2\u7ecf\u5177\u6709\u6b63\u786e\u7684\u957f\u5ea6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521d\u59cb\u5316\u4e00\u4e2a\u7a7a\u7684\u5b57\u8282\u5217\u8868<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">bytes_list<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">),<\/span> <span class=\"mi\">8<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">byte_value<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">j<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">8<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"n\">j<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">byte_value<\/span> <span class=\"o\">|=<\/span> <span class=\"n\">watermark_bits<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"n\">j<\/span><span class=\"p\">]<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"p\">(<\/span><span class=\"n\">j<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">bytes_list<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">byte_value<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5b57\u8282\u5217\u8868\u89e3\u7801\u4e3a\u5b57\u7b26\u4e32<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nb\">bytes<\/span><span class=\"p\">(<\/span><span class=\"n\">bytes_list<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">embed_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">watermark_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> \u5c06\u6c34\u5370\u5d4c\u5165\u5230\u97f3\u9891\u6587\u4ef6\u4e2d\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param audio_file: \u8f93\u5165\u97f3\u9891\u6587\u4ef6\u540d\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param watermark_data: \u8981\u5d4c\u5165\u7684\u6c34\u5370\u6570\u636e\uff08\u5b57\u7b26\u4e32\uff09\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param output_file: \u8f93\u51fa\u97f3\u9891\u6587\u4ef6\u540d\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param bits_per_sample: \u6bcf\u4e2a\u97f3\u9891\u6837\u672c\u4e2d\u7528\u4e8e\u6c34\u5370\u7684\u4f4d\u6570\uff08\u9ed8\u8ba4\u4e3a1\uff09\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8bfb\u53d6\u97f3\u9891\u6587\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"n\">wave<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;rb&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">wav_file<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n_channels<\/span><span class=\"p\">,<\/span> <span class=\"n\">sample_width<\/span><span class=\"p\">,<\/span> <span class=\"n\">framerate<\/span><span class=\"p\">,<\/span> <span class=\"n\">nframes<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wav_file<\/span><span class=\"o\">.<\/span><span class=\"n\">getparams<\/span><span class=\"p\">()[:<\/span><span class=\"mi\">4<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5047\u8bbe\u97f3\u9891\u662f\u5355\u58f0\u9053\u7684<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">n_channels<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">raise<\/span> <span class=\"ne\">ValueError<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Audio must be mono channel.&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8bfb\u53d6\u97f3\u9891\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">audio_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">frombuffer<\/span><span class=\"p\">(<\/span><span class=\"n\">wav_file<\/span><span class=\"o\">.<\/span><span class=\"n\">readframes<\/span><span class=\"p\">(<\/span><span class=\"n\">nframes<\/span><span class=\"p\">),<\/span> <span class=\"n\">dtype<\/span><span class=\"o\">=<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">int16<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u7f16\u7801\u6c34\u5370\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">encode_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span> <span class=\"o\">*<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_data<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5982\u679c\u6c34\u5370\u4f4d\u6570\u8d85\u8fc7\u97f3\u9891\u6837\u672c\u6570\uff0c\u5219\u622a\u65ad\u6c34\u5370<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_data<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">watermark_bits<\/span><span class=\"p\">[:<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_data<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">audio_data_copy<\/span> <span class=\"o\">=<\/span> <span class=\"n\">audio_data<\/span><span class=\"o\">.<\/span><span class=\"n\">copy<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5d4c\u5165\u6c34\u5370<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span><span class=\"p\">,<\/span> <span class=\"n\">sample<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">enumerate<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_data<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u83b7\u53d6\u5f53\u524d\u6837\u672c\u7684\u6700\u4f4e\u6709\u6548\u4f4d\uff08\u6216\u51e0\u4f4d\uff09<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">lsb_mask<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"mi\">1<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">)<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">original_lsb<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sample<\/span> <span class=\"o\">&amp;<\/span> <span class=\"n\">lsb_mask<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8ba1\u7b97\u8981\u5d4c\u5165\u7684\u6c34\u5370\u4f4d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">*<\/span> <span class=\"n\">bits_per_sample<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">)):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bit<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bit<\/span> <span class=\"o\">=<\/span> <span class=\"n\">watermark_bits<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span> <span class=\"o\">*<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits_to_embed<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">original_lsb<\/span> <span class=\"o\">&amp;<\/span> <span class=\"o\">~<\/span><span class=\"n\">lsb_mask<\/span><span class=\"p\">)<\/span> <span class=\"o\">|<\/span> <span class=\"p\">(<\/span><span class=\"n\">watermark_bit<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"p\">(<\/span><span class=\"n\">bits_per_sample<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u66f4\u65b0\u6837\u672c\u7684\u6700\u4f4e\u6709\u6548\u4f4d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">audio_data_copy<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">sample<\/span> <span class=\"o\">&amp;<\/span> <span class=\"o\">~<\/span><span class=\"n\">lsb_mask<\/span><span class=\"p\">)<\/span> <span class=\"o\">|<\/span> <span class=\"n\">watermark_bits_to_embed<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5904\u7406\u540e\u7684\u97f3\u9891\u6570\u636e\u4fdd\u5b58\u4e3a\u6587\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"n\">wave<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">output_file<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;wb&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">output_wav<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">output_wav<\/span><span class=\"o\">.<\/span><span class=\"n\">setnchannels<\/span><span class=\"p\">(<\/span><span class=\"n\">n_channels<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">output_wav<\/span><span class=\"o\">.<\/span><span class=\"n\">setsampwidth<\/span><span class=\"p\">(<\/span><span class=\"n\">sample_width<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">output_wav<\/span><span class=\"o\">.<\/span><span class=\"n\">setframerate<\/span><span class=\"p\">(<\/span><span class=\"n\">framerate<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">output_wav<\/span><span class=\"o\">.<\/span><span class=\"n\">writeframes<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_data_copy<\/span><span class=\"o\">.<\/span><span class=\"n\">astype<\/span><span class=\"p\">(<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">int16<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">tobytes<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">extract_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> \u4ece\u97f3\u9891\u6587\u4ef6\u4e2d\u63d0\u53d6\u6c34\u5370\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param audio_file: \u5305\u542b\u6c34\u5370\u7684\u97f3\u9891\u6587\u4ef6\u540d\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param bits_per_sample: \u6bcf\u4e2a\u97f3\u9891\u6837\u672c\u4e2d\u7528\u4e8e\u6c34\u5370\u7684\u4f4d\u6570\uff08\u9ed8\u8ba4\u4e3a1\uff09\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :return: \u63d0\u53d6\u7684\u6c34\u5370\u6570\u636e\uff08\u5b57\u7b26\u4e32\uff09\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8bfb\u53d6\u97f3\u9891\u6587\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"n\">wave<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;rb&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">wav_file<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n_channels<\/span><span class=\"p\">,<\/span> <span class=\"n\">sample_width<\/span><span class=\"p\">,<\/span> <span class=\"n\">framerate<\/span><span class=\"p\">,<\/span> <span class=\"n\">nframes<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wav_file<\/span><span class=\"o\">.<\/span><span class=\"n\">getparams<\/span><span class=\"p\">()[:<\/span><span class=\"mi\">4<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5047\u8bbe\u97f3\u9891\u662f\u5355\u58f0\u9053\u7684<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">n_channels<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">raise<\/span> <span class=\"ne\">ValueError<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Audio must be mono channel.&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8bfb\u53d6\u97f3\u9891\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">audio_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">frombuffer<\/span><span class=\"p\">(<\/span><span class=\"n\">wav_file<\/span><span class=\"o\">.<\/span><span class=\"n\">readframes<\/span><span class=\"p\">(<\/span><span class=\"n\">nframes<\/span><span class=\"p\">),<\/span> <span class=\"n\">dtype<\/span><span class=\"o\">=<\/span><span class=\"n\">np<\/span><span class=\"o\">.<\/span><span class=\"n\">int16<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521d\u59cb\u5316\u63d0\u53d6\u7684\u6c34\u5370\u4f4d\u6570\u7ec4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u904d\u5386\u97f3\u9891\u6837\u672c\u4ee5\u63d0\u53d6\u6c34\u5370\u4f4d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">sample<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">audio_data<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u83b7\u53d6\u5f53\u524d\u6837\u672c\u7684\u6700\u4f4e\u6709\u6548\u4f4d\uff08\u6216\u51e0\u4f4d\uff09<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">lsb_mask<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"mi\">1<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">)<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bit<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"n\">sample<\/span> <span class=\"o\">&amp;<\/span> <span class=\"n\">lsb_mask<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">(<\/span><span class=\"n\">bits_per_sample<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"c1\"># \u63d0\u53d6\u6700\u4f4e\u4f4d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_bits<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bit<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">watermark_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">decode_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">watermark_bits<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">watermark_data<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4f7f\u7528\u793a\u4f8b<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">watermark_data<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;shuiyin&#34;<\/span> <span class=\"c1\"># \u8981\u5d4c\u5165\u7684\u6c34\u5370\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">audio_file<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;100024_10.wav&#34;<\/span> <span class=\"c1\"># \u8f93\u5165\u97f3\u9891\u6587\u4ef6\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">output_file<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;watermarked.wav&#34;<\/span> <span class=\"c1\"># \u8f93\u51fa\u97f3\u9891\u6587\u4ef6\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">embed_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">watermark_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">output_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">extracted_watermark<\/span> <span class=\"o\">=<\/span> <span class=\"n\">extract_watermark<\/span><span class=\"p\">(<\/span><span class=\"n\">output_file<\/span><span class=\"p\">,<\/span> <span class=\"n\">bits_per_sample<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Extracted watermark:&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">extracted_watermark<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E9%9A%90%E5%86%99%E6%9C%AF\/","term":"\u9690\u5199\u672f","label":"\u9690\u5199\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%B0%B4%E5%8D%B0\/","term":"\u6c34\u5370","label":"\u6c34\u5370"}}]},{"title":"\n\u7f51\u9875\u7834\u89e3\u7cfb\u52172","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/","updated":"2024-06-04T19:10:48+08:00","published":"2024-06-04T19:10:48+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\njs\u4e2d\u5e38\u89c1\u6df7\u6dc6\u6848\u4f8b\u89e3\u6790","content":"\n<p>\u6700\u8fd1\u5206\u6790\u7f51\u9875\u9605\u8bfbjs\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u4ee3\u7801\u6df7\u6dc6\u7279\u522b\u559c\u6b22\u4f7f\u7528IIFE\u6a21\u5f0f(\u7acb\u5373\u8c03\u7528\u7684\u51fd\u6570\u8868\u8fbe\u5f0f)\u548c\u51fd\u6570\u5d4c\u5957 ,\u56e0\u4e3a\u6ca1\u6709\u7cfb\u7edf\u5b66\u4e60\u8fc7js\uff0c\u5bfc\u81f4\u7406\u89e3\u4e0a\u6709\u4e9b\u56f0\u96be\uff0c\u4e0b\u9762\u8bb0\u5f55\u4e0bIIFE\u6a21\u5f0f\u8f6c\u6362\u6210\u5e38\u89c4js\u4ee3\u7801\u7684\u8fc7\u7a0b\u3002<\/p>\n<h3 id=\"\u6848\u4f8b1\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#\u6848\u4f8b1\" class=\"anchor-link\" aria-label=\"\u6848\u4f8b1\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#contents:\u6848\u4f8b1\" class=\"headings\">\u6848\u4f8b1<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x556706<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x17b995<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x613779<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"mh\">0x8<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x5c8a1f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x46f859<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x572acf<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x1283bd<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;tfi&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;up&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">+=<\/span> <span class=\"nx\">_0x572acf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x135ded<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x5c8a1f<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"o\">!!<\/span><span class=\"p\">[]<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">--<\/span><span class=\"nx\">_0x556706<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1da<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;R3)f&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x1<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1ed<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;*c&amp;W&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x2<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1ee<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;pQTS&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x3<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1f3<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lNB3&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x4<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1f8<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;IzuF&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x5<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1df<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lsaR&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x6<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1e2<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;(ga@&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x7<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1db<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;o%ET&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x8<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1e8<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;awuH&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x9<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x32a3ec<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">finally<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">]();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x139810<\/span> <span class=\"o\">&lt;=<\/span> <span class=\"nx\">_0x556706<\/span><span class=\"p\">)<\/span> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x17b995<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x17b995<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x273121<\/span> <span class=\"o\">==<\/span> <span class=\"nx\">_0x17b995<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;replace&#39;<\/span><span class=\"p\">](<\/span><span class=\"sr\">\/[DMWQITftRwLHqlNxJKPr=]\/g<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x46f859<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;un&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x572acf<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x572acf<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}(<\/span><span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">decode1<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}(<\/span><span class=\"mh\">0xc800<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x3651f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">),<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0xodU<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u7b2c\u4e00\u6b65\u4ece\u6700\u5185\u90e8\u51fd\u6570\u5f00\u59cb\uff0c\u5c06function (_0x5c8a1f, _0x204eba, _0x273121, _0x46f859, _0x572acf)\u5265\u79bb\u51fa\u6765\n<ul>\n<li>_0x46f859, _0x572acf\u53c2\u6570\u5185\u90e8\u8d4b\u503c\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u53d8\u91cf\u58f0\u660e<\/li>\n<li>_0x2888eb,_0x613779,_0x556706\u4e3a\u4e0a\u5c42\u51fd\u6570\u58f0\u660e\uff0c\u4f5c\u4e3a\u51fd\u6570\u53c2\u6570\u53c2\u5165<\/li>\n<li>\u8c03\u6574\u540e\u6574\u4f53\u51fd\u6570\u5982\u4e0b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">decode2<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x5c8a1f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x556706<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x1283bd<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">_0x17b995<\/span> <span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;tfi&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;up&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">+=<\/span> <span class=\"nx\">_0x572acf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x135ded<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x5c8a1f<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"o\">!!<\/span><span class=\"p\">[]<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"o\">--<\/span><span class=\"nx\">_0x556706<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1da<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;R3)f&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x1<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1ed<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;*c&amp;W&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x2<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1ee<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;pQTS&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x3<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1f3<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lNB3&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x4<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1f8<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;IzuF&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x5<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1df<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lsaR&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x6<\/span> <span class=\"o\">*<\/span> <span class=\"p\">(<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1e2<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;(ga@&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x7<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"o\">-<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1db<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;o%ET&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x8<\/span> <span class=\"o\">+<\/span> <span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x1283bd<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x1e8<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;awuH&#39;<\/span><span class=\"p\">))<\/span> <span class=\"o\">\/<\/span> <span class=\"mh\">0x9<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x32a3ec<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x273121<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">finally<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">]();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x139810<\/span> <span class=\"o\">&lt;=<\/span> <span class=\"nx\">_0x556706<\/span><span class=\"p\">)<\/span> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x17b995<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x46f859<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x17b995<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x273121<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x572acf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x273121<\/span> <span class=\"o\">==<\/span> <span class=\"nx\">_0x17b995<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;replace&#39;<\/span><span class=\"p\">](<\/span><span class=\"sr\">\/[DMWQITftRwLHqlNxJKPr=]\/g<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x46f859<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">_0x204eba<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;un&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x572acf<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"nx\">_0x135ded<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x572acf<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x556706<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x17b995<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2888eb<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x613779<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"mh\">0x8<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">decode2<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">decode1<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x556706<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}(<\/span><span class=\"mh\">0xc800<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x3651f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">),<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0xodU<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u7b2c\u4e8c\u6b65\u5c06function (_0x139810, _0x225121, _0x528ff3, _0x556706, _0x17b995, _0x2888eb, _0x613779)\u5265\u79bb\u51fa\u6765\n<ul>\n<li>_0x2888eb,_0x613779 \u58f0\u660e\u4e3a\u5185\u90e8\u53d8\u91cf,_0x17b995 \u53c2\u6570\u65e0\u7528<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">decode3<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x556706<\/span><span class=\"p\">){<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x139810<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"mh\">0x8<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2888eb<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x613779<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;hs&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">decode2<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x528ff3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x225121<\/span><span class=\"p\">,<\/span> <span class=\"nx\">decode1<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x139810<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x2888eb<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x613779<\/span><span class=\"p\">,<\/span><span class=\"nx\">_0x556706<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"nx\">decode3<\/span><span class=\"p\">(<\/span><span class=\"mh\">0xc800<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x3651f<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">),<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">)<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0xodU<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0xca<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u7b2c\u4e09\u6b65\u5c06<code>, _0x17af) &amp;&amp; (_0xodU = 0xca)<\/code>\u7b49\u4ee3\u7801\u4e3a\u65e0\u7528\u4ee3\u7801\n<ul>\n<li>\u5728\u51fd\u6570\u4e2d\u76f4\u63a5\u8c03\u7528 <code>decode3(0xc800, 0x3651f, _0x17af, 0xca)<\/code>\u5373\u53ef<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"\u6848\u4f8b2\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#\u6848\u4f8b2\" class=\"anchor-link\" aria-label=\"\u6848\u4f8b2\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#contents:\u6848\u4f8b2\" class=\"headings\">\u6848\u4f8b2<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">_0xodU<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;jsjiami.com.v7&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x45cdd6<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">[<\/span><span class=\"nx\">_0xodU<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;qwjsTHjRiRWMatmLixJ.cwtKoQrfm.DtrvIN7lMP==&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPK4W5jqvW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WP3dRu\/dGhW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPFdNSkZWQ4oWOVcSeVcOfXQW40&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;hCkECbVdQSozea&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5nddCkvaSkSaSkOW65Pfx0&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WR7dV8kTlKC&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPieWRWcwG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5aQq8kLWRBcNG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W6jlimoupZS&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W41eWRiCn8k7aCkezhjssG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W6ldGmkEdCkljCkvW4JdQ2z5WRC&#39;<\/span><span class=\"p\">].<\/span><span class=\"nx\">concat<\/span><span class=\"p\">((<\/span><span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;WOJcQd7dHmo3rf7cOmk0WOKDW5m&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;cSoiW6esWQP4WOCJtW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;fLtcPHFcItz5W7tcI8o\/sNe&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lXr1dmkKlCoLWOWfW6NcGsS&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPldR8oWjgtdQ8kBwHtcTHqR&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;ASk2WQG5WRG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4HXomoSyCoa&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4JcP8ooW4ldHwddMshdOH\/dM8kU&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;AMVdKZv\/W4yGW5v3WR86W4yu&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WOnzw8oZhCk\/hKudW4DfWP8&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;jKtcNmkUf2nmW47cHMZcJJK&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;FxlcNSkAW6BcGSkDDmorBNb2&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WObbn8kZyYZdJCkVECkH&#39;<\/span><span class=\"p\">].<\/span><span class=\"nx\">concat<\/span><span class=\"p\">((<\/span><span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;rCozkrrbtmkEhSkXW5vvdq&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5exw8k1WRK&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5ZdQwNdSCoxyxNcK8kC&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WQe8Fuia&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;dqidWQ0Rd8ox&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4LeWRSsrmornSkezLG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WRJdVmkRW63dUG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4S8zCo\/uG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;ysddKMJcRmkRW5NcJt4BlhJdJW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;tmoDBhSp&#39;<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}()));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}()));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x17af<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x45cdd6<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u8fd9\u4e2a\u6848\u4f8b\u901a\u8fc7concat\u51fd\u6570\u5c06\u4e00\u4e2a\u6570\u7ec4\u6df7\u6dc6\u6210\u4e86\u4e00\u4e2a\u51fd\u6570\uff0c\u8fd8\u539f\u540e\u5982\u4e0b<\/li>\n<li>\u5728\u8c03\u7528_0x17af()\u51fd\u6570\u7684\u5730\u65b9\uff0c\u4fee\u6539\u4e3a_0x17af\u5373\u53ef<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">_0x17af<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;jsjiami.com.v7&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;qwjsTHjRiRWMatmLixJ.cwtKoQrfm.DtrvIN7lMP==&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPK4W5jqvW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WP3dRu\/dGhW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPFdNSkZWQ4oWOVcSeVcOfXQW40&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;hCkECbVdQSozea&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5nddCkvaSkSaSkOW65Pfx0&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WR7dV8kTlKC&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPieWRWcwG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5aQq8kLWRBcNG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W6jlimoupZS&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W41eWRiCn8k7aCkezhjssG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W6ldGmkEdCkljCkvW4JdQ2z5WRC&#39;<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;WOJcQd7dHmo3rf7cOmk0WOKDW5m&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;cSoiW6esWQP4WOCJtW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;fLtcPHFcItz5W7tcI8o\/sNe&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;lXr1dmkKlCoLWOWfW6NcGsS&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WPldR8oWjgtdQ8kBwHtcTHqR&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;ASk2WQG5WRG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4HXomoSyCoa&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4JcP8ooW4ldHwddMshdOH\/dM8kU&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;AMVdKZv\/W4yGW5v3WR86W4yu&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WOnzw8oZhCk\/hKudW4DfWP8&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;jKtcNmkUf2nmW47cHMZcJJK&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;FxlcNSkAW6BcGSkDDmorBNb2&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WObbn8kZyYZdJCkVECkH&#39;<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;rCozkrrbtmkEhSkXW5vvdq&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5exw8k1WRK&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W5ZdQwNdSCoxyxNcK8kC&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WQe8Fuia&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;dqidWQ0Rd8ox&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4LeWRSsrmornSkezLG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;WRJdVmkRW63dUG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;W4S8zCo\/uG&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;ysddKMJcRmkRW5NcJt4BlhJdJW&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;tmoDBhSp&#39;<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u6848\u4f8b3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#\u6848\u4f8b3\" class=\"anchor-link\" aria-label=\"\u6848\u4f8b3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#contents:\u6848\u4f8b3\" class=\"headings\">\u6848\u4f8b3<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x3c83db<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x469b49<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x17af80<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x52aa<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x52aa41<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3728c1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">-<\/span> <span class=\"mh\">0x1da<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af80<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x52aa41<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;WwUxJQ&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">undefined<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">_0x1dd466<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x4b772e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x32b02a<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+\/=&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x4a56a0<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x56bd5b<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x463da3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x592aa3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x127494<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4b772e<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x127494<\/span><span class=\"o\">++<\/span><span class=\"p\">);<\/span> <span class=\"o\">~<\/span><span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x463da3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x4<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x463da3<\/span> <span class=\"o\">*<\/span> <span class=\"mh\">0x40<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x592aa3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x12059c<\/span><span class=\"o\">++<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x4<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x4a56a0<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">String<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;fromCharCode&#39;<\/span><span class=\"p\">](<\/span><span class=\"mh\">0xff<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">_0x463da3<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"mh\">0x2<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">&amp;<\/span> <span class=\"mh\">0x6<\/span><span class=\"p\">))<\/span> <span class=\"o\">:<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x32b02a<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;indexOf&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x592aa3<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x4b1bb9<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x261b0c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4a56a0<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">];<\/span> <span class=\"nx\">_0x4b1bb9<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">_0x261b0c<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x4b1bb9<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x56bd5b<\/span> <span class=\"o\">+=<\/span> <span class=\"s1\">&#39;%&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"p\">(<\/span><span class=\"s1\">&#39;00&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x4a56a0<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x4b1bb9<\/span><span class=\"p\">)[<\/span><span class=\"s1\">&#39;toString&#39;<\/span><span class=\"p\">](<\/span><span class=\"mh\">0x10<\/span><span class=\"p\">))[<\/span><span class=\"s1\">&#39;slice&#39;<\/span><span class=\"p\">](<\/span><span class=\"o\">-<\/span><span class=\"mh\">0x2<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nb\">decodeURIComponent<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x56bd5b<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x1809cd<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x8e9e97<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[],<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x514c3b<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x33deb3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x1dd466<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">%<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">]))<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x8d4ec6<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x8d4ec6<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">_0x33deb3<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">];<\/span> <span class=\"nx\">_0x8d4ec6<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">+<\/span> <span class=\"mh\">0x1<\/span><span class=\"p\">)<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">])<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x514c3b<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">String<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;fromCharCode&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x8d4ec6<\/span><span class=\"p\">)<\/span> <span class=\"o\">^<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[(<\/span><span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">])<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">]);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x514c3b<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;JzzYJi&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x1809cd<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3c83db<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">arguments<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;WwUxJQ&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"o\">!!<\/span><span class=\"p\">[];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0xd630f0<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af80<\/span><span class=\"p\">[<\/span><span class=\"mh\">0x0<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x45e113<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0xd630f0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x4c2862<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x3c83db<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x45e113<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"o\">!<\/span><span class=\"nx\">_0x4c2862<\/span> <span class=\"o\">?<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;usUPJs&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"kc\">undefined<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;usUPJs&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"o\">!!<\/span><span class=\"p\">[]),<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;JzzYJi&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3728c1<\/span><span class=\"p\">),<\/span> <span class=\"nx\">_0x3c83db<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x45e113<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4c2862<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x3c83db<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x469b49<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>_0x1809cd,_0x1dd466,_0x52aa \u8fdb\u884c\u4e86\u51fd\u6570\u58f0\u660e\u5355\u72ec\u62ce\u51fa\u6765<\/li>\n<li>'undefined' \u4f7f\u7528null\u66ff\u6362,'arguments' \u4f7f\u75280\u66ff\u6362<\/li>\n<li>_0x52aa\u51fd\u6570\u5185\u58f0\u660e\u4e86_0x52aa\u6570\u7ec4\uff0c\u53ef\u4ee5\u5c06_0x52aa\u6570\u7ec4\u53d8\u91cf\u540d\u66ff\u6362\u4e3adata\u65b9\u4fbf\u9605\u8bfb<\/li>\n<li>\u8c03\u6574\u540e\u4ee3\u7801\u5982\u4e0b<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">decode4<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x4b772e<\/span><span class=\"p\">){<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x32b02a<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+\/=&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x4a56a0<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x56bd5b<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x463da3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x592aa3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x127494<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4b772e<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x127494<\/span><span class=\"o\">++<\/span><span class=\"p\">);<\/span> <span class=\"o\">~<\/span><span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x463da3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x4<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x463da3<\/span> <span class=\"o\">*<\/span> <span class=\"mh\">0x40<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x592aa3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x12059c<\/span><span class=\"o\">++<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x4<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"nx\">_0x4a56a0<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">String<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;fromCharCode&#39;<\/span><span class=\"p\">](<\/span><span class=\"mh\">0xff<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">_0x463da3<\/span> <span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"mh\">0x2<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">_0x12059c<\/span> <span class=\"o\">&amp;<\/span> <span class=\"mh\">0x6<\/span><span class=\"p\">))<\/span> <span class=\"o\">:<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x592aa3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x32b02a<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;indexOf&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x592aa3<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x4b1bb9<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x261b0c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4a56a0<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">];<\/span> <span class=\"nx\">_0x4b1bb9<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">_0x261b0c<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x4b1bb9<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x56bd5b<\/span> <span class=\"o\">+=<\/span> <span class=\"s1\">&#39;%&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"p\">(<\/span><span class=\"s1\">&#39;00&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x4a56a0<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x4b1bb9<\/span><span class=\"p\">)[<\/span><span class=\"s1\">&#39;toString&#39;<\/span><span class=\"p\">](<\/span><span class=\"mh\">0x10<\/span><span class=\"p\">))[<\/span><span class=\"s1\">&#39;slice&#39;<\/span><span class=\"p\">](<\/span><span class=\"o\">-<\/span><span class=\"mh\">0x2<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nb\">decodeURIComponent<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x56bd5b<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">decode5<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x8e9e97<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[],<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x514c3b<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x33deb3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">decode4<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x35889e<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">%<\/span> <span class=\"nx\">_0x3c0f88<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">]))<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">let<\/span> <span class=\"nx\">_0x8d4ec6<\/span> <span class=\"o\">=<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">_0x8d4ec6<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">_0x33deb3<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;length&#39;<\/span><span class=\"p\">];<\/span> <span class=\"nx\">_0x8d4ec6<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x35889e<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x35889e<\/span> <span class=\"o\">+<\/span> <span class=\"mh\">0x1<\/span><span class=\"p\">)<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">_0x3b4eb2<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">])<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x2ebcde<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x2ebcde<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x514c3b<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">String<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;fromCharCode&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x33deb3<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;charCodeAt&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x8d4ec6<\/span><span class=\"p\">)<\/span> <span class=\"o\">^<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[(<\/span><span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x35889e<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0x8e9e97<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x3b4eb2<\/span><span class=\"p\">])<\/span> <span class=\"o\">%<\/span> <span class=\"mh\">0x100<\/span><span class=\"p\">]);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">_0x514c3b<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">_0x52aa<\/span><span class=\"p\">(<\/span><span class=\"nx\">_0x52aa41<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3728c1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">data<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x17af80<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">-<\/span> <span class=\"mh\">0x1da<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">let<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af80<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x52aa41<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;WwUxJQ&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0x1809cd<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">decode5<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;JzzYJi&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x1809cd<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3c83db<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[],<\/span> <span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;WwUxJQ&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"o\">!!<\/span><span class=\"p\">[];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">_0xd630f0<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x17af80<\/span><span class=\"p\">[<\/span><span class=\"mh\">0x0<\/span><span class=\"p\">],<\/span> <span class=\"nx\">_0x45e113<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x52aa41<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">_0xd630f0<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x4c2862<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x3c83db<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x45e113<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"o\">!<\/span><span class=\"nx\">_0x4c2862<\/span> <span class=\"o\">?<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;usUPJs&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;usUPJs&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"o\">!!<\/span><span class=\"p\">[]),<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;JzzYJi&#39;<\/span><span class=\"p\">](<\/span><span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x3728c1<\/span><span class=\"p\">),<\/span> <span class=\"nx\">_0x3c83db<\/span><span class=\"p\">[<\/span><span class=\"nx\">_0x45e113<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">_0x34a1cf<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">_0x4c2862<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_0x34a1cf<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/2\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>\u51fd\u6570\u5d4c\u5957\u4e0d\u5229\u4e8e\u7406\u89e3\u4ee3\u7801\uff0c\u5c06\u5d4c\u5957\u7684\u51fd\u6570\u72ec\u7acb\u51fa\u6765\u63d0\u9ad8\u53ef\u8bfb\u6027<\/li>\n<li>IIFE\u7ed3\u5408\u5168\u5c40\u53d8\u91cf\u53ef\u9690\u85cf\u5168\u5c40\u53d8\u91cf\u539f\u59cb\u503c<\/li>\n<li>\u65e0\u610f\u4e49\u53d8\u91cf\u540d\u6781\u5927\u964d\u4f4e\u4e86\u53ef\u8bfb\u6027\uff0c\u53ef\u6279\u91cf\u66ff\u6362\u53d8\u91cf\u540d\u63d0\u9ad8\u53ef\u8bfb\u6027<\/li>\n<li>\u51fd\u6570\u6539\u9020\u7ed3\u5408\u5b9e\u65f6\u8c03\u8bd5\uff0c\u53ef\u63d0\u9ad8\u6539\u9020\u6548\u7387<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/js\/","term":"JS","label":"JS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%A0%B4%E8%A7%A3\/","term":"\u7834\u89e3","label":"\u7834\u89e3"}}]},{"title":"\n\u7f51\u9875\u7834\u89e3\u7cfb\u52171","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/","updated":"2024-05-30T16:49:11+08:00","published":"2024-05-30T16:49:11+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\nJS\u7834\u89e3\u601d\u8def\u8bb0\u5f55","content":"\n<p>\u6700\u8fd1\u5206\u6790\u4e00\u4e2a\u7f51\u7ad9\uff0c\u91cc\u9762\u4f7f\u7528\u7684\u52a0\u5bc6\u65b9\u5f0f\u6709\u70b9\u610f\u601d\uff0c\u8bb0\u5f55\u4e0b\u5206\u6790\u6d41\u7a0b<\/p>\n<h2 id=\"\u8be6\u89e3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#\u8be6\u89e3\" class=\"anchor-link\" aria-label=\"\u8be6\u89e3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#contents:\u8be6\u89e3\" class=\"headings\">\u8be6\u89e3<\/a><\/h2>\n<h3 id=\"\u52a0\u5bc6\u4ee3\u7801\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#\u52a0\u5bc6\u4ee3\u7801\" class=\"anchor-link\" aria-label=\"\u52a0\u5bc6\u4ee3\u7801\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#contents:\u52a0\u5bc6\u4ee3\u7801\" class=\"headings\">\u52a0\u5bc6\u4ee3\u7801<\/a><\/h3>\n<p>F12\u67e5\u770b\u6e90\u4ee3\u7801\uff0c\u6838\u5fc3\u52a0\u5bc6\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">d<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">window<\/span><span class=\"p\">.<\/span><span class=\"nb\">eval<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">(<\/span><span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">p<\/span><span class=\"p\">,<\/span> <span class=\"nx\">a<\/span><span class=\"p\">,<\/span> <span class=\"nx\">c<\/span><span class=\"p\">,<\/span> <span class=\"nx\">k<\/span><span class=\"p\">,<\/span> <span class=\"nx\">e<\/span><span class=\"p\">,<\/span> <span class=\"nx\">d<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">e<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">a<\/span> <span class=\"o\">?<\/span> <span class=\"s2\">&#34;&#34;<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">e<\/span><span class=\"p\">(<\/span><span class=\"nb\">parseInt<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">\/<\/span> <span class=\"nx\">a<\/span><span class=\"p\">)))<\/span> <span class=\"o\">+<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">((<\/span><span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">c<\/span> <span class=\"o\">%<\/span> <span class=\"nx\">a<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">35<\/span> <span class=\"o\">?<\/span> <span class=\"nb\">String<\/span><span class=\"p\">.<\/span><span class=\"nx\">fromCharCode<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">29<\/span><span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nx\">toString<\/span><span class=\"p\">(<\/span><span class=\"mi\">36<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/^\/<\/span><span class=\"p\">,<\/span> <span class=\"nb\">String<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"o\">--<\/span><span class=\"p\">)<\/span> <span class=\"nx\">d<\/span><span class=\"p\">[<\/span><span class=\"nx\">e<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"p\">)]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">k<\/span><span class=\"p\">[<\/span><span class=\"nx\">c<\/span><span class=\"p\">]<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">e<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">k<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"p\">(<\/span><span class=\"nx\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">d<\/span><span class=\"p\">[<\/span><span class=\"nx\">e<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">e<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span> <span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s2\">&#34;\\\\w+&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"o\">--<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">k<\/span><span class=\"p\">[<\/span><span class=\"nx\">c<\/span><span class=\"p\">])<\/span> <span class=\"nx\">p<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">p<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nb\">RegExp<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\\\\b&#34;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">e<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;\\\\b&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;g&#34;<\/span><span class=\"p\">),<\/span> <span class=\"nx\">k<\/span><span class=\"p\">[<\/span><span class=\"nx\">c<\/span><span class=\"p\">]);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">p<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;V.Q({&#34;z&#34;:7,&#34;y&#34;:&#34;x&#34;,&#34;w&#34;:&#34;7.2&#34;,&#34;v&#34;:u,&#34;t&#34;:&#34;6&#34;,&#34;s&#34;:[&#34;3%4%r.2.5&#34;,&#34;3%4%q.2.5&#34;,&#34;3%4%p.2.5&#34;,&#34;3%4%o.2.5&#34;,&#34;3%4%n.2.5&#34;,&#34;3%4%l.2.5&#34;,&#34;3%4%k.2.5&#34;,&#34;3%4%j.2.5&#34;,&#34;3%4%8.2.5&#34;,&#34;3%4%9.2.5&#34;,&#34;3%4%a.2.5&#34;,&#34;3%4%b.2.5&#34;,&#34;3%4%f.2.5&#34;,&#34;3%4%g.2.5&#34;,&#34;3%4%h.2.5&#34;,&#34;3%4%i.2.5&#34;,&#34;3%4%A.2.5&#34;,&#34;3%4%B.2.5&#34;,&#34;3%4%M.2.5&#34;,&#34;3%4%D.2.5&#34;,&#34;3%4%C.2.5&#34;,&#34;3%4%R.2.5&#34;,&#34;3%4%S.2.5&#34;,&#34;3%4%P.2.5&#34;,&#34;3%4%U.2.5&#34;],&#34;10&#34;:W,&#34;X&#34;:Y,&#34;Z&#34;:&#34;\/T\/d\/N\/O\/6\/&#34;,&#34;L&#34;:1,&#34;K&#34;:&#34;&#34;,&#34;J&#34;:I,&#34;H&#34;:0,&#34;G&#34;:{&#34;e&#34;:F,&#34;m&#34;:&#34;E&#34;}}).c();&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">62<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">63<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;D7BWAcHNgJQewEYEsB2wBMAGbngHcBTBcYQGm9tB3ZWAGZ0A2TdDbAdmcwA52BOZgRlzgATgQCSKJABcQ\/PvyZY+1fgBZ2ddgFZ2a9sqyN2cg5gCG7XADMkAGwIBnYAGMUpgLYFgKlXxXdlTkgAJsDESE7AgOr+gH3aAGpqCK4eocH82ooairyKXJh8LACOANYA0jAFeAAWAMJ0ADIlBaD2pgRIRQCCwPn53NwcfHRq9jbAwgQAbqIh3r7caigEAB6S06E2cE5FAPpOEfaSppIAro6KbEFOu3Bu4Y5CiKh8ffqMTEhukAAiR+ZYWMx0HJwPYFIxlABlACyAAlgJZTDZ7J47Gh0NpwEdKvDUEh7JUCEEgA===&#34;<\/span><span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;\\x73\\x70\\x6c\\x69\\x63&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">](<\/span><span class=\"s2\">&#34;\\x7c&#34;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u5206\u6790\u601d\u8def\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#\u5206\u6790\u601d\u8def\" class=\"anchor-link\" aria-label=\"\u5206\u6790\u601d\u8def\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#contents:\u5206\u6790\u601d\u8def\" class=\"headings\">\u5206\u6790\u601d\u8def<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;D7BWAcHNgJQewEYEsB2wBMAGbngHcBTBcYQGm9tB3ZWAGZ0A2TdDbAdmcwA52BOZgRlzgATgQCSKJABcQ\/PvyZY+1fgBZ2ddgFZ2a9sqyN2cg5gCG7XADMkAGwIBnYAGMUpgLYFgKlXxXdlTkgAJsDESE7AgOr+gH3aAGpqCK4eocH82ooairyKXJh8LACOANYA0jAFeAAWAMJ0ADIlBaD2pgRIRQCCwPn53NwcfHRq9jbAwgQAbqIh3r7caigEAB6S06E2cE5FAPpOEfaSppIAro6KbEFOu3Bu4Y5CiKh8ffqMTEhukAAiR+ZYWMx0HJwPYFIxlABlACyAAlgJZTDZ7J47Gh0NpwEdKvDUEh7JUCEEgA===&#34;<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;\\x73\\x70\\x6c\\x69\\x63&#34;<\/span><span class=\"p\">](<\/span><span class=\"s2\">&#34;\\x7c&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li>\u6838\u5fc3\u52a0\u5bc6\u4ee3\u7801\u4e2dp\u5c31\u662f\u89e3\u5bc6\u540e\u7684\u6570\u636e\uff0c\u6574\u4f53\u4ee3\u7801\u4e0d\u590d\u6742\uff0c\u6838\u5fc3\u662f\u8f93\u5165\u53c2\u6570\uff0c\u5373\u4e0a\u9762\u4ee3\u7801\u3002<\/li>\n<li>\u54a8\u8be2comate\u63d0\u793a\u662f\u5bf9\u4e00\u6bb5base64\u7f16\u7801\u6570\u636e\u4f7f\u7528splic('|')\u51fd\u6570\u3002\u4f7f\u7528base64\u8fdb\u884c\u89e3\u7801\u5931\u8d25\u3002<\/li>\n<li>\u7ee7\u7eed\u5728\u7f51\u9875\u4e2d\u5206\u6790\uff0c\u5c06\u4e0a\u9762\u4ee3\u7801\u5355\u72ec\u6267\u884c\uff0c\u5355\u6b65\u8fdb\u5165F11\u6267\u884c\u5f97\u5230\u5982\u4e0b\u4ee3\u7801\uff0c\u610f\u5916\u7684\u60ca\u559c\u3002<\/li>\n<li>\u6574\u4f53\u4ee3\u7801\u8fd0\u884c\u540e\u5f97\u5230\u89e3\u5bc6\u540e\u7684\u6570\u636e\u3002<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><span class=\"lnt\">128\n<\/span><span class=\"lnt\">129\n<\/span><span class=\"lnt\">130\n<\/span><span class=\"lnt\">131\n<\/span><span class=\"lnt\">132\n<\/span><span class=\"lnt\">133\n<\/span><span class=\"lnt\">134\n<\/span><span class=\"lnt\">135\n<\/span><span class=\"lnt\">136\n<\/span><span class=\"lnt\">137\n<\/span><span class=\"lnt\">138\n<\/span><span class=\"lnt\">139\n<\/span><span class=\"lnt\">140\n<\/span><span class=\"lnt\">141\n<\/span><span class=\"lnt\">142\n<\/span><span class=\"lnt\">143\n<\/span><span class=\"lnt\">144\n<\/span><span class=\"lnt\">145\n<\/span><span class=\"lnt\">146\n<\/span><span class=\"lnt\">147\n<\/span><span class=\"lnt\">148\n<\/span><span class=\"lnt\">149\n<\/span><span class=\"lnt\">150\n<\/span><span class=\"lnt\">151\n<\/span><span class=\"lnt\">152\n<\/span><span class=\"lnt\">153\n<\/span><span class=\"lnt\">154\n<\/span><span class=\"lnt\">155\n<\/span><span class=\"lnt\">156\n<\/span><span class=\"lnt\">157\n<\/span><span class=\"lnt\">158\n<\/span><span class=\"lnt\">159\n<\/span><span class=\"lnt\">160\n<\/span><span class=\"lnt\">161\n<\/span><span class=\"lnt\">162\n<\/span><span class=\"lnt\">163\n<\/span><span class=\"lnt\">164\n<\/span><span class=\"lnt\">165\n<\/span><span class=\"lnt\">166\n<\/span><span class=\"lnt\">167\n<\/span><span class=\"lnt\">168\n<\/span><span class=\"lnt\">169\n<\/span><span class=\"lnt\">170\n<\/span><span class=\"lnt\">171\n<\/span><span class=\"lnt\">172\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">LZString<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">f<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">String<\/span><span class=\"p\">.<\/span><span class=\"nx\">fromCharCode<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">keyStrBase64<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">baseReverseDic<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">function<\/span> <span class=\"nx\">getBaseValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">,<\/span> <span class=\"nx\">character<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">baseReverseDic<\/span><span class=\"p\">[<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">])<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">baseReverseDic<\/span><span class=\"p\">[<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"kd\">var<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">alphabet<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">baseReverseDic<\/span><span class=\"p\">[<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">][<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">.<\/span><span class=\"nx\">charAt<\/span><span class=\"p\">(<\/span><span class=\"nx\">i<\/span><span class=\"p\">)]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">i<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">baseReverseDic<\/span><span class=\"p\">[<\/span><span class=\"nx\">alphabet<\/span><span class=\"p\">][<\/span><span class=\"nx\">character<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">LZString<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">decompressFromBase64<\/span><span class=\"o\">:<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">input<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">input<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">input<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">LZString<\/span><span class=\"p\">.<\/span><span class=\"nx\">_0<\/span><span class=\"p\">(<\/span><span class=\"nx\">input<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span><span class=\"p\">,<\/span> <span class=\"mi\">32<\/span><span class=\"p\">,<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">index<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">getBaseValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">keyStrBase64<\/span><span class=\"p\">,<\/span> <span class=\"nx\">input<\/span><span class=\"p\">.<\/span><span class=\"nx\">charAt<\/span><span class=\"p\">(<\/span><span class=\"nx\">index<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_0<\/span><span class=\"o\">:<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">length<\/span><span class=\"p\">,<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">dictionary<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[],<\/span> <span class=\"nx\">next<\/span><span class=\"p\">,<\/span> <span class=\"nx\">enlargeIn<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"nx\">dictSize<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"nx\">numBits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"nx\">entry<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[],<\/span> <span class=\"nx\">i<\/span><span class=\"p\">,<\/span> <span class=\"nx\">w<\/span><span class=\"p\">,<\/span> <span class=\"nx\">bits<\/span><span class=\"p\">,<\/span> <span class=\"nx\">resb<\/span><span class=\"p\">,<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">,<\/span> <span class=\"nx\">power<\/span><span class=\"p\">,<\/span> <span class=\"nx\">c<\/span><span class=\"p\">,<\/span> <span class=\"nx\">data<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">val<\/span><span class=\"o\">:<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">position<\/span><span class=\"o\">:<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">index<\/span><span class=\"o\">:<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nx\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">3<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">i<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">i<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">switch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">next<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">bits<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">0<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">bits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">1<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">16<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">bits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">2<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">c<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">w<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">c<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">push<\/span><span class=\"p\">(<\/span><span class=\"nx\">c<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span> <span class=\"o\">&gt;<\/span> <span class=\"nx\">length<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">numBits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">switch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">bits<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">0<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">dictSize<\/span><span class=\"o\">++<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">bits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">dictSize<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">enlargeIn<\/span><span class=\"o\">--<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">1<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">maxpower<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">16<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"nx\">power<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">maxpower<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">resb<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">&amp;<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">&gt;&gt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">position<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">resetValue<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">val<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">getNextValue<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">index<\/span><span class=\"o\">++<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">bits<\/span> <span class=\"o\">|=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">resb<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">?<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">:<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">power<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">power<\/span> <span class=\"o\">&lt;&lt;=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">dictSize<\/span><span class=\"o\">++<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">bits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">dictSize<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">enlargeIn<\/span><span class=\"o\">--<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">case<\/span> <span class=\"mi\">2<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">join<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">enlargeIn<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">enlargeIn<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">numBits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">numBits<\/span><span class=\"o\">++<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">c<\/span><span class=\"p\">])<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">entry<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">c<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">dictSize<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">entry<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">w<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">w<\/span><span class=\"p\">.<\/span><span class=\"nx\">charAt<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">result<\/span><span class=\"p\">.<\/span><span class=\"nx\">push<\/span><span class=\"p\">(<\/span><span class=\"nx\">entry<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">dictionary<\/span><span class=\"p\">[<\/span><span class=\"nx\">dictSize<\/span><span class=\"o\">++<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">w<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">entry<\/span><span class=\"p\">.<\/span><span class=\"nx\">charAt<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">enlargeIn<\/span><span class=\"o\">--<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">w<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">entry<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">enlargeIn<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">enlargeIn<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">pow<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"nx\">numBits<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">numBits<\/span><span class=\"o\">++<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">LZString<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">String<\/span><span class=\"p\">.<\/span><span class=\"nx\">prototype<\/span><span class=\"p\">.<\/span><span class=\"nx\">splic<\/span> <span class=\"o\">=<\/span> <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">f<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">LZString<\/span><span class=\"p\">.<\/span><span class=\"nx\">decompressFromBase64<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">).<\/span><span class=\"nx\">split<\/span><span class=\"p\">(<\/span><span class=\"nx\">f<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u5206\u6790\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#\u5206\u6790\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u5206\u6790\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/js_crack_analysis\/1\/#contents:\u5206\u6790\u603b\u7ed3\" class=\"headings\">\u5206\u6790\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>\u9605\u8bfb\u4e0a\u9762\u4ee3\u7801\u53ef\u77e5\uff0cstring.prototype\u6269\u5c55\u4e86\u4e00\u4e2asplic\u65b9\u6cd5<\/li>\n<li><code>function(index) {return getBaseValue(keyStrBase64, input.charAt(index))}<\/code>\u4f5c\u4e3a\u4e00\u4e2a\u53c2\u6570\u88ab\u4f20\u9012\u5230_0 \u4f7f\u7528<\/li>\n<li>\u6838\u5fc3\u4ee3\u7801\u9690\u85cf\u5728vm\u4e2d\u6267\u884c<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/js\/","term":"JS","label":"JS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E7%A0%B4%E8%A7%A3\/","term":"\u7834\u89e3","label":"\u7834\u89e3"}}]},{"title":"\n\u88c5\u4fee\u524d\u7684\u81ea\u6211\u68b3\u7406","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/","updated":"2024-05-14T17:30:41+08:00","published":"2024-05-14T17:30:41+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u660e\u786e\u4e2a\u4eba\u88c5\u4fee\u9700\u6c42\u548c\u88c5\u4fee\u516c\u53f8\u9009\u62e9\u6807\u51c6","content":"\n<p>\u56e0\u8001\u5a46\u4e0a\u73ed\u548c\u5c0f\u5b69\u4e0a\u5b66\uff0c\u5728\u5ab3\u5987\u5355\u4f4d\u9644\u8fd1\u8d2d\u4e70\u4e86\u4e00\u5957\u623f\u5b50\u3002\u6700\u8fd1\u4e24\u5468\u90fd\u5728\u5bfb\u627e\u5408\u9002\u7684\u88c5\u4fee\u516c\u53f8\uff0c\u9632\u6b62\u81ea\u5df1\u903b\u8f91\u4e0d\u6e05\u6670\uff0c\u5199\u4e2a\u6587\u7ae0\u68b3\u7406\u4e0b\u3002<\/p>\n<p>\u8d2d\u4e70\u7684\u662f\u4e8c\u624b\u623f\uff0c\u4e0e\u5ab3\u5987\u5546\u91cf\u8003\u8651\u540e\u671f\u5c45\u4f4f\u65f6\u95f4\uff0c\u51b3\u5b9a\u5168\u5c4b\u63a8\u7ffb\u91cd\u65b0\u88c5\u4fee\u3002<\/p>\n<h3 id=\"\u6237\u578b\u56fe\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u6237\u578b\u56fe\" class=\"anchor-link\" aria-label=\"\u6237\u578b\u56fe\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u6237\u578b\u56fe\" class=\"headings\">\u6237\u578b\u56fe<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/fitment\/1\/1.jpg\" alt=\"\u6237\u578b\u56fe\"><\/p>\n<h3 id=\"\u5c45\u4f4f\u9700\u6c42\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u5c45\u4f4f\u9700\u6c42\" class=\"anchor-link\" aria-label=\"\u5c45\u4f4f\u9700\u6c42\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u5c45\u4f4f\u9700\u6c42\" class=\"headings\">\u5c45\u4f4f\u9700\u6c42<\/a><\/h3>\n<ol>\n<li>\u4e09\u4e2a\u5927\u4eba\uff0c\u4e00\u4e2a\u5c0f\u5973\u5b69,\u5c45\u4f4f15\u5e74\u5de6\u53f3<\/li>\n<li>\u623f\u95f4\n<ol>\n<li>3\u4e2a\u623f\uff0c\u4e00\u4e2a\u4e3b\u5367\uff0c\u4e00\u4e2a\u6b21\u5367\uff0c\u4e00\u4e2a\u513f\u7ae5\u623f<\/li>\n<li>\u4e3b\u53671.8m\u5e8a\uff0c\u6b21\u53671.5m\u5e8a\uff0c\u513f\u7ae5\u623f1.5m\u5e8a<\/li>\n<li>\u4e09\u4e2a\u90fd\u9700\u8981\u8863\u67dc<\/li>\n<li>\u513f\u7ae5\u623f\u4e2d\u9700\u8981\u4e66\u684c<\/li>\n<li>\u4e3b\u5367\u4e0d\u9700\u8981\u68b3\u5986\u53f0<\/li>\n<li>\u4e3b\u536b\u95e8\u4e0d\u5bf9\u5e8a\uff0c\u4e0d\u5bf9\u4e3b\u5367\u95e8<\/li>\n<li>\u513f\u7ae5\u623f\u4e0e\u9633\u53f0\u7528\u62c9\u95e8\u9694\u5f00<\/li>\n<li>\u4e3b\u5367\u548c\u513f\u7ae5\u623f\u9700\u8981\u7a97\u5e18\u76d2<\/li>\n<li>\u4e3b\u5367\u548c\u6b21\u5367\u5e8a\u5c45\u4e2d\u6446\u653e\uff0c\u513f\u7ae5\u623f\u5e8a\u9760\u5899\u5f85\u5b9a<\/li>\n<li>\u513f\u7ae5\u623f\u5360\u7528\u9633\u53f0\u4e00\u90e8\u5206\u7a7a\u95f4\uff0c\u4e0e\u9633\u53f0\u4f7f\u7528\u73bb\u7483\u5e73\u79fb\u95e8\u9694\u5f00<\/li>\n<\/ol>\n<\/li>\n<li>\u5ba2\u9910\u5385\n<ol>\n<li>\u5ba2\u5385\u4e0e\u9633\u53f0\u6253\u901a\uff0c\u540e\u671f\u667e\u6652\u8863\u670d\u4ece\u5ba2\u5385\u5230\u9633\u53f0<\/li>\n<li>\u5ba2\u5385\u80cc\u666f\u5899\u7528\u7845\u85fb\u6ce5\u7b49\u6750\u6599\u505a\u4e2a\u7b80\u5355\u9020\u578b<\/li>\n<li>L\u578b\u6c99\u53d1,\u6709\u7535\u89c6\u67dc\uff0c\u65e0\u8336\u51e0\uff0c\u5ba2\u5385\u4e2d\u95f4\u653e\u4e00\u4e2a\u513f\u7ae5\u4e66\u684c<\/li>\n<li>\u9910\u5385\u65e0\u9910\u8fb9\u67dc\uff0c\u957f\u65b9\u5f62\u9910\u684c\uff0c4\u4e2a\u9910\u6905<\/li>\n<\/ol>\n<\/li>\n<li>\u53a8\u623f\n<ol>\n<li>\u6781\u7b80\u5e73\u79fb\u95e8<\/li>\n<li>\u65e0\u540a\u67dc\uff0cL\u578b\u6216\u8005U\u578b\u5730\u67dc\uff0c\u51b0\u7bb1\u653e\u53a8\u623f\uff0c\u51b0\u7bb1\u540e\u9762\u6316\u51f9\u69fd\u653e\u63d2\u7535\u9762\u677f<\/li>\n<li>\u5355\u6d17\u83dc\u76c6<\/li>\n<\/ol>\n<\/li>\n<li>\u536b\u751f\u95f4\n<ol>\n<li>\u5ba2\u536b\u5e72\u6e7f\u5206\u533a\uff0c1\u7c73\u6d17\u6f31\u76c6\uff0c\u6dcb\u6d74\uff0c\u8e72\u4fbf\uff0c\u58c1\u9f9b\uff0c\u6362\u6c14+\u7167\u660e<\/li>\n<li>\u5ba2\u536b \u6d17\u6f31\u76c6\u8fb9\u4e3a\u534a\u5899\uff0c\u4e0a\u9762\u653e\u6728\u8d28\u96d5\u82b1\u5c4f\u98ce<\/li>\n<li>\u4e3b\u536b800 \u6d17\u6f31\u76c6\uff0c\u667a\u80fd\u9a6c\u6876\uff0c\u65e0\u6dcb\u6d74\uff0c\u6362\u6c14+\u7167\u660e\uff0c\u9632\u6c34\u4e0a\u5899<\/li>\n<li>\u4e24\u4e2a\u6d17\u6f31\u76c6\u5f00\u5173\u6392\u6c34\u4e0a\u5899\uff0c\u9a6c\u6876 \u6392\u6c34\u4e0a\u5899<\/li>\n<li>\u4e3b\u536b\u95e8180\u00b0<\/li>\n<\/ol>\n<\/li>\n<li>\u9633\u53f0\n<ol>\n<li>\u653e2\u4e2a\u6eda\u7b52\u6d17\u8863\u673a\uff0c1\u6d17\u8863\u6c60<\/li>\n<li>\u624b\u52a8\u667e\u8863\u67b6\uff0c1 \u667e\u8863\u652f\u67b6<\/li>\n<li>\u9884\u7559\u626b\u5730\u673a\u5668\u4eba\u4f4d\u7f6e<\/li>\n<li>\u5730\u9762\u505a\u9632\u6c34<\/li>\n<\/ol>\n<\/li>\n<li>\u7384\u5173\n<ol>\n<li>\u667a\u80fd\u9501\uff0c\u611f\u5e94\u706f<\/li>\n<li>\u6362\u978b\u51f3\uff0c\u7a7f\u8863\u955c<\/li>\n<\/ol>\n<\/li>\n<li>\u5bb6\u7535\n<ol>\n<li>750*700\u51b0\u7bb1\uff0c1\u7535\u996d\u7172\uff0c1\u70e4\u7bb1\u653e\u53f0\u9762\uff0c1\u6d17\u7897\u673a\uff0c\u524d\u7f6e+\u540e\u7f6e\u51c0\u6c34\u5668\uff0c\u7076\u5177+\u62bd\u6cb9\u70df\u673a<\/li>\n<li>\u5730\u6696\uff0c1 \u67dc\u673a\uff0c3 \u6302\u673a\uff0c1 \u65b0\u98ce\uff0c2 \u6eda\u7b52\u6d17\u8863\u673a\uff0c\u9884\u7559\u626b\u5730\u673a\u5668\u4eba\uff0c1 \u667a\u80fd\u9a6c\u6876<\/li>\n<li>\u7535\u89c6\uff0c\u65e0\u5f31\u7535\u7bb1\uff0c\u7f51\u7ebf\u5230\u7535\u89c6\u67dc\uff0c\u513f\u7ae5\u623f\u9884\u7559\u7f51\u7ebf\u53e3<\/li>\n<li>\u667a\u80fd\u9501\uff0c\u7384\u5173\u611f\u5e94\u706f<\/li>\n<\/ol>\n<\/li>\n<li>\u786c\u88c5\n<ol>\n<li>\u88c5\u4fee\u6a21\u5f0f\u91c7\u7528\u534a\u5305<\/li>\n<li>\u662f\u5426\u8bf7\u8bbe\u8ba1\u5e08\u5f85\u5b9a<\/li>\n<li>\u5899\u9762\u5237\u4ee5\u767d\u8272\u504f\u6696\u8272\u4e73\u80f6\u6f06<\/li>\n<li>\u5730\u9762\u94fa1500cm*7500\u74f7\u7816<\/li>\n<li>\u536b\u751f\u95f4\u548c\u53a8\u623f\u5899\u9762\u94fa 300cm*600cm \u74f7\u7816<\/li>\n<li>\u5168\u5c4b\u67dc\u5b50\u5b9a\u5236\uff0c\u4f7f\u7528\u751f\u6001\u677f<\/li>\n<li>\u53a8\u623f\u67dc\u5b50\u5b9a\u5236<\/li>\n<li>\u5730\u6696\u94fa\u5230\u9633\u53f0<\/li>\n<li>\u5168\u5c4b\u7a97\u6237\u66f4\u6362\uff0c\u5c01\u9633\u53f0<\/li>\n<\/ol>\n<\/li>\n<li>\u5de5\u827a\n<ol>\n<li>\u780c\u5899\uff0c\u52a0\u5f3a\u7b4b\uff0c\u5168\u5c4b\u6302\u7f51\uff0c\u5e94\u529b\u91ca\u653e\uff0c<\/li>\n<li>\u6c34\u7535\uff0c\u5927\u5f27\u5f2f\uff0c\u5206\u6bb5\u56fa\u5b9a\uff0c\u9694\u79bb\u9632\u5e72\u6270<\/li>\n<li>\u5899\u56fa\u5730\u56fa<\/li>\n<li>\u653e\u6c34\u5206\u6bb5<\/li>\n<li>\u5730\u9762\u627e\u5e73\uff0c\u5e73\u6574\u5ea6\uff0c\u9632\u5f00\u88c2<\/li>\n<li>\u4e0b\u6c34\u7ba1\u9694\u97f3\u5904\u7406<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u9009\u88c5\u4fee\u516c\u53f8\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u9009\u88c5\u4fee\u516c\u53f8\" class=\"anchor-link\" aria-label=\"\u9009\u88c5\u4fee\u516c\u53f8\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u9009\u88c5\u4fee\u516c\u53f8\" class=\"headings\">\u9009\u88c5\u4fee\u516c\u53f8<\/a><\/h3>\n<p>\u88c5\u4fee\u516c\u53f8\u4fe1\u606f\u6765\u6e90\u4e3b\u8981\u6765\u81ea\u4e09\u4e2a\u9014\u5f84\uff0c\u4e00\u3001\u5f97\u610f\u751f\u6d3b\u63a8\u8350\uff1b\u4e8c\u3001\u7f51\u7ea2\u88c5\u4feeUP\u4e3b\uff1b\u4e09\u3001\u4e2a\u4eba\u79ef\u7d2f\u3002\n\u4e2a\u4eba\u9009\u62e9\u7684\u6807\u51c6<\/p>\n<ol>\n<li>\u6c9f\u901a\u662f\u5426\u987a\u7545\uff0c\u662f\u5426\u5f15\u53d1\u53cd\u611f<\/li>\n<li>\u8bbe\u8ba1\u5e08\u5e73\u9762\u65b9\u6848\u662f\u5426\u6709\u53c2\u8003\u4ef7\u503c<\/li>\n<li>\u88c5\u4fee\u516c\u53f8\u597d\u8bc4\u5982\u4f55\uff0c\u662f\u5426\u9760\u8c31<\/li>\n<li>\u5de5\u5730\u7ba1\u7406\uff0c\u5de5\u5730\u662f\u5426\u5e72\u51c0\uff0c\u76f8\u5173\u5de5\u827a\u662f\u5426\u7f8e\u89c2\uff0c\u89c4\u8303<\/li>\n<li>\u62a5\u4ef7\u662f\u5426\u5408\u7406<\/li>\n<\/ol>\n<h4 id=\"\u5f97\u610f\u751f\u6d3b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u5f97\u610f\u751f\u6d3b\" class=\"anchor-link\" aria-label=\"\u5f97\u610f\u751f\u6d3b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u5f97\u610f\u751f\u6d3b\" class=\"headings\">\u5f97\u610f\u751f\u6d3b<\/a><\/h4>\n<p>\u4e00\u5171\u63a8\u8350\u4e864\u4e2a\u516c\u53f8\uff0c\u6574\u4f53\u8d28\u91cf\u504f\u4f4e<\/p>\n<ol>\n<li>\u5c71\u6c34\u4eba\u5bb6\uff0c\u4e0d\u8003\u8651\uff0c\u8bbe\u8ba1\u5e08\u65b9\u6848\u4e00\u822c\uff0c\u63a8\u9500\u76f8\u5173\u6c9f\u901a\u8fc7\u591a<\/li>\n<li>\u535a\u82e5\u68ee\uff0c\u4e0d\u8003\u8651\uff0c\u65e0\u6cd5\u7ebf\u4e0a\u6c9f\u901a\u65b9\u6848\uff0c\u8bbe\u8ba1\u5e08\u6c9f\u901a\u4e0d\u7545<\/li>\n<li>\u5408\u5efa\u88c5\u9970\uff0c\u4e0d\u8003\u8651\uff0c\u5e73\u9762\u56fe\u6709\u53c2\u8003\u4ef7\u503c\uff0c\u8bbe\u8ba1\u5e08\u6c9f\u901a\u987a\u7545\uff0c\u5168\u5305\u6a21\u5f0f<\/li>\n<li>\u8c6a\u8fea\u88c5\u9970\uff0c\u4e0d\u8003\u8651\uff0c\u8bbe\u8ba1\u5e08\u6c9f\u901a\u65b9\u5f0f\u4e0d\u559c\uff0c\u5e73\u9762\u65b9\u6848\u65e0\u53c2\u8003\u4ef7\u503c\uff0c\u9500\u552e\u6c9f\u901a\u987a\u7545\uff0c\u62a5\u4ef7\u5408\u7406\uff0c\u8bbe\u8ba1\u5e08\u65e0\u6cd5\u7ed9\u51fa\u6709\u6548\u7684\u5efa\u8bae\u3002<\/li>\n<\/ol>\n<h4 id=\"\u7f51\u7ea2\u88c5\u4feeup\u4e3b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u7f51\u7ea2\u88c5\u4feeup\u4e3b\" class=\"anchor-link\" aria-label=\"\u7f51\u7ea2\u88c5\u4feeup\u4e3b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u7f51\u7ea2\u88c5\u4feeup\u4e3b\" class=\"headings\">\u7f51\u7ea2\u88c5\u4feeUP\u4e3b<\/a><\/h4>\n<p>\u670b\u53cb\u63a8\u8350\u7684\u4e00\u4e2a\u5c0f\u7ea2\u4e66\u535a\u4e3b \u7406\u5de5\u7537\uff0cUP\u4e3b\u6253\u9020\u4e2a\u4ebaIP\uff0c\u6574\u7406\u4e86\u88c5\u4fee\u76f8\u5173\u8d44\u6e90\uff0c\u81ea\u5df1\u8003\u5bdf\u516c\u53f8\uff0c\u8fdb\u884c\u767d\u540d\u5355\u516c\u53f8\u63a8\u8350<\/p>\n<ol>\n<li>\u6734\u820d\u9e66\u9e49\u5bb6\uff0c\u4e0d\u8003\u8651\uff0c\u5e73\u9762\u65b9\u6848\u6709\u53c2\u8003\u4ef7\u503c\uff0c\u6c9f\u901a\u987a\u7545\uff0c\u5de5\u5730\u7167\u7247\u5e72\u51c0\u6574\u6d01\u89c4\u8303\uff0c\u62a5\u4ef7\u8d35<\/li>\n<li>\u6811\u5bb8\uff0c\u4e0d\u8003\u8651\uff0c\u5e73\u9762\u65b9\u6848\u6709\u53c2\u8003\u4ef7\u503c\uff0c\u6c9f\u901a\u987a\u7545\uff0c\u81ea\u79f0\u7ed9\u90e8\u5206\u5de5\u4eba\u53d1\u5de5\u8d44\uff0c\u62a5\u4ef7\u5408\u7406\uff0c\u8001\u5a46\u4e0d\u559c\u6b22<\/li>\n<li>\u738b\u5de5\u957f\uff0c\u6700\u7ec8\u7b7e\u8ba2\u5408\u540c\uff0c\u6c9f\u901a\u8212\u7545\uff0c\u62a5\u4ef7\u5408\u7406\uff0c\u4ee3\u51fa\u65bd\u5de5\u56fe\u7eb8\uff0c\u53e3\u7891\u597d\uff0c\u5de5\u5730\u8003\u5bdf\u540e\u975e\u5e38\u89c4\u8303\uff0c\u5e72\u51c0<\/li>\n<li>\u6f58\u5de5\u957f\uff0c\u4e0d\u8003\u8651\uff0c\u65f6\u95f4\u539f\u56e0\u672a\u8fdb\u884c\u6c9f\u901a\u3002<\/li>\n<\/ol>\n<h4 id=\"\u4e2a\u4eba\u79ef\u7d2f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u4e2a\u4eba\u79ef\u7d2f\" class=\"anchor-link\" aria-label=\"\u4e2a\u4eba\u79ef\u7d2f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u4e2a\u4eba\u79ef\u7d2f\" class=\"headings\">\u4e2a\u4eba\u79ef\u7d2f<\/a><\/h4>\n<p>\u5728\u8d1d\u58f3\u8d2d\u623f\u540e\u63a8\u8350\u5723\u90fd\u5bb6\u88c5\uff0c\u540c\u65f6\u4ee5\u524d\u88c5\u4fee\u8fc7\u4e00\u5957\u623f\u5b50\uff0c\u4fdd\u7559\u90e8\u5206\u8054\u7cfb\u4eba\u3002<\/p>\n<ol>\n<li>\u5723\u90fd\u5bb6\u88c5\uff0c\u4e0d\u8003\u8651\uff0c\u62a5\u4ef7\u8fc7\u8d35\uff0c\u5e73\u9762\u65b9\u6848\u65e0\u53c2\u8003\u4ef7\u503c\uff0c\u8bbe\u8ba1\u6c34\u5e73\u8f83\u5dee<\/li>\n<li>\u66f9\u5e08\u5085\uff0c\u4e0d\u8003\u8651\uff0c\u5e73\u9762\u65b9\u6848\u65e0\u53c2\u8003\u4ef7\u503c\uff0c\u62a5\u4ef7\u5408\u7406\uff0c\u88c5\u4fee\u5de5\u4eba\u5de5\u827a\u53c2\u5dee\u4e0d\u9f50<\/li>\n<li>\u9ad8\u8d85\uff0c\u4e0d\u8003\u8651\uff0c\u6c9f\u901a\u987a\u7545\uff0c\u4e3a\u4eba\u8d1f\u8d23\uff0c\u6574\u4f53\u88c5\u4fee\u4ef7\u683c\u4f18\u52bf\uff0c\u501f\u6b64\u673a\u4f1a\u62d3\u5bbd\u4e1a\u52a1\u8303\u56f4\u3002\u65e0\u623f\u5c4b\u6574\u4f53\u88c5\u4fee\u7ecf\u9a8c\uff0c\u5bfb\u627e\u7684\u9879\u76ee\u7ecf\u7406\u88c5\u4fee\u5de5\u827a\u4e00\u822c\uff0c\u62a5\u4ef7\u8fc7\u8d35\u3002\u63a8\u8350\u7684\u5c01\u9633\u53f0\u5546\u5bb6\u8bbe\u8ba1\u56fe\u4e0d\u5408\u7406\uff0c\u63a8\u8350\u7684\u62c6\u9664\u529f\u80fd\u62a5\u4ef7\u8fc7\u8d35\u3002<\/li>\n<\/ol>\n<h3 id=\"\u5e73\u9762\u56fe\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u5e73\u9762\u56fe\" class=\"anchor-link\" aria-label=\"\u5e73\u9762\u56fe\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u5e73\u9762\u56fe\" class=\"headings\">\u5e73\u9762\u56fe<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/fitment\/1\/2.png\" alt=\"\u6237\u578b\u56fe\"><\/p>\n<h3 id=\"\u987e\u8651\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#\u987e\u8651\" class=\"anchor-link\" aria-label=\"\u987e\u8651\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/fitment\/1\/#contents:\u987e\u8651\" class=\"headings\">\u987e\u8651<\/a><\/h3>\n<ol>\n<li>\u662f\u5426\u9700\u8981\u5355\u72ec\u8bf7\u8bbe\u8ba1\u4e66\u51fa\u65bd\u5de5\u56fe\u7eb8\u548c\u67dc\u5b50\u56fe\u7eb8<\/li>\n<li>\u5b9a\u5236\u67dc\u5b50\u662f\u5426\u53ef\u884c\uff0c\u6750\u6599 \u73af\u4fdd\u5982\u4f55\u4fdd\u8bc1<\/li>\n<li>\u9633\u53f0\u662f\u5426\u5b89\u843d\u5730\u7a97<\/li>\n<li>\u5de5\u4f5c\u65e5\u6ca1\u6709\u65f6\u95f4\u53bb\u5de5\u5730\uff0c\u5982\u4f55\u4fdd\u969c\u5de5\u4eba\u7684\u65bd\u5de5\u8d28\u91cf\uff0c\u9760\u8c31\u7684\u5de5\u957f\uff1f<\/li>\n<li>\u9879\u76ee\u7ecf\u7406\u51fa\u56fe\uff0c\u540e\u671f\u56fe\u7eb8\u5c3a\u5bf8\u76f8\u5173\u95ee\u9898\u53d8\u52a8\uff0c\u662f\u5426\u987a\u7545<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E8%A3%85%E4%BF%AE\/","term":"\u88c5\u4fee","label":"\u88c5\u4fee"}}]},{"title":"\n\u5229\u7528Azure TTS\u670d\u52a1\u8fdb\u884c\u5c0f\u8bf4\u6717\u8bfb","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/","updated":"2024-05-06T17:36:56+08:00","published":"2024-05-06T17:36:56+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u501f\u52a9GPT\u5c01\u88c5\u4e91\u5382\u5546TTS\u670d\u52a1\uff0c\u624b\u673aAPP\u5b9e\u73b0\u81ea\u5b9a\u4e49\u6717\u8bfb\u529f\u80fd","content":"\n<h2 id=\"\u9700\u6c42\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u9700\u6c42\" class=\"anchor-link\" aria-label=\"\u9700\u6c42\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u9700\u6c42\" class=\"headings\">\u9700\u6c42<\/a><\/h2>\n<p>iOS\u7cfb\u7edf\u81ea\u5e26\u8bed\u97f3\u6548\u679c\u4e0d\u4f73\uff0c\u6700\u8fd1\u63a5\u89e6\u5230Azure TTS\u670d\u52a1\u6548\u679c\u826f\u597d\u3002\u60f3\u5728\u8bfb\u4e66\u8f6f\u4ef6\u9999\u8272\u95fa\u9601\u4e2d\u52a0\u5165Azure tts\u97f3\u8272\u3002<\/p>\n<h2 id=\"\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u65b9\u6848\" class=\"headings\">\u65b9\u6848<\/a><\/h2>\n<p>\u5728\u670d\u52a1\u7aef\u5bf9Azure tts\u670d\u52a1\u8fdb\u884c\u5c01\u88c5\uff0c\u5bf9\u5916\u63d0\u4f9b\u63a5\u53e3\u3002\u9999\u8272\u95fa\u9601\u4e2d\u8c03\u7528\u63a5\u53e3\uff0c\u5b9e\u73b0\u6717\u8bfb\u3002<\/p>\n<h3 id=\"azure-tts\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#azure-tts\" class=\"anchor-link\" aria-label=\"azure-tts\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:azure-tts\" class=\"headings\">Azure tts<\/a><\/h3>\n<ol>\n<li>\u5148\u6ce8\u518cAzure\u8d26\u53f7\uff0cAzure AI services|\u8bed\u97f3\u670d\u52a1\u4e2d\u521b\u5efa\u9879\u76ee\uff0c\u83b7\u53d6\u79d8\u94a5\u548c\u533a\u57df\u3002\u5bc6\u94a5\u548c\u533a\u57df\u5199\u5165\u73af\u5883\u53d8\u91cf\u4e2d\uff0c\u65b9\u4fbf\u4f7f\u7528\u3002<\/li>\n<li>\u5b89\u88c5python SDK\uff0cpip install azure-cognitiveservices-speech<\/li>\n<li>\u53c2\u8003<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-services\/speech-service\/get-started-text-to-speech?tabs=linux%2Cterminal&amp;pivots=programming-language-python\" target=\"_blank\" rel=\"noopener\">\u5b98\u65b9\u6587\u6863<\/a><\/li>\n<li>\u83b7\u53d6\u97f3\u8272\u914d\u7f6e\u6587\u4ef6\uff0c\u5b8c\u6210\u6587\u672c\u8f6c\u8bed\u97f3\u529f\u80fd\u3002<\/li>\n<\/ol>\n<h4 id=\"\u97f3\u8272\u5217\u8868\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u97f3\u8272\u5217\u8868\" class=\"anchor-link\" aria-label=\"\u97f3\u8272\u5217\u8868\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u97f3\u8272\u5217\u8868\" class=\"headings\">\u97f3\u8272\u5217\u8868<\/a><\/h4>\n<ul>\n<li>\u83b7\u53d6\u97f3\u8272\u5217\u8868\u5f62\u6210\u97f3\u8272\u914d\u7f6e\u6587\u4ef6config.ini\u3002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">requests<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">configparser<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># URL\u5730\u5740<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">url<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;https:\/\/japanwest.tts.speech.microsoft.com\/cognitiveservices\/voices\/list&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u5b9a\u4e49headers<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">headers<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;User-Agent&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/58.0.3029.110 Safari\/537.3&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;Accept&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;Accept-Encoding&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;gzip, deflate, sdch&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;Accept-Language&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;Ocp-Apim-Subscription-Key&#39;<\/span><span class=\"p\">:<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">environ<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;SPEECH_KEY&#39;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5176\u4ed6\u60a8\u9700\u8981\u7684headers<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u53d1\u9001GET\u8bf7\u6c42\uff0c\u5305\u542bheaders<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"n\">headers<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u68c0\u67e5\u8bf7\u6c42\u662f\u5426\u6210\u529f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">status_code<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">200<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">configparser<\/span><span class=\"o\">.<\/span><span class=\"n\">ConfigParser<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">config<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;config.ini&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;voice&#39;<\/span><span class=\"p\">]<\/span><span class=\"o\">=<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8f93\u51fa\u8fd4\u56de\u7684\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">voice<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">data<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">voice<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;Locale&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;zh-CN&#39;<\/span> <span class=\"ow\">or<\/span> <span class=\"n\">voice<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;Locale&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;zh-TW&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;voice&#39;<\/span><span class=\"p\">][<\/span><span class=\"n\">voice<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;DisplayName&#39;<\/span><span class=\"p\">]]<\/span> <span class=\"o\">=<\/span><span class=\"n\">voice<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;ShortName&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;config.ini&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;w&#39;<\/span><span class=\"p\">,<\/span><span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">configfile<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">config<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">configfile<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8f93\u51fa\u9519\u8bef\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;Error:&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">status_code<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u6587\u672c\u8f6c\u8bed\u97f3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u6587\u672c\u8f6c\u8bed\u97f3\" class=\"anchor-link\" aria-label=\"\u6587\u672c\u8f6c\u8bed\u97f3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u6587\u672c\u8f6c\u8bed\u97f3\" class=\"headings\">\u6587\u672c\u8f6c\u8bed\u97f3<\/a><\/h4>\n<ul>\n<li>config.ini\u6587\u4ef6\u4e0e\u4e0b\u9762\u4ee3\u7801\u653e\u5728\u540c\u4e00\u76ee\u5f55\u4e0b\u3002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">azure.cognitiveservices.speech<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">speechsdk<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">configparser<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">tts<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">configparser<\/span><span class=\"o\">.<\/span><span class=\"n\">ConfigParser<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">config<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;config.ini&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">speak<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">voice_id<\/span><span class=\"p\">,<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">path<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;\/home\/ubuntu\/tts\/output.wav&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">speech_config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">speechsdk<\/span><span class=\"o\">.<\/span><span class=\"n\">SpeechConfig<\/span><span class=\"p\">(<\/span><span class=\"n\">subscription<\/span><span class=\"o\">=<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">environ<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;SPEECH_KEY&#39;<\/span><span class=\"p\">),<\/span> <span class=\"n\">region<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;japanwest&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">file_config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">speechsdk<\/span><span class=\"o\">.<\/span><span class=\"n\">audio<\/span><span class=\"o\">.<\/span><span class=\"n\">AudioOutputConfig<\/span><span class=\"p\">(<\/span><span class=\"n\">filename<\/span><span class=\"o\">=<\/span><span class=\"n\">path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">speech_config<\/span><span class=\"o\">.<\/span><span class=\"n\">speech_synthesis_voice_name<\/span><span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;voices&#39;<\/span><span class=\"p\">][<\/span><span class=\"n\">voice_id<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">speech_synthesizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">speechsdk<\/span><span class=\"o\">.<\/span><span class=\"n\">SpeechSynthesizer<\/span><span class=\"p\">(<\/span><span class=\"n\">speech_config<\/span><span class=\"o\">=<\/span><span class=\"n\">speech_config<\/span><span class=\"p\">,<\/span> <span class=\"n\">audio_config<\/span><span class=\"o\">=<\/span><span class=\"n\">file_config<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">speech_synthesis_result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">speech_synthesizer<\/span><span class=\"o\">.<\/span><span class=\"n\">speak_text_async<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">path<\/span><span class=\"p\">,<\/span><span class=\"n\">speech_synthesis_result<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">text_to_tts<\/span> <span class=\"o\">=<\/span> <span class=\"n\">tts<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">text_to_tts<\/span><span class=\"o\">.<\/span><span class=\"n\">speak<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;yunxia&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;2019\/03\/02\u4e0a\u5348\u67091\/2\u7684\u6982\u7387\u4e0b\u66b4\u96e8\u6240\u4ee5\u6709600\u4eba\u9078\u64c73:30p.m.\u518d\u51fa\u9580,\u652f\u4ed8$500\u6216\uffe5600\u53ef\u4ee5\u7372\u5f97\u4ee3\u91d1\u5238&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u5bf9\u5916\u63a5\u53e3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u5bf9\u5916\u63a5\u53e3\" class=\"anchor-link\" aria-label=\"\u5bf9\u5916\u63a5\u53e3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u5bf9\u5916\u63a5\u53e3\" class=\"headings\">\u5bf9\u5916\u63a5\u53e3<\/a><\/h4>\n<ul>\n<li>\u57fa\u4e8efastapi\u7f16\u5199\u5bf9\u5916\u670d\u52a1\u63a5\u53e3\u3002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">fastapi<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">FastAPI<\/span><span class=\"p\">,<\/span><span class=\"n\">Query<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">fastapi.responses<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">FileResponse<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">pydantic<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">BaseModel<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">speech_synthesis<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">tts<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">uvicorn<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># class TTSRequest(BaseModel):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># voice_id: str # \u5047\u8bbevoice_id\u662f\u4e00\u4e2a\u6574\u6570<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># text: str # text\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">FastAPI<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># @app.get(&#34;\/tts\/&#34;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># async def handle_tts(request: TTSRequest):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># text_to_speech = tts()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># audio_file_path,speech_synthesis_result = text_to_speech.speak(request.voice_id, request.text)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># if os.path.isfile(audio_file_path):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># # \u4f7f\u7528 FileResponse \u8fd4\u56de\u6587\u4ef6\u5185\u5bb9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># return FileResponse(audio_file_path, filename=&#34;output.wav&#34;, media_type=&#34;audio\/wav&#34;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># else:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># print(&#34;audio_file_path: &#34; + audio_file_path)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># print(speech_synthesis_result)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># return {&#34;error&#34;: &#34;File not found&#34;}, 404<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nd\">@app.get<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\/tts\/&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_tts<\/span><span class=\"p\">(<\/span><span class=\"n\">voice_id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Query<\/span><span class=\"p\">(<\/span><span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;The ID of the voice to use&#34;<\/span><span class=\"p\">),<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">text<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Query<\/span><span class=\"p\">(<\/span><span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"n\">description<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;The text to be synthesized&#34;<\/span><span class=\"p\">)):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">text_to_speech<\/span> <span class=\"o\">=<\/span> <span class=\"n\">tts<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">audio_file_path<\/span><span class=\"p\">,<\/span><span class=\"n\">speech_synthesis_result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">text_to_speech<\/span><span class=\"o\">.<\/span><span class=\"n\">speak<\/span><span class=\"p\">(<\/span><span class=\"n\">voice_id<\/span><span class=\"p\">,<\/span> <span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">isfile<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file_path<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4f7f\u7528 FileResponse \u8fd4\u56de\u6587\u4ef6\u5185\u5bb9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">FileResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">audio_file_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">filename<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;output.wav&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">media_type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;audio\/wav&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;audio_file_path: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">audio_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">speech_synthesis_result<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"p\">{<\/span><span class=\"s2\">&#34;error&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;File not found&#34;<\/span><span class=\"p\">},<\/span> <span class=\"mi\">404<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">uvicorn<\/span><span class=\"o\">.<\/span><span class=\"n\">run<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">,<\/span> <span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;0.0.0.0&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">port<\/span><span class=\"o\">=<\/span><span class=\"mi\">8000<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u90e8\u7f72\" class=\"headings\">\u90e8\u7f72<\/a><\/h4>\n<ol>\n<li>\u670d\u52a1\u5668\u7528\u7684ubuntu\uff0c\u5c06\u4e0a\u9762python\u4ee3\u7801\u548cconfig.ini\u653e\u5230\/home\/ubuntu\/tts\u4e2d<\/li>\n<li>python\u6267\u884c\u4ee3\u7801\u63d0\u4f9b\u670d\u52a1<\/li>\n<li>\u914d\u7f6e\u57df\u540d\uff0c\u5c06\u57df\u540d\u6307\u5411\u670d\u52a1\u5668<\/li>\n<\/ol>\n<h3 id=\"\u7f16\u5199\u9999\u8272tts\u6e90\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u7f16\u5199\u9999\u8272tts\u6e90\" class=\"anchor-link\" aria-label=\"\u7f16\u5199\u9999\u8272tts\u6e90\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u7f16\u5199\u9999\u8272tts\u6e90\" class=\"headings\">\u7f16\u5199\u9999\u8272tts\u6e90<\/a><\/h3>\n<ul>\n<li>\u53ef\u4ee5\u4ece\u9999\u8272\u4e2d\u5bfc\u51fa\u4e00\u4e2a\u8bed\u97f3\u6e90\uff0c\u4f7f\u7528\u4e0b\u5217\u4ee3\u7801\u8f6c\u6362\u6210json\u683c\u5f0f\u3002\u4fee\u6539json\u4e2d\u5185\u5bb9\uff0c\u7136\u540e\u518d\u8f6c\u6362\u6210xbs\u5728\u9999\u8272\u4e2d\u5bfc\u5165\u5373\u53ef\u3002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><span class=\"lnt\">68\n<\/span><span class=\"lnt\">69\n<\/span><span class=\"lnt\">70\n<\/span><span class=\"lnt\">71\n<\/span><span class=\"lnt\">72\n<\/span><span class=\"lnt\">73\n<\/span><span class=\"lnt\">74\n<\/span><span class=\"lnt\">75\n<\/span><span class=\"lnt\">76\n<\/span><span class=\"lnt\">77\n<\/span><span class=\"lnt\">78\n<\/span><span class=\"lnt\">79\n<\/span><span class=\"lnt\">80\n<\/span><span class=\"lnt\">81\n<\/span><span class=\"lnt\">82\n<\/span><span class=\"lnt\">83\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">xxtea<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">struct<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">xxtea_key<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">bytes<\/span><span class=\"p\">([<\/span><span class=\"mh\">0xe5<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x87<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xbc<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xe8<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xa4<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x86<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xe6<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xbb<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xbf<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xe9<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x87<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x91<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xe6<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xba<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xa1<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0xe5<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">xbs2json<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">out<\/span> <span class=\"o\">=<\/span> <span class=\"n\">xxtea<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">,<\/span> <span class=\"n\">xxtea_key<\/span><span class=\"p\">,<\/span><span class=\"kc\">False<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n<\/span> <span class=\"o\">-=<\/span> <span class=\"mi\">4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">m<\/span> <span class=\"o\">=<\/span> <span class=\"n\">struct<\/span><span class=\"o\">.<\/span><span class=\"n\">unpack<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;&lt;I&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">out<\/span><span class=\"p\">[<\/span><span class=\"n\">n<\/span><span class=\"p\">:])[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">m<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">n<\/span> <span class=\"o\">-<\/span> <span class=\"mi\">3<\/span> <span class=\"ow\">or<\/span> <span class=\"n\">m<\/span> <span class=\"o\">&gt;<\/span> <span class=\"n\">n<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;decode error&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"n\">m<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">out<\/span><span class=\"p\">[:<\/span><span class=\"n\">n<\/span><span class=\"p\">],<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">json2xbs<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">buffer_len<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n<\/span> <span class=\"o\">=<\/span> <span class=\"n\">buffer_len<\/span> <span class=\"o\">\/\/<\/span> <span class=\"mi\">4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">buffer_len<\/span> <span class=\"o\">%<\/span> <span class=\"mi\">4<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">n<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># Pad the buffer to the next multiple of 4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padding_length<\/span> <span class=\"o\">=<\/span> <span class=\"n\">n<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">4<\/span> <span class=\"o\">-<\/span> <span class=\"n\">buffer_len<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">buffer_enc_len<\/span> <span class=\"o\">=<\/span> <span class=\"sa\">b<\/span><span class=\"s1\">&#39;<\/span><span class=\"se\">\\x00<\/span><span class=\"s1\">&#39;<\/span> <span class=\"o\">*<\/span> <span class=\"n\">padding_length<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># Append the original buffer length as a little-endian uint32<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">buffer_enc_len<\/span> <span class=\"o\">+=<\/span> <span class=\"n\">struct<\/span><span class=\"o\">.<\/span><span class=\"n\">pack<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;&lt;I&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">buffer_len<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># Combine the original buffer with the padding and length<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">buffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">buffer<\/span> <span class=\"o\">+<\/span> <span class=\"n\">buffer_enc_len<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># Encrypt the buffer using XXTEA<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">out<\/span> <span class=\"o\">=<\/span> <span class=\"n\">xxtea<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">buffer<\/span><span class=\"p\">,<\/span> <span class=\"n\">xxtea_key<\/span><span class=\"p\">,<\/span><span class=\"kc\">False<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">out<\/span><span class=\"p\">,<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"nb\">str<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">load_file<\/span><span class=\"p\">(<\/span><span class=\"n\">filepath<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">exists<\/span><span class=\"p\">(<\/span><span class=\"n\">filepath<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">filepath<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;rb&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">file<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">file<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">(),<\/span><span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"sa\">f<\/span><span class=\"s2\">&#34;File <\/span><span class=\"si\">{<\/span><span class=\"n\">filepath<\/span><span class=\"si\">}<\/span><span class=\"s2\"> does not exist.&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">xbs_to_json<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">,<\/span><span class=\"n\">output<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span> <span class=\"o\">=<\/span> <span class=\"n\">load_file<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">error<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encode_data<\/span><span class=\"p\">,<\/span><span class=\"n\">error<\/span> <span class=\"o\">=<\/span> <span class=\"n\">xbs2json<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">error<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6253\u5f00\u6587\u4ef6\u4ee5\u4e8c\u8fdb\u5236\u6a21\u5f0f\u5199\u5165<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">output<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;w&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">json_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">encode_data<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">dump<\/span><span class=\"p\">(<\/span><span class=\"n\">json_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">f<\/span><span class=\"p\">,<\/span> <span class=\"n\">ensure_ascii<\/span><span class=\"o\">=<\/span><span class=\"kc\">False<\/span><span class=\"p\">,<\/span> <span class=\"n\">indent<\/span><span class=\"o\">=<\/span><span class=\"mi\">4<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">json_to_xbs<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">,<\/span><span class=\"n\">output<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span> <span class=\"o\">=<\/span> <span class=\"n\">load_file<\/span><span class=\"p\">(<\/span><span class=\"nb\">input<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">error<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decode_data<\/span><span class=\"p\">,<\/span><span class=\"n\">error<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json2xbs<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">error<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">output<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;wb&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">decode_data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;__main__&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">xbs_to_json<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">xs<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">test<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">azure_tts.xbs&#39;<\/span> <span class=\"p\">,<\/span> <span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">xs<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">test<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">azure_tts1.json&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">json_to_xbs<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">xs<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">test<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">azure_tts1.json&#39;<\/span> <span class=\"p\">,<\/span> <span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">xs<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">test<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">azure_tts1.xbs&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u4fee\u6539\u70b9\u4e3arequestInfo\u4e2durl\u8c03\u6574\u4e3a\u81ea\u5df1\u670d\u52a1\u7684\u57df\u540d\uff0cbody\u53ea\u4fdd\u7559voice_id\u53c2\u6570\u3002<\/li>\n<li>requestFilters\u8c03\u6574\u4e3aAzure TTS\u97f3\u8272\u4fe1\u606f\uff0c\u4e0e\u4e0a\u9762config.ini\u4e2did\u5bf9\u5e94\u3002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">{\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;\u8bed\u97f3\u8bbe\u7f6e-azure&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;chapterContent&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;chapterContent&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;enable&#34;: 1,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;shupingList&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;shupingList&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;authorId&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;bookDetail&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;bookDetail&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;bookWorld&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;azure&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;bookWorld&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;validConfig&#34;: &#34;&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;requestInfo&#34;: &#34;@js:\\n\\nlet url=\\&#34;https:\/\/tts.xiaoshame1.pp.ua\/tts\/\\&#34;;\\nlet body={\\n voice_id:params.filters.type,\\n};\\nlet _conf={\\n key:&#39;text&#39;,\\n body:body,\\n headers:{},\\n post:false,\\n url:url\\n };\\n\\nparams.nativeTool.setCache(\\&#34;xsreader_voice_conf\\&#34;,JSON.stringify(_conf));\\nreturn config.host&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;bookName&#34;: &#34;@js:\\nlet regt=`\\\\n\\\\s*(.*?)::${params.filters.type}\\\\n`\\nlet reg=new RegExp(regt)\\nlet name=config.moreKeys.requestFilters.match(reg)[1]\\nreturn \\&#34;\u5f53\u524d\u8bed\u97f3\uff1a\\&#34;+name&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;detailUrl&#34;: &#34;@js:\\nreturn config.host&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;host&#34;: &#34;http:\/\/captive.apple.com&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;_sIndex&#34;: 7,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;list&#34;: &#34;\/\/title&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;responseFormatType&#34;: &#34;html&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;moreKeys&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;pageSize&#34;: 30,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;requestFilters&#34;: &#34;type\\n\u6653\u6653::Xiaoxiao\\n\u4e91\u5e0c::Yunxi\\n\u4e91\u5065::Yunjian\\n\u6653\u4f0a::Xiaoyi\\n\u4e91\u626c::Yunyang\\n\u6653\u8fb0::Xiaochen\\n\u6653\u6db5::Xiaohan\\n\u6653\u68a6::Xiaomeng\\n\u6653\u58a8::Xiaomo\\n\u6653\u79cb::Xiaoqiu\\n\u6653\u777f::Xiaorui\\n\u6653\u53cc::Xiaoshuang\\n\u6653\u6653 \u65b9\u8a00::Xiaoxiao Dialects\\n\u6653\u6653 \u591a\u8bed\u8a00::Xiaoxiao Multilingual\\n\u6653\u989c::Xiaoyan\\n\u6653\u60a0::Xiaoyou\\n\u6653\u7504::Xiaozhen\\n\u4e91\u67ab::Yunfeng\\n\u4e91\u7693::Yunhao\\n\u4e91\u590f::Yunxia\\n\u4e91\u91ce::Yunye\\n\u4e91\u6cfd::Yunze\\n\u6653\u8431::Xiaoxuan\\n\u66c9\u81fb::HsiaoChen\\n\u96f2\u54f2::YunJhe\\n\u66c9\u96e8::HsiaoYu&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> }\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> }\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;shudanList&#34;: {},\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;sourceType&#34;: &#34;text&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;relatedWord&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;relatedWord&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;weight&#34;: &#34;9999&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;sourceName&#34;: &#34;\u8bed\u97f3\u8bbe\u7f6e-azure&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;sourceUrl&#34;: &#34;http:\/\/captive.apple.com&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;miniAppVersion&#34;: &#34;2.53.2&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;shudanDetail&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;shudanDetail&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;lastModifyTime&#34;: &#34;1695541859.065246&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;shupingHome&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;shupingHome&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;searchShudan&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;searchShudan&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;searchBook&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;searchBook&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> },\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;chapterList&#34;: {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;actionID&#34;: &#34;chapterList&#34;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> &#34;parserID&#34;: &#34;DOM&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> }\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> }\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u4f7f\u7528\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u4f7f\u7528\" class=\"anchor-link\" aria-label=\"\u4f7f\u7528\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u4f7f\u7528\" class=\"headings\">\u4f7f\u7528<\/a><\/h3>\n<ol>\n<li>\u53d1\u73b0\u4e2d\u5207\u6362\u5230\u5bfc\u5165\u7684\u97f3\u8272\u6e90\uff0c\u9009\u62e9\u97f3\u8272<\/li>\n<li>\u6587\u7ae0\u70b9\u51fb\u6717\u8bfb\uff0c\u53d1\u97f3\u4e2d\u9009\u62e9\u8bed\u97f3\u6d4b\u8bd5<\/li>\n<\/ol>\n<h2 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/cloud_tts\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h2>\n<ol>\n<li>\u6b64\u65b9\u6848\u540c\u6837\u53ef\u4ee5\u5c01\u88c5\u963f\u91cc\u4e91\u548c\u767e\u5ea6\u4e91\u7684TTS\u670d\u52a1\uff0c\u53ea\u9700\u8981\u589e\u52a0\u76f8\u5e94\u4e91\u670d\u52a1API\u8c03\u7528\u4ee3\u7801\u3002<\/li>\n<li>\u4ee3\u7801\u6bd4\u8f83\u7b80\u5355\uff0c\u4e91API\u8c03\u7528\u6309\u7167\u5b98\u65b9\u6587\u6863\u7684\u6b65\u9aa4\u6765\uff0cfastapi\u76f8\u5173\u4ee3\u7801\u501f\u52a9GPT\u5b8c\u6210\u3002<\/li>\n<li>\u67e5\u770b\u4ed6\u4eba\u9999\u8272\u8bed\u97f3\u6e90\u53ef\u4ee5\u6bd4\u8f83\u5feb\u719f\u6089\u7684\u7f16\u5199\u89c4\u5219\uff0c\u8f6c\u6362\u6210json\u540e\u7f16\u5199\u6548\u7387\u66f4\u9ad8\u3002<\/li>\n<li>\u76f8\u5173\u4ee3\u7801\u53ef\u4ee5\u5728<a href=\"https:\/\/github.com\/xiaoshame\/script\/tree\/main\/xs\" target=\"_blank\" rel=\"noopener\">Github<\/a>\u4e0a\u67e5\u770b\u3002<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/tts\/","term":"tts","label":"tts"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/azure\/","term":"azure","label":"azure"}}]},{"title":"\n\u8d2d\u623f","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/house\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/house\/","updated":"2024-04-29T17:49:50+08:00","published":"2024-04-29T17:49:50+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u65f6\u4ee3\u7684\u4e00\u7c92\u7070\uff0c\u843d\u5728\u4e2a\u4eba\u5934\u4e0a\uff0c\u5c31\u662f\u4e00\u5ea7\u5c71","content":"\n<p>\u7ed3\u5a5a\u540e\u751f\u6d3b\u8d8b\u5411\u7a33\u5b9a\uff0c\u65e5\u5e38\u751f\u6d3b\u90fd\u56f4\u7ed5\u5c0f\u5b69\u5c55\u5f00\u3002\u968f\u7740\u5c0f\u5b69\u5e74\u9f84\u7684\u589e\u957f\uff0c\u5b66\u533a\u623f\u4e5f\u63d0\u4e0a\u4e86\u8bae\u7a0b\u3002\u6700\u7ec8\u51b3\u5b9a\u5c06\u8001\u5a46\u5a5a\u524d\u623f\u4ea7\u7f6e\u6362\u4e3a\u5b66\u533a\u623f\u3002\u5f00\u59cb\u5356\u623f\u4e70\u623f\u7684\u65c5\u9014\u3002<\/p>\n<h2 id=\"\u5356\u623f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/house\/#\u5356\u623f\" class=\"anchor-link\" aria-label=\"\u5356\u623f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/house\/#contents:\u5356\u623f\" class=\"headings\">\u5356\u623f<\/a><\/h2>\n<p>20\u5e74\u4e0b\u534a\u5e74\u5c31\u8ba1\u5212\u8d2d\u4e70\u5b66\u533a\u623f\uff0c\u521a\u628a\u623f\u5b50\u6302\u5230\u8d1d\u58f3\u4e0a\uff0c\u6ca1\u8fc7\u51e0\u5929\u5c31\u6709\u4eba\u8981\u4e70\uff0c\u5f53\u65f6\u89c9\u5f97\u5356\u4fbf\u5b9c\u4e86\uff0c\u6ca1\u6709\u540c\u610f\u3002\u540e\u7eed\u56e0\u8001\u5a46\u5de5\u4f5c\u53d8\u52a8\uff0c\u5356\u623f\u8ba1\u5212\u5c31\u6682\u505c\u4e86\u3002<\/p>\n<p>\u8f6c\u773c\u6765\u523022\u5e74\u4e0b\u534a\u5e74\uff0c\u5356\u623f\u8ba1\u5212\u53c8\u91cd\u65b0\u542f\u52a8\uff0c\u8ba1\u521223\u5e74\u5e95\u4e4b\u524d\u8981\u5356\u6389\uff0c\u6700\u7ec8\u572824\u5e741\u6708\u6210\u4ea4\u3002\u4e2d\u95f4\u591a\u6b21\u6709\u4e70\u5bb6\u62a5\u4ef7\uff0c\u90fd\u4f4e\u4e8e\u6211\u4eec\u9884\u671f\u4ef7\u683c\uff0c\u540c\u65f6\u8ddd\u79bb\u6211\u4eec\u8ba4\u4e3a\u7684\u622a\u6b62\u65f6\u95f4\u8fd8\u6709\u5f88\u957f\u65f6\u95f4\uff0c\u6700\u7ec8\u90fd\u6ca1\u6709\u6210\u4ea4\u3002\u4e70\u5bb6\u51fa\u4ef7\u4e00\u6b21\u6bd4\u4e00\u6b21\u4f4e\uff0c\u6211\u4eec\u4e5f\u8d8a\u53d1\u4e0d\u7518\u5fc3\u3002<\/p>\n<p>\u6ca1\u60f3\u523023\u5e7410\u6708\u5c0f\u533a\u4ef7\u683c\u51fa\u73b0\u8e29\u8e0f\uff0c\u6700\u7ec8\u6210\u4ea4\u4ef7\u76f8\u6bd420\u5e74\u8dcc\u5e45\u63a5\u8fd140%\u3002\u65f6\u4ee3\u7684\u4e00\u7c92\u7070\uff0c\u843d\u5728\u4e2a\u4eba\u5934\u4e0a\uff0c\u5c31\u662f\u4e00\u5ea7\u5c71\u3002\u6240\u5e78\u623f\u5b50\u8d2d\u4e70\u8f83\u65e9\uff0c\u57fa\u672c\u6ca1\u6709\u4e8f\u635f\u672c\u91d1\uff0c\u5229\u606f\u5c31\u4e0d\u63d0\u4e86\u3002<\/p>\n<p>\u6574\u4e2a\u5356\u623f\u8fc7\u7a0b\u5c31\u50cf\u4e00\u4e2a\u8d4c\u5f92\uff0c\u5145\u6ee1\u4e86\u4e0d\u7518\u5fc3\u548c\u65e0\u53ef\u5948\u4f55\u3002\u4e5f\u50cf\u6781\u4e86\u7092\u80a1\uff0c\u6700\u7ec8\u5272\u8089\u51fa\u5c40\u3002<\/p>\n<h2 id=\"\u4e70\u623f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/house\/#\u4e70\u623f\" class=\"anchor-link\" aria-label=\"\u4e70\u623f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/house\/#contents:\u4e70\u623f\" class=\"headings\">\u4e70\u623f<\/a><\/h2>\n<p>\u6240\u5e78\u6211\u4eec\u662f\u7f6e\u6362\uff0c\u6211\u4eec\u8d2d\u4e70\u7684\u5b66\u533a\u623f\u76f8\u5bf9\u9ad8\u70b9\u8dcc\u5e45\u4e5f\u9ad8\u8fbe30%\u591a\u3002<\/p>\n<p>\u6839\u636e\u5c0f\u5b66\u548c\u521d\u4e2d\u5bf9\u53e3\u4fe1\u606f\u5148\u5708\u9009\u4e86\u5c0f\u533a\uff0c\u6700\u7ec8\u53ea\u67092\u4e2a\u5c0f\u533a\u7b26\u5408\u8981\u6c42\u3002\u4e00\u4e2a\u5df2\u670920\u591a\u5e74\u5386\u53f2\u8fd8\u6ca1\u6709\u7535\u68af\uff0c\u53e6\u5916\u4e00\u4e2a\u4e5f\u5feb20\u5e74\u3002\u8003\u8651\u5230\u8d2d\u623f\u540e\u5c45\u4f4f\u7684\u65f6\u95f4\uff0c\u91cd\u70b9\u8003\u5bdf\u65b0\u4e00\u70b9\u7684\u5c0f\u533a\u3002\n23\u5e74\u628a\u8be5\u5c0f\u533a\u5728\u552e\u610f\u5411\u6237\u578b\u623f\u6e90\u5168\u90e8\u5b9e\u5730\u8003\u5bdf\u4e86\u4e00\u904d\uff0c\u7b49\u623f\u5b50\u5c3e\u6b3e\u5230\u624b\u540e\uff0c4\u6708\u5b8c\u6210\u4e86\u4e70\u623f\u6240\u6709\u6d41\u7a0b\u3002<\/p>\n<p>\u4e70\u623f\u8fc7\u7a0b\u4e2d\u975e\u5e38\u62c5\u5fc3\u540e\u7eed\u7ee7\u7eed\u4e0b\u8dcc\uff0c\u5df2\u505a\u597d\u540e\u671f\u623f\u5b50\u65e0\u6cd5\u51fa\u624b\u7684\u51c6\u5907\u3002\u5b66\u533a\u5bf9\u53e3\u771f\u662f\u628a\u4eba\u62ff\u634f\u7684\u6b7b\u6b7b\u7684\uff0c\u5b8c\u5168\u65e0\u6cd5\u6323\u8131\uff0c\u65e0\u53ef\u5948\u4f55\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E8%B4%AD%E6%88%BF\/","term":"\u8d2d\u623f","label":"\u8d2d\u623f"}}]},{"title":"\n\u4e0e\u5bb6\u4eba\u5171\u5ea6\u7f8e\u597d\u6e05\u660e\u5047\u671f","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/qingming\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/qingming\/","updated":"2024-04-07T15:00:14+08:00","published":"2024-04-07T15:00:14+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u6e05\u660e\u65f6\u8282\u96e8\u7eb7\u7eb7\uff0c\u8def\u4e0a\u884c\u4eba\u6b32\u65ad\u9b42\uff0c\u501f\u95ee\u9152\u5bb6\u4f55\u5904\u6709\uff0c\u7267\u7ae5\u9065\u6307\u674f\u82b1\u6751\u3002","content":"\n<p><strong>\u5c45\u5bb6\u4f11\u517b<\/strong><\/p>\n<p>\u6e05\u660e\u65f6\u8282\u96e8\u7eb7\u7eb7\uff0c\u6b66\u6c49\u7684\u5929\u6c14\u5b8c\u7f8e\u5370\u8bc1\u8fd9\u53e5\u8bd7\u3002\u5c0f\u670b\u53cb\u611f\u5192\u521a\u75ca\u6108\uff0c\u4e3a\u4e86\u8ba9\u5b69\u5b50\u5b89\u5fc3\u4f11\u517b\uff0c\u6211\u4eec\u9009\u62e9\u5728\u5bb6\u5ea6\u8fc7\u8fd9\u6bb5\u5047\u671f\u3002<\/p>\n<p><strong>\u200d \u65f6\u9694\u591a\u5e74\uff0c\u518d\u6b21\u4e0b\u53a8<\/strong><\/p>\n<p>\u591a\u5e74\u6ca1\u6709\u4e0b\u53a8\uff0c\u4e3a\u4e86\u4fdd\u969c\u4e2d\u5348\u6709\u996d\u5403\uff0c\u7b2c\u4e00\u5929\u505a\u51e0\u9053\u7b80\u5355\u7684\u83dc\uff1a\u4e1d\u74dc\u7092\u86cb\u3001\u571f\u8c46\u4e1d\u7092\u8089\u3001\u65f6\u852c\u3001\u5364\u732a\u8e44(\u4e70\u7684\u51b7\u8bb0)\uff0c\u5168\u90e8\u5403\u5b8c\uff0c\u83b7\u5f97\u4e86\u8001\u5a46\u5b69\u5b50\u7684\u8ba4\u53ef\u81ea\u4fe1\u5fc3\u81a8\u80c0\uff0c\u7b2c\u4e8c\u5929\u505a\u4e86\u4e00\u9053\u786c\u83dc\u5c31\u7ffb\u8f66\u4e86\u3002<\/p>\n<p><strong>\u73a9\u8f6e\u6ed1\uff0c\u6293\u5a03\u5a03<\/strong><\/p>\n<p>\u6574\u4e2a\u5047\u671f\u5e26\u5a03\u4e0a\u4e86\u8f6e\u6ed1\u3001\u82f1\u8bed\u548c\u8df3\u821e\u8bfe\uff0c\u4e0a\u8bfe\u7ed3\u675f\u540e\u73a9\u4e86\u6293\u5a03\u5a03\u548c\u6e38\u4e50\u573a\u3002\u6293\u5a03\u5a03\u5e97\u7684\u751f\u610f\u975e\u5e38\u706b\u7206\uff0c\u4e00\u4e2a\u673a\u5668\u6295\u516510\u523020\u4e2a\u5e01\u540e\uff0c\u673a\u5668\u7684\u722a\u5b50\u660e\u663e\u8981\u7d27\u5f88\u591a\u4e00\u5b9a\u80fd\u6293\u4e00\u4e2a\u5a03\u5a03\uff0c\u8fd9\u4e2a\u70b9\u5b50\u771f\u662f\u6293\u4f4f\u4eba\u6027\uff0c\u5c0f\u670b\u53cb\u6293\u5230\u5a03\u5a03\u540e\u975e\u5e38\u5174\u594b\uff0c\u5bb6\u957f\u4e5f\u613f\u610f\u82b1\u94b1\uff0c\u6700\u540e\u8fd8\u53ef\u4ee5\u51ed\u6293\u7684\u5a03\u5a03\u5151\u6362\u793c\u7269\u3002\u540c\u6837\u7684\u751f\u610f\uff0c\u6539\u53d8\u4e0b\u7ecf\u8425\u7b56\u7565\uff0c\u5c31\u4f1a\u6563\u53d1\u4e0d\u540c\u7684\u751f\u547d\u529b\u3002<\/p>\n<p><strong>\u5bfb\u627e\u6851\u53f6<\/strong><\/p>\n<p>\u653e\u5047\u524d\uff0c\u59bb\u5b50\u4ece\u516c\u53f8\u5e26\u56de\u4e86\u4e00\u4e9b\u8695\u5b9d\u5b9d\u3002\u4e3a\u4e86\u7ed9\u8695\u5b9d\u5b9d\u627e\u98df\u7269\uff0c\u4e00\u5927\u65e9\u5c31\u51fa\u53d1\u53bb\u4e86\u68ee\u6797\u516c\u56ed\u3002\u5728\u516c\u56ed\u91cc\u515c\u515c\u8f6c\u8f6c\uff0c\u8fd8\u771f\u627e\u5230\u4e86\u51e0\u68f5\u6851\u6811\u3002\u5b69\u5b50\u4eb2\u624b\u6458\u4e86\u6851\u53f6\uff0c\u540c\u65f6\u544a\u8bc9\u5979\u6851\u53f6\u65ad\u88c2\u65f6\u4f1a\u7206\u6d46\uff0c\u5c0f\u5b69\u5b50\u7684\u5b66\u4e60\u80fd\u529b\u786e\u5b9e\u5f88\u5f3a\uff0c\u9694\u5929\u5c31\u7528\u5230\u8fd9\u4e2a\u77e5\u8bc6\u3002\u6851\u845a\u8fd8\u662f\u9752\u7684\uff0c\u548c\u5c0f\u670b\u53cb\u7ea6\u5b9a\u7b49\u6851\u845a\u6210\u719f\u540e\uff0c\u518d\u6765\u4e00\u8d77\u6458\u6851\u845a\u3002<\/p>\n<p><strong>\u966a\u4f34\u503c\u73ed<\/strong><\/p>\n<p>\u7b2c\u4e09\u5929\uff0c\u8001\u5a46\u516c\u53f8\u5b89\u6392\u4e0b\u5348\u503c\u73ed\u3002\u4e0a\u5348\u6211\u4eec\u5148\u53bb\u4e86\u9f99\u9633\u6e56\u516c\u56ed\u3002\u516c\u56ed\u6709\u513f\u7ae5\u9493\u867e\u533a\uff0c\u4e24\u5927\u4e00\u5c0f49.9\uff0c\u8017\u65f61\u5c0f\u65f6\u53ea\u9493\u4e0a\u67656\u53ea\u867e\u3002\u9493\u5b8c\u867e\u540e\u5c31\u51fa\u53d1\u524d\u5f80\u8001\u5a46\u516c\u53f8\uff0c\u5a03\u5728\u8eba\u6905\u4e0a\u7761\u89c9\uff0c\u6211\u5e2e\u8001\u5a46\u6574\u7406\u7535\u8111\uff0c\u4e00\u5929\u975e\u5e38\u7684\u8f7b\u677e\u3002<\/p>\n<p><strong>\u200d\u200d\u200d \u6e38\u620f\u76f8\u4f34<\/strong><\/p>\n<p>\u665a\u4e0a\u57fa\u672c\u4e0a\u662f\u6e38\u620f\u65f6\u95f4\uff0c\u6211\u548c\u5c0f\u670b\u53cb\u4e00\u8d77\u73a9\u201c\u8000\u897f\u7684\u624b\u5de5\u4e16\u754c\u201d\uff0cswitch\u771f\u662f\u64cd\u4f5c\u7b80\u5355\uff0c\u73b0\u5728\u5c0f\u670b\u53cb\u5df2\u7ecf\u53ef\u4ee5\u719f\u7ec3\u64cd\u63a7\u8000\u897f\uff0c\u4f30\u8ba1\u4e0b\u5468\u5c31\u53ef\u4ee5\u901a\u5173\u8fd9\u4e2a\u6e38\u620f\uff0c\u53ef\u4ee5\u51c6\u5907\u5b89\u6392\u4e0b\u4e00\u4e2a\u6e38\u620f\u4e86\u3002<\/p>\n<p><strong>\u7ed3\u8bed<\/strong><\/p>\n<p>\u5e73\u65f6\u56e0\u5de5\u4f5c\u6ca1\u6709\u65f6\u95f4\u966a\u4f34\u8001\u5a46\u548c\u5b69\u5b50\uff0c\u77ed\u6682\u7684\u6e05\u660e\u5047\u671f\uff0c\u867d\u7136\u6ca1\u6709\u5916\u51fa\u65c5\u884c\uff0c\u53ea\u8981\u5168\u5bb6\u4eba\u5728\u4e00\u8d77\u505a\u4e00\u4e9b\u4e8b\u60c5\u5c31\u8db3\u4ee5\uff0c\u73cd\u60dc\u5f53\u4e0b\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E9%99%AA%E4%BC%B4\/","term":"\u966a\u4f34","label":"\u966a\u4f34"}}]},{"title":"\n\u300a\u90bb\u5bb6\u7684\u767e\u4e07\u5bcc\u7fc1\u300b\u8bfb\u540e\u611f","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/the_millionaire_next_door\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/the_millionaire_next_door\/","updated":"2024-04-02T14:30:02+08:00","published":"2024-04-02T14:30:02+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u201c\u8d22\u5bcc\u4e0d\u5728\u4e8e\u62e5\u6709\u5927\u91cf\u8d22\u4ea7\uff0c\u800c\u5728\u4e8e\u62e5\u6709\u5f88\u5c11\u7684\u6b32\u671b\u201d -- \u6bd4\u514b\u6cf0\u5fb7","content":"\n<p>\u300a\u90bb\u5bb6\u7684\u767e\u4e07\u5bcc\u7fc1\u300b\u662f\u4eca\u5e74\u9605\u8bfb\u8ba1\u5212\u7684\u7b2c\u4e00\u672c\u4e66\uff0c\u6574\u4f53\u9605\u8bfb70%\u3002\u4e66\u4e2d\u7684\u7edf\u8ba1\u6570\u636e\u548c\u6848\u4f8b\uff0c\u63ed\u5f00\u4e86\u5bcc\u4eba\u751f\u6d3b\u7684\u4e00\u89d2\uff0c\u6709\u4e24\u4e2a\u6848\u4f8b\u7ed9\u6211\u7559\u4e0b\u4e86\u6df1\u523b\u7684\u5370\u8c61\u3002<\/p>\n<ol>\n<li>\n<p>\u5bcc\u4eba\u5bf9\u6c7d\u8f66\u7684\u6001\u5ea6\uff0c\u98a0\u8986\u4e86\u6211\u4ee5\u5f80\u7684\u8ba4\u77e5\u3002\u4ed6\u4eec\u4e0d\u76f2\u76ee\u8ffd\u6c42\u65b0\u8f66\uff0c\u800c\u662f\u9009\u62e9\u66f4\u5177\u6027\u4ef7\u6bd4\u7684\u4e8c\u624b\u8f66\uff0c\u5927\u90e8\u5206\u5bcc\u4eba\u5728\u4e00\u8f86\u6c7d\u8f66\u4e0a\u7684\u5f00\u652f\u4e0d\u8d85\u8fc73\u4e07\u5143\uff0c\u5e76\u4f7f\u7528\u5341\u5e74\u4ee5\u4e0a\u3002\u5728\u4e00\u671f\u535a\u5ba2\u8282\u76ee\u4e2d\uff0c\u542c\u5f20\u4e91\u5e06\u8bf4\u4ed6\u6709\u4e2a\u539f\u5219\uff0c\u4e0d\u8d2d\u4e70\u8d85\u8fc7\u8d44\u4ea712%\u7684\u7269\u54c1\u3002\u56de\u60f3\u81ea\u5df1\u65e5\u5e38\u7684\u6d88\u8d39\u89c2\uff0c\u4e0d\u514d\u6c57\u989c\uff0c\u9053\u7406\u4e0d\u5728\u591a\u800c\u5728\u5e94\u7528\u3002\u5982\u4f55\u63a7\u5236\u6b32\u671b\u8c03\u6574\u6d88\u8d39\u89c2\uff0c\u8fd8\u9700\u4e0d\u65ad\u7684\u52aa\u529b\u3002<\/p>\n<\/li>\n<li>\n<p>\u5bcc\u4eba\u7684\u6536\u5165\u6765\u6e90\u591a\u5143\uff0c\u5de5\u8d44\u6536\u5165\u4ec5\u5360\u603b\u8d44\u4ea7\u76843%\u5de6\u53f3\uff0c\u800c\u5927\u90e8\u5206\u6536\u5165\u6765\u81ea\u4e8e\u6295\u8d44\u7406\u8d22\uff0c\u4e14\u7a0e\u6536\u652f\u51fa\u5360\u6bd4\u6781\u4f4e\u3002\u5bf9\u6bd4\u76ee\u524d\u5bb6\u5ead\u7684\u6536\u5165\u7ed3\u6784\u548c\u7a0e\u6536\u8d1f\u62c5\uff0c\u4e0e\u5bcc\u4eba\u5b58\u5728\u660e\u663e\u5dee\u8ddd\u3002\u5982\u4f55\u5b66\u4e60\u6295\u8d44\u77e5\u8bc6\uff0c\u901a\u8fc7\u6295\u8d44\u589e\u52a0\u6536\u5165\uff0c\u662f\u503c\u6df1\u601d\u7684\u95ee\u9898\u3002\u5b66\u6821\u6559\u80b2\u4fa7\u91cd\u4e8e\u751f\u5b58\u6280\u80fd\u7684\u4f20\u6388\uff0c\u5374\u5f80\u5f80\u5ffd\u7565\u4e86\u8d22\u5546\u6559\u80b2\uff0c\u5982\u4f55\u63d0\u9ad8\u4e0b\u4e00\u4ee3\u7684\u8d22\u5546\u77e5\u8bc6\uff0c\u907f\u514d\u60b2\u5267\u53d1\u751f\u5728\u4e0b\u4e00\u4ee3\uff0c\u4e5f\u662f\u4e00\u4e2a\u95ee\u9898\u3002<\/p>\n<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E8%B4%A2%E5%95%86\/","term":"\u8d22\u5546","label":"\u8d22\u5546"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0\/","term":"\u8bfb\u4e66\u7b14\u8bb0","label":"\u8bfb\u4e66\u7b14\u8bb0"}}]},{"title":"\n\u82f9\u679c\u624b\u673a\u79bb\u7ebf\u4e0b\u8f7d\u65b9\u6848","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/ios_download\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/ios_download\/","updated":"2024-03-15T17:30:27+08:00","published":"2024-03-15T17:30:27+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u672c\u6587\u7ae0\u63d0\u4f9b\u4e86\u4e00\u4e2a\u5728\u82f9\u679c\u624b\u673a\u4e0a\u5b9e\u73b0\u79bb\u7ebf\u4e0b\u8f7d\u548c\u5b9e\u65f6\u89c2\u770b\u7535\u5f71\u7684\u65b9\u6848","content":"\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u5e73\u65f6\u624b\u673a\u4e0d\u65b9\u4fbf\u5728\u7ebf\u89c2\u770b\u7535\u5f71\uff0c\u6700\u8fd1\u770b\u5230\u4e00\u4e2a\u65b9\u6848\u53ef\u4ee5\u89e3\u51b3\u6211\u7684\u95ee\u9898\uff0c\u624b\u52a8\u90e8\u7f72\u4e0b\u3002<\/p>\n<p>\u6574\u4f53\u65b9\u6848\uff1a<\/p>\n<ol>\n<li>\u5feb\u6377\u6307\u4ee4\u53d1\u9001RPC\u8bf7\u6c42\u5230aria2\u670d\u52a1\u5668\u5b9e\u73b0\u79bb\u7ebf\u4e0b\u8f7d<\/li>\n<li>filebrowser\u5b9e\u73b0\u4e0b\u8f7d\u6587\u4ef6\u7ba1\u7406\uff0c\u901a\u8fc7filebrowser\u5206\u4eab\u529f\u80fd\u83b7\u53d6\u5206\u4eab\u94fe\u63a5<\/li>\n<li>\u624b\u673a\u4e0a\u4f7f\u7528VLC\u901a\u8fc7\u5206\u4eab\u94fe\u63a5\u89c2\u770b\u89c6\u9891<\/li>\n<\/ol>\n<h2 id=\"\u51c6\u5907\u5de5\u4f5c\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#\u51c6\u5907\u5de5\u4f5c\" class=\"anchor-link\" aria-label=\"\u51c6\u5907\u5de5\u4f5c\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#contents:\u51c6\u5907\u5de5\u4f5c\" class=\"headings\">\u51c6\u5907\u5de5\u4f5c<\/a><\/h2>\n<ol>\n<li>1\u53f0\u670d\u52a1\u5668\uff0c\u7cfb\u7edf\u7528\u7684ubuntu 22.04<\/li>\n<li>1\u4e2a\u57df\u540d,\u914d\u7f6e\u597ddns\n<ol>\n<li><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/ios_download\/dns.png\" alt=\"dns\"><\/li>\n<li>\u6211\u4f7f\u7528cloudflare\u7ba1\u7406\u57df\u540d\uff0c\u914d\u7f6e\u597ddns\u540e\u5728SSL\/TLS\u9009\u62e9\u4e2d\u9009\u62e9Full\u6a21\u5f0f<\/li>\n<\/ol>\n<\/li>\n<li>\u5b89\u88c5docker\u548cdocker-compose\n<ol>\n<li>sudo apt-get update<\/li>\n<li>sudo apt install docker.io docker-compose<\/li>\n<\/ol>\n<\/li>\n<li>\u5b89\u88c5caddy2\n<ol>\n<li>sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https<\/li>\n<li>curl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/gpg.key' | sudo gpg --dearmor -o \/usr\/share\/keyrings\/caddy-stable-archive-keyring.gpg<\/li>\n<li>curl -1sLf 'https:\/\/dl.cloudsmith.io\/public\/caddy\/stable\/debian.deb.txt' | sudo tee \/etc\/apt\/sources.list.d\/caddy-stable.list<\/li>\n<li>sudo apt update<\/li>\n<li>sudo apt install caddy<\/li>\n<li>sudo systemctl enable --now caddy<\/li>\n<li><a href=\"https:\/\/caddy2.dengxiaolong.com\/docs\/install\" target=\"_blank\" rel=\"noopener\">caddy2\u5b98\u65b9\u5b89\u88c5\u6587\u6863<\/a><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2 id=\"\u5b89\u88c5filebrowser\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#\u5b89\u88c5filebrowser\" class=\"anchor-link\" aria-label=\"\u5b89\u88c5filebrowser\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#contents:\u5b89\u88c5filebrowser\" class=\"headings\">\u5b89\u88c5filebrowser<\/a><\/h2>\n<ul>\n<li>\u57fa\u4e8e\u5f00\u6e90\u9879\u76ee<a href=\"https:\/\/github.com\/hurlenko\/filebrowser-docker\" target=\"_blank\" rel=\"noopener\">filebrowser-docker<\/a>\u91c7\u7528docker-compose.yml\u5b89\u88c5\uff0c\u914d\u7f6e\u5982\u4e0b\uff1a<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">version: &#34;3&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> filebrowser:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image: hurlenko\/filebrowser\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - 8080:8080\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - .\/data:\/data\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - .\/config:\/config\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> environment:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - FB_BASEURL=\/filebrowser\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> restart: always\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u5728docker-compose.yml \u540c\u7ea7\u76ee\u5f55\u521b\u5efadata\uff0cconfig \u76ee\u5f55<\/li>\n<li>docker-compose up -d\u8fd0\u884c<\/li>\n<li>\u914d\u7f6e\u57df\u540d\uff0c\u7f16\u8f91\/etc\/caddy\/Caddyfile\u6587\u4ef6\uff0c\u6dfb\u52a0\u5982\u4e0b\u5185\u5bb9\u540e\uff0csystemctl restart caddy\u91cd\u542fcaddy<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">file.\u4f60\u7684\u57df\u540d {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:8080\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u5728\u7f51\u9875\u4e2d\u8bbf\u95eefile.\u4f60\u7684\u57df\u540d \u5373\u53ef\u8bbf\u95ee\uff0c\u767b\u5f55\u5bc6\u7801\u4e3aadmin\/admin \u81ea\u884c\u4fee\u6539\u5bc6\u7801<\/li>\n<\/ul>\n<p>\u5230\u6b64filebrower\u5b89\u88c5\u5b8c\u6210\uff0c\u63a5\u4e0b\u6765\u5b89\u88c5aria2\u548cariang<\/p>\n<h2 id=\"\u5b89\u88c5aria2\u548cariang\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#\u5b89\u88c5aria2\u548cariang\" class=\"anchor-link\" aria-label=\"\u5b89\u88c5aria2\u548cariang\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#contents:\u5b89\u88c5aria2\u548cariang\" class=\"headings\">\u5b89\u88c5aria2\u548cariang<\/a><\/h2>\n<ul>\n<li>\u57fa\u4e8e\u5f00\u6e90\u65b9\u6848<a href=\"https:\/\/github.com\/P3TERX\/Aria2-Pro-Docker\" target=\"_blank\" rel=\"noopener\">Aria2-Pro-Docker<\/a>\u91c7\u7528docker-compose.yml\u5b89\u88c5, \u914d\u7f6e\u6587\u4ef6\u5982\u4e0b<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">version: &#34;3.8&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">services:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Aria2-Pro:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> container_name: aria2-pro\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image: p3terx\/aria2-pro\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> environment:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - PUID=65534\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - PGID=65534\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - UMASK_SET=022\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - RPC_PORT=6800\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - LISTEN_PORT=6888\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - DISK_CACHE=64M\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - IPV6_MODE=false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - UPDATE_TRACKERS=true\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - CUSTOM_TRACKER_URL=\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - TZ=Asia\/Shanghai\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - RPC_SECRET=\u8bbe\u7f6e\u4f60\u7684KEY\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> volumes:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - .\/aria2-config:\/config\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - \/home\/ubuntu\/filebrowser\/data:\/data\/downloads ## \u6b64\u5904\/home\/ubuntu\/filebrowser\/data\u4fee\u6539\u4e3a\u4f60\u7684filebrower\u7ed1\u5b9a\u7684data\u8def\u5f84\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># If you use host network mode, then no port mapping is required.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># This is the easiest way to use IPv6 networks.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># network_mode: host\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> network_mode: bridge\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - 6800:6800\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - 6888:6888\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - 6888:6888\/udp\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> restart: unless-stopped\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># Since Aria2 will continue to generate logs, limit the log size to 1M to prevent your hard disk from running out of space.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> logging:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> driver: json-file\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> options:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> max-size: 1m\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># AriaNg is just a static web page, usually you only need to deploy on a single host.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> AriaNg:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> container_name: ariang\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image: p3terx\/ariang\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> command: --port 6880 --ipv6\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># network_mode: host\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> network_mode: bridge\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> ports:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> - 6880:6880\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> restart: unless-stopped\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> logging:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> driver: json-file\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> options:\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> max-size: 1m\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>docker-compose up -d\u8fd0\u884c<\/li>\n<li>\u914d\u7f6e\u57df\u540d\uff0c\u7f16\u8f91\/etc\/caddy\/Caddyfile\u6587\u4ef6\uff0c\u6dfb\u52a0\u5982\u4e0b\u5185\u5bb9\u540e\uff0csystemctl restart caddy\u91cd\u542fcaddy<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">aria2.\u4f60\u7684\u57df\u540d {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:6880\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">rpc.\u4f60\u7684\u57df\u540d {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:6800\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ul>\n<li>\u901a\u8fc7aria2.\u4f60\u7684\u57df\u540d\u5373\u53ef\u5728\u7f51\u9875\u4e2d\u8bbf\u95eeariang<\/li>\n<li>\u5728AiraNg\u8bbe\u7f6e-RPC\u4e2d\u4fee\u6539\u914d\u7f6e\n<ol>\n<li>Aria2 RPC\u5730\u5740\u4fee\u6539\u4e3a\uff1arpc.\u4f60\u7684\u57df\u540d\uff0c\u7aef\u53e3\u6539\u6210443<\/li>\n<li>Aria2 RPC \u5bc6\u94a5\u4fee\u6539\u4e3a\uff1adocker-compose.yml\u4e2dRPC_SECRET\u914d\u7f6e\u7684\u503c<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>\u5230\u6b64aria2\u548cariang \u5b89\u88c5\u5b8c\u6210\u3002<\/p>\n<h2 id=\"\u914d\u7f6e\u5feb\u6377\u6307\u4ee4\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#\u914d\u7f6e\u5feb\u6377\u6307\u4ee4\" class=\"anchor-link\" aria-label=\"\u914d\u7f6e\u5feb\u6377\u6307\u4ee4\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/ios_download\/#contents:\u914d\u7f6e\u5feb\u6377\u6307\u4ee4\" class=\"headings\">\u914d\u7f6e\u5feb\u6377\u6307\u4ee4<\/a><\/h2>\n<ul>\n<li>\u624b\u673a\u7f51\u9875\u6253\u5f00<a href=\"https:\/\/www.icloud.com\/shortcuts\/7483b8cec7484c0f98b72882d0f1e3e2\" target=\"_blank\" rel=\"noopener\">RPC \u8bf7\u6c42\u5feb\u6377\u6307\u4ee4<\/a>\u5b89\u88c5\u6307\u4ee4<\/li>\n<li>\u914d\u7f6eRPC\u8bf7\u6c42\u57df\u540d\u548c\u5bc6\u94a5<\/li>\n<\/ul>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4\/","term":"\u5feb\u6377\u6307\u4ee4","label":"\u5feb\u6377\u6307\u4ee4"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/aria2\/","term":"aria2","label":"aria2"}}]},{"title":"\n\u82b12\u6bdb\u94b1\u7ed9\u5fae\u4fe1\u516c\u4f17\u53f7\u63a5\u5165\u963f\u91cc\u4e91\u901a\u4e49\u5343\u95ee\u5927\u6a21\u578b","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/","updated":"2024-03-04T11:28:02+08:00","published":"2024-03-01T19:28:02+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u8be5\u6587\u6307\u5bfc\u5982\u4f55\u642d\u5efa\u4e00\u4e2a\u5fae\u4fe1\u516c\u4f17\u53f7\u673a\u5668\u4eba\u4f7f\u7528\u963f\u91cc\u4e91\u901a\u4e49\u5343\u95ee\u6a21\u578b\uff0c\u6b65\u9aa4\u5305\u62ec\u6ce8\u518c\u548c\u914d\u7f6e\u57df\u540d\u3001vercel\u90e8\u7f72\u4ee3\u7801\u3001\u8bbe\u7f6e\u516c\u4f17\u53f7\u670d\u52a1\u5668\u914d\u7f6e\uff0c\u5e76\u63d0\u4f9b\u4e86\u76f8\u5173\u6b65\u9aa4\u548c\u6240\u9700\u8d44\u6e90\u3002","content":"\n<p>\u652f\u6301\u63a5\u5165\u901a\u4e49\u5343\u95ee\u548c\u661f\u706b\u8ba4\u77e5\u5927\u6a21\u578b\uff0c\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u901a\u4e49\u5343\u95ee\u7684\u63a5\u5165\u65b9\u6848\u3002\u661f\u706b\u8ba4\u77e5\u5927\u6a21\u578b\u63a5\u5165\u65b9\u6848\u7c7b\u4f3c\uff0c<a href=\"https:\/\/github.com\/LuhangRui\/spark-wechat-vercel\" target=\"_blank\" rel=\"noopener\">\u661f\u706b\u63a5\u5165\u6587\u6863<\/a><\/p>\n<h2 id=\"\u524d\u671f\u51c6\u5907\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u524d\u671f\u51c6\u5907\" class=\"anchor-link\" aria-label=\"\u524d\u671f\u51c6\u5907\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u524d\u671f\u51c6\u5907\" class=\"headings\">\u524d\u671f\u51c6\u5907<\/a><\/h2>\n<ul>\n<li>github\u8d26\u53f7<\/li>\n<li>vercel\u8d26\u53f7<\/li>\n<li>\u5fae\u4fe1\u516c\u4f17\u53f7<\/li>\n<li>nic.ua\u8d26\u53f7<\/li>\n<li>\u963f\u91cc\u4e91\u8d26\u53f7<\/li>\n<li>Telegram\u8d26\u53f7<\/li>\n<li>cloudflare\u8d26\u53f7<\/li>\n<li>\u4e00\u4e2a\u5916\u5e01\u5361<\/li>\n<\/ul>\n<h2 id=\"\u64cd\u4f5c\u6d41\u7a0b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u64cd\u4f5c\u6d41\u7a0b\" class=\"anchor-link\" aria-label=\"\u64cd\u4f5c\u6d41\u7a0b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u64cd\u4f5c\u6d41\u7a0b\" class=\"headings\">\u64cd\u4f5c\u6d41\u7a0b<\/a><\/h2>\n<h3 id=\"\u6ce8\u518c\u57df\u540d\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u6ce8\u518c\u57df\u540d\" class=\"anchor-link\" aria-label=\"\u6ce8\u518c\u57df\u540d\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u6ce8\u518c\u57df\u540d\" class=\"headings\">\u6ce8\u518c\u57df\u540d<\/a><\/h3>\n<ol>\n<li>\u6ce8\u518cnic.ua\u8d26\u53f7\uff0c\u7533\u8bf7\u514d\u8d39\u57df\u540d\uff0c\u6ce8\u518c\u9700\u8981\u7ed1\u5b9a\u4fe1\u7528\u5361\uff0c\u9a8c\u8bc1\u6263\u8d391\u4e4c\u514b\u5170\u683c\u91cc\u592b\u7eb3\u7ea60.19\u4eba\u6c11\u5e01\n<ul>\n<li>\u7533\u8bf7\u7684\u514d\u8d39\u57df\u540d\u9700\u8981\u6fc0\u6d3b\uff0c\u63a8\u8350\u4f7f\u7528Telegram\u8fdb\u884c\u6fc0\u6d3b\uff0c\u6ce8\u610fTelegram\u6ce8\u518c\u7684\u8d26\u53f7\u4e0enic.ua\u6ce8\u518c\u7684\u624b\u673a\u53f7\u4e00\u81f4<\/li>\n<li>\u5728cloudflare\u4e2d\u6dfb\u52a0\u65b0\u7533\u8bf7\u7684\u57df\u540d\uff0c\u5728nic.ua\u4e2d\u4fee\u6539NS\u670d\u52a1\u5668\u5230cloudflare<\/li>\n<li>\u53c2\u8003\uff1a<a href=\"https:\/\/zhuanlan.zhihu.com\/p\/630011467\" target=\"_blank\" rel=\"noopener\">\u6c38\u4e45\u514d\u8d39\u57df\u540dPP.UA\u6700\u65b0\u6ce8\u518c\u6307\u5357<\/a><\/li>\n<\/ul>\n<\/li>\n<li>\u5acc\u9ebb\u70e6\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728\u963f\u91cc\u4e91\/Godaddy\u7b49\u7f51\u7ad9\u4e70\u4e2a\u6700\u4fbf\u5b9c\u7684\u57df\u540d<\/li>\n<\/ol>\n<h3 id=\"\u5f00\u901a\u901a\u4e49\u5343\u95ee\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u5f00\u901a\u901a\u4e49\u5343\u95ee\" class=\"anchor-link\" aria-label=\"\u5f00\u901a\u901a\u4e49\u5343\u95ee\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u5f00\u901a\u901a\u4e49\u5343\u95ee\" class=\"headings\">\u5f00\u901a\u901a\u4e49\u5343\u95ee<\/a><\/h3>\n<ol>\n<li>\u6ce8\u518c\u963f\u91cc\u4e91\u8d26\u53f7\uff0c\u5f00\u901a<a href=\"https:\/\/dashscope.console.aliyun.com\/overview\" target=\"_blank\" rel=\"noopener\">\u6a21\u578b\u670d\u52a1\u7075\u79ef<\/a>\u670d\u52a1<\/li>\n<li>\u670d\u52a1\u5f00\u901a\u6210\u529f\u540e\uff0c\u5728\u5de6\u4fa7\u83dc\u5355\u627e\u5230\u7ba1\u7406\u4e2d\u5fc3-&gt;API-KEY\u7ba1\u7406\uff0c\u521b\u5efaapiKey\u5907\u7528<\/li>\n<\/ol>\n<h3 id=\"vercel\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#vercel\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"vercel\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:vercel\u90e8\u7f72\" class=\"headings\">vercel\u90e8\u7f72<\/a><\/h3>\n<ol>\n<li>\u6ce8\u518cgithub\u8d26\u53f7\u540e\uff0cfork<a href=\"https:\/\/github.com\/xiaoshame\/qw-wechat-vercel\" target=\"_blank\" rel=\"noopener\">qw-wechat-vercel<\/a>\u9879\u76ee\u5230\u81ea\u5df1\u4ed3\u5e93,\u611f\u8c22<a href=\"https:\/\/github.com\/LuhangRui\/qw-wechat-vercel\" target=\"_blank\" rel=\"noopener\">LuhangRui qw-wechat-vercel\u9879\u76ee<\/a><\/li>\n<li>\u6ce8\u518cvercel\u8d26\u53f7\u540e\uff0c\u521b\u5efa\u9879\u76ee\uff0c\u9009\u62e9Import Git Repository\u4ecegithub\u4ed3\u5e93\u5bfc\u5165\u3002\u5728Environment Variables\u9009\u9879\u5361\uff0c\u589e\u52a0\u73af\u5883\u53d8\u91cf\u628a\u4e0b\u9762\u7684\u53d8\u91cf\u4e00\u9879\u4e00\u9879\u7684\u52a0\u8fdb\u53bb<\/li>\n<\/ol>\n<div class=\"table-container\"><table>\n<thead>\n<tr>\n<th style=\"text-align: center\">\u5e8f\u5217<\/th>\n<th style=\"text-align: left\">\u53d8\u91cf<\/th>\n<th style=\"text-align: left\">\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center\">1<\/td>\n<td style=\"text-align: left\">API_KEY=sk-xxxx<\/td>\n<td style=\"text-align: left\">\u963f\u91cc\u4e91\u4e2d\u521b\u5efa\u7684apikey<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">2<\/td>\n<td style=\"text-align: left\">KEYWORD_REPLAY={&quot;\u5343\u95ee&quot;:&quot;\u5927\u6a21\u578b\u56de\u7b54&quot;}<\/td>\n<td style=\"text-align: left\">\u81ea\u5b9a\u4e49\u5173\u952e\u8bcd\uff0c\u54a8\u8be2\u95ee\u9898\u5305\u542b\u5343\u95ee \u624d\u7531\u5927\u6a21\u578b\u56de\u7b54<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">3<\/td>\n<td style=\"text-align: left\">API_MODEL=qwen-72b-chat<\/td>\n<td style=\"text-align: left\">\u5927\u6a21\u578b\u7c7b\u578b<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">4<\/td>\n<td style=\"text-align: left\">WX_TOKEN=53acb98d1dac49969b45797129f504f8<\/td>\n<td style=\"text-align: left\">32\u4f4d\u5b57\u7b26\uff0c\u540e\u7eed\u516c\u4f17\u53f7\u670d\u52a1\u5668\u914d\u7f6e\u4f1a\u7528\u5230<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\">5<\/td>\n<td style=\"text-align: left\">SUBSCRIBE_REPLY=\u6b22\u8fce\u5173\u6ce8\uff0c\u6211\u5df2\u7ecf\u63a5\u5165\u4e86\u963f\u91cc\u5343\u95ee\u667a\u80fdAI\uff0c\u54a8\u8be2\u6211\u95ee\u9898\u8bf7\u4ee5\u5343\u95ee\u5f00\u5934\uff0c\u4f8b\u5982\uff1a\u5343\u95ee\uff0c\u4f60\u597d<\/td>\n<td style=\"text-align: left\">\u5173\u6ce8\u81ea\u52a8\u56de\u590d<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 id=\"\u7ed1\u5b9a\u57df\u540d\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u7ed1\u5b9a\u57df\u540d\" class=\"anchor-link\" aria-label=\"\u7ed1\u5b9a\u57df\u540d\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u7ed1\u5b9a\u57df\u540d\" class=\"headings\">\u7ed1\u5b9a\u57df\u540d<\/a><\/h3>\n<ol>\n<li>\u5728cloudflare\u4e2d\u5bf9\u5e94\u57df\u540d\u4e0b\u6dfb\u52a0DNS\u89e3\u6790\uff0c\u6dfb\u52a0A\u8bb0\u5f55\u5c06\u57df\u540d\u6307\u541176.223.126.88\u3002\n<ul>\n<li><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/gzh_chat\/1.png\" alt=\"Add A\"><\/li>\n<\/ul>\n<\/li>\n<li>\u5f85vercel\u90e8\u7f72\u5b8c\u6210\u540e\uff0c\u70b9\u51fbADD Domain\uff0c\u628a\u4f60\u7684\u57df\u540d\u586b\u4e0a\u53bb\u5c31\u597d\u4e86\uff0c\u4f1a\u81ea\u52a8\u52a0https\u3002\u63d0\u793a\u6dfb\u52a0\u89e3\u6790\u65f6\u9009\u62e9\u53ea\u6dfb\u52a0\u57df\u540d\n<ul>\n<li>\u53c2\u8003\uff1a<a href=\"https:\/\/blog.tangly1024.com\/article\/vercel-domain\" target=\"_blank\" rel=\"noopener\">Vercel\u5e94\u7528\u7ed1\u5b9a\u81ea\u5df1\u7684\u57df\u540d<\/a><\/li>\n<\/ul>\n<\/li>\n<li>\u8bbf\u95eehttps:\/\/\u4f60\u7684\u57df\u540d\/api\/spark-wechat \u9875\u9762\u8f93\u51fafailed\uff0c\u5373\u4e3a\u90e8\u7f72\u6210\u529f\n<ul>\n<li>\u8bbf\u95eehttps:\/\/\u4f60\u7684\u57df\u540d \u9875\u9762404\uff0c\u662f\u56e0\u4e3a\u9879\u76ee\u91cc\u6ca1\u6709\u90e8\u7f72\u9875\u9762\uff0c\u6240\u4ee5\u8bbf\u95ee\u4f1a404<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"\u914d\u7f6e\u516c\u4f17\u53f7\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u914d\u7f6e\u516c\u4f17\u53f7\" class=\"anchor-link\" aria-label=\"\u914d\u7f6e\u516c\u4f17\u53f7\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u914d\u7f6e\u516c\u4f17\u53f7\" class=\"headings\">\u914d\u7f6e\u516c\u4f17\u53f7<\/a><\/h3>\n<ol>\n<li>\u6ce8\u518c\u516c\u4f17\u53f7\uff0c\u4e2a\u4eba\u8ba2\u9605\u53f7\u5c31\u884c<\/li>\n<li>\u540e\u53f0\u7ba1\u7406\u9875\u9762\u4e0a\u627e\u5230\u8bbe\u7f6e\u4e0e\u5f00\u53d1-\u57fa\u672c\u914d\u7f6e-\u670d\u52a1\u5668\u914d\u7f6e\uff0c\u70b9\u4fee\u6539<\/li>\n<li>\u670d\u52a1\u5668\u5730\u5740url\uff1ahttps:\/\/\u4f60\u7684\u57df\u540d\/api\/spark-wechat<\/li>\n<li>TOKEN\u4e3a\u7b2c4\u6b65\u4e2d\u4f7f\u7528\u7684WX_TOKEN\uff0c<\/li>\n<li>EncodingAESKey\u968f\u673a\u751f\u6210(\u4e0d\u7528\u8fd9\u4e00\u9879)<\/li>\n<li>\u9009\u660e\u6587\u6a21\u5f0f\u5c31\u597d\u4e86\uff0c\u63d0\u4ea4\u4f1a\u63d0\u793atoken\u9a8c\u8bc1\u6210\u529f\uff0c\u7136\u540e\u70b9\u542f\u7528\u670d\u52a1\u5668\u914d\u7f6e\u3002<\/li>\n<\/ol>\n<h3 id=\"\u516c\u4f17\u53f7\u6d4b\u8bd5\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#\u516c\u4f17\u53f7\u6d4b\u8bd5\" class=\"anchor-link\" aria-label=\"\u516c\u4f17\u53f7\u6d4b\u8bd5\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_chat\/#contents:\u516c\u4f17\u53f7\u6d4b\u8bd5\" class=\"headings\">\u516c\u4f17\u53f7\u6d4b\u8bd5<\/a><\/h3>\n<p><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/gzh_chat\/2.png\" alt=\"hello\"><\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%A4%A7%E6%A8%A1%E5%9E%8B\/","term":"\u5927\u6a21\u578b","label":"\u5927\u6a21\u578b"}}]},{"title":"\nApp Defaults","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/","updated":"2024-02-02T11:10:50+08:00","published":"2024-02-02T11:10:50+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u5e38\u7528\u8f6f\u4ef6list","content":"\n<div class=\"notice notice-tip\" >\n<div class=\"notice-title\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"icon notice-icon\" viewBox=\"0 0 512 512\"><path d=\"M504 256a248 248 0 11-496 0 248 248 0 01496 0zM227 387l184-184c7-6 7-16 0-22l-22-23c-7-6-17-6-23 0L216 308l-70-70c-6-6-16-6-23 0l-22 23c-7 6-7 16 0 22l104 104c6 7 16 7 22 0z\" \/><\/svg><\/div><p>\u6587\u7ae0\u66f4\u65b0\u540e\u65e0\u6cd5\u540c\u6b65\u5230\u516c\u4f17\u53f7\uff0c\u5982\u679c\u60a8\u662f\u5728\u516c\u4f17\u53f7\u9605\u8bfb\u7684\u672c\u6587\uff0c\u53ef\u4ee5\u70b9\u51fb\u9605\u8bfb\u539f\u6587\u67e5\u770b\u66f4\u65b0\u540e\u7684\u5185\u5bb9\u3002<\/p><\/div>\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u6628\u5929\u770b\u5230<a href=\"https:\/\/www.yunyitang.me\/app-defaults\/\" target=\"_blank\" rel=\"noopener\">YUNYI BLOG<\/a>\uff0c\u4e00\u76f4\u4e5f\u60f3\u603b\u7ed3\u4e0b\u81ea\u5df1\u65e5\u5e38\u751f\u6d3b\u548c\u5de5\u4f5c\u4f7f\u7528\u7684\u8f6f\u4ef6\uff0c\u5408\u9002\u7684\u8f6f\u4ef6\u80fd\u5e2e\u52a9\u6211\u4eec\u63d0\u9ad8\u6548\u7387\uff0c\u8d77\u5230\u4e8b\u534a\u529f\u500d\u7684\u6548\u679c\u3002\u4e0b\u9762\u662f\u6211\u5e38\u7528\u7684\u4e00\u4e9b\u8f6f\u4ef6\uff0c\u63a8\u8350\u7ed9\u5927\u5bb6\u3002<\/p>\n<h2 id=\"\u7535\u8111\u8f6f\u4ef6windwos\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#\u7535\u8111\u8f6f\u4ef6windwos\" class=\"anchor-link\" aria-label=\"\u7535\u8111\u8f6f\u4ef6windwos\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#contents:\u7535\u8111\u8f6f\u4ef6windwos\" class=\"headings\">\u7535\u8111\u8f6f\u4ef6\uff08Windwos\uff09<\/a><\/h2>\n<div class=\"table-container\"><table>\n<thead>\n<tr>\n<th>\u5e8f\u53f7<\/th>\n<th>\u540d\u79f0<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Edge<\/td>\n<td>\u6d4f\u89c8\u5668<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Google Chrome<\/td>\n<td>\u6d4f\u89c8\u5668<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Microsoft Office<\/td>\n<td>Word, Excel, PowerPoint, Outlook<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>Hugo<\/td>\n<td>\u535a\u5ba2\u9759\u6001\u7ad9\u70b9\u751f\u6210\u5668<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>7zip<\/td>\n<td>\u89e3\u538b\u7f29\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>Totalcmd<\/td>\n<td>\u6587\u4ef6\u7ba1\u7406\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>OneNote<\/td>\n<td>\u5728\u7ebf\u7b14\u8bb0<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>Microsoft To Do<\/td>\n<td>to do<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td>\u6587\u4ef6\u8708\u86a3<\/td>\n<td>\u78c1\u94fe\/BT\u4e0b\u8f7d\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>Internet Download Manager<\/td>\n<td>\u65e5\u5e38\u4e0b\u8f7d\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>11<\/td>\n<td>v2aryN<\/td>\n<td>\u4e0a\u7f51\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td>Xshell7<\/td>\n<td>SSH<\/td>\n<\/tr>\n<tr>\n<td>13<\/td>\n<td>VLC<\/td>\n<td>\u89c6\u9891\u64ad\u653e<\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>\u6d1b\u96ea\u97f3\u4e50\u52a9\u624b<\/td>\n<td>\u542c\u6b4c\u8f6f\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>15<\/td>\n<td>Beyond Compare 4<\/td>\n<td>\u6587\u672c\u5dee\u5f02\u5bf9\u6bd4<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<td>Everything<\/td>\n<td>\u672c\u5730\u6587\u4ef6\u641c\u7d22<\/td>\n<\/tr>\n<tr>\n<td>17<\/td>\n<td>pot<\/td>\n<td>\u7ffb\u8bd1+\u5212\u8bcd\u7ffb\u8bd1<\/td>\n<\/tr>\n<tr>\n<td>18<\/td>\n<td>PixPin<\/td>\n<td>\u622a\u56fe+OCR<\/td>\n<\/tr>\n<tr>\n<td>19<\/td>\n<td>vscode<\/td>\n<td>\u4ee3\u7801\u7f16\u5199<\/td>\n<\/tr>\n<tr>\n<td>20<\/td>\n<td>SpaceSniffer<\/td>\n<td>\u78c1\u76d8\u6587\u4ef6\u5927\u5c0f\u7edf\u8ba1<\/td>\n<\/tr>\n<tr>\n<td>21<\/td>\n<td>PowerShell<\/td>\n<td>\u547d\u4ee4\u884c<\/td>\n<\/tr>\n<tr>\n<td>22<\/td>\n<td>yt-dlp<\/td>\n<td>youtube\/B\u7ad9\u89c6\u9891\u4e0b\u8f7d<\/td>\n<\/tr>\n<tr>\n<td>23<\/td>\n<td>GPT4<\/td>\n<td>\u7f16\u7801\u52a9\u624b<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h2 id=\"\u624b\u673a\u8f6f\u4ef6iphone\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#\u624b\u673a\u8f6f\u4ef6iphone\" class=\"anchor-link\" aria-label=\"\u624b\u673a\u8f6f\u4ef6iphone\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/app_defaults\/#contents:\u624b\u673a\u8f6f\u4ef6iphone\" class=\"headings\">\u624b\u673a\u8f6f\u4ef6\uff08iPhone\uff09<\/a><\/h2>\n<div class=\"table-container\"><table>\n<thead>\n<tr>\n<th>\u5e8f\u53f7<\/th>\n<th>\u540d\u79f0<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Edge<\/td>\n<td>\u6d4f\u89c8\u5668<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>\u9ad8\u5fb7\u5730\u56fe<\/td>\n<td>\u5730\u56fe<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>\u56fe\u4e66<\/td>\n<td>\u770b\u4e66<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u9999\u8272\u95fa\u9601<\/td>\n<td>\u770b\u5c0f\u8bf4<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>\u4eac\u4e1c<\/td>\n<td>\u8d2d\u7269<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>\u5fae\u4fe1<\/td>\n<td>\u804a\u5929<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>\u652f\u4ed8\u5b9d<\/td>\n<td>\u4e70\u57fa\u91d1<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>\u62db\u5546\u94f6\u884c<\/td>\n<td>\u94f6\u884c<\/td>\n<\/tr>\n<tr>\n<td>9<\/td>\n<td>\u56fd\u5bb6\u533b\u4fdd\u670d\u52a1\u5e73\u53f0<\/td>\n<td>\u533b\u4fdd<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>\u5feb\u6377\u6307\u4ee4<\/td>\n<td>\u81ea\u52a8\u5316<\/td>\n<\/tr>\n<tr>\n<td>11<\/td>\n<td>\u6587\u4ef6<\/td>\n<td>\u6587\u4ef6\u7ba1\u7406<\/td>\n<\/tr>\n<tr>\n<td>12<\/td>\n<td>\u7ffb\u8bd1<\/td>\n<td>\u672c\u5730\u7ffb\u8bd1<\/td>\n<\/tr>\n<tr>\n<td>13<\/td>\n<td>\u64ad\u5ba2<\/td>\n<td>\u542c\u64ad\u5ba2<\/td>\n<\/tr>\n<tr>\n<td>14<\/td>\n<td>Feedly<\/td>\n<td>RSS \u9605\u8bfb\u5668<\/td>\n<\/tr>\n<tr>\n<td>15<\/td>\n<td>Shadowrocket<\/td>\n<td>\u4e0a\u7f51\u5de5\u5177<\/td>\n<\/tr>\n<tr>\n<td>16<\/td>\n<td>Microsoft To Do<\/td>\n<td>\u5f85\u529e\u4e8b\u9879<\/td>\n<\/tr>\n<tr>\n<td>17<\/td>\n<td>youtube<\/td>\n<td>\u770b\u89c6\u9891<\/td>\n<\/tr>\n<tr>\n<td>18<\/td>\n<td>Gmail<\/td>\n<td>\u90ae\u7bb1<\/td>\n<\/tr>\n<tr>\n<td>19<\/td>\n<td>Stream<\/td>\n<td>\u6293\u5305<\/td>\n<\/tr>\n<tr>\n<td>20<\/td>\n<td>VLC<\/td>\n<td>\u672c\u5730\u89c6\u9891\u64ad\u653e<\/td>\n<\/tr>\n<tr>\n<td>21<\/td>\n<td>a-Shell<\/td>\n<td>\u914d\u5408\u5feb\u6377\u6307\u4ee4<\/td>\n<\/tr>\n<tr>\n<td>22<\/td>\n<td>PikPak<\/td>\n<td>\u7f51\u76d8\uff0c\u79bb\u7ebf\u4e0b\u8f7d<\/td>\n<\/tr>\n<tr>\n<td>23<\/td>\n<td>X<\/td>\n<td>\u65b0\u95fb<\/td>\n<\/tr>\n<tr>\n<td>24<\/td>\n<td>OneNote<\/td>\n<td>\u5728\u7ebf\u7b14\u8bb0<\/td>\n<\/tr>\n<tr>\n<td>25<\/td>\n<td>Slay the Spire<\/td>\n<td>\u6740\u622e\u5c16\u5854 \u8089\u9e3d\u5361\u724c<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/app\/","term":"APP","label":"APP"}}]},{"title":"\n\u4f7f\u7528feedly\u8ba2\u9605\u516c\u4f17\u53f7","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/","updated":"2024-01-18T17:40:30+08:00","published":"2024-01-18T17:40:30+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4f7f\u7528python\u7f16\u5199\u7684\u811a\u672c\u53ef\u4ee5\u5c06\u516c\u4f17\u53f7\u7684\u6700\u65b0\u6587\u7ae0\u4fdd\u5b58\u5230\u672c\u5730\uff0c\u4f46\u672c\u5730\u9605\u8bfb\u5e76\u4e0d\u65b9\u4fbf\u3002\u4f5c\u8005\u901a\u8fc7\u4f7f\u7528feedly\u6765\u8ba2\u9605\u6587\u7ae0\u7684\u65b9\u5f0f\u89e3\u51b3\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002","content":"\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u5728\u516c\u4f17\u53f7\u53d1\u5e03\u8fc7\u4e00\u4e2a\u6587\u7ae0<a href=\"https:\/\/mp.weixin.qq.com\/s?__biz=Mzg2ODg5MTk3MQ==&amp;mid=2247483963&amp;idx=1&amp;sn=35a16a0a6e6308b2c566629cda770593&amp;chksm=cea42e17f9d3a7016925cf2bbb975ad81c42f9d89353e2677fd8aba3b84b4e68c35c43b2ea93#rd\" target=\"_blank\" rel=\"noopener\">python\u6279\u91cf\u83b7\u53d6\u6700\u65b0\u535a\u5ba2<\/a>\uff0c\u5b9e\u73b0\u5c06\u4e00\u7cfb\u5217\u516c\u4f17\u53f7\u6700\u65b0\u53d1\u5e03\u7684\u6587\u7ae0\u4fdd\u5b58\u5230\u672c\u5730\u65b9\u4fbf\u9605\u8bfb\u3002\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u53d1\u73b0\u5728\u672c\u5730\u9605\u8bfb\u975e\u5e38\u4e0d\u65b9\u4fbf\uff0c\u5bfc\u81f4\u4f7f\u7528\u51e0\u6b21\u540e\u5c31\u653e\u5f03\u3002\u5e73\u65f6\u6211\u4f7f\u7528feedly\u8ba2\u9605RSS\u9605\u8bfb\uff0c\u6240\u4ee5\u60f3\u5230\u80fd\u4e0d\u80fd\u5c06\u8fd9\u4e9b\u5185\u5bb9\u4f7f\u7528feedly\u8fdb\u884c\u8ba2\u9605\u65b9\u4fbf\u9605\u8bfb\u3002<\/p>\n<h2 id=\"\u89e3\u51b3\u601d\u8def\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u89e3\u51b3\u601d\u8def\" class=\"anchor-link\" aria-label=\"\u89e3\u51b3\u601d\u8def\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u89e3\u51b3\u601d\u8def\" class=\"headings\">\u89e3\u51b3\u601d\u8def<\/a><\/h2>\n<ol>\n<li>feedly\u8ba2\u9605\u7684\u662f\u4e00\u4e2a\u7f51\u7ad9\u7684rss.xml\u6587\u4ef6\uff0c\u6240\u4ee5\u53ea\u9700\u6784\u9020\u4e00\u4e2arss.xml\u6587\u4ef6\u653e\u5230\u670d\u52a1\u5668,\u5bf9\u5e94\u7684\u6587\u4ef6\u652f\u6301\u901a\u8fc7http\u8bbf\u95ee\uff0c\u5373\u53ef\u5728feedly\u8fdb\u884c\u8ba2\u9605<\/li>\n<li>\u4f7f\u7528\u670d\u52a1\u5668\u5b9a\u65f6\u4efb\u52a1\uff0c\u5b9a\u65f6\u66f4\u65b0\u6700\u8fd1\u53d1\u5e03\u7684\u516c\u4f17\u53f7\u6587\u7ae0\u4fe1\u606f\u5230rss.xml\u6587\u4ef6<\/li>\n<li>minio\u670d\u52a1\u53ef\u4ee5\u5bf9\u5916\u63d0\u4f9b\u6587\u4ef6\u670d\u52a1<\/li>\n<\/ol>\n<h2 id=\"\u5177\u4f53\u64cd\u4f5c\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u5177\u4f53\u64cd\u4f5c\" class=\"anchor-link\" aria-label=\"\u5177\u4f53\u64cd\u4f5c\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u5177\u4f53\u64cd\u4f5c\" class=\"headings\">\u5177\u4f53\u64cd\u4f5c<\/a><\/h2>\n<h3 id=\"\u83b7\u53d6\u4e00\u4e2axml\u6a21\u677f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u83b7\u53d6\u4e00\u4e2axml\u6a21\u677f\" class=\"anchor-link\" aria-label=\"\u83b7\u53d6\u4e00\u4e2axml\u6a21\u677f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u83b7\u53d6\u4e00\u4e2axml\u6a21\u677f\" class=\"headings\">\u83b7\u53d6\u4e00\u4e2axml\u6a21\u677f<\/a><\/h3>\n<ol>\n<li>\u6211\u76f4\u63a5\u4e0b\u8f7d\u4e86\u535a\u5ba2\u7f51\u7ad9\u7684<a href=\"https:\/\/xiaoshame.github.io\/rss.xml\" target=\"_blank\" rel=\"noopener\">rss.xml\u6587\u4ef6<\/a><\/li>\n<li>\u5220\u9664rss.xml\u6587\u4ef6\u4e2d\u7684\u6587\u7ae0\u4fe1\u606f<\/li>\n<li>\u4fee\u6539rss.xml\u6587\u4ef6\u4e2d\u7684title,description,link,href\u7b49\u4fe1\u606f<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"cl\"><span class=\"cp\">&lt;?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nt\">&lt;rss<\/span> <span class=\"na\">xmlns:ns0=<\/span><span class=\"s\">&#34;http:\/\/purl.org\/rss\/1.0\/modules\/content\/&#34;<\/span> <span class=\"na\">version=<\/span><span class=\"s\">&#34;2.0&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;channel&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;title&gt;<\/span>\u516c\u4f17\u53f7\u7efc\u5408<span class=\"nt\">&lt;\/title&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;link&gt;<\/span>https:\/\/xiaoqian713.live\/rss\/rss.xml<span class=\"nt\">&lt;\/link&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;description&gt;<\/span>\u516c\u4f17\u53f7\u805a\u5408<span class=\"nt\">&lt;\/description&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;copyright&gt;<\/span>asong<span class=\"nt\">&lt;\/copyright&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;pubDate&gt;<\/span>Mon, 22 Jan 2024 16:28:02 <span class=\"nt\">&lt;\/pubDate&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;lastBuildDate&gt;<\/span>Mon, 22 Jan 2024 16:28:02 <span class=\"nt\">&lt;\/lastBuildDate&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nt\">&lt;\/channel&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nt\">&lt;\/rss&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u4fee\u6539python\u4ee3\u7801\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u4fee\u6539python\u4ee3\u7801\" class=\"anchor-link\" aria-label=\"\u4fee\u6539python\u4ee3\u7801\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u4fee\u6539python\u4ee3\u7801\" class=\"headings\">\u4fee\u6539python\u4ee3\u7801<\/a><\/h3>\n<ol>\n<li>\u5c06\u672c\u5730\u4fdd\u5b58\u6587\u7ae0\u8c03\u6574\u4e3a\u5c06\u83b7\u53d6\u5230\u7684RSS\u4fe1\u606f\u4e2d\u7684\u6587\u7ae0\u5185\u5bb9\u4fdd\u5b58\u5230xml\u4e2d<\/li>\n<li>\u4f7f\u7528docker\u90e8\u7f72\u4e86minio\u5bf9\u8c61\u5b58\u50a8\u670d\u52a1\uff0c\u7528\u4e8e\u5b58\u50a8rss.xml\u6587\u4ef6<\/li>\n<li>\u5c06\u4ee3\u7801\u548crss.xml\u653e\u5230\u670d\u52a1\u5668\u4e2d\uff0c\u914d\u7f6epython\u76f8\u5173\u73af\u5883<\/li>\n<li>\u6d4b\u8bd5\u4ee3\u7801\u786e\u5b9a\u8fd0\u884c\u65e0\u8bef\uff0crss.xml\u53ef\u81ea\u884c\u4e0a\u4f20\u5230minio\u4e2d<\/li>\n<li>\u5728feedly\u4e2d\u8ba2\u9605\u5bf9\u5e94\u7684\u6587\u4ef6\u5730\u5740\n<ol>\n<li>\u5927\u5bb6\u60f3\u8ba2\u9605\u8fd9\u4e2arss,\u8ba2\u9605\u5730\u5740\u4e3a\uff1a<code>https:\/\/xiaoqian713.live\/rss\/rss.xml<\/code><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><span class=\"lnt\">128\n<\/span><span class=\"lnt\">129\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">concurrent.futures<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">xml.etree.ElementTree<\/span> <span class=\"k\">as<\/span> <span class=\"nn\">ET<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">datetime<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">datetime<\/span><span class=\"p\">,<\/span> <span class=\"n\">timedelta<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">threading<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">requests<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">minio<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">bs4<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">BeautifulSoup<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u5b9a\u4e49\u4e00\u4e2a\u9501<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">lock<\/span> <span class=\"o\">=<\/span> <span class=\"n\">threading<\/span><span class=\"o\">.<\/span><span class=\"n\">Lock<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_list_name_url<\/span><span class=\"p\">(<\/span><span class=\"n\">html<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efaBeautifulSoup\u5bf9\u8c61bito.ai<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">soup<\/span> <span class=\"o\">=<\/span> <span class=\"n\">BeautifulSoup<\/span><span class=\"p\">(<\/span><span class=\"n\">html<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;html.parser&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u63d0\u53d6\u535a\u5ba2\u540d\u79f0\u548cRSS\u5730\u5740\u5185\u5bb9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">name_list<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">url_list<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">paragraph<\/span> <span class=\"o\">=<\/span> <span class=\"n\">soup<\/span><span class=\"o\">.<\/span><span class=\"n\">find_all<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;div&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">class_<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;vp-doc _list_all&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">parent<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">paragraph<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">span_a_content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">parent<\/span><span class=\"o\">.<\/span><span class=\"n\">find_all<\/span><span class=\"p\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;p&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">a_content<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">span_a_content<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">name_list<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">a_content<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">url_list<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">a_content<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a&#39;<\/span><span class=\"p\">)[<\/span><span class=\"s1\">&#39;href&#39;<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">name_list<\/span><span class=\"p\">,<\/span> <span class=\"n\">url_list<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_recent_article<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span><span class=\"n\">channel<\/span><span class=\"p\">,<\/span><span class=\"n\">start_time<\/span><span class=\"p\">,<\/span><span class=\"n\">end_time<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u83b7\u53d6\u5bf9\u5e94XML\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"o\">=<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"p\">{})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_type<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">headers<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;Content-Type&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u68c0\u67e5\u662f\u5426\u6709charset=utf-8<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"s1\">&#39;charset=utf-8&#39;<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">content_type<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">xml<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5982\u679c\u4e0d\u662fUTF-8\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u624b\u52a8\u8f6c\u6362\u7f16\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">xml<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">content<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;ignore&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">exceptions<\/span><span class=\"o\">.<\/span><span class=\"n\">SSLError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">err<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;SSL Error. Adding custom certs to Certifi store...&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u52a0\u8f7dXML\u6587\u4ef6,\u83b7\u53d6\u6839\u5143\u7d20<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u67e5\u627e\u6700\u65b0\u7684\u6587\u7ae0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">new_rss<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ET<\/span><span class=\"o\">.<\/span><span class=\"n\">fromstring<\/span><span class=\"p\">(<\/span><span class=\"n\">xml<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># new_root = new_rss.getroot()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># # mew_channel = ET.SubElement(new_rss, &#39;channel&#39;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">new_channel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">new_rss<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;channel&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">new_channel<\/span> <span class=\"ow\">is<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">url<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34; fail&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4f7f\u7528\u9501\u6765\u540c\u6b65\u8bbf\u95ee<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"n\">lock<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">new_channel<\/span><span class=\"o\">.<\/span><span class=\"n\">findall<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;item&#39;<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">node<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;pubDate&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">node<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">node<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u65e5\u671f\u65f6\u95f4\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u65f6\u95f4\u5bf9\u8c61<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">node<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"o\">.<\/span><span class=\"n\">endswith<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;GMT&#34;<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pubDate<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datetime<\/span><span class=\"o\">.<\/span><span class=\"n\">strptime<\/span><span class=\"p\">(<\/span><span class=\"n\">node<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">%a<\/span><span class=\"s2\">, <\/span><span class=\"si\">%d<\/span><span class=\"s2\"> %b %Y %H:%M:%S %Z&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"n\">tzinfo<\/span><span class=\"o\">=<\/span><span class=\"kc\">None<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pubDate<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datetime<\/span><span class=\"o\">.<\/span><span class=\"n\">strptime<\/span><span class=\"p\">(<\/span><span class=\"n\">node<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">%a<\/span><span class=\"s2\">, <\/span><span class=\"si\">%d<\/span><span class=\"s2\"> %b %Y %H:%M:%S %z&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"n\">tzinfo<\/span><span class=\"o\">=<\/span><span class=\"kc\">None<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u5c06\u5185\u5bb9\u5199\u5165\u6587\u4ef6\u4e2d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">pubDate<\/span> <span class=\"o\">&gt;<\/span> <span class=\"n\">start_time<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">pubDate<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">end_time<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">first_item<\/span> <span class=\"o\">=<\/span> <span class=\"n\">channel<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;item&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">first_item<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">channel<\/span><span class=\"o\">.<\/span><span class=\"n\">insert<\/span><span class=\"p\">(<\/span><span class=\"nb\">list<\/span><span class=\"p\">(<\/span><span class=\"n\">channel<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">index<\/span><span class=\"p\">(<\/span><span class=\"n\">first_item<\/span><span class=\"p\">),<\/span> <span class=\"n\">item<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5982\u679c\u6ca1\u6709\u5176\u4ed6item\u5143\u7d20\uff0c\u76f4\u63a5\u8ffd\u52a0\u5230channel\u5143\u7d20<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">channel<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">item<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">url<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34; successe&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"n\">ET<\/span><span class=\"o\">.<\/span><span class=\"n\">ParseError<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">url<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34; fail&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_blog_list<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span><span class=\"n\">start_time<\/span><span class=\"p\">,<\/span><span class=\"n\">end_time<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u83b7\u53d6\u5bf9\u5e94\u7f51\u9875html<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"o\">=<\/span><span class=\"n\">url<\/span><span class=\"p\">,<\/span> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">exceptions<\/span><span class=\"o\">.<\/span><span class=\"n\">SSLError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">err<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;SSL Error. Adding custom certs to Certifi store...&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u83b7\u53d6\u4e0d\u540c\u535a\u5ba2\u540d\u548c\u5bf9\u5e94RSS\u8ba2\u9605\u5730\u5740<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">name_list<\/span><span class=\"p\">,<\/span><span class=\"n\">url_list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">get_list_name_url<\/span><span class=\"p\">(<\/span><span class=\"n\">html<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efa\u6216\u52a0\u8f7d\u65b0\u7684RSS\u6587\u4ef6\u6811\u548c\u6839\u5143\u7d20<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">rss<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ET<\/span><span class=\"o\">.<\/span><span class=\"n\">parse<\/span><span class=\"p\">(<\/span><span class=\"sa\">r<\/span><span class=\"s1\">&#39;D:\\workspace\\script\\gzh_to_rss\\rss.xml&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">root<\/span> <span class=\"o\">=<\/span> <span class=\"n\">rss<\/span><span class=\"o\">.<\/span><span class=\"n\">getroot<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">channel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">root<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;channel&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">last_build_date<\/span> <span class=\"o\">=<\/span> <span class=\"n\">channel<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;lastBuildDate&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pubDate<\/span> <span class=\"o\">=<\/span> <span class=\"n\">channel<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;pubDate&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">last_build_date<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">last_build_date<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">end_time<\/span><span class=\"o\">.<\/span><span class=\"n\">strftime<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;<\/span><span class=\"si\">%a<\/span><span class=\"s1\">, <\/span><span class=\"si\">%d<\/span><span class=\"s1\"> %b %Y %H:%M:%S %z&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">pubDate<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pubDate<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">end_time<\/span><span class=\"o\">.<\/span><span class=\"n\">strftime<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;<\/span><span class=\"si\">%a<\/span><span class=\"s1\">, <\/span><span class=\"si\">%d<\/span><span class=\"s1\"> %b %Y %H:%M:%S %z&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># channel = ET.SubElement(rss, &#39;channel&#39;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u63d0\u4ea4\u4efb\u52a1\u7ed9\u7ebf\u7a0b\u6c60\uff0c\u5e76\u83b7\u53d6Future\u5bf9\u8c61<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">futures<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efa\u7ebf\u7a0b\u6c60<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">executor<\/span> <span class=\"o\">=<\/span> <span class=\"n\">concurrent<\/span><span class=\"o\">.<\/span><span class=\"n\">futures<\/span><span class=\"o\">.<\/span><span class=\"n\">ThreadPoolExecutor<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">i<\/span> <span class=\"ow\">in<\/span> <span class=\"nb\">range<\/span><span class=\"p\">(<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">url_list<\/span><span class=\"p\">)):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">future<\/span> <span class=\"o\">=<\/span> <span class=\"n\">executor<\/span><span class=\"o\">.<\/span><span class=\"n\">submit<\/span><span class=\"p\">(<\/span><span class=\"n\">get_recent_article<\/span><span class=\"p\">,<\/span><span class=\"n\">url_list<\/span><span class=\"p\">[<\/span><span class=\"n\">i<\/span><span class=\"p\">],<\/span><span class=\"n\">channel<\/span><span class=\"p\">,<\/span><span class=\"n\">start_time<\/span><span class=\"p\">,<\/span><span class=\"n\">end_time<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">futures<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">future<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u83b7\u53d6\u4efb\u52a1\u7684\u8fd4\u56de\u503c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># results = []<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">future<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">concurrent<\/span><span class=\"o\">.<\/span><span class=\"n\">futures<\/span><span class=\"o\">.<\/span><span class=\"n\">as_completed<\/span><span class=\"p\">(<\/span><span class=\"n\">futures<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">future<\/span><span class=\"o\">.<\/span><span class=\"n\">result<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># results.append(result)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5173\u95ed\u7ebf\u7a0b\u6c60<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">executor<\/span><span class=\"o\">.<\/span><span class=\"n\">shutdown<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">#\u5c06\u6700\u7ec8\u7ed3\u679c\u5199\u5165\u6587\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"n\">lock<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">rss<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span><span class=\"p\">(<\/span><span class=\"sa\">r<\/span><span class=\"s1\">&#39;D:\\workspace\\script\\gzh_to_rss\\rss.xml&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;UTF-8&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">xml_declaration<\/span><span class=\"o\">=<\/span><span class=\"kc\">True<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;write rss done&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">up_data_minio<\/span><span class=\"p\">(<\/span><span class=\"n\">bucket<\/span><span class=\"p\">:<\/span> <span class=\"nb\">str<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">minio_conf<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;endpoint&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;127.0.0.1:9000&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;access_key&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;xxxx&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;secret_key&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;xxxx&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;secure&#39;<\/span><span class=\"p\">:<\/span> <span class=\"kc\">False<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"n\">minio<\/span><span class=\"o\">.<\/span><span class=\"n\">Minio<\/span><span class=\"p\">(<\/span><span class=\"o\">**<\/span><span class=\"n\">minio_conf<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"n\">fput_object<\/span><span class=\"p\">(<\/span><span class=\"n\">bucket_name<\/span><span class=\"o\">=<\/span><span class=\"n\">bucket<\/span><span class=\"p\">,<\/span> <span class=\"n\">object_name<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;rss.xml&#39;<\/span><span class=\"p\">,<\/span><span class=\"n\">file_path<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;rss.xml&#39;<\/span><span class=\"p\">,<\/span><span class=\"n\">content_type<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;text\/xml&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;syn rss.xml done&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">end_time<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datetime<\/span><span class=\"o\">.<\/span><span class=\"n\">now<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u5b9a\u65f6\u67e5\u8be2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">start_time<\/span> <span class=\"o\">=<\/span> <span class=\"n\">end_time<\/span> <span class=\"o\">-<\/span> <span class=\"n\">timedelta<\/span><span class=\"p\">(<\/span><span class=\"n\">hours<\/span><span class=\"o\">=<\/span><span class=\"mi\">4<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u83b7\u53d6\u6700\u8fd14H\u5185\u53d1\u8868\u7684\u6587\u7ae0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">get_blog_list<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;https:\/\/wechat2rss.xlab.app\/list\/all.html&#34;<\/span><span class=\"p\">,<\/span><span class=\"n\">start_time<\/span><span class=\"p\">,<\/span><span class=\"n\">end_time<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">up_data_minio<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;rss&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\" class=\"anchor-link\" aria-label=\"\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\" class=\"headings\">\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1<\/a><\/h3>\n<p>\u4f7f\u7528crontab\u8bbe\u7f6e\u5b9a\u65f6\u4efb\u52a1<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">### ubuntu \u7cfb\u7edf\u68c0\u67e5 cron \u5305\u662f\u5426\u5b89\u88c5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">dpkg -l cron\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u672a\u5b89\u88c5 cron\uff0c\u5148\u5b89\u88c5 cron \u8f6f\u4ef6\u5305\n<\/span><\/span><span class=\"line\"><span class=\"cl\">apt-get install cron\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">###\u9a8c\u8bc1 cron \u670d\u52a1\u662f\u5426\u6b63\u5728\u8fd0\u884c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">service cron status\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### cron\u670d\u52a1\u672a\u542f\u52a8\uff0c\u542f\u52a8\n<\/span><\/span><span class=\"line\"><span class=\"cl\">service cron start\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u7f16\u8f91\u5f53\u524d\u7528\u6237cron\u670d\u52a1\uff0c\u6211\u9009\u62e9vi\u7f16\u8f91\u6a21\u5f0f\n<\/span><\/span><span class=\"line\"><span class=\"cl\">crontab -e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u6bcf\u59299\u70b9\u5b9a\u65f6\u8fd0\u884cpython\u811a\u672c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0 *\/4 * * * python \/data\/talebook\/books\/extract\/603\/blog_list_rss.py\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u4e3acrontab\u589e\u52a0\u65e5\u5fd7\n<\/span><\/span><span class=\"line\"><span class=\"cl\">0 *\/4 * * * python \/data\/talebook\/books\/extract\/603\/blog_list_rss.py &gt;&gt; $HOME\/for_crontab\/mylog.log 2&gt;&amp;1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"minio\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#minio\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"minio\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:minio\u90e8\u7f72\" class=\"headings\">minio\u90e8\u7f72<\/a><\/h3>\n<p>\u53c2\u8003\u6587\u7ae0\uff1a<\/p>\n<ol>\n<li><a href=\"https:\/\/ysicing.me\/tools\/minio-deploy\/\" target=\"_blank\" rel=\"noopener\">\u90e8\u7f72\u79c1\u6709\u5bf9\u8c61\u5b58\u50a8\u670d\u52a1: Minio<\/a><\/li>\n<li><a href=\"https:\/\/blog.littlefox.me\/archives\/695\" target=\"_blank\" rel=\"noopener\">\u81ea\u5efa\u5bf9\u8c61\u5b58\u50a8\u670d\u52a1MinIO\u8fdb\u884c\u6587\u4ef6\u5907\u4efd<\/a><\/li>\n<li><a href=\"https:\/\/developer.aliyun.com\/article\/1329720\" target=\"_blank\" rel=\"noopener\">Docker\u642d\u5efaminio\u6587\u4ef6\u670d\u52a1\u5668<\/a><\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">### \u4e0b\u8f7d\u955c\u50cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker pull minio\/minio\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u6784\u5efa\u5bb9\u5668\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker run -p 9000:9000 --name minio -d --restart=always -e &#34;MINIO_ACCESS_KEY=admin&#34; -e &#34;MINIO_SECRET_KEY=admin123456&#34; -v \/home\/data:\/data -v \/home\/config:\/root\/.minio minio\/minio server \/data --console-address &#34;:9001&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u914d\u7f6ecaddy\n<\/span><\/span><span class=\"line\"><span class=\"cl\">xiaoqian713.live {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:9000\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">console.xiaoqian713.live {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:9001\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u914d\u7f6eDNS\u89e3\u6790(\u6211\u7528\u7684cloudflare)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">A console \u4e3b\u673aIP\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u914d\u7f6eminio\n<\/span><\/span><span class=\"line\"><span class=\"cl\">1. \u7f51\u9875\u767b\u5f55console.xiaoqian713.live\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2. \u521b\u5efabucket\uff0c\u8bbf\u95ee\u6743\u9650\u8bbe\u7f6e\u4e3apublic\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h2 id=\"\u6700\u540e\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#\u6700\u540e\" class=\"anchor-link\" aria-label=\"\u6700\u540e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gzh_to_rss\/#contents:\u6700\u540e\" class=\"headings\">\u6700\u540e<\/a><\/h2>\n<ol>\n<li>\u8fd9\u79cd\u65b9\u5f0f\u5177\u5907\u53ef\u884c\u6027\u7684\u57fa\u7840\u662f\u5f00\u6e90\u9879\u76ee<a href=\"https:\/\/github.com\/ttttmr\/wechat2rss\" target=\"_blank\" rel=\"noopener\">wechat2rss<\/a>\u6301\u7eed\u7684\u7ef4\u62a4\uff0c\u8c22\u8c22ttttmr\u5927\u4f6c<\/li>\n<li><a href=\"https:\/\/wechat2rss.xlab.app\/list\/all.html\" target=\"_blank\" rel=\"noopener\">\u516c\u4f17\u53f7\u8ba2\u9605list<\/a>\u4e2d\u5305\u542b\u4f17\u591a\u516c\u4f17\u53f7\uff0c\u53ef\u4ee5\u81ea\u884c\u9009\u62e9\u60f3\u8ba2\u9605\u7684\u516c\u4f17\u53f7<\/li>\n<li>\u53ef\u57fa\u4e8e\u672c\u6587\u65b9\u6848\u8c03\u6574\u4e3a\u53ea\u751f\u6210\u559c\u6b22\u7684\u516c\u4f17\u53f7\u6587\u7ae0<\/li>\n<li>\u6700\u8fd1\u672c\u6765\u5728\u4f7f\u7528freshrss,\u6700\u8fd1wecath2rss\u7684\u4f5c\u8005\u7ed9\u4e86\u4e00\u4e2afollow\u7684\u9080\u8bf7\u7801\uff0c\u5c31\u8fc1\u79fb\u4f7f\u7528follow\u3002\u521d\u6b65\u4f7f\u7528\u6700\u5927\u7684\u611f\u53d7\u5c31\u662f\u5f88\u6d41\u7545\uff0c\u76ee\u524d\u8fd8\u5728\u4f53\u9a8c\u4e2d\uff0c\u5f88\u671f\u5f85X timeline\u8ba2\u9605\u7684\u529f\u80fd<\/li>\n<\/ol>\n<pre tabindex=\"0\"><code>This message is used to verify that this feed (feedId:59973439614099456) belongs to me (userId:69568391214442496). Join me in enjoying the next generation information browser https:\/\/follow.is.\n<\/code><\/pre>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/rss\/","term":"RSS","label":"RSS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%8D%9A%E5%AE%A2\/","term":"\u535a\u5ba2","label":"\u535a\u5ba2"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/minio\/","term":"MinIO","label":"MinIO"}}]},{"title":"\n\u5229\u7528GPT\u5f00\u53d1\u4e00\u4e2a\u52a0\u89e3\u5bc6\u7b97\u6cd5\u5de5\u5177","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/","updated":"2024-01-11T13:44:14+08:00","published":"2024-01-11T13:44:14+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u57fa\u4e8ewxPython\u7f16\u5199\u7684\u52a0\u89e3\u5bc6\u5de5\u5177\uff0c\u652f\u6301Base64\u3001MD5\u3001AES\u3001DES\u7b49\u7b97\u6cd5\u3002\u4f7f\u7528GPT4\u751f\u6210\u5927\u81f4\u7684GUI\u4ee3\u7801\u540e\uff0c\u901a\u8fc7\u5bf9\u6bd4\u6d4b\u8bd5\u4fee\u6b63bug\u3002\u4f7f\u7528pyinstaller.exe\u6253\u5305\u3002\u603b\u8017\u65f61\u5929\uff0cPython\u548cGPT\u642d\u914d\u80fd\u6781\u5927\u63d0\u9ad8\u6548\u7387\u3002","content":"\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u6700\u8fd1\u4f7f\u7528uTools\u7ffb\u8bd1\u529f\u80fd\u65f6\u603b\u4f1a\u6709\u4e9b\u95ee\u9898\uff0c\u4f7f\u7528\u4e0d\u7b97\u65b9\u4fbf\u4e00\u65f6\u51b2\u52a8\u5378\u8f7d\u4e86uTools\u3002\u987a\u4fbf\u91cd\u65b0\u6574\u7406\u4e86\u4e0b\u65e5\u5e38\u4f7f\u7528\u7684\u5de5\u5177\u3002<\/p>\n<ol>\n<li>\u622a\u56fe\u5de5\u5177\u7531Snipaste \u8c03\u6574\u4e3a PixPin\uff0c\u589e\u52a0\u4e86GIF\u5f55\u5236\uff0c\u540c\u65f6\u652f\u6301\u622a\u56feOCR<\/li>\n<li>\u7ffb\u8bd1\u5de5\u5177\u7531Pot\u63d0\u4f9b<\/li>\n<li>\u672c\u5730\u641c\u7d22\u76f4\u63a5\u4f7f\u7528everything<\/li>\n<li>\u542c\u6b4c\u8f6f\u4ef6\u4eceListen1\u6362\u6210\u843d\u96ea\u97f3\u4e50<\/li>\n<\/ol>\n<p>\u641c\u7d22\u5b57\u7b26\u4e32\u52a0\u5bc6\u89e3\u5bc6\u5de5\u5177\u65f6\u6ca1\u6709\u627e\u5230\u5408\u9002\u7684\u5de5\u5177\uff0c\u51b3\u5b9a\u81ea\u5df1\u505a\u4e00\u4e2a<\/p>\n<h2 id=\"\u5b9e\u64cd\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#\u5b9e\u64cd\" class=\"anchor-link\" aria-label=\"\u5b9e\u64cd\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#contents:\u5b9e\u64cd\" class=\"headings\">\u5b9e\u64cd<\/a><\/h2>\n<h3 id=\"\u4f7f\u7528\u5230\u7684\u5de5\u5177\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#\u4f7f\u7528\u5230\u7684\u5de5\u5177\" class=\"anchor-link\" aria-label=\"\u4f7f\u7528\u5230\u7684\u5de5\u5177\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#contents:\u4f7f\u7528\u5230\u7684\u5de5\u5177\" class=\"headings\">\u4f7f\u7528\u5230\u7684\u5de5\u5177<\/a><\/h3>\n<ol>\n<li>GPT4<\/li>\n<li>vscode + python<\/li>\n<li><code>pip install pycryptodome<\/code> \u7b97\u6cd5\u5e93\uff0c\u63d0\u4f9baes\uff0cdes\u7b49\u7b97\u6cd5<\/li>\n<li><code>pip install pyinstaller<\/code> \u6253\u5305\u5e93\uff0c\u6253\u5305\u6210exe\u53ef\u6267\u884c\u7a0b\u5e8f<\/li>\n<li><code>pip install wxPython<\/code> GUI\u5e93<\/li>\n<\/ol>\n<h3 id=\"\u7f16\u7801\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#\u7f16\u7801\" class=\"anchor-link\" aria-label=\"\u7f16\u7801\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/algorithm_tools\/#contents:\u7f16\u7801\" class=\"headings\">\u7f16\u7801<\/a><\/h3>\n<p>\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><span class=\"lnt\">128\n<\/span><span class=\"lnt\">129\n<\/span><span class=\"lnt\">130\n<\/span><span class=\"lnt\">131\n<\/span><span class=\"lnt\">132\n<\/span><span class=\"lnt\">133\n<\/span><span class=\"lnt\">134\n<\/span><span class=\"lnt\">135\n<\/span><span class=\"lnt\">136\n<\/span><span class=\"lnt\">137\n<\/span><span class=\"lnt\">138\n<\/span><span class=\"lnt\">139\n<\/span><span class=\"lnt\">140\n<\/span><span class=\"lnt\">141\n<\/span><span class=\"lnt\">142\n<\/span><span class=\"lnt\">143\n<\/span><span class=\"lnt\">144\n<\/span><span class=\"lnt\">145\n<\/span><span class=\"lnt\">146\n<\/span><span class=\"lnt\">147\n<\/span><span class=\"lnt\">148\n<\/span><span class=\"lnt\">149\n<\/span><span class=\"lnt\">150\n<\/span><span class=\"lnt\">151\n<\/span><span class=\"lnt\">152\n<\/span><span class=\"lnt\">153\n<\/span><span class=\"lnt\">154\n<\/span><span class=\"lnt\">155\n<\/span><span class=\"lnt\">156\n<\/span><span class=\"lnt\">157\n<\/span><span class=\"lnt\">158\n<\/span><span class=\"lnt\">159\n<\/span><span class=\"lnt\">160\n<\/span><span class=\"lnt\">161\n<\/span><span class=\"lnt\">162\n<\/span><span class=\"lnt\">163\n<\/span><span class=\"lnt\">164\n<\/span><span class=\"lnt\">165\n<\/span><span class=\"lnt\">166\n<\/span><span class=\"lnt\">167\n<\/span><span class=\"lnt\">168\n<\/span><span class=\"lnt\">169\n<\/span><span class=\"lnt\">170\n<\/span><span class=\"lnt\">171\n<\/span><span class=\"lnt\">172\n<\/span><span class=\"lnt\">173\n<\/span><span class=\"lnt\">174\n<\/span><span class=\"lnt\">175\n<\/span><span class=\"lnt\">176\n<\/span><span class=\"lnt\">177\n<\/span><span class=\"lnt\">178\n<\/span><span class=\"lnt\">179\n<\/span><span class=\"lnt\">180\n<\/span><span class=\"lnt\">181\n<\/span><span class=\"lnt\">182\n<\/span><span class=\"lnt\">183\n<\/span><span class=\"lnt\">184\n<\/span><span class=\"lnt\">185\n<\/span><span class=\"lnt\">186\n<\/span><span class=\"lnt\">187\n<\/span><span class=\"lnt\">188\n<\/span><span class=\"lnt\">189\n<\/span><span class=\"lnt\">190\n<\/span><span class=\"lnt\">191\n<\/span><span class=\"lnt\">192\n<\/span><span class=\"lnt\">193\n<\/span><span class=\"lnt\">194\n<\/span><span class=\"lnt\">195\n<\/span><span class=\"lnt\">196\n<\/span><span class=\"lnt\">197\n<\/span><span class=\"lnt\">198\n<\/span><span class=\"lnt\">199\n<\/span><span class=\"lnt\">200\n<\/span><span class=\"lnt\">201\n<\/span><span class=\"lnt\">202\n<\/span><span class=\"lnt\">203\n<\/span><span class=\"lnt\">204\n<\/span><span class=\"lnt\">205\n<\/span><span class=\"lnt\">206\n<\/span><span class=\"lnt\">207\n<\/span><span class=\"lnt\">208\n<\/span><span class=\"lnt\">209\n<\/span><span class=\"lnt\">210\n<\/span><span class=\"lnt\">211\n<\/span><span class=\"lnt\">212\n<\/span><span class=\"lnt\">213\n<\/span><span class=\"lnt\">214\n<\/span><span class=\"lnt\">215\n<\/span><span class=\"lnt\">216\n<\/span><span class=\"lnt\">217\n<\/span><span class=\"lnt\">218\n<\/span><span class=\"lnt\">219\n<\/span><span class=\"lnt\">220\n<\/span><span class=\"lnt\">221\n<\/span><span class=\"lnt\">222\n<\/span><span class=\"lnt\">223\n<\/span><span class=\"lnt\">224\n<\/span><span class=\"lnt\">225\n<\/span><span class=\"lnt\">226\n<\/span><span class=\"lnt\">227\n<\/span><span class=\"lnt\">228\n<\/span><span class=\"lnt\">229\n<\/span><span class=\"lnt\">230\n<\/span><span class=\"lnt\">231\n<\/span><span class=\"lnt\">232\n<\/span><span class=\"lnt\">233\n<\/span><span class=\"lnt\">234\n<\/span><span class=\"lnt\">235\n<\/span><span class=\"lnt\">236\n<\/span><span class=\"lnt\">237\n<\/span><span class=\"lnt\">238\n<\/span><span class=\"lnt\">239\n<\/span><span class=\"lnt\">240\n<\/span><span class=\"lnt\">241\n<\/span><span class=\"lnt\">242\n<\/span><span class=\"lnt\">243\n<\/span><span class=\"lnt\">244\n<\/span><span class=\"lnt\">245\n<\/span><span class=\"lnt\">246\n<\/span><span class=\"lnt\">247\n<\/span><span class=\"lnt\">248\n<\/span><span class=\"lnt\">249\n<\/span><span class=\"lnt\">250\n<\/span><span class=\"lnt\">251\n<\/span><span class=\"lnt\">252\n<\/span><span class=\"lnt\">253\n<\/span><span class=\"lnt\">254\n<\/span><span class=\"lnt\">255\n<\/span><span class=\"lnt\">256\n<\/span><span class=\"lnt\">257\n<\/span><span class=\"lnt\">258\n<\/span><span class=\"lnt\">259\n<\/span><span class=\"lnt\">260\n<\/span><span class=\"lnt\">261\n<\/span><span class=\"lnt\">262\n<\/span><span class=\"lnt\">263\n<\/span><span class=\"lnt\">264\n<\/span><span class=\"lnt\">265\n<\/span><span class=\"lnt\">266\n<\/span><span class=\"lnt\">267\n<\/span><span class=\"lnt\">268\n<\/span><span class=\"lnt\">269\n<\/span><span class=\"lnt\">270\n<\/span><span class=\"lnt\">271\n<\/span><span class=\"lnt\">272\n<\/span><span class=\"lnt\">273\n<\/span><span class=\"lnt\">274\n<\/span><span class=\"lnt\">275\n<\/span><span class=\"lnt\">276\n<\/span><span class=\"lnt\">277\n<\/span><span class=\"lnt\">278\n<\/span><span class=\"lnt\">279\n<\/span><span class=\"lnt\">280\n<\/span><span class=\"lnt\">281\n<\/span><span class=\"lnt\">282\n<\/span><span class=\"lnt\">283\n<\/span><span class=\"lnt\">284\n<\/span><span class=\"lnt\">285\n<\/span><span class=\"lnt\">286\n<\/span><span class=\"lnt\">287\n<\/span><span class=\"lnt\">288\n<\/span><span class=\"lnt\">289\n<\/span><span class=\"lnt\">290\n<\/span><span class=\"lnt\">291\n<\/span><span class=\"lnt\">292\n<\/span><span class=\"lnt\">293\n<\/span><span class=\"lnt\">294\n<\/span><span class=\"lnt\">295\n<\/span><span class=\"lnt\">296\n<\/span><span class=\"lnt\">297\n<\/span><span class=\"lnt\">298\n<\/span><span class=\"lnt\">299\n<\/span><span class=\"lnt\">300\n<\/span><span class=\"lnt\">301\n<\/span><span class=\"lnt\">302\n<\/span><span class=\"lnt\">303\n<\/span><span class=\"lnt\">304\n<\/span><span class=\"lnt\">305\n<\/span><span class=\"lnt\">306\n<\/span><span class=\"lnt\">307\n<\/span><span class=\"lnt\">308\n<\/span><span class=\"lnt\">309\n<\/span><span class=\"lnt\">310\n<\/span><span class=\"lnt\">311\n<\/span><span class=\"lnt\">312\n<\/span><span class=\"lnt\">313\n<\/span><span class=\"lnt\">314\n<\/span><span class=\"lnt\">315\n<\/span><span class=\"lnt\">316\n<\/span><span class=\"lnt\">317\n<\/span><span class=\"lnt\">318\n<\/span><span class=\"lnt\">319\n<\/span><span class=\"lnt\">320\n<\/span><span class=\"lnt\">321\n<\/span><span class=\"lnt\">322\n<\/span><span class=\"lnt\">323\n<\/span><span class=\"lnt\">324\n<\/span><span class=\"lnt\">325\n<\/span><span class=\"lnt\">326\n<\/span><span class=\"lnt\">327\n<\/span><span class=\"lnt\">328\n<\/span><span class=\"lnt\">329\n<\/span><span class=\"lnt\">330\n<\/span><span class=\"lnt\">331\n<\/span><span class=\"lnt\">332\n<\/span><span class=\"lnt\">333\n<\/span><span class=\"lnt\">334\n<\/span><span class=\"lnt\">335\n<\/span><span class=\"lnt\">336\n<\/span><span class=\"lnt\">337\n<\/span><span class=\"lnt\">338\n<\/span><span class=\"lnt\">339\n<\/span><span class=\"lnt\">340\n<\/span><span class=\"lnt\">341\n<\/span><span class=\"lnt\">342\n<\/span><span class=\"lnt\">343\n<\/span><span class=\"lnt\">344\n<\/span><span class=\"lnt\">345\n<\/span><span class=\"lnt\">346\n<\/span><span class=\"lnt\">347\n<\/span><span class=\"lnt\">348\n<\/span><span class=\"lnt\">349\n<\/span><span class=\"lnt\">350\n<\/span><span class=\"lnt\">351\n<\/span><span class=\"lnt\">352\n<\/span><span class=\"lnt\">353\n<\/span><span class=\"lnt\">354\n<\/span><span class=\"lnt\">355\n<\/span><span class=\"lnt\">356\n<\/span><span class=\"lnt\">357\n<\/span><span class=\"lnt\">358\n<\/span><span class=\"lnt\">359\n<\/span><span class=\"lnt\">360\n<\/span><span class=\"lnt\">361\n<\/span><span class=\"lnt\">362\n<\/span><span class=\"lnt\">363\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">wx<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">base64<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">b64decode<\/span><span class=\"p\">,<\/span><span class=\"n\">b64encode<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">hashlib<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">md5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">Crypto.Cipher<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">AES<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">Crypto.Cipher<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">DES<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">Crypto.Util.Padding<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">pad<\/span><span class=\"p\">,<\/span> <span class=\"n\">unpad<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">EncryptionFrame<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">Frame<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">super<\/span><span class=\"p\">()<\/span><span class=\"o\">.<\/span><span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"n\">title<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u52a0\u89e3\u5bc6&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span><span class=\"o\">=<\/span><span class=\"p\">(<\/span><span class=\"mi\">820<\/span><span class=\"p\">,<\/span> <span class=\"mi\">500<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">app_icon<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">Icon<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;favicon.ico&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BITMAP_TYPE_ICO<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">SetIcon<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">app_icon<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">Panel<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u7b97\u6cd5\u9009\u62e9\u76f8\u5173\u7ec4\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">HORIZONTAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u9009\u62e9\u7b97\u6cd5:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ComboBox<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">choices<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;Base64&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;MD5&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;AES&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;DES&#34;<\/span><span class=\"p\">],<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">CB_READONLY<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSelection<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt_button<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">Button<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u52a0\u5bc6&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt_button<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">Button<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u89e3\u5bc6&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt_button<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt_button<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u8f93\u5165\u8f93\u51fa\u6587\u672c\u76f8\u5173\u7ec4\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">text_sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">HORIZONTAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">VERTICAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u8f93\u5165:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TextCtrl<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span><span class=\"n\">style<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TE_MULTILINE<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_text<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">VERTICAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u8f93\u51fa:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TextCtrl<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">style<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TE_READONLY<\/span> <span class=\"o\">|<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TE_MULTILINE<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">text_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_sizer<\/span><span class=\"p\">,<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">text_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_sizer<\/span><span class=\"p\">,<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># AES\/DES\u52a0\u5bc6\u53c2\u6570\u76f8\u5173\u7ec4\u4ef6<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">HORIZONTAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u52a0\u5bc6\u6a21\u5f0f:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ComboBox<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">choices<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;CBC&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;CFB&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;OFB&#34;<\/span><span class=\"p\">],<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">CB_READONLY<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSelection<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u586b\u5145:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ComboBox<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">choices<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;pkcs7&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;x923&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;iso7816&#34;<\/span><span class=\"p\">],<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">CB_READONLY<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSelection<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u79d8\u94a5\u957f\u5ea6:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ComboBox<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">choices<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;128&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;192&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;256&#34;<\/span><span class=\"p\">],<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">CB_READONLY<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSelection<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u79d8\u94a5:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TextCtrl<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u504f\u79fb\u91cf:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">TextCtrl<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">out_mode_label<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">StaticText<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">label<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\u8f93\u51fa\u683c\u5f0f:&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">out_mode_combo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ComboBox<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"p\">,<\/span> <span class=\"n\">choices<\/span><span class=\"o\">=<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;hex&#34;<\/span><span class=\"p\">],<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">CB_READONLY<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">out_mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSelection<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">out_mode_label<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">RIGHT<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">out_mode_combo<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALIGN_CENTER_VERTICAL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">GetChildren<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWindow<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">window<\/span><span class=\"p\">:<\/span> <span class=\"c1\"># \u5982\u679citem\u662f\u4e00\u4e2a\u7a97\u53e3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sizer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">BoxSizer<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">VERTICAL<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_sizer<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">Add<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">text_sizer<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">ALL<\/span><span class=\"o\">|<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EXPAND<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"o\">.<\/span><span class=\"n\">SetSizer<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">sizer<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">Bind<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EVT_COMBOBOX<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">on_algorithm_change<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">Bind<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EVT_COMBOBOX<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">on_mode_change<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt_button<\/span><span class=\"o\">.<\/span><span class=\"n\">Bind<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EVT_BUTTON<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">OnEncrypt<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt_button<\/span><span class=\"o\">.<\/span><span class=\"n\">Bind<\/span><span class=\"p\">(<\/span><span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">EVT_BUTTON<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">OnDecrypt<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">OnEncrypt<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">event<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span><span class=\"o\">.<\/span><span class=\"n\">SetValue<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">algorithm<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6839\u636e\u9009\u62e9\u7684\u7b97\u6cd5\u8fdb\u884c\u52a0\u5bc6\u64cd\u4f5c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;Base64&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">base64_encode<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;MD5&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">md5_encode<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;AES&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_len<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padding<\/span><span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aes_encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">input_text<\/span><span class=\"p\">,<\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">key_len<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"mi\">8<\/span><span class=\"p\">),<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;RSA&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aes_encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;DES&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_len<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padding<\/span><span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">des_encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">input_text<\/span><span class=\"p\">,<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;\u8bf7\u9009\u62e9\u7b97\u6cd5&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span><span class=\"o\">.<\/span><span class=\"n\">SetValue<\/span><span class=\"p\">(<\/span><span class=\"n\">encrypted_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">OnDecrypt<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">event<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span><span class=\"o\">.<\/span><span class=\"n\">SetValue<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">algorithm<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">input_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6839\u636e\u9009\u62e9\u7684\u7b97\u6cd5\u8fdb\u884c\u89e3\u5bc6\u64cd\u4f5c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;Base64&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">base64_decode<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;MD5&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">md5_decode<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;AES&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_len<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padding<\/span><span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aes_decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"nb\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">fromhex<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">),<\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">key_len<\/span><span class=\"p\">)<\/span><span class=\"o\">\/<\/span><span class=\"mi\">8<\/span><span class=\"p\">),<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;RSA&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aes_decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;DES&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key_len<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv_text<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padding<\/span><span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">padding_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">des_decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span><span class=\"nb\">bytes<\/span><span class=\"o\">.<\/span><span class=\"n\">fromhex<\/span><span class=\"p\">(<\/span><span class=\"n\">input_text<\/span><span class=\"p\">),<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_text<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;\u8bf7\u9009\u62e9\u7b97\u6cd5&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">output_text<\/span><span class=\"o\">.<\/span><span class=\"n\">SetValue<\/span><span class=\"p\">(<\/span><span class=\"n\">decrypted_text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">on_algorithm_change<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">event<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">algorithm<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">algorithm_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">algorithm<\/span> <span class=\"ow\">in<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;AES&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;DES&#34;<\/span><span class=\"p\">]:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">GetChildren<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWindow<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">window<\/span><span class=\"p\">:<\/span> <span class=\"c1\"># \u5982\u679citem\u662f\u4e00\u4e2a\u7a97\u53e3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;DES&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">key_len_label<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">algorithm<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;RSA&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">GetChildren<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWindow<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">window<\/span><span class=\"p\">:<\/span> <span class=\"c1\"># \u5982\u679citem\u662f\u4e00\u4e2a\u7a97\u53e3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_sizer<\/span><span class=\"o\">.<\/span><span class=\"n\">GetChildren<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"o\">.<\/span><span class=\"n\">GetWindow<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">window<\/span><span class=\"p\">:<\/span> <span class=\"c1\"># \u5982\u679citem\u662f\u4e00\u4e2a\u7a97\u53e3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">window<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"o\">.<\/span><span class=\"n\">Layout<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">on_mode_change<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">event<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">mode<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mode_combo<\/span><span class=\"o\">.<\/span><span class=\"n\">GetValue<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">Hide<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_label<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">iv_text<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">panel<\/span><span class=\"o\">.<\/span><span class=\"n\">Layout<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">base64_encode<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5b57\u7b26\u4e32\u7f16\u7801\u4e3a\u5b57\u8282\u6d41<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">byte_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4f7f\u7528Base64\u8fdb\u884c\u7f16\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encoded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">b64encode<\/span><span class=\"p\">(<\/span><span class=\"n\">byte_data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5b57\u8282\u6d41\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">encoded_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">encoded_data<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">encoded_text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">base64_decode<\/span><span class=\"p\">(<\/span><span class=\"n\">encoded_text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u5b57\u8282\u6d41<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">byte_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">encoded_text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4f7f\u7528Base64\u8fdb\u884c\u89e3\u7801<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decoded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">b64decode<\/span><span class=\"p\">(<\/span><span class=\"n\">byte_data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06\u5b57\u8282\u6d41\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decoded_text<\/span> <span class=\"o\">=<\/span> <span class=\"n\">decoded_data<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">decoded_text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">md5_encode<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> MD5 \u52a0\u5bc6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param text: \u5f85\u52a0\u5bc6\u6587\u672c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :return: \u52a0\u5bc6\u540e\u7684\u6587\u672c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">m<\/span> <span class=\"o\">=<\/span> <span class=\"n\">md5<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">m<\/span><span class=\"o\">.<\/span><span class=\"n\">update<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">m<\/span><span class=\"o\">.<\/span><span class=\"n\">hexdigest<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">md5_decode<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> MD5 \u89e3\u5bc6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :param text: \u5f85\u89e3\u5bc6\u6587\u672c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> :return: \u89e3\u5bc6\u540e\u7684\u6587\u672c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s2\">&#34;MD5 \u4e0d\u652f\u6301\u89e3\u5bc6&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">,<\/span><span class=\"n\">BLOCK_SIZE<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">s<\/span> <span class=\"o\">+<\/span> <span class=\"p\">(<\/span><span class=\"n\">BLOCK_SIZE<\/span> <span class=\"o\">-<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">)<\/span> <span class=\"o\">%<\/span> <span class=\"n\">BLOCK_SIZE<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nb\">bytes<\/span><span class=\"p\">([<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">aes_encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"p\">,<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">,<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">key<\/span><span class=\"p\">[:<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">iv<\/span><span class=\"p\">[:<\/span><span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efaAES\u52a0\u5bc6\u5668&#34;ECB&#34;, &#34;CBC&#34;, &#34;CFB&#34;, &#34;OFB&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_ECB<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CBC&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CBC<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;OFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_OFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5bf9\u6570\u636e\u8fdb\u884c\u586b\u5145<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pad<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">,<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">padding<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u52a0\u5bc6\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">ciphertext<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cipher<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">padded_data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">ciphertext<\/span><span class=\"o\">.<\/span><span class=\"n\">hex<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">aes_decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">data<\/span><span class=\"p\">,<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">,<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">key<\/span><span class=\"p\">[:<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">iv<\/span><span class=\"p\">[:<\/span><span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efaAES\u89e3\u5bc6\u5668&#34;ECB&#34;, &#34;CBC&#34;, &#34;CFB&#34;, &#34;OFB&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_ECB<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CBC&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CBC<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;OFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_OFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u89e3\u5bc6\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cipher<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u53bb\u9664\u586b\u5145<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">unpadded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">unpad<\/span><span class=\"p\">(<\/span><span class=\"n\">decrypted_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">AES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">,<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">padding<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">unpadded_data<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">des_encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"p\">,<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">key<\/span><span class=\"p\">[:<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">iv<\/span><span class=\"p\">[:<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efaDES\u52a0\u5bc6\u5668&#34;ECB&#34;, &#34;CBC&#34;, &#34;CFB&#34;, &#34;OFB&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_ECB<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CBC&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CBC<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;OFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_OFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5bf9\u6570\u636e\u8fdb\u884c\u586b\u5145<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">padded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">pad<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">),<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">,<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">padding<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u52a0\u5bc6\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">ciphertext<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cipher<\/span><span class=\"o\">.<\/span><span class=\"n\">encrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">padded_data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">ciphertext<\/span><span class=\"o\">.<\/span><span class=\"n\">hex<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">des_decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">data<\/span><span class=\"p\">,<\/span><span class=\"n\">padding<\/span><span class=\"p\">,<\/span><span class=\"n\">encrypt_mode<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">key<\/span> <span class=\"o\">=<\/span> <span class=\"n\">key<\/span><span class=\"p\">[:<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">customize_pad<\/span><span class=\"p\">(<\/span><span class=\"n\">iv<\/span><span class=\"p\">,<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">iv<\/span> <span class=\"o\">=<\/span> <span class=\"n\">iv<\/span><span class=\"p\">[:<\/span><span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u521b\u5efaDES\u52a0\u5bc6\u5668&#34;ECB&#34;, &#34;CBC&#34;, &#34;CFB&#34;, &#34;OFB&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">None<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;ECB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_ECB<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CBC&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CBC<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;CFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_CFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">elif<\/span> <span class=\"n\">encrypt_mode<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;OFB&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cipher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">MODE_OFB<\/span><span class=\"p\">,<\/span> <span class=\"n\">iv<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u89e3\u5bc6\u6570\u636e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">decrypted_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cipher<\/span><span class=\"o\">.<\/span><span class=\"n\">decrypt<\/span><span class=\"p\">(<\/span><span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u53bb\u9664\u586b\u5145<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">unpadded_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">unpad<\/span><span class=\"p\">(<\/span><span class=\"n\">decrypted_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">DES<\/span><span class=\"o\">.<\/span><span class=\"n\">block_size<\/span><span class=\"p\">,<\/span> <span class=\"n\">style<\/span><span class=\"o\">=<\/span><span class=\"n\">padding<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">unpadded_data<\/span><span class=\"o\">.<\/span><span class=\"n\">decode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">wx<\/span><span class=\"o\">.<\/span><span class=\"n\">App<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">frame<\/span> <span class=\"o\">=<\/span> <span class=\"n\">EncryptionFrame<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">frame<\/span><span class=\"o\">.<\/span><span class=\"n\">Show<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"n\">MainLoop<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li>\u5bf9GPT4\u63d0\u95ee\uff1a\u4f7f\u7528wxPython \u7f16\u5199\u4e00\u4e2a\u7528\u4e8e\u5b57\u7b26\u4e32\u52a0\u89e3\u5bc6\u7684GUI\u3002\u751f\u6210\u5927\u6982\u7684GUI\u4ee3\u7801\uff0c\u7136\u540e\u6839\u636e\u751f\u6210\u4ee3\u7801\u8fdb\u4e00\u6b65\u63d0\u95ee\u8fdb\u884c\u4fee\u6539<\/li>\n<li>base64\uff0cmd5,ase\uff0cdes\u7b97\u6cd5\u5b9e\u73b0\u90fd\u53ef\u4ee5\u8ba9GPT4\u751f\u6210<\/li>\n<li>\u7f51\u9875\u4e0a\u627e\u4e00\u4e2a\u5728\u7ebf\u52a0\u89e3\u5bc6\u7f51\u7ad9\uff0c\u8fdb\u884c\u5bf9\u6bd4\u6d4b\u8bd5\uff0c\u4fee\u6b63bug<\/li>\n<li>\u6d4b\u8bd5\u8fc7\u7a0b\u4e2d\u53d1\u73b0ase\/des\u7b97\u6cd5\uff0c\u52a0\u5bc6\u6a21\u5f0f\u9009\u62e9CFB\u65f6\uff0cpython\u7248\u672c\u52a0\u5bc6\u4e32\u53ef\u4ee5\u81ea\u884c\u89e3\u5bc6\uff0c\u4f46\u52a0\u5bc6\u7ed3\u679c\u4e0e\u7f51\u9875\u7248\u4e0d\u4e00\u81f4\uff0c\u539f\u56e0\u672a\u77e5<\/li>\n<li>\u4f7f\u7528pyinstaller.exe \u6253\u5305\n<ol>\n<li>\u63a8\u8350\u4f7f\u7528<code>pyinstaller.exe -F -w -i favicon.ico main.py<\/code>\u6253\u5305<\/li>\n<li>icon\u6587\u4ef6\u4e0emain.py\u653e\u5728\u540c\u4e00\u5c42\u7ea7<\/li>\n<\/ol>\n<\/li>\n<li>\u6574\u4f53\u8017\u65f61\u5929\uff0c\u5728\u7f16\u5199\u65e5\u5e38\u8f6f\u4ef6\u65f6python\u548cGPT\u642d\u914d\uff0c\u53ef\u4ee5\u6781\u5927\u63d0\u5347\u6548\u7387<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/gpt\/","term":"gpt","label":"gpt"}}]},{"title":"\n2023\u5e74\u603b\u7ed3","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/","updated":"2024-01-08T17:53:54+08:00","published":"2024-01-08T17:53:54+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n23\u5e74\u4e2a\u4eba\u603b\u7ed3","content":"\n<p>\u56de\u987e23\u5e74\u5370\u8c61\u6df1\u523b\u7684\u4e8b\u60c5\u5be5\u5be5\u65e0\u51e0\uff0c\u501f\u6b64\u673a\u4f1a\u5ba1\u89c6\u4e0b23\u5e74\u7684\u6240\u4f5c\u6240\u4e3a\u3002<\/p>\n<h2 id=\"\u751f\u6d3b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#\u751f\u6d3b\" class=\"anchor-link\" aria-label=\"\u751f\u6d3b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#contents:\u751f\u6d3b\" class=\"headings\">\u751f\u6d3b<\/a><\/h2>\n<ol>\n<li>\u603b\u4f53\u4e0a\u5bb6\u5ead\u751f\u6d3b\u8d8b\u4e8e\u7a33\u5b9a\uff0c\u4e2a\u4eba\u5728\u8001\u516c\/\u7236\u4eb2\/\u513f\u5b50\u89d2\u8272\u4e0a\u7684\u8868\u73b0\u96be\u8bf4\u53ca\u683c\uff0c\u60f3\u7684\u591a\u505a\u7684\u5c11\u3002<\/li>\n<li>\u4e0e\u8001\u5a46\u7ed3\u5a5a5\u5e74\u76f8\u8bc67\u5e74\uff0c\u73b0\u5728\u79f0\u547c\u53d8\u6210\u4e86\u5b69\u5b50\u7238\u7238\uff0c\u5b69\u5b50\u5988\u5988\uff0c\u4ee5\u8001\u516c\u8eab\u4efd\u505a\u7684\u4e8b\u60c5\u8d8a\u6765\u8d8a\u5c11\uff0c\u611f\u53d7\u4e0d\u5230\u7528\u5fc3\u4e8c\u5b57\u3002<\/li>\n<li>\u5c0f\u670b\u53cb\u7a81\u7136\u5f88\u9ecf\u81ea\u5df1\uff0c\u4f46\u4e0d\u77e5\u5982\u4f55\u505a\u597d\u4e00\u540d\u7236\u4eb2\uff0c\u5e38\u5e38\u611f\u5230\u4e0d\u5b89\u4e0e\u65e0\u529b\u3002<\/li>\n<li>6\u6708\u5e95\u6bcd\u4eb2\u4f4f\u9662\u505a\u4e86\u623f\u98a4\u624b\u672f\uff0c\u6574\u4e2a\u4f4f\u9662\u671f\u95f4\u6ca1\u6709\u53bb\u533b\u9662\u966a\u4f34\u5b9e\u5c5e\u4e0d\u8be5\uff0c\u4e00\u6643\u5df2\u7ecf\u662f\u4e0a\u6709\u8001\u4e0b\u6709\u5c0f\uff0c\u5fc3\u6001\u4e0a\u89c9\u5f97\u81ea\u5df1\u8fd8\u662f\u4e2a\u5b69\u5b50\uff0c\u6ca1\u6709\u627f\u62c5\u8d77\u5e94\u6709\u7684\u8d23\u4efb\u4e0e\u4e49\u52a1\u3002<\/li>\n<li>\u4e2a\u4eba\u8eab\u4f53\u5f00\u59cb\u62a5\u8b66\uff0c\u4e0a\u534a\u5e74\u505a\u4e86\u4e2a\u80be\u7ed3\u77f3\u624b\u672f\uff0c\u5e74\u5e95\u4f53\u68c0\u53c8\u68c0\u51fa\u7ed3\u77f3\uff0c\u540c\u65f6\u5fc3\u810f\u65f6\u4e0d\u65f6\u6709\u80f8\u95f7\u7684\u611f\u89c9\uff0c\u4e0d\u91cd\u89c6\u953b\u70bc\u8fc7\u4e8e\u61d2\u60f0\u3002<\/li>\n<li>\u4e0e\u54e5\u54e5\u7684\u5173\u7cfb\u6709\u6240\u6539\u5584\uff0c\u60c5\u5546\u4f9d\u7136\u6709\u5f85\u63d0\u9ad8\u3002<\/li>\n<li>10\u6708\u642d\u5efa\u4e86\u4e2a\u4eba\u535a\u5ba2\uff0c\u540c\u6b65\u7f16\u5199\u516c\u4f17\u53f7\u548c\u5c0f\u7ea2\u4e66\uff0c\u521d\u5fc3\u662f\u8d5a\u70b9\u5c0f\u94b1\uff0c\u5e0c\u671b\u53ef\u4ee5\u575a\u6301\u4e0b\u53bb<\/li>\n<li>\u4e0a\u73ed\u901a\u52e4\u65f6\u5f00\u59cb\u542c\u64ad\u5ba2\uff0c\u8fc7\u5f80\u63a5\u89e6\u7684\u77e5\u8bc6\u5b9e\u5728\u662f\u592a\u5c11\u4e86\uff0c\u8d8a\u6765\u8d8a\u611f\u89c9\u5230\u80fd\u529b\u4e0a\u7684\u5dee\u8ddd\u548c\u884c\u52a8\u4e0a\u7684\u4e0d\u8db3<\/li>\n<li>\u5b8c\u6210\u4e8624\u5e74\u7684\u5bb6\u5ead\u9884\u7b97\uff0c\u548c\u8001\u5a46\u5f00\u59cb\u771f\u7684\u8bb0\u8d26\uff0c\u6162\u6162\u63d0\u9ad8\u5bb6\u5ead\u8d22\u52a1\u7684\u7a33\u5b9a\u6027<\/li>\n<\/ol>\n<h2 id=\"\u5de5\u4f5c\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#\u5de5\u4f5c\" class=\"anchor-link\" aria-label=\"\u5de5\u4f5c\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#contents:\u5de5\u4f5c\" class=\"headings\">\u5de5\u4f5c<\/a><\/h2>\n<ol>\n<li>\u516c\u53f8\u7ecf\u8425\u72b6\u51b5\u51fa\u73b0\u4e86\u4e00\u4e9b\u95ee\u9898\uff0c\u516c\u53f8\u4eba\u4eba\u81ea\u5371\uff0c\u5e0c\u671b\u516c\u53f8\u80fd\u8d8a\u6765\u8d8a\u597d\uff0c\u4f46\u662f\u53c8\u65e0\u8ba1\u53ef\u65bd\u3002<\/li>\n<li>\u4eca\u5e74\u505a\u4e86\u4e00\u4e9b\u6709\u610f\u4e49\u7684\u9879\u76ee\uff0c\u5728\u4e1a\u52a1\u4e2d\u5e94\u7528\u5e7f\u6cdb\uff0c\u4f46\u662f\u4e2a\u4eba\u7684\u6210\u957f\u660e\u663e\u653e\u7f13\uff0c\u672a\u6765\u4e0d\u77e5\u4f55\u53bb\u4f55\u4ece\u3002<\/li>\n<li>\u672a\u6765\u60f3\u521b\u5efa\u5c5e\u4e8e\u81ea\u5df1\u7684\u5de5\u4f5c\u5ba4\uff0c\u76ee\u524d\u5b8c\u5168\u4e0d\u77e5\u9053\u4ece\u4f55\u5904\u4e0b\u624b\uff0c\u5982\u4f55\u62c6\u89e3\u76ee\u6807\uff0c\u5982\u4f55\u505a\u51c6\u5907\u3002<\/li>\n<\/ol>\n<h2 id=\"24\u5e74\u89c4\u5212\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#24\u5e74\u89c4\u5212\" class=\"anchor-link\" aria-label=\"24\u5e74\u89c4\u5212\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/annual_review_2023\/#contents:24\u5e74\u89c4\u5212\" class=\"headings\">24\u5e74\u89c4\u5212<\/a><\/h2>\n<ol>\n<li>\u8bfb6\u672c\u4e66\uff08\u4e24\u4e2a\u6708\u4e00\u672c\uff0c\u5e0c\u671b\u53ef\u4ee5\u5b8c\u6210\uff09\uff0c\u63d0\u9ad8\u60c5\u5546\u4e3a\u5bb6\u5ead\u63d0\u4f9b\u66f4\u7a33\u5b9a\u7684\u60c5\u7eea\u4ef7\u503c\u3002<\/li>\n<li>\u901a\u8fc7\u953b\u70bc\u4f53\u91cd\u964d\u5230130\u65a4\uff0c\u6539\u5584\u8eab\u4f53\uff0c\u63d0\u9ad8\u5bb6\u5ead\u7684\u6297\u98ce\u9669\u80fd\u529b\u3002<\/li>\n<li>\u62c6\u89e3\u521b\u5efa\u5de5\u4f5c\u5ba4\u8fd9\u4e00\u76ee\u6807\uff0c\u8e0f\u51fa\u7b2c\u4e00\u6b65\uff0c\u6162\u6162\u5f00\u59cb\u8bd5\u9519<\/li>\n<li>\u5168\u5e74\u7406\u8d22\u6536\u76ca4%<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E7%94%9F%E6%B4%BB\/","term":"\u751f\u6d3b","label":"\u751f\u6d3b"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%80%BB%E7%BB%93\/","term":"\u603b\u7ed3","label":"\u603b\u7ed3"}}]},{"title":"\n\u642d\u5efa\u4e2a\u4eba\u4e66\u57ce","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/","updated":"2024-01-02T10:15:29+08:00","published":"2024-01-02T10:15:29+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u642d\u5efa\u4e2a\u4eba\u4e66\u57ce\uff0c\u53ef\u9009\u62e9\u4f7f\u7528talebook\u6216copyBook\u5f00\u6e90\u9879\u76ee\uff0c\u524d\u8005\u7b80\u6d01\u652f\u6301\u591a\u79cd\u683c\u5f0f\u4e0a\u4f20\uff0c\u540e\u8005\u7c7b\u4f3c\u7f51\u7edc\u5c0f\u8bf4\u7f51\u7ad9\uff0c\u9700\u8981\u5c06\u7ae0\u8282\u4fe1\u606f\u5199\u5165\u6570\u636e\u5e93\u3002\u722c\u866b\u590d\u7528copyBook\u9879\u76ee\uff0c\u6dfb\u52a0\u89e3\u6790\u6587\u4ef6\u5373\u53ef\uff0c\u8fd8\u53ef\u6dfb\u52a0\u4ee3\u7406\u548c\u5728python\u4e2d\u8fd0\u884cjs","content":"\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u6700\u8fd1\u51c6\u5907\u770b\u770b\u300a\u4e00\u53ea\u7279\u7acb\u72ec\u884c\u7684\u732a\u300b\u8fd9\u672c\u4e66\uff0c\u5728\u627e\u4e66\u8fc7\u7a0b\u4e2d\u770b\u5230\u4e86\u5f88\u591a\u6709\u610f\u601d\u7684\u5f00\u6e90\u9879\u76ee\u548c\u7f51\u7ad9\u3002\u8003\u8651\u5230\u6709\u4e2a\u670d\u52a1\u5668\u4e00\u76f4\u95f2\u7f6e\uff0c\u7136\u540e\u76ee\u7684\u7531\u627e\u4e66\u53d8\u6210\u4e86\u642d\u5efa\u4e2a\u4eba\u7684\u4e66\u57ce\u3002<\/p>\n<h2 id=\"\u8d44\u6e90\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#\u8d44\u6e90\" class=\"anchor-link\" aria-label=\"\u8d44\u6e90\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:\u8d44\u6e90\" class=\"headings\">\u8d44\u6e90<\/a><\/h2>\n<ol>\n<li><a href=\"https:\/\/github.com\/talebook\/talebook\" target=\"_blank\" rel=\"noopener\">\u7f51\u7ad9\u642d\u5efatalebook<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hahaha108\/copyBook\" target=\"_blank\" rel=\"noopener\">\u7f51\u7ad9\u642d\u5efacopyBook<\/a><\/li>\n<li><a href=\"https:\/\/24hbook.com\/\" target=\"_blank\" rel=\"noopener\">24h\u641c\u4e66\u7f51<\/a><\/li>\n<li><a href=\"https:\/\/beitai.cc\/\" target=\"_blank\" rel=\"noopener\">\u5907\u80ce\u4e66\u5c4b<\/a><\/li>\n<li><a href=\"https:\/\/www.bidutuijian.com\/\" target=\"_blank\" rel=\"noopener\">\u5fc5\u8bfb\u63a8\u8350<\/a><\/li>\n<\/ol>\n<h2 id=\"\u7f51\u7ad9\u642d\u5efa\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#\u7f51\u7ad9\u642d\u5efa\" class=\"anchor-link\" aria-label=\"\u7f51\u7ad9\u642d\u5efa\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:\u7f51\u7ad9\u642d\u5efa\" class=\"headings\">\u7f51\u7ad9\u642d\u5efa<\/a><\/h2>\n<ol>\n<li>talebook \u652f\u6301epub,txt\u7b49\u683c\u5f0f\uff0c\u652f\u6301\u6279\u91cf\u4e0a\u4f20\uff0c\u642d\u5efa\u7684\u7f51\u7ad9\u7b80\u6d01<\/li>\n<li>copyBook \u9700\u8981\u901a\u8fc7\u722c\u866b\u811a\u672c\u5c06\u7ae0\u8282\u4fe1\u606f\u5199\u5165\u6570\u636e\u5e93\uff0c\u642d\u5efa\u7684\u7f51\u7ad9\u7c7b\u4f3c\u7f51\u7edc\u5c0f\u8bf4\u5728\u7ebf\u9605\u8bfb\u7f51\u7ad9<\/li>\n<li>\u91c7\u7528talebook \u642d\u5efa\u7f51\u7ad9\uff0c\u6b65\u9aa4\u5f88\u7b80\u5355\uff0c\u6309\u7167\u8bf4\u660e\u6587\u6863\u8fdb\u884c\u90e8\u7f72\u5c31\u884c\u3002\u6211\u91c7\u7528docker\u8fdb\u884c\u7684\u90e8\u7f72\n<ol>\n<li><a href=\"https:\/\/cloud.tencent.com\/developer\/article\/1855291\" target=\"_blank\" rel=\"noopener\">docker-compose \u5b89\u88c5<\/a><\/li>\n<li>docker-compose.yml\u4e2d<code>\/tmp\/demo:\/data<\/code>\u8c03\u6574\u4e3a<code>\/data\/talebook:\/data<\/code><\/li>\n<li>\u90e8\u7f72\u6307\u4ee4\uff1a<code>docker-compose -f docker-compose.yml up -d<\/code><\/li>\n<\/ol>\n<\/li>\n<li>\u95f2\u7f6e\u7684\u673a\u5668\u4e0a\u91c7\u7528caddy2\u8fdb\u884c\u53cd\u5411\u4ee3\u7406\n<ol>\n<li>talebook\u90e8\u7f72\u5b8c\u6210\u540e\uff0c\u4fee\u6539\/etc\/caddy\/Caddyfile\u65b0\u589e<code>reverse_proxy 127.0.0.1:8080<\/code><\/li>\n<li>8080\u4e3adocker-compose.yml\u4e2d\u586b\u5199\u7684\u7aef\u53e3<\/li>\n<li>XXXX\u4e3a\u5bf9\u5e94\u7684\u57df\u540d<\/li>\n<li>\u4f7f\u7528\u5bf9\u5e94\u57df\u540d\u5373\u53ef\u8bbf\u95ee\u7f51\u7ad9<\/li>\n<\/ol>\n<\/li>\n<li>\u901a\u8fc7\u722c\u866b\u83b7\u53d6\u4e0d\u540c\u7ebf\u4e0a\u4e66\u57ce\u7684\u4e66\u7c4d\uff0c\u4e0a\u4f20\u5230\u670d\u52a1\u5668\u6307\u5b9a\u7684\u76ee\u5f55<code>\/data\/talebook\/book\/imports<\/code>\uff0c\u5728\u7f51\u9875\u901a\u8fc7\u6279\u91cf\u540c\u6b65\u65b9\u5f0f\u5bfc\u5165\u7f51\u7ad9<\/li>\n<li>\u624b\u673a\u4e0a\u4e0b\u8f7dkybook APP\u6dfb\u52a0opds\u5730\u5740\uff0c\u652f\u6301\u641c\u7d22\uff0c\u4e66\u7c4d\u4e0b\u8f7d\u540e\u9605\u8bfb<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">XXXX {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> handle_path \/XXXX {\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:28727\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> }\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> reverse_proxy 127.0.0.1:8080\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">import sites\/*\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h2 id=\"\u722c\u866b\u5e38\u7528\u6280\u80fd\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#\u722c\u866b\u5e38\u7528\u6280\u80fd\" class=\"anchor-link\" aria-label=\"\u722c\u866b\u5e38\u7528\u6280\u80fd\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:\u722c\u866b\u5e38\u7528\u6280\u80fd\" class=\"headings\">\u722c\u866b\u5e38\u7528\u6280\u80fd<\/a><\/h2>\n<h3 id=\"scrapy\u722c\u866b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#scrapy\u722c\u866b\" class=\"anchor-link\" aria-label=\"scrapy\u722c\u866b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:scrapy\u722c\u866b\" class=\"headings\">scrapy\u722c\u866b<\/a><\/h3>\n<ol>\n<li>\u6574\u4f53\u722c\u866b\u4ee3\u7801\u6846\u67b6\u5b8c\u5168\u590d\u7528copyBook\u8fd9\u4e2a\u9879\u76ee,\u53ea\u9700\u5728<code>bookspider\/bookspider\/spider<\/code>\u4e2d\u6dfb\u52a0\u89e3\u6790\u6587\u4ef6<\/li>\n<li>\u6dfb\u52a0\u89e3\u6790xx.py\u6587\u4ef6\uff0c\u5e76\u4fee\u6539name\u53c2\u6570\u4e3axx\uff0c\u7f16\u5199\u597d\u60f3\u8981\u89e3\u6790\u4ee3\u7801\n<ol>\n<li>\u4fee\u6539<code>copyBook\\bookspider\\start.py<\/code>\u4e3a<code>cmdline.execute('scrapy crawl xx'.split())<\/code> \u5373\u53ef\u8fd0\u884c<\/li>\n<\/ol>\n<\/li>\n<li><code>yield scrapy.Request(bookUrl,meta={&quot;categoryName&quot;:categoryName},callback=self.getBooks)<\/code>\n<ol>\n<li>bookUrl\u4e3a\u5b8c\u6574\u7684\u5730\u5740,getBooks\u4e3a\u56de\u8c03\u51fd\u6570<\/li>\n<li>getBooks\u4e2dresponse\u4e3a\u8bf7\u6c42\u8fd4\u56de\u6570\u636e\uff0c\u5982\u679c\u5730\u5740\u662f\u6587\u4ef6\u5730\u5740\uff0c\u5219response.body\u5373\u6587\u4ef6\u6570\u636e<\/li>\n<\/ol>\n<\/li>\n<li>allowed_domains \u4e2d\u4e3a\u5141\u8bb8\u8bbf\u95ee\u7684\u57df\u540d\uff0c\u6839\u636e\u722c\u866b\u9700\u8981\u8fdb\u884c\u6dfb\u52a0<\/li>\n<\/ol>\n<h3 id=\"scrapy\u4f7f\u7528\u4ee3\u7406\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#scrapy\u4f7f\u7528\u4ee3\u7406\" class=\"anchor-link\" aria-label=\"scrapy\u4f7f\u7528\u4ee3\u7406\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:scrapy\u4f7f\u7528\u4ee3\u7406\" class=\"headings\">scrapy\u4f7f\u7528\u4ee3\u7406<\/a><\/h3>\n<p>\u53c2\u8003\u7f51\u7edc\u6587\u7ae0\uff0c\u4fee\u6539<code>copyBook\\bookspider\\bookspider\\settings.py<\/code>\u672a\u6210\u529f\uff0c\u76f4\u63a5\u5728\u722c\u866b\u7c7b\u4e2d\u6dfb\u52a0\u5982\u4e0b\u4ee3\u7801\uff0c\u9a8c\u8bc1\u4ee3\u7406\u901a\u8fc7<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;HTTP_PROXY&#34;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;http:\/\/127.0.0.1:1081&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">environ<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;HTTPS_PROXY&#34;<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;http:\/\/127.0.0.1:1081&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"python\u8fd0\u884cjs\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#python\u8fd0\u884cjs\" class=\"anchor-link\" aria-label=\"python\u8fd0\u884cjs\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:python\u8fd0\u884cjs\" class=\"headings\">python\u8fd0\u884cjs<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">decode<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span><span class=\"n\">data<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">split<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">realpath<\/span><span class=\"p\">(<\/span><span class=\"vm\">__file__<\/span><span class=\"p\">))[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39;\/xxx.js&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">path<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;r&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">encoding<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;UTF-8&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">js_code<\/span> <span class=\"o\">=<\/span> <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">context<\/span> <span class=\"o\">=<\/span> <span class=\"n\">execjs<\/span><span class=\"o\">.<\/span><span class=\"n\">compile<\/span><span class=\"p\">(<\/span><span class=\"n\">js_code<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;decode&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">result<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li>\u5b89\u88c5PyExecJS\uff0c<code>pip install PyExecJS<\/code><\/li>\n<li>context.call\u4e2ddecode\u4e3axxx.js\u4e2d\u51fd\u6570\u540d\uff0cdata\u4e3a\u51fd\u6570\u9700\u8981\u7684\u53c2\u6570<\/li>\n<li>PyExecJS\u7684\u8fd0\u884c\u4f9d\u8d56node.js<\/li>\n<\/ol>\n<h3 id=\"xpath\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#xpath\" class=\"anchor-link\" aria-label=\"xpath\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:xpath\" class=\"headings\">xpath<\/a><\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">parse<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">response<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">authors_table<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\/\/article[@class=&#39;markdown-body&#39;]\/table&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">authors_ul<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\/\/article[@class=&#39;markdown-body&#39;]\/ul&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">author<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">authors_table<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_name<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;thead\/tr\/th\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span> <span class=\"ow\">or<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;thead\/tr\/th\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">continue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;thead\/tr\/th\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;thead\/tr\/th\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author_url<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;..&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">yield<\/span> <span class=\"n\">scrapy<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">base_url<\/span> <span class=\"o\">+<\/span> <span class=\"n\">author_url<\/span><span class=\"p\">,<\/span><span class=\"n\">meta<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s2\">&#34;authorName&#34;<\/span><span class=\"p\">:<\/span><span class=\"n\">author_name<\/span><span class=\"p\">},<\/span><span class=\"n\">callback<\/span><span class=\"o\">=<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">getBooks<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">authors_body<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;tbody\/tr&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">author_body<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">authors_body<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_body_name<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_body_url<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author_body<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;td\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span> <span class=\"ow\">or<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author_body<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;td\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">continue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_body_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author_body<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;td\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_body_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author_body<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;td\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_body_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author_body_url<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;..&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">yield<\/span> <span class=\"n\">scrapy<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">base_url<\/span> <span class=\"o\">+<\/span><span class=\"n\">author_body_url<\/span><span class=\"p\">,<\/span><span class=\"n\">meta<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s2\">&#34;authorName&#34;<\/span><span class=\"p\">:<\/span><span class=\"n\">author_body_name<\/span><span class=\"p\">},<\/span><span class=\"n\">callback<\/span><span class=\"o\">=<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">getBooks<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">author<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">authors_ul<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_name<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;li\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span> <span class=\"ow\">or<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;li\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">())<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">continue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;li\/a\/text()&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author<\/span><span class=\"o\">.<\/span><span class=\"n\">xpath<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;li\/a\/@href&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">extract<\/span><span class=\"p\">()[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">author_url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">author_url<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;..&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">yield<\/span> <span class=\"n\">scrapy<\/span><span class=\"o\">.<\/span><span class=\"n\">Request<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">base_url<\/span> <span class=\"o\">+<\/span> <span class=\"n\">author_url<\/span><span class=\"p\">,<\/span><span class=\"n\">meta<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s2\">&#34;authorName&#34;<\/span><span class=\"p\">:<\/span><span class=\"n\">author_name<\/span><span class=\"p\">},<\/span><span class=\"n\">callback<\/span><span class=\"o\">=<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">getBooks<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li><code>len(author.xpath(&quot;thead\/tr\/th\/a\/text()&quot;).extract())<\/code>\u901a\u8fc7\u957f\u5ea6\u5224\u65ad\u662f\u5426\u6709\u503c<\/li>\n<li><code>author_name = author.xpath(&quot;thead\/tr\/th\/a\/text()&quot;).extract()[0]<\/code>\u53d6\u503c<\/li>\n<li><code>book.xpath(&quot;td[1]\/text()&quot;).extract()<\/code> \u5217\u8868\u7d22\u5f15\u4ece1\u5f00\u59cb<\/li>\n<\/ol>\n<h2 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/scrapy_use\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h2>\n<ol>\n<li>github \u771f\u662f\u6548\u7387\u5de5\u5177\uff0c\u9700\u8981\u7684\u5404\u79cd\u5de5\u5177\u90fd\u53ef\u4ee5\u627e\u5230<\/li>\n<li>scrapy \u53ea\u4f7f\u7528\u4e86\u5e38\u89c4\u7684\u80fd\u529b\uff0c\u4ee3\u7406\u6c60\u3001\u589e\u91cf\u66f4\u65b0\u7b49\u8fd8\u672a\u6d89\u53ca<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/scrapy\/","term":"scrapy","label":"scrapy"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/xpath\/","term":"xpath","label":"xpath"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}}]},{"title":"\n\u4e3a\u535a\u5ba2Giscus\u8bc4\u8bba\u589e\u52a0\u901a\u77e5\u673a\u5668\u4eba","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/","updated":"2023-12-18T15:34:23+08:00","published":"2023-12-18T15:34:23+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u6587\u7ae0\u4ecb\u7ecd\u4e86\u5982\u4f55\u7ed9Giscus\u7cfb\u7edf\u589e\u52a0\u4e00\u4e2a\u673a\u5668\u4eba\u901a\u77e5\u529f\u80fd\u7684\u65b9\u6848\u548c\u5b9e\u73b0\u65b9\u5f0f\u3002\u4f7f\u7528github\u7684webhook\u548ccloudflare\u7684worker\u670d\u52a1\uff0c\u53ef\u4ee5\u5c06\u65b0\u589e\u7684discussion\u548ccomment\u4fe1\u606f\u8f6c\u53d1\u7ed9\u4f01\u4e1a\u5fae\u4fe1\u6216\u98de\u4e66\u3002","content":"\n<h2 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h2>\n<p>\u6700\u8fd1\u6709\u4eba\u5bf9\u535a\u5ba2\u5185\u5bb9\u8fdb\u884c\u4e86\u8bc4\u8bba\uff0c\u672a\u6536\u5230\u4efb\u4f55\u901a\u77e5\uff0c\u8fc7\u4e86\u51e0\u5929\u624d\u53d1\u73b0\uff0c\u4e0d\u5229\u4e8e\u6c9f\u901a\u4ea4\u6d41\u3002\u56e0\u5de5\u4f5c\u4e2d\u7ecf\u5e38\u4f7f\u7528\u4f01\u4e1a\u5fae\u4fe1\uff0c\u6240\u4ee5\u51c6\u5907\u7ed9Giscus\u7cfb\u7edf\u589e\u52a0\u4e00\u4e2a\u4f01\u4e1a\u5fae\u4fe1\u901a\u77e5\u529f\u80fd\u3002<\/p>\n<h2 id=\"\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#contents:\u65b9\u6848\" class=\"headings\">\u65b9\u6848<\/a><\/h2>\n<ol>\n<li>google\u641c\u7d22\u8d44\u6599,\u9605\u8bfb<a href=\"https:\/\/wenchao.ren\/posts\/%E4%B8%BAGiscus%E5%A2%9E%E5%8A%A0%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%8A%9F%E8%83%BD.html\" target=\"_blank\" rel=\"noopener\">\u4e3aGiscus\u589e\u52a0\u90ae\u4ef6\u901a\u77e5\u529f\u80fd<\/a>\uff0c<a href=\"https:\/\/cloud.tencent.com\/developer\/article\/1833773\" target=\"_blank\" rel=\"noopener\">\u62c9\u4ec7\u6068\uff01webhook + \u4f01\u4e1a\u5fae\u4fe1 \u7ed9\u540c\u4e8b\u505a\u4e86\u4e2a\u4ee3\u7801\u63d0\u4ea4\u76d1\u542c\u5de5\u5177<\/a>\u7b49\u6587\u7ae0<\/li>\n<li>\u65b9\u6848\u521d\u6b65\u660e\u786e\uff1a\u57fa\u4e8e\u4f01\u4e1a\u5fae\u4fe1\u548cgithub\u7684webhook\u529f\u80fd\uff0c\u589e\u52a0\u4e00\u4e2a\u8f6c\u53d1\u670d\u52a1\u5373\u53ef\u3002<\/li>\n<li>\u6700\u8fd1\u4f7f\u7528cloudflare\u7684worker\u529f\u80fd\uff0c\u7528\u7684\u975e\u5e38\u5f00\u5fc3\u3002\u57fa\u4e8ecloudflare\u7684worker\u670d\u52a1\u5229\u7528js\u53ef\u4ee5\u5f88\u597d\u5b8c\u6210\u6d88\u606f\u5904\u7406\u548c\u8f6c\u53d1\u3002<\/li>\n<li>\u65b9\u6848\u6210\u578b:\u5229\u7528github\u7684webhook\u5c06\u65b0\u589e\u7684discussion\u548ccomment\u4fe1\u606f\u8f6c\u53d1\u7ed9cloudflare worker\u4e2d\u7684js\u670d\u52a1\uff0cjs\u670d\u52a1\u5bf9\u6d88\u606f\u5904\u7406\u540e\u901a\u8fc7webhook\u8f6c\u53d1\u4f01\u4e1a\u5fae\u4fe1<\/li>\n<\/ol>\n<h2 id=\"\u5b9e\u73b0\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#\u5b9e\u73b0\" class=\"anchor-link\" aria-label=\"\u5b9e\u73b0\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#contents:\u5b9e\u73b0\" class=\"headings\">\u5b9e\u73b0<\/a><\/h2>\n<p>\u5728github\u4e2d\u627e\u5230\u9879\u76ee<a href=\"https:\/\/github.com\/huhuhang\/github-wechat-bot\/blob\/master\/README.md\" target=\"_blank\" rel=\"noopener\">huhuhang\/github-wechat-bot<\/a>\uff0c\u6b64\u9879\u76ee\u63d0\u4f9b\u4e86\u57fa\u4e8e Cloudflare Workers \u90e8\u7f72 API\uff0c\u652f\u6301\u57fa\u4e8e GitHub Webhook \u5c06\u64cd\u4f5c\u6d88\u606f\u63a8\u9001\u7ed9\u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u3002\u53ea\u7528\u652f\u6301Discussions\u7684\u76d1\u63a7\u5c31\u884c\u3002<\/p>\n<ol>\n<li>\n<p>\u6309\u7167\u9879\u76ee\u7684Readme\uff0c\u5b8c\u6210github\/\u4f01\u4e1a\u5fae\u4fe1\/cloudflare\u7684\u8bbe\u7f6e\uff0c\u8bbe\u7f6e\u5b8c\u6210\u540e\u5728\u4f01\u4e1a\u5fae\u4fe1\u53ef\u4ee5\u770b\u5230\u7fa4\u673a\u5668\u4eba\u53d1\u9001\u7684ping\u8bf7\u6c42\u3002\u5982\u679c\u6ca1\u6709\u770b\u5230\u53ef\u4ee5\u5728github webhook\u9875\u9762\uff0c\u70b9\u51fbRecent Deliveries,\u53ef\u4ee5\u91cd\u65b0\u53d1\u9001\u3002\u5982\u679c\u8fd8\u6ca1\u6709\u770b\u5230\u53ef\u4ee5\u6267\u884c\u68c0\u6d4b\u8bbe\u7f6e\u662f\u5426\u6b63\u786e\u3002<\/p>\n<\/li>\n<li>\n<p>github webhook\u9875\u9762\u70b9Edit\uff0c\u7136\u540e\u52fe\u9009\u76d1\u63a7&quot;Discussion comments&quot;,&quot;Discussions&quot;\u6d88\u606f<\/p>\n<\/li>\n<li>\n<p>\u589e\u52a0Discussions\u6d88\u606fjs\u5904\u7406\u4ee3\u7801\uff0c\u4e3b\u8981\u901a\u8fc7\u6253\u5370\u65e5\u5fd7\u8fdb\u884c\u8c03\u8bd5\uff0c\u6700\u7ec8js\u4ee3\u7801\u5982\u4e0b<\/p>\n<ol>\n<li>cloudflare\u5728Logs-&gt;Real-time Logs-&gt;Begin log stream\u53ef\u4ee5\u770b\u5230console.log\u6253\u5370\u7684\u65e5\u5fd7<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><span class=\"lnt\">128\n<\/span><span class=\"lnt\">129\n<\/span><span class=\"lnt\">130\n<\/span><span class=\"lnt\">131\n<\/span><span class=\"lnt\">132\n<\/span><span class=\"lnt\">133\n<\/span><span class=\"lnt\">134\n<\/span><span class=\"lnt\">135\n<\/span><span class=\"lnt\">136\n<\/span><span class=\"lnt\">137\n<\/span><span class=\"lnt\">138\n<\/span><span class=\"lnt\">139\n<\/span><span class=\"lnt\">140\n<\/span><span class=\"lnt\">141\n<\/span><span class=\"lnt\">142\n<\/span><span class=\"lnt\">143\n<\/span><span class=\"lnt\">144\n<\/span><span class=\"lnt\">145\n<\/span><span class=\"lnt\">146\n<\/span><span class=\"lnt\">147\n<\/span><span class=\"lnt\">148\n<\/span><span class=\"lnt\">149\n<\/span><span class=\"lnt\">150\n<\/span><span class=\"lnt\">151\n<\/span><span class=\"lnt\">152\n<\/span><span class=\"lnt\">153\n<\/span><span class=\"lnt\">154\n<\/span><span class=\"lnt\">155\n<\/span><span class=\"lnt\">156\n<\/span><span class=\"lnt\">157\n<\/span><span class=\"lnt\">158\n<\/span><span class=\"lnt\">159\n<\/span><span class=\"lnt\">160\n<\/span><span class=\"lnt\">161\n<\/span><span class=\"lnt\">162\n<\/span><span class=\"lnt\">163\n<\/span><span class=\"lnt\">164\n<\/span><span class=\"lnt\">165\n<\/span><span class=\"lnt\">166\n<\/span><span class=\"lnt\">167\n<\/span><span class=\"lnt\">168\n<\/span><span class=\"lnt\">169\n<\/span><span class=\"lnt\">170\n<\/span><span class=\"lnt\">171\n<\/span><span class=\"lnt\">172\n<\/span><span class=\"lnt\">173\n<\/span><span class=\"lnt\">174\n<\/span><span class=\"lnt\">175\n<\/span><span class=\"lnt\">176\n<\/span><span class=\"lnt\">177\n<\/span><span class=\"lnt\">178\n<\/span><span class=\"lnt\">179\n<\/span><span class=\"lnt\">180\n<\/span><span class=\"lnt\">181\n<\/span><span class=\"lnt\">182\n<\/span><span class=\"lnt\">183\n<\/span><span class=\"lnt\">184\n<\/span><span class=\"lnt\">185\n<\/span><span class=\"lnt\">186\n<\/span><span class=\"lnt\">187\n<\/span><span class=\"lnt\">188\n<\/span><span class=\"lnt\">189\n<\/span><span class=\"lnt\">190\n<\/span><span class=\"lnt\">191\n<\/span><span class=\"lnt\">192\n<\/span><span class=\"lnt\">193\n<\/span><span class=\"lnt\">194\n<\/span><span class=\"lnt\">195\n<\/span><span class=\"lnt\">196\n<\/span><span class=\"lnt\">197\n<\/span><span class=\"lnt\">198\n<\/span><span class=\"lnt\">199\n<\/span><span class=\"lnt\">200\n<\/span><span class=\"lnt\">201\n<\/span><span class=\"lnt\">202\n<\/span><span class=\"lnt\">203\n<\/span><span class=\"lnt\">204\n<\/span><span class=\"lnt\">205\n<\/span><span class=\"lnt\">206\n<\/span><span class=\"lnt\">207\n<\/span><span class=\"lnt\">208\n<\/span><span class=\"lnt\">209\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-JavaScript\" data-lang=\"JavaScript\"><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} response \u5904\u7406JSON\u683c\u5f0f\u7684\u54cd\u5e94\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">gatherResponse<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">headers<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">response<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">contentType<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">headers<\/span><span class=\"p\">.<\/span><span class=\"nx\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;content-type&#34;<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span> <span class=\"s2\">&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">contentType<\/span><span class=\"p\">.<\/span><span class=\"nx\">includes<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;application\/json&#34;<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringify<\/span><span class=\"p\">(<\/span><span class=\"kr\">await<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">json<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} content \u9700\u8981\u53d1\u9001\u7684\u5185\u5bb9\uff0c\u652f\u6301 Markdown \u683c\u5f0f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">content<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">baseUrl<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;https:\/\/qyapi.weixin.qq.com\/cgi-bin\/webhook\/&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">url<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">baseUrl<\/span><span class=\"si\">}<\/span><span class=\"sb\">send?key=<\/span><span class=\"si\">${<\/span><span class=\"nx\">botKey<\/span><span class=\"si\">}<\/span><span class=\"sb\">`<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">init<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">method<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;POST&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">headers<\/span><span class=\"o\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;Content-Type&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;application\/json&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">body<\/span><span class=\"o\">:<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">stringify<\/span><span class=\"p\">({<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;msgtype&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;markdown&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;markdown&#34;<\/span><span class=\"o\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;content&#34;<\/span><span class=\"o\">:<\/span> <span class=\"nx\">content<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">})<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">fetch<\/span><span class=\"p\">(<\/span><span class=\"nx\">url<\/span><span class=\"p\">,<\/span> <span class=\"nx\">init<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">gatherResponse<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u6807\u8bb0\u4e8b\u4ef6\u52a8\u4f5c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kr\">const<\/span> <span class=\"nx\">actionWords<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;opened&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u521b\u5efa&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;closed&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;warning&#39;&gt;\u5173\u95ed&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;deleted&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u5220\u9664&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;reopened&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u91cd\u65b0\u53d1\u8d77&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;edited&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u66f4\u65b0&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;merge&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;warning&#39;&gt;\u5408\u5e76&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;created&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u521b\u5efa&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;requested&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u8bf7\u6c42&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;completed&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;warning&#39;&gt;\u5b8c\u6210&lt;\/font&gt;&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;synchronize&#34;<\/span><span class=\"o\">:<\/span> <span class=\"s2\">&#34;&lt;font color=&#39;info&#39;&gt;\u540c\u6b65\u66f4\u65b0&lt;\/font&gt;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * \u5904\u7406 Ping \u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} reqBody GitHub \u4f20\u9012\u7684\u8bf7\u6c42\u4f53\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handlePing<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">hook<\/span><span class=\"p\">,<\/span> <span class=\"nx\">repository<\/span><span class=\"p\">,<\/span> <span class=\"nx\">organization<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5224\u5b9a\u662f\u7ec4\u7ec7\u8fd8\u662f\u4ed3\u5e93\u914d\u7f6e Webhook\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">hook<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;Organization&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;\u6210\u529f\u6536\u5230\u4e86\u6765\u81ea Github \u7684 Ping \u8bf7\u6c42\uff0c\u7ec4\u7ec7: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">organization<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;\u6210\u529f\u6536\u5230\u4e86\u6765\u81ea Github \u7684 Ping \u8bf7\u6c42\uff0c\u4ed3\u5e93\u5730\u5740: &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * \u5904\u7406 PR \u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} reqBody GitHub \u4f20\u9012\u7684\u8bf7\u6c42\u4f53\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handlePR<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">action<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sender<\/span><span class=\"p\">,<\/span> <span class=\"nx\">pull_request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">repository<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span> <span class=\"o\">!==<\/span> <span class=\"s2\">&#34;Bot&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;opened&#34;<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;reopened&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u5728 [<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">full_name<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) <\/span><span class=\"si\">${<\/span><span class=\"nx\">actionWords<\/span><span class=\"p\">[<\/span><span class=\"nx\">action<\/span><span class=\"p\">]<\/span><span class=\"si\">}<\/span><span class=\"sb\">\u4e86\u4e00\u4e2a PR:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u5206\u652f: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">head<\/span><span class=\"p\">.<\/span><span class=\"nx\">ref<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u2192 <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">base<\/span><span class=\"p\">.<\/span><span class=\"nx\">ref<\/span><span class=\"si\">}<\/span><span class=\"sb\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u540d\u79f0: [<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) #<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">number<\/span><span class=\"si\">}<\/span><span class=\"sb\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u4fee\u6539: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">changed_files<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u4e2a\u6587\u4ef6 (&lt;font color=&#34;info&#34;&gt;+ <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">additions<\/span><span class=\"si\">}<\/span><span class=\"sb\">&lt;\/font&gt; &lt;font color=&#34;warning&#34;&gt;- <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">deletions<\/span><span class=\"si\">}<\/span><span class=\"sb\">&lt;\/font&gt; \u884c\u4fee\u6539)`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;closed&#34;<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">merged<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u5728 [<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">full_name<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) <\/span><span class=\"si\">${<\/span><span class=\"nx\">actionWords<\/span><span class=\"p\">[<\/span><span class=\"nx\">action<\/span><span class=\"p\">]<\/span><span class=\"si\">}<\/span><span class=\"sb\">\u4e86\u4e00\u4e2a PR:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u5206\u652f: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">head<\/span><span class=\"p\">.<\/span><span class=\"nx\">ref<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u2192 <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">base<\/span><span class=\"p\">.<\/span><span class=\"nx\">ref<\/span><span class=\"si\">}<\/span><span class=\"sb\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u540d\u79f0: [<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) #<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">number<\/span><span class=\"si\">}<\/span><span class=\"sb\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u4fee\u6539: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">changed_files<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u4e2a\u6587\u4ef6 (&lt;font color=&#34;info&#34;&gt;+ <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">additions<\/span><span class=\"si\">}<\/span><span class=\"sb\">&lt;\/font&gt; &lt;font color=&#34;warning&#34;&gt;- <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">deletions<\/span><span class=\"si\">}<\/span><span class=\"sb\">&lt;\/font&gt; \u884c\u4fee\u6539)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u53d1\u8d77: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">user<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> (<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">created_at<\/span><span class=\"si\">}<\/span><span class=\"sb\">)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u5ba1\u6838: <\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">merged_by<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> (<\/span><span class=\"si\">${<\/span><span class=\"nx\">pull_request<\/span><span class=\"p\">.<\/span><span class=\"nx\">review_comments<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u6761\u610f\u89c1)`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">action<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u64cd\u4f5c\u6682\u65f6\u4e0d\u4f1a\u88ab\u5904\u7406`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">type<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u64cd\u4f5c\u6682\u65f6\u4e0d\u4f1a\u88ab\u5904\u7406`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * \u5904\u7406 Issues \u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} reqBody GitHub \u4f20\u9012\u7684\u8bf7\u6c42\u4f53\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handleIssue<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">action<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sender<\/span><span class=\"p\">,<\/span> <span class=\"nx\">issue<\/span><span class=\"p\">,<\/span> <span class=\"nx\">repository<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;opened&#34;<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;closed&#34;<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;reopened&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u5728 [<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">full_name<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) <\/span><span class=\"si\">${<\/span><span class=\"nx\">actionWords<\/span><span class=\"p\">[<\/span><span class=\"nx\">action<\/span><span class=\"p\">]<\/span><span class=\"si\">}<\/span><span class=\"sb\">\u4e86\u4e00\u4e2a Issues:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u540d\u79f0: [<\/span><span class=\"si\">${<\/span><span class=\"nx\">issue<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">issue<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">)`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">action<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u64cd\u4f5c\u6682\u65f6\u4e0d\u4f1a\u88ab\u5904\u7406`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * \u5904\u7406 discussion_comment \u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} reqBody GitHub \u4f20\u9012\u7684\u8bf7\u6c42\u4f53\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handle_discussion_comment<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">action<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sender<\/span><span class=\"p\">,<\/span> <span class=\"nx\">comment<\/span><span class=\"p\">,<\/span> <span class=\"nx\">discussion<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;created&#34;<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;deleted&#34;<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;edited&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u5728 <\/span><span class=\"si\">${<\/span><span class=\"nx\">discussion<\/span><span class=\"p\">.<\/span><span class=\"nx\">title<\/span><span class=\"si\">}<\/span><span class=\"sb\">\u4e2d<\/span><span class=\"si\">${<\/span><span class=\"nx\">actionWords<\/span><span class=\"p\">[<\/span><span class=\"nx\">action<\/span><span class=\"p\">]<\/span><span class=\"si\">}<\/span><span class=\"sb\">\u8bc4\u8bba:<\/span><span class=\"si\">${<\/span><span class=\"nx\">comment<\/span><span class=\"p\">.<\/span><span class=\"nx\">body<\/span><span class=\"si\">}<\/span><span class=\"sb\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">action<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u64cd\u4f5c\u6682\u65f6\u4e0d\u4f1a\u88ab\u5904\u7406`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * \u5904\u7406 Action \u9519\u8bef\u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {String} botKey \u4f01\u4e1a\u5fae\u4fe1\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} reqBody GitHub \u4f20\u9012\u7684\u8bf7\u6c42\u4f53\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handleAction<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">action<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sender<\/span><span class=\"p\">,<\/span> <span class=\"nx\">check_run<\/span><span class=\"p\">,<\/span> <span class=\"nx\">repository<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">reqBody<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u72b6\u6001\u5b8c\u6210\u4e14\u6267\u884c\u5931\u8d25\uff0c\u5219\u53d1\u9001\u9519\u8bef\u4fe1\u606f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">action<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;completed&#34;<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nx\">check_run<\/span><span class=\"p\">.<\/span><span class=\"nx\">conclusion<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;failure&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">mdMsg<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">sender<\/span><span class=\"p\">.<\/span><span class=\"nx\">login<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u5728 [<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">full_name<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">repository<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">) \u4e2d\u89e6\u53d1\u7684 GitHub Action \u6267\u884c&lt;font color=&#34;warning&#34;&gt;\u5931\u8d25&lt;\/font&gt;\u4e86:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u67e5\u770b\u72b6\u6001: [<\/span><span class=\"si\">${<\/span><span class=\"nx\">check_run<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span><span class=\"si\">}<\/span><span class=\"sb\">](<\/span><span class=\"si\">${<\/span><span class=\"nx\">check_run<\/span><span class=\"p\">.<\/span><span class=\"nx\">html_url<\/span><span class=\"si\">}<\/span><span class=\"sb\">)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\"> &gt; \u9519\u8bef\u4fe1\u606f: <\/span><span class=\"si\">${<\/span><span class=\"nx\">check_run<\/span><span class=\"p\">.<\/span><span class=\"nx\">output<\/span><span class=\"p\">.<\/span><span class=\"nx\">summary<\/span><span class=\"si\">}<\/span><span class=\"sb\">`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">sendMdMsg<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">mdMsg<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"sb\">`<\/span><span class=\"si\">${<\/span><span class=\"nx\">action<\/span><span class=\"si\">}<\/span><span class=\"sb\">(<\/span><span class=\"si\">${<\/span><span class=\"nx\">check_run<\/span><span class=\"p\">.<\/span><span class=\"nx\">conclusion<\/span><span class=\"si\">}<\/span><span class=\"sb\">) \u6682\u65f6\u4e0d\u4f1a\u88ab\u5904\u7406`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @param {JSON} request GitHub \u4f20\u9012\u7684\u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> * @returns\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\"> *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kr\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nx\">handleRequest<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">searchParams<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">URL<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">url<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u4ece URL \u83b7\u53d6\u4f20\u5165\u7684\u673a\u5668\u4eba\u5bc6\u94a5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kd\">let<\/span> <span class=\"nx\">botKey<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">searchParams<\/span><span class=\"p\">.<\/span><span class=\"nx\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;key&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u4ece\u8bf7\u6c42\u4e2d\u83b7\u53d6\u6d88\u606f\u5185\u5bb9\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kd\">var<\/span> <span class=\"nx\">reqBody<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">gatherResponse<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u89e3\u6790 GitHub \u4f20\u9012\u7684\u6d88\u606f\u7c7b\u578b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"kr\">const<\/span> <span class=\"nx\">gitEvent<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">headers<\/span><span class=\"p\">.<\/span><span class=\"nx\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;X-GitHub-Event&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"sb\">`\u6536\u5230\u4e86\u4e00\u4e2a <\/span><span class=\"si\">${<\/span><span class=\"nx\">gitEvent<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u4e8b\u4ef6`<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">switch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">gitEvent<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u662f Ping \u4e8b\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">case<\/span> <span class=\"s2\">&#34;ping&#34;<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">handlePing<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">reqBody<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u662f PR \u4e8b\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">case<\/span> <span class=\"s2\">&#34;pull_request&#34;<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">handlePR<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">reqBody<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u662f Issues \u4e8b\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">case<\/span> <span class=\"s2\">&#34;issues&#34;<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">handleIssue<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">reqBody<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u662f Action \u4e8b\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">case<\/span> <span class=\"s2\">&#34;check_run&#34;<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">handleAction<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">reqBody<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5982\u679c\u662f discussion_comment \u4e8b\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">case<\/span> <span class=\"s2\">&#34;discussion_comment&#34;<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"kr\">await<\/span> <span class=\"nx\">handle_discussion_comment<\/span><span class=\"p\">(<\/span><span class=\"nx\">botKey<\/span><span class=\"p\">,<\/span><span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nx\">parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">reqBody<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u5176\u4ed6\u4e8b\u4ef6\u6682\u4e0d\u652f\u6301\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">default<\/span><span class=\"o\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">results<\/span> <span class=\"o\">=<\/span> <span class=\"sb\">`\u6682\u4e0d\u652f\u6301\u5904\u7406 <\/span><span class=\"si\">${<\/span><span class=\"nx\">gitEvent<\/span><span class=\"si\">}<\/span><span class=\"sb\"> \u4e8b\u4ef6`<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">Response<\/span><span class=\"p\">(<\/span><span class=\"nx\">results<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">addEventListener<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;fetch&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">event<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">request<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">event<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u4ec5\u5904\u7406 POST \u8bf7\u6c42\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">.<\/span><span class=\"nx\">method<\/span> <span class=\"o\">===<\/span> <span class=\"s2\">&#34;POST&#34;<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">respondWith<\/span><span class=\"p\">(<\/span><span class=\"nx\">handleRequest<\/span><span class=\"p\">(<\/span><span class=\"nx\">request<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">respondWith<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nx\">Response<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u4f7f\u7528\u65b9\u6cd5\u8bf7\u53c2\u8003\u6587\u6863: https:\/\/github.com\/huhuhang\/github-wechat-bot&#34;<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">})<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h2 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/webhook_proxy\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h2>\n<ol>\n<li>\u4e0b\u4e00\u9636\u6bb5\u8981\u5b66\u4e60\u4e0bJS\uff0c\u7ed3\u5408cloudflare worker\u53ef\u4ee5\u505a\u51fa\u4e00\u4e9b\u6709\u610f\u601d\u7684\u5de5\u5177\u51fa\u6765<\/li>\n<li>\u4ee5\u540e\u770b\u5230\u6709\u610f\u601d\u7684\u4ea7\u54c1\uff0c\u5728\u8111\u6d77\u4e2d\u6709\u610f\u8bc6\u953b\u70bc\u4e0b\u5982\u4f55\u901a\u8fc7\u4e0d\u540c\u7684\u80fd\u529b\u5b8c\u6210\u5bf9\u5e94\u670d\u52a1\u7684\u642d\u5efa<\/li>\n<li>\u6700\u8fd1\u5de5\u4f5c\u8f6f\u4ef6\u5207\u6362\u6210\u98de\u4e66\uff0c\u8c03\u6574hook\u5730\u5740\u548csendMdMsg\u4e2d\u7684\u6d88\u606f\u53c2\u6570\u540e\uff0c\u901a\u77e5\u6d88\u606f\u5207\u6362\u5230\u98de\u4e66\u673a\u5668\u4eba<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/hugo\/","term":"Hugo","label":"Hugo"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E4%BB%A3%E7%90%86\/","term":"\u4ee3\u7406","label":"\u4ee3\u7406"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/js\/","term":"JS","label":"JS"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/cloudflare\/","term":"cloudflare","label":"cloudflare"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/giscus\/","term":"Giscus","label":"Giscus"}}]},{"title":"\nHugo\u4f7f\u7528\u5c0f\u7ed3","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/","updated":"2023-01-23T20:16:00+08:00","published":"2023-12-09T11:11:06+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u672c\u6587\u603b\u7ed3\u4e86\u4f7f\u7528hugo\u5efa\u7acb\u535a\u5ba2\u9700\u8981\u7684\u524d\u7aef\u548chugo\u77e5\u8bc6\u3002\u540c\u65f6\uff0c\u8fd8\u7ed9\u51fa\u4e86\u4e09\u4e2a\u5177\u4f53\u7684\u6848\u4f8b\uff0c\u5206\u522b\u662f\u4f7f\u7528Giscus\u8fdb\u884c\u8bc4\u8bba\u3001\u4fee\u590dLunr\u641c\u7d22\u4e0d\u652f\u6301\u4e2d\u6587\u7684\u95ee\u9898\u548c\u5982\u4f55\u5728\u535a\u5ba2\u4e2d\u6dfb\u52a0\u8bf4\u8bf4\u529f\u80fd\u7684\u6b65\u9aa4\u3002\u672c\u6587\u91cd\u70b9\u5f3a\u8c03\u9610\u8ff0\u89e3\u51b3\u95ee\u9898\u7684\u601d\u7ef4\u65b9\u5f0f\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u4f7f\u7528hugo\u521b\u5efa\u535a\u5ba2\u63a5\u8fd12\u4e2a\u6708\uff0c\u4e00\u76f4\u8d70\u5728\u6298\u817e\u6837\u5f0f\u7684\u8def\u4e0a\uff0c\u968f\u7740\u4e0d\u505c\u7684\u6298\u817e\uff0c\u5efa\u7acb\u4e86\u5bf9hugo\u521d\u6b65\u7684\u8ba4\u8bc6\u3002\u672c\u6587\u4e3b\u8981\u7528\u4e8e\u68b3\u7406\u4e2a\u4eba\u5bf9hugo\u548c\u524d\u7aef\u77e5\u8bc6\u7684\u7406\u89e3\uff0c\u540c\u65f6\u5e0c\u671b\u80fd\u5e2e\u52a9\u5bf9hugo\u548c\u524d\u7aef\u77e5\u8bc6\u4e0d\u719f\u6089\u7684\u4eba\uff0c\u5efa\u7acb\u76f8\u5173\u7684\u6982\u5ff5\u3002<\/p>\n<div class=\"notice notice-info\" >\n<div class=\"notice-title\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"icon notice-icon\" viewBox=\"0 0 512 512\"><path d=\"M256 8a248 248 0 100 496 248 248 0 000-496zm0 110a42 42 0 110 84 42 42 0 010-84zm56 254c0 7-5 12-12 12h-88c-7 0-12-5-12-12v-24c0-7 5-12 12-12h12v-64h-12c-7 0-12-5-12-12v-24c0-7 5-12 12-12h64c7 0 12 5 12 12v100h12c7 0 12 5 12 12v24z\" \/><\/svg><\/div><p>\u5185\u5bb9\u4ec5\u4f9b\u53c2\u8003\uff0c\u672c\u4eba\u5bf9\u524d\u7aef\u77e5\u8bc6\u4e86\u89e3\u4e0d\u591a\uff0c\u90e8\u5206\u5185\u5bb9\u7684\u7406\u89e3\u5fc5\u7136\u5b58\u5728\u95ee\u9898\u3002\u5982\u679c\u60a8\u53d1\u73b0\u4e86\u95ee\u9898\uff0c\u6b22\u8fce\u5728\u8bc4\u8bba\u533a\u7559\u8a00\u6307\u6b63\u3002<\/p><\/div>\n<h3 id=\"\u57fa\u7840\u77e5\u8bc6\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u57fa\u7840\u77e5\u8bc6\" class=\"anchor-link\" aria-label=\"\u57fa\u7840\u77e5\u8bc6\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u57fa\u7840\u77e5\u8bc6\" class=\"headings\">\u57fa\u7840\u77e5\u8bc6<\/a><\/h3>\n<p>\u9996\u5148\u5efa\u7acbhugo\u7684\u5de5\u4f5c\u539f\u7406\uff0c\u4e86\u89e3hugo\u7684\u76ee\u5f55\u7ed3\u6784\u3001shortcode\u4f7f\u7528\u3001html\u7684\u57fa\u7840\u4fe1\u606f\u65b9\u4fbf\u81ea\u5b9a\u4e49\u4fee\u6539\u3002\u63a8\u8350\u9605\u8bfb\u8d44\u6599<a href=\"https:\/\/gohugo.io\/getting-started\/\" target=\"_blank\" rel=\"noopener\">hugo\u5b98\u65b9\u6587\u6863<\/a><\/p>\n<h4 id=\"hugo\u5de5\u4f5c\u539f\u7406\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#hugo\u5de5\u4f5c\u539f\u7406\" class=\"anchor-link\" aria-label=\"hugo\u5de5\u4f5c\u539f\u7406\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:hugo\u5de5\u4f5c\u539f\u7406\" class=\"headings\">hugo\u5de5\u4f5c\u539f\u7406<\/a><\/h4>\n<ul>\n<li>hugo\u5de5\u4f5c\u539f\u7406\uff1a\u6211\u7684\u7406\u89e3\u662f\u6309\u7167\u6307\u5b9a\u7684\u89c4\u5219\u751f\u6210html\u6587\u4ef6\u3002\n<ul>\n<li>\u4e3b\u9898\u5c31\u662f\u5df2\u7ecf\u5199\u597d\u7684\u8f6c\u6362\u89c4\u5219\uff0c\u57fa\u4e8e\u4e3b\u9898\u7684\u81ea\u5b9a\u4e49\uff0c\u5c31\u662f\u4fee\u6539\u8f6c\u5316\u89c4\u5219<\/li>\n<li>\u6587\u7ae0\u662f\u5c06markdown\u6587\u4ef6\uff0c\u6309\u7167\u4e3b\u9898\u9884\u8bbe\u7684\u89c4\u5219\u8f6c\u6362\u6210html<\/li>\n<li>\u9875\u9762\u662f\u5c06\u4e3b\u9898\u9884\u8bbe\u7684\u89c4\u5219\u548c\u81ea\u5b9a\u4e49\u89c4\u5219\uff0c\u62fc\u51d1\u6210html<\/li>\n<li>\u81ea\u5b9a\u4e49\u89c4\u5219\u4e00\u822c\u4e0d\u4f1a\u76f4\u63a5\u4fee\u6539\u4e3b\u9898\uff0c\u800c\u662f\u5728\u535a\u5ba2\u76ee\u5f55\u7684assets\u3001layouts\u3001static\/js\u4e2d\u6dfb\u52a0\u5185\u5bb9\u8fdb\u884c\u4fee\u6539<\/li>\n<\/ul>\n<\/li>\n<li>hugo \u76ee\u5f55\u7ed3\u6784\n<ul>\n<li>assets \u7528\u4e8e\u5b58\u653escss\u6587\u4ef6\uff0c\u4e3b\u8981\u7528\u4e8e\u6837\u5f0f\u7684\u6e32\u67d3<\/li>\n<li>content \u7528\u4e8e\u5b58\u653e.md\u6587\u4ef6\uff0c\u4e3b\u8981\u662f\u6587\u7ae0\u5185\u5bb9\u548c\u81ea\u5b9a\u4e49\u9875\u9762<\/li>\n<li>data \u5b58\u653e\u4e00\u4e9b\u6570\u636e\u6587\u4ef6\uff0c\u81ea\u5b9a\u4e49\u7684\u7ed3\u6784\u5316\u6570\u636e\uff0c\u6bd4\u5982JSON\u3001YAML\u6216TOML\u683c\u5f0f\u7684\u6587\u4ef6\u3002<\/li>\n<li>layouts\u7528\u6765\u5b58\u653ehtml\u5143\u7d20\u6587\u4ef6\uff0c\u5728\u9875\u9762\u6307\u5b9a\u7684\u4f4d\u7f6e\u6dfb\u52a0\u5143\u7d20\u5185\u5bb9\uff0c\u5b9a\u4e49\u9875\u9762\u5e03\u5c40<\/li>\n<li>static \u4e0d\u9700\u8981\u7ecf\u8fc7\u5904\u7406\u7684\u9759\u6001\u6587\u4ef6\uff0c\u6bd4\u5982\u56fe\u7247\u3001\u6837\u5f0f\u8868\u548c\u811a\u672c\u6587\u4ef6\u3002\n<ul>\n<li>js \u7528\u4e8e\u653ejs\u6587\u4ef6\uff0c\u7528\u4e8e\u52a8\u6001\u7684\u4fee\u6539\u5c55\u793a\u7684\u4fe1\u606f<\/li>\n<\/ul>\n<\/li>\n<li>themes \u76ee\u5f55\u5305\u542b\u81ea\u5b9a\u4e49\u4e3b\u9898\u7684\u6587\u4ef6\uff0c\u5982\u679c\u4f60\u4f7f\u7528\u4e86\u81ea\u5b9a\u4e49\u4e3b\u9898\u7684\u8bdd\u3002<\/li>\n<li>hugo.toml \u662f\u7f51\u7ad9\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u7528\u4e8e\u5b9a\u4e49\u7f51\u7ad9\u7684\u5404\u79cd\u8bbe\u7f6e\u3002<\/li>\n<\/ul>\n<\/li>\n<li>shortcode \u6309\u7167\u6a21\u677f\u5728\u6307\u5b9a\u4f4d\u7f6e\u63d2\u5165\u6570\u636e\uff0c\u5e38\u7528\u8bed\u53e5\u5982\u4e0b\n<ul>\n<li>{{ .Get &quot;class&quot; }},\u53d6key\u4e3aclass\u7684\u503c<\/li>\n<li>{{ .Inner }},\u53d6shortcode\u6807\u7b7e\u5bf9\u4e4b\u95f4\u7684\u5185\u5bb9<\/li>\n<li>{{ with .Get &quot;class&quot; }} class=&quot;{{ . }}&quot;{{ end }}\uff0c\u5982\u679c\u5b58\u5728key\u4e3aclass \u8f93\u51faclass=&quot;\u5bf9\u5e94\u503c&quot;\uff0c\u5426\u5219\u4ec0\u4e48\u90fd\u4e0d\u8f93\u51fa<\/li>\n<li>{{ if (.Get &quot;title&quot;)}} class=&quot;xxx&quot; {{else}} class=&quot;yyy&quot; {{ end }},\u5982\u679c\u5b58\u5728key\u4e3atitle,class\u4e3a&quot;xxx&quot;\u5426\u5219\u4e3a&quot;yyy&quot;<\/li>\n<li>{{ .Get 0 }},\u6309\u4f4d\u7f6e\u8bbf\u95ee\u53c2\u6570,\u53d6\u7b2c\u4e00\u4e2a\u53c2\u6570\u7684\u503c<\/li>\n<li><a href=\"https:\/\/blog.yandaojiang.com\/posts\/others\/hugo_shortcodes%E7%A4%BA%E4%BE%8B\" target=\"_blank\" rel=\"noopener\">Hugo Shortcodes \u793a\u4f8b<\/a><\/li>\n<li><a href=\"https:\/\/guanqr.com\/tech\/website\/hugo-shortcodes-customization\/\" target=\"_blank\" rel=\"noopener\">\u81ea\u5b9a\u4e49 Hugo Shortcodes \u7b80\u7801<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4 id=\"html\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#html\" class=\"anchor-link\" aria-label=\"html\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:html\" class=\"headings\">HTML<\/a><\/h4>\n<ul>\n<li>html\u5185\u5bb9\u57fa\u672c\u53ef\u4ee5\u5212\u5206\u4e3a\u4ee5\u4e0b\u51e0\u4e2a\u90e8\u5206:\n<ul>\n<li>content: \u8fd9\u4e0d\u662fHTML\u6807\u51c6\u5143\u7d20\uff0c\u4f46\u53ef\u4ee5\u662f\u81ea\u5b9a\u4e49\u5143\u7d20\u3002\u5728Web\u7ec4\u4ef6\u4e2d\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528<content>\u6807\u7b7e\u6765\u63d2\u5165\u7ec4\u4ef6\u5185\u7684\u5185\u5bb9\u3002<\/li>\n<li>footer: \u901a\u5e38\u7528\u4e8e\u7f51\u9875\u5e95\u90e8\uff0c\u653e\u7f6e\u7248\u6743\u4fe1\u606f\u3001\u8054\u7cfb\u65b9\u5f0f\u3001\u94fe\u63a5\u7b49\u5185\u5bb9\u3002<\/li>\n<li>head: \u5728HTML\u6587\u6863\u4e2d\u8868\u793a\u5934\u90e8\u90e8\u5206\uff0c\u5305\u542b\u4e86\u9875\u9762\u7684\u5143\u6570\u636e\u548c\u94fe\u63a5\u5f15\u7528\u7b49\u4fe1\u606f\uff0c\u5982\u6807\u9898\u3001\u6837\u5f0f\u8868\u94fe\u63a5\u3001\u811a\u672c\u5f15\u7528\u7b49\u3002<\/li>\n<li>header: \u901a\u5e38\u7528\u4e8e\u7f51\u9875\u9876\u90e8\uff0c\u5305\u542b\u7f51\u7ad9\u7684\u6807\u9898\u3001\u5bfc\u822a\u680f\u7b49\u5185\u5bb9\u3002<\/li>\n<li>post-meta: \u8fd9\u540c\u6837\u4e0d\u662fHTML\u6807\u51c6\u5143\u7d20\uff0c\u53ef\u4ee5\u662f\u81ea\u5b9a\u4e49\u5143\u7d20\u3002\u5728\u535a\u5ba2\u6216\u65b0\u95fb\u7f51\u7ad9\u4e2d\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528<post-meta>\u6807\u7b7e\u6765\u5c55\u793a\u6587\u7ae0\u7684\u5143\u4fe1\u606f\uff0c\u6bd4\u5982\u4f5c\u8005\u3001\u53d1\u5e03\u65e5\u671f\u7b49\u3002<\/li>\n<li>script: \u7528\u4e8e\u5728\u7f51\u9875\u4e2d\u5d4c\u5165JavaScript\u4ee3\u7801\u7684\u6807\u7b7e\uff0c\u53ef\u4ee5\u7528\u4e8e\u5f15\u5165\u5916\u90e8\u811a\u672c\u6216\u76f4\u63a5\u4e66\u5199JavaScript\u4ee3\u7801\u3002<\/li>\n<li>\u6b64\u5904\u5185\u5bb9\u8be6\u60c5\u7531GPT3\u751f\u6210\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"\u6848\u4f8b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u6848\u4f8b\" class=\"anchor-link\" aria-label=\"\u6848\u4f8b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u6848\u4f8b\" class=\"headings\">\u6848\u4f8b<\/a><\/h3>\n<h4 id=\"\u8bc4\u8bba\u4f7f\u7528giscus\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u8bc4\u8bba\u4f7f\u7528giscus\" class=\"anchor-link\" aria-label=\"\u8bc4\u8bba\u4f7f\u7528giscus\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u8bc4\u8bba\u4f7f\u7528giscus\" class=\"headings\">\u8bc4\u8bba\u4f7f\u7528Giscus<\/a><\/h4>\n<div class=\"notice notice-tip\" >\n<div class=\"notice-title\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"icon notice-icon\" viewBox=\"0 0 512 512\"><path d=\"M504 256a248 248 0 11-496 0 248 248 0 01496 0zM227 387l184-184c7-6 7-16 0-22l-22-23c-7-6-17-6-23 0L216 308l-70-70c-6-6-16-6-23 0l-22 23c-7 6-7 16 0 22l104 104c6 7 16 7 22 0z\" \/><\/svg><\/div><p>meme\u4e3b\u9898\u6700\u65b0\u7248\u672c\u5df2\u652f\u6301Giscus\uff0c\u5728hugo.toml\u4e2d\u6dfb\u52a0\u914d\u7f6e\u5373\u53ef\u4f7f\u7528\u3002\u5b9e\u73b0\u65b9\u6848\u4e0e\u672c\u6587\u5185\u5bb9\u7c7b\u4f3c<\/p><\/div>\n<p>\u5177\u4f53\u64cd\u4f5c\u6d41\u7a0b\u53c2\u8003\u6587\u7ae0<a href=\"https:\/\/ivonblog.com\/posts\/hugo-giscus-comment\/\" target=\"_blank\" rel=\"noopener\">\u5b89\u88ddGiscus\u4f5c\u70baHugo\u7db2\u7ad9\u7684\u7559\u8a00\u677f\uff0c\u652f\u63f4\u8f49\u63dbGitalk\/Utterances\u7684\u7559\u8a00<\/a>\n\u4e3b\u8981\u64cd\u4f5c\u70b9\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u5728github\u4e2d\u542f\u7528Giscus\u529f\u80fd<\/li>\n<li>\u5728<code>\\layouts\\partials\\comments<\/code>\u4e2d\u6dfb\u52a0giscus.html\u6587\u4ef6\uff0c\u7c98\u8d34<a href=\"https:\/\/giscus.app\/zh-CN\" target=\"_blank\" rel=\"noopener\">Giscus\u5b98\u7f51<\/a>\u4e2d\u83b7\u53d6\u7684Giscus\u4ee3\u7801<\/li>\n<li>\u590d\u5236<code>themes\\meme\\layouts\\partials\\pages\\post.html<\/code>\u653e\u5230<code>\\layouts\\partials\\pages\\<\/code>\u4e2d<\/li>\n<li>\u4fee\u6539<code>\\layouts\\partials\\pages\\post.html<\/code> \u4e2d<code>{{ partial &quot;components\/comments.html&quot; . }}<\/code>\u4e3a<code>{{ partial &quot;comments\/giscus.html&quot; . }}<\/code><\/li>\n<li>\u8bc4\u8bba\u65e0\u6cd5\u52a8\u6001\u5207\u6362\u6210\u6697\u9ed1\u6a21\u5f0f\uff0c\u4fee\u6539<code>\\themes\\meme\\assets\\js\\dark-mode.js<\/code>\u4e2dchangeMode\u51fd\u6570\uff0c\u589e\u52a0\u4e0b\u9762\u4ee3\u7801<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"> <span class=\"kr\">const<\/span> <span class=\"nx\">giscusIframe<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">querySelector<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;.giscus-frame&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">giscusIframe<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u68c0\u6d4b\u5f53\u524d\u4e3b\u9898\u662f\u5426\u4e3a\u6697\u9ed1\u6a21\u5f0f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">isDark<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">giscusIframe<\/span><span class=\"p\">.<\/span><span class=\"nx\">src<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">giscusIframe<\/span><span class=\"p\">.<\/span><span class=\"nx\">src<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;theme=light&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;theme=dark&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">giscusIframe<\/span><span class=\"p\">.<\/span><span class=\"nx\">src<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">giscusIframe<\/span><span class=\"p\">.<\/span><span class=\"nx\">src<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;theme=dark&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;theme=light&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"lunr\u641c\u7d22\u652f\u6301\u4e2d\u6587\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#lunr\u641c\u7d22\u652f\u6301\u4e2d\u6587\" class=\"anchor-link\" aria-label=\"lunr\u641c\u7d22\u652f\u6301\u4e2d\u6587\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:lunr\u641c\u7d22\u652f\u6301\u4e2d\u6587\" class=\"headings\">Lunr\u641c\u7d22\u652f\u6301\u4e2d\u6587<\/a><\/h4>\n<p>\u6574\u4f53\u4fee\u590d\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>lunr\u641c\u7d22\u5b98\u65b9\u4e0d\u652f\u6301\u4e2d\u6587,google \u627e\u5230\u4e86\u5f00\u6e90lurn\u6269\u5c55\u9879\u76ee<a href=\"https:\/\/github.com\/MihaiValentin\/lunr-languages\" target=\"_blank\" rel=\"noopener\">lunr-languages<\/a><\/li>\n<li>\u5728<a href=\"https:\/\/www.jsdelivr.com\/\" target=\"_blank\" rel=\"noopener\">cdn.jsdelivr.net<\/a>\u627e\u5230\u6269\u5c55\u9879\u76ee\u5bf9\u5e94lunr-zh.js\u5730\u5740\uff0c\u4fee\u6539hugo.toml\u4e2dlunr_lang\u53c2\u6570<code>lunr_lang=&quot;\/npm\/lunr-languages-zh@1.4.0\/lunr.zh.js&quot;<\/code>\uff0c\u5728\u7f51\u9875\u4e2d\u6d4b\u8bd5\u4e0d\u652f\u6301\u4e2d\u6587\uff0c\u67e5\u770b\u7f51\u9875html\u6e90\u7801\u53d1\u73b0\u672a\u5f15\u7528lunr-zh.js<\/li>\n<li>\u9605\u8bfb\u4e3b\u9898\u6e90\u7801\u662fblog\\themes\\meme\\layouts\\partials\\third-party\\lunr-search.html\u4e2d<code>if in $supported $lang<\/code> \u8fc7\u6ee4zh\u5bfc\u81f4\uff0c\u5728$supported\u4e2d\u6dfb\u52a0&quot;zh&quot;,\u67e5\u9605\u9875\u9762html\u53d1\u73b0lunr-zh.js\u5df2\u5f15\u7528\uff0c\u6d4b\u8bd5\u641c\u7d22\u4ecd\u7136\u4e0d\u652f\u6301\u4e2d\u6587\uff0c\u540c\u65f6\u7f51\u9875\u63a7\u5236\u53f0\u62a5\u9519<code>\u672a\u6355\u83b7\u7684\u7c7b\u578b\u9519\u8bef\uff1anodejieba.cut \u4e0d\u662f\u51fd\u6570<\/code><\/li>\n<li>\u67e5\u770b<a href=\"https:\/\/github.com\/MihaiValentin\/lunr-languages\/issues\/91\" target=\"_blank\" rel=\"noopener\">lunr-languages issues<\/a>\u63d0\u793a\u539f\u56e0\u662f\u9700\u8981node\u8fd0\u884c\uff0c\u540c\u65f6\u8d34\u51fa\u4e86\u89e3\u51b3\u9879\u76ee\u65b9\u6848<a href=\"https:\/\/github.com\/mochi-cards\/lunr-languages\/tree\/mochi\/zh-novel-segment\" target=\"_blank\" rel=\"noopener\">mochi-cards\/lunr-languages<\/a><\/li>\n<li>\u4fee\u590d\u7248\u672c\u7684lurn-zh.js\u65e0\u6cd5\u901a\u8fc7\u5728\u7ebf\u5730\u5740\u65b9\u5f0f\u5bfc\u5165\uff0c\u8c03\u6574\u4e3a\u672c\u5730\u5bfc\u5165\u3002\u4e0b\u8f7dmochi-cards\/lunr-languages\u9879\u76ee\u4e2d\u7684lunr-zh.js\u6587\u4ef6\u653e\u5165\/static\/js\u4e2d<\/li>\n<li>\u5728<code>layouts\/partials\/custom<\/code>\u521b\u5efascript.html\u6587\u4ef6\uff0c\u586b\u5165<code>&lt;script src=&quot;\/js\/lunr.zh.js&quot; defer&gt;&lt;\/script&gt;<\/code><\/li>\n<li>\u4fee\u6539lunr-search.html\u5728\u7ebf\u5bfc\u5165\u4ee3\u7801\uff0c<code>{{- $scripts = union $scripts (slice $srcLang) -}}<\/code>\u8c03\u6574\u4e3a<code>{{- if eq $lang &quot;zh&quot; -}}{{- else -}}{{- $scripts = union $scripts (slice $srcLang) -}}{{- end -}}<\/code><\/li>\n<li>\u8fd0\u884c\u6d4b\u8bd5\u63a7\u5236\u53f0\u63d0\u793a'Lunr is not present. Please include \/ require Lunr before this script.'\uff0c\u67e5\u770blurn-zh.js\u6e90\u7801\u662f\n<code>'undefined' === typeof lunr<\/code>\u5bfc\u81f4<\/li>\n<li>\u56e0\u5bf9\u524d\u7aef\u77e5\u8bc6\u4e0d\u4e86\u89e3\uff0c\u53ea\u80fd\u901a\u8fc7\u63a7\u5236\u53d8\u91cf\u8fdb\u884c\u6d4b\u8bd5\u5b9a\u4f4d\u95ee\u9898\u3002\u4e0b\u8f7dlurn-de.js\u6587\u4ef6\uff0c\u5c06\u5f15\u5165lurn-zh.js\u6587\u4ef6\u8c03\u6574\u4e3a\u5f15\u5165lurn-de.js\u6587\u4ef6\uff0c\u8fd0\u884c\u65e0\u62a5\u9519\u3002\u5bf9\u6bd4\u4e24\u4e2a\u6587\u4ef6\u6e90\u7801\uff0clurn-zh.js\u4e2d<code>(this, function(Segment) {<\/code> \u6bd4lurn-de.js\u591aSegment\u53c2\u6570\uff0c\u786e\u5b9aSegment\u672a\u4f7f\u7528\u5220\u9664Segment\u53c2\u6570\uff0c\u518d\u6b21\u6d4b\u8bd5\u8fd0\u884c\u6b63\u5e38<\/li>\n<li>\u5728<a href=\"https:\/\/www.jsdelivr.com\/\" target=\"_blank\" rel=\"noopener\">cdn.jsdelivr.net<\/a>\u4e2d\u627e\u5230\u652f\u6301\u4e2d\u6587\u7684lurn.js,\u4fee\u6539hugo.toml\u4e2d<code>lunr = &quot;\/npm\/lunr-zh-cn@0.7.1\/lunr.min.js&quot;<\/code>,\u6d4b\u8bd5\u540e\u5bf9\u4e2d\u6587\u7684\u641c\u7d22\u652f\u6301\u7684\u66f4\u597d\u3002<\/li>\n<\/ol>\n<p>\u6574\u4e2a\u4fee\u590d\u6d41\u7a0b\u4f7f\u6211\u5bf9hugo\u7684\u7ed3\u6784\u6709\u4e86\u66f4\u4e00\u6b65\u7684\u7406\u89e3\uff0c\u540c\u65f6\u4e5f\u5bf9meme\u4e3b\u9898\u6709\u4e86\u66f4\u6df1\u7684\u8ba4\u77e5\u3002<\/p>\n<h4 id=\"\u521b\u5efa\u8bf4\u8bf4\u9875\u9762\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u521b\u5efa\u8bf4\u8bf4\u9875\u9762\" class=\"anchor-link\" aria-label=\"\u521b\u5efa\u8bf4\u8bf4\u9875\u9762\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u521b\u5efa\u8bf4\u8bf4\u9875\u9762\" class=\"headings\">\u521b\u5efa\u8bf4\u8bf4\u9875\u9762<\/a><\/h4>\n<p>\u4e00\u76f4\u60f3\u5728\u535a\u5ba2\u4e2d\u589e\u52a0\u8bf4\u8bf4\u529f\u80fd\uff0c\u5728\u5bf9shortcode\u7684\u4f7f\u7528\u6162\u6162\u719f\u6089\u540e\uff0c\u5f00\u59cb\u52a8\u624b\u64cd\u4f5c\u5c06\u4e3b\u9898<a href=\"https:\/\/github.com\/FarseaSH\/hugo-theme-moments\" target=\"_blank\" rel=\"noopener\">hugo-theme-moments<\/a>\u7684\u6837\u5f0f\u96c6\u6210\u5230\u535a\u5ba2\u4e2d\u3002<\/p>\n<p>\u89e3\u51b3\u601d\u8def\uff1a\u65b0\u5efa\u535a\u5ba2\u4f7f\u7528hugo-theme-moments\u4e3b\u9898\uff0c\u5206\u6790\u535a\u5ba2\u7f51\u9875\u8bf4\u8bf4\u5185\u5bb9\u90e8\u5206\u7684html\u5143\u7d20\uff0c\u62bd\u8c61\u4e3ashortcode\u3002\u5c06\u8bf4\u8bf4\u90e8\u5206\u5bf9\u5e94\u7684css\u3001js\u6587\u4ef6\u96c6\u6210\u535a\u5ba2\u4e2d\uff0c\u6700\u7ec8\u4f7f\u7528shortcode\u53d1\u8bf4\u8bf4\u3002<\/p>\n<p>hugo-theme-moments\u4e3b\u9898\u751f\u6210\u7684\u7f51\u9875\u4e2d\u4f7f\u7528\u5230\u7684css\u548cjs\u4fe1\u606f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">script<\/span> <span class=\"nx\">type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;text\/javascript&#34;<\/span> <span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/unpkg.com\/jquery@3.3.1\/dist\/jquery.min.js&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"err\">\/script&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">script<\/span> <span class=\"nx\">type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;text\/javascript&#34;<\/span> <span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/cdn.bootcss.com\/jqueryui\/1.12.1\/jquery-ui.min.js&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"err\">\/script&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">script<\/span> <span class=\"nx\">type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;text\/javascript&#34;<\/span> <span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/cdn.jsdelivr.net\/npm\/@fancyapps\/ui\/dist\/fancybox.umd.js&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"err\">\/script&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/cdn.jsdelivr.net\/npm\/@fancyapps\/ui\/dist\/fancybox.css&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/unpkg.com\/purecss@2.0.6\/build\/grids-min.css&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/unpkg.com\/purecss@2.0.6\/build\/grids-responsive-min.css&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/farseash.github.io\/demo-hugo-theme-moments\/style-refractored.min.f763c606ea7f621cac55d5419e71c55d50792a0b67ae61e88a8de81fa2cc2b3d.css&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;https:\/\/cdn.jsdelivr.net\/npm\/@fancyapps\/ui\/dist\/fancybox.css&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\">\/&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>\u62bd\u8c61\u540e\u7684shortcode\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u6587\u672c\u5185\u5bb9shortcode\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;moment-row&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pure-g&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pure-u-1 pure-u-sm-1-3&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;time&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;month-day&#34;<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{{.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;date&#34;<\/span><span class=\"p\">}}<\/span><span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;year&#34;<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{{.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;year&#34;<\/span><span class=\"p\">}}<\/span><span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pure-u-1 pure-u-sm-2-3&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;moment-content&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"nx\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;padding-left: 5px; padding-right: 5px;&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;context&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">p<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{{.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;content&#34;<\/span><span class=\"p\">}}<\/span><span class=\"o\">&lt;<\/span><span class=\"err\">\/p&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pic-grid&#34;<\/span> <span class=\"nx\">style<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;width: 53%&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pure-g&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{{<\/span> <span class=\"p\">.<\/span><span class=\"nx\">Inner<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;share-link-block&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{{<\/span><span class=\"kd\">with<\/span> <span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;url&#34;<\/span><span class=\"p\">}}<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">p<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;url&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"nx\">a<\/span> <span class=\"nx\">href<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{{<\/span> <span class=\"p\">.<\/span> <span class=\"p\">}}<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">{{<\/span> <span class=\"p\">.<\/span> <span class=\"p\">}}<\/span><span class=\"o\">&lt;<\/span><span class=\"err\">\/a&gt;&lt;\/p&gt;{{end}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">hr<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u56fe\u7247\u5185\u5bb9shortcode\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pure-u-1-2&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;add-padding&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;img-container&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">a<\/span> <span class=\"nx\">data<\/span><span class=\"o\">-<\/span><span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ .Get &#34;<\/span><span class=\"nx\">url<\/span><span class=\"s2\">&#34; }}&#34;<\/span> <span class=\"nx\">data<\/span><span class=\"o\">-<\/span><span class=\"nx\">fancybox<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;gallery&#34;<\/span> <span class=\"p\">{{<\/span> <span class=\"kd\">with<\/span> <span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;caption&#34;<\/span> <span class=\"p\">}}<\/span><span class=\"nx\">data<\/span><span class=\"o\">-<\/span><span class=\"nx\">caption<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ . }}&#34;<\/span><span class=\"p\">{{<\/span><span class=\"nx\">end<\/span><span class=\"p\">}}<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">img<\/span> <span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ .Get &#34;<\/span><span class=\"nx\">url<\/span><span class=\"s2\">&#34; }}&#34;<\/span> <span class=\"nx\">alt<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;pictures&#34;<\/span> <span class=\"o\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/a&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li>\u5c06\u7528\u5230\u7684css\u4fe1\u606f\u4e0b\u8f7d\u4e0b\u6765\u653e\u5230assets\/scss\u4e2d\uff0c\u6587\u4ef6\u5c3e\u7f00\u4fee\u6539\u4e3ascss<\/li>\n<li>layouts\/partials\/custom\/script.html\u4e2d\u589e\u52a0\u4e0a\u9762\u8d34\u51fa\u7684js\u6587\u4ef6<\/li>\n<li>layouts\/shortcodes\u4e2d\u65b0\u5efamoment.html\u548cmoment_image.html\uff0c\u5c06\u4e0a\u9762shortcode\u590d\u5236\u8fdb\u53bb<\/li>\n<li>\u4e3a\u4e86\u53ea\u5728\u8bf4\u8bf4\u9875\u9762\u4f7f\u7528\u76f8\u5173\u7684scss\u6587\u4ef6\uff0c\u5728layouts\/shortcodes\u4e2d\u65b0\u5efamoments.html<\/li>\n<li>\u65b0\u5efa\u9875\u9762\u548c\u6dfb\u52a0\u83dc\u5355\u64cd\u4f5c\u4e0d\u8d58\u8ff0\uff0c\u53d1\u8bf4\u8bf4\u4f7f\u7528\u5982\u4e0b\u8bed\u53e5\u5373\u53ef<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-markdown\" data-lang=\"markdown\"><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"nt\">moments<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"nt\">moment<\/span> <span class=\"na\">year <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;2023&#34;<\/span> <span class=\"na\">date <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;12.06&#34;<\/span> <span class=\"na\">content <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;\u66f4\u6362\u535a\u5ba2\u4e3b\u9898\uff0c\u6298\u817e\u535a\u5ba2\u6bd4\u5199\u6587\u7ae0\u5feb\u4e50!&#34;<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"p\">\/<\/span><span class=\"nt\">moment<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"nt\">moment<\/span> <span class=\"na\">year <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;2023&#34;<\/span> <span class=\"na\">date <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;12.05&#34;<\/span> <span class=\"na\">content <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;\u7b2c\u4e00\u6761&#34;<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"nt\">moment_image<\/span> <span class=\"na\">url <\/span><span class=\"o\">=<\/span> <span class=\"s\">&#34;\/moments\/laugh.png&#34;<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"p\">\/<\/span><span class=\"nt\">moment<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">{{<span class=\"p\">&lt;<\/span> <span class=\"nt\">moments<\/span> <span class=\"p\">&gt;<\/span>}}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/moments.html\u5185\u5bb9\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">{{<\/span> <span class=\"nx\">$options<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">dict<\/span> <span class=\"s2\">&#34;targetPath&#34;<\/span> <span class=\"s2\">&#34;\/css\/style-refractored.css&#34;<\/span> <span class=\"s2\">&#34;outputStyle&#34;<\/span> <span class=\"s2\">&#34;compressed&#34;<\/span> <span class=\"s2\">&#34;enableSourceMap&#34;<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$style<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">resources<\/span><span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;\/scss\/style-refractored.scss&#34;<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">css<\/span><span class=\"p\">.<\/span><span class=\"nx\">Sass<\/span> <span class=\"nx\">$options<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$options1<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">dict<\/span> <span class=\"s2\">&#34;targetPath&#34;<\/span> <span class=\"s2\">&#34;\/css\/grids-min.css&#34;<\/span> <span class=\"s2\">&#34;outputStyle&#34;<\/span> <span class=\"s2\">&#34;compressed&#34;<\/span> <span class=\"s2\">&#34;enableSourceMap&#34;<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$style1<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">resources<\/span><span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;\/scss\/grids-min.scss&#34;<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">css<\/span><span class=\"p\">.<\/span><span class=\"nx\">Sass<\/span> <span class=\"nx\">$options1<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$options2<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">dict<\/span> <span class=\"s2\">&#34;targetPath&#34;<\/span> <span class=\"s2\">&#34;\/css\/grids-responsive-min.css&#34;<\/span> <span class=\"s2\">&#34;outputStyle&#34;<\/span> <span class=\"s2\">&#34;compressed&#34;<\/span> <span class=\"s2\">&#34;enableSourceMap&#34;<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$style2<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">resources<\/span><span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;\/scss\/grids-responsive-min.scss&#34;<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">css<\/span><span class=\"p\">.<\/span><span class=\"nx\">Sass<\/span> <span class=\"nx\">$options2<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$options3<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">dict<\/span> <span class=\"s2\">&#34;targetPath&#34;<\/span> <span class=\"s2\">&#34;\/css\/fancybox.css&#34;<\/span> <span class=\"s2\">&#34;outputStyle&#34;<\/span> <span class=\"s2\">&#34;compressed&#34;<\/span> <span class=\"s2\">&#34;enableSourceMap&#34;<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$style3<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">resources<\/span><span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"s2\">&#34;\/scss\/fancybox.scss&#34;<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">css<\/span><span class=\"p\">.<\/span><span class=\"nx\">Sass<\/span> <span class=\"nx\">$options3<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ $style.RelPermalink }}&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ $style1.RelPermalink }}&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ $style2.RelPermalink }}&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">link<\/span> <span class=\"nx\">rel<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;stylesheet&#34;<\/span> <span class=\"nx\">href<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;{{ $style3.RelPermalink }}&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"p\">.<\/span><span class=\"nx\">Get<\/span> <span class=\"mi\">0<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">range<\/span> <span class=\"nx\">split<\/span> <span class=\"p\">.<\/span><span class=\"nx\">Inner<\/span> <span class=\"s2\">&#34;\\n&#34;<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">$line<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">replace<\/span> <span class=\"p\">.<\/span> <span class=\"s2\">&#34; &#34;<\/span> <span class=\"s2\">&#34; &#34;<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">printf<\/span> <span class=\"s2\">&#34;%s&#34;<\/span> <span class=\"nx\">$line<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">safeHTML<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span> <span class=\"nx\">end<\/span> <span class=\"p\">}}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"bug\u4fee\u590d\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#bug\u4fee\u590d\" class=\"anchor-link\" aria-label=\"bug\u4fee\u590d\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:bug\u4fee\u590d\" class=\"headings\">bug\u4fee\u590d<\/a><\/h3>\n<ol>\n<li>\u624b\u673a\u4e0a\u641c\u7d22\u6846\u4e0d\u5c55\u793a\n<ol>\n<li>\u9875\u9762\u4e0a\u8c03\u8bd5\u53d1\u73b0\u641c\u7d22\u6846\u4e0e\u5176\u4ed6\u83dc\u5355class\u503c\u4e0d\u540c\uff0c\u641c\u7d22\u4e3a<code>class=&quot;menu-item search-item&quot;<\/code>\uff0c \u4e0e\u5176\u4ed6\u83dc\u5355\u4e3a<code>class=&quot;menu-item&quot;<\/code><\/li>\n<li>\u624b\u52a8\u5220\u9664search-item\u663e\u793a\u6b63\u5e38\uff0c\u5728\u4ee3\u7801\u4e2d\u641c\u7d20search-item\uff0c\u5220\u9664menu.html\u4e2dsearch-item\u5373\u53ef\u4fee\u590d\u6b64\u95ee\u9898<\/li>\n<\/ol>\n<\/li>\n<li>\u8bf4\u8bf4\u9875\u9762\u65e0\u6697\u9ed1\u6a21\u5f0f\n<ol>\n<li>\u5c06<code>\\assets\\scss\\style-refractored.scss<\/code>\u4e2dcolor\u76f8\u5173\u7684\u4ee3\u7801\u5220\u9664\uff0c\u590d\u7528\u4e3b\u9898\u7684\u8272\u5f69<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_tips\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>\u672c\u6587\u6700\u60f3\u544a\u77e5\u8bfb\u8005\u548c\u81ea\u6211\u603b\u7ed3\u7684\u662f:\u89e3\u51b3\u95ee\u9898\u7684\u601d\u7ef4\u65b9\u5f0f\u3002\u5e0c\u671b\u8bfb\u8005\u53ef\u4ee5\u611f\u53d7\u5230\u8fd9\u70b9\uff0c\u4e5f\u5e0c\u671b\u672c\u6587\u53ef\u4ee5\u5e2e\u52a9\u8bfb\u8005\u89e3\u51b3\u4e00\u4e9b\u95ee\u9898\u3002<\/li>\n<li>\u95f4\u96941\u4e2a\u6708\u540e\u518d\u6b21\u9605\u8bfb\u672c\u6587\uff0c\u6574\u4f53\u6587\u7ae0\u5185\u5bb9\u504f\u591a,\u7ed3\u6784\u4e0d\u6e05\u6670\uff0c\u8868\u8ff0\u80fd\u529b\u9700\u8981\u52a0\u5f3a<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/hugo\/","term":"Hugo","label":"Hugo"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/tips\/","term":"tips","label":"tips"}}]},{"title":"\n\u61d2\u4eba\u5fc5\u5907\uff0c\u81ea\u52a8\u53d1\u5c0f\u7ea2\u4e66","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-11-24T13:53:21+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u901a\u8fc7\u5c06\u6587\u7ae0\u4fdd\u5b58\u4e3ahtml\u6587\u4ef6\uff0c\u7136\u540e\u5229\u7528selenium\u5c06html\u8f6c\u6362\u4e3a\u56fe\u7247\uff0c\u518d\u901a\u8fc7selenium\u6a21\u62df\u70b9\u51fb\u5c0f\u7ea2\u4e66\u7684\u53d1\u5e03\u6d41\u7a0b\uff0c\u5b9e\u73b0\u4e86\u5c06\u6587\u7ae0\u81ea\u52a8\u53d1\u5e03\u5230\u5c0f\u7ea2\u4e66\u7684\u529f\u80fd\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u65e5\u5e38\u5199\u6587\u7ae0\u540c\u6b65\u516c\u4f17\u53f7\u5df2\u7ecf\u6709\u81ea\u52a8\u5316\u5de5\u5177\u8f85\u52a9\uff0c\u4f46\u662f\u53d1\u5e03\u5230\u5c0f\u7ea2\u4e66\u8fd8\u662f\u9700\u8981\u7ecf\u8fc7\u91cd\u65b0\u7f16\u8f91\u975e\u5e38\u4e0d\u65b9\u4fbf\u3002\u524d\u6bb5\u65f6\u95f4\u542c\u64ad\u5ba2\u7684\u65f6\u5019\uff0c\u542c\u5230\u4e00\u4e2a\u65b9\u6848\u662f\u5c06html\u8f6c\u6362\u6210\u56fe\u7247\uff0c\u7136\u540e\u5728\u5c0f\u7ea2\u4e66\u4e0a\u53ea\u53d1\u5e03\u56fe\u7247\uff0c\u89e3\u51b3\u4e86\u91cd\u65b0\u7f16\u8f91\u548c\u6587\u7ae0\u5b57\u6570\u9650\u5236\u3002\u76ee\u524d\u9002\u5408\u6211\u7684\u811a\u672c\u5df2\u7f16\u5199\u5b8c\u6210\uff0c\u8bb0\u5f55\u4e0b\u6574\u4f53\u6d41\u7a0b\u3002<\/p>\n<h3 id=\"\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#contents:\u65b9\u6848\" class=\"headings\">\u65b9\u6848<\/a><\/h3>\n<ol>\n<li>\u5728\u540c\u6b65\u516c\u4f17\u53f7\u7684\u811a\u672c\u4e2d\u5c06markdown\u6587\u4ef6\u8f6c\u6362\u6210\u4e86html\u6587\u4ef6\uff0c\u5229\u7528selenium\u52a0\u8f7dhtml\u6587\u4ef6\u5168\u6587\u622a\u56fe\uff0c\u7136\u540e\u6309\u7167\u6807\u9898\u5750\u6807\u5c06\u4e0d\u540c\u6bb5\u843d\u8f6c\u6362\u6210\u56fe\u7247\u3002\u4e4b\u540e\u518d\u501f\u52a9selenium\u6a21\u62df\u70b9\u51fb\u5c0f\u7ea2\u4e66\u53d1\u5e03\u6d41\u7a0b\uff0c\u5b9e\u73b0\u5168\u81ea\u52a8\u5316\u6587\u7ae0\u53d1\u5e03\u3002<\/li>\n<li>\u9996\u5148\u5728github\u4e0a\u67e5\u627e\u662f\u5426\u6709\u5408\u9002\u7684\u811a\u672c\uff0c\u627e\u5230\u4e00\u4e2a<a href=\"https:\/\/github.com\/menhuan\/notes\/blob\/b5e24e7e5184df538c9c4755bf70eb8202e6c75e\/python\/douyin\/upload_xiaohongshu.py\" target=\"_blank\" rel=\"noopener\">\u81ea\u52a8\u53d1\u5e03\u5c0f\u7ea2\u4e66\u89c6\u9891\u811a\u672c<\/a><\/li>\n<\/ol>\n<h3 id=\"html\u8f6c\u56fe\u7247\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#html\u8f6c\u56fe\u7247\" class=\"anchor-link\" aria-label=\"html\u8f6c\u56fe\u7247\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#contents:html\u8f6c\u56fe\u7247\" class=\"headings\">html\u8f6c\u56fe\u7247<\/a><\/h3>\n<ol>\n<li>\n<p>\u6700\u5f00\u59cb\u8bd5\u7528\u4e86\u5f88\u591a\u5e93\u4f8b\u5982html2image,imgkit,pyppeteer\u7b49\uff0c\u56e0\u4e3a\u53ef\u6269\u5c55\u6027\u548c\u4e0d\u719f\u6089\u653e\u5f03\uff0c\u6700\u7ec8\u9009\u7528\u4e86PIL\u548cselenium<\/p>\n<\/li>\n<li>\n<p>\u6700\u521d\u91c7\u7528\u8bbe\u7f6e\u7a97\u53e3\u5bbd\u9ad8\u65b9\u6848\u622a\u56fe\uff0c\u4f46\u662f\u65e0\u6cd5\u4fbf\u6377\u7684\u88c1\u526a\u6307\u5b9a\u533a\u57df\u3002\u8c03\u6574\u4e3a\u5bf9\u6574\u4e2a\u6587\u7ae0\u8fdb\u884c\u622a\u56fe\uff0c\u7136\u540e\u6839\u636e\u6807\u9898\u5de6\u4e0a\u89d2\u7684\u5750\u6807\u786e\u5b9a\u88c1\u526a\u533a\u57df<\/p>\n<\/li>\n<li>\n<p>\u9605\u8bfbwebdriver.py API\u53d1\u73b0\u53ef\u4ee5\u4f7f\u7528<strong>set_window_rect<\/strong>\u8bbe\u7f6e\u622a\u56fe\u7684\u5750\u6807\u5b9e\u73b0\u76f8\u5e94\u529f\u80fd\uff0c\u8bfb\u8005\u53ef\u81ea\u884c\u5b9e\u9a8c<\/p>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os.path<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">PIL<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Image<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">selenium<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">webdriver<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">selenium.webdriver.common.by<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">By<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">time<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">html_to_png<\/span><span class=\"p\">(<\/span><span class=\"n\">html_path<\/span><span class=\"p\">,<\/span><span class=\"n\">out_path<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># options = webdriver.ChromeOptions()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">options<\/span> <span class=\"o\">=<\/span> <span class=\"n\">webdriver<\/span><span class=\"o\">.<\/span><span class=\"n\">EdgeOptions<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">options<\/span><span class=\"o\">.<\/span><span class=\"n\">add_argument<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;--headless&#39;<\/span><span class=\"p\">)<\/span> <span class=\"c1\"># \u4e0d\u77e5\u4e3a\u5565\u53ea\u80fd\u5728\u65e0\u5934\u6a21\u5f0f\u6267\u884c\u624d\u80fd\u622a\u5168\u5c4f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">options<\/span><span class=\"o\">.<\/span><span class=\"n\">add_argument<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;--disable-gpu&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span> <span class=\"o\">=<\/span> <span class=\"n\">webdriver<\/span><span class=\"o\">.<\/span><span class=\"n\">Edge<\/span><span class=\"p\">(<\/span><span class=\"n\">options<\/span><span class=\"o\">=<\/span><span class=\"n\">options<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># driver = webdriver.Chrome(options=options)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">maximize_window<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">html_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">sections<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_elements<\/span><span class=\"p\">(<\/span><span class=\"n\">By<\/span><span class=\"o\">.<\/span><span class=\"n\">XPATH<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;\/\/h3 | \/\/h4&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">h3_height_list<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">section<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">sections<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4f7f\u7528JavaScript\u6267\u884c\u811a\u672c\u6765\u83b7\u53d6\u7ae0\u8282\u5143\u7d20\u5728\u7f51\u9875\u4e2d\u7684\u4f4d\u7f6e\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">location<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">execute_script<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;return arguments[0].getBoundingClientRect();&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">section<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">h3_height_list<\/span><span class=\"o\">.<\/span><span class=\"n\">append<\/span><span class=\"p\">((<\/span><span class=\"n\">location<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;left&#39;<\/span><span class=\"p\">],<\/span><span class=\"n\">location<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;top&#39;<\/span><span class=\"p\">]))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">index<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">size<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">scroll_width<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">execute_script<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;return document.body.parentNode.scrollWidth&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">scroll_height<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">execute_script<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;return document.body.parentNode.scrollHeight&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">set_window_size<\/span><span class=\"p\">(<\/span><span class=\"n\">scroll_width<\/span><span class=\"p\">,<\/span> <span class=\"n\">scroll_height<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get_screenshot_as_file<\/span><span class=\"p\">(<\/span><span class=\"n\">out_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;screenshot.png&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">h3_height_list<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">index<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">screenshot<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Image<\/span><span class=\"o\">.<\/span><span class=\"n\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">out_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;screenshot.png&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u88c1\u526a\u51fa\u611f\u5174\u8da3\u7684\u4f4d\u7f6e<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cropped_image<\/span> <span class=\"o\">=<\/span> <span class=\"n\">screenshot<\/span><span class=\"o\">.<\/span><span class=\"n\">crop<\/span><span class=\"p\">((<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">size<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]),<\/span> <span class=\"n\">scroll_width<\/span><span class=\"p\">,<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">item<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">])))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4fdd\u5b58\u88c1\u526a\u540e\u7684\u56fe\u7247<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cropped_image<\/span><span class=\"o\">.<\/span><span class=\"n\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">out_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">%d<\/span><span class=\"s2\">.png&#34;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">index<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">size<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">index<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cropped_image<\/span> <span class=\"o\">=<\/span> <span class=\"n\">screenshot<\/span><span class=\"o\">.<\/span><span class=\"n\">crop<\/span><span class=\"p\">((<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"n\">size<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]),<\/span> <span class=\"n\">scroll_width<\/span><span class=\"p\">,<\/span> <span class=\"n\">scroll_height<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u4fdd\u5b58\u88c1\u526a\u540e\u7684\u56fe\u7247<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cropped_image<\/span><span class=\"o\">.<\/span><span class=\"n\">save<\/span><span class=\"p\">(<\/span><span class=\"n\">out_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">%d<\/span><span class=\"s2\">.png&#34;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">index<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">remove<\/span><span class=\"p\">(<\/span><span class=\"n\">out_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;screenshot.png&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">quit<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;__main__&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">_HTML<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">push_to_gzh<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">article<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">out<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">index_cp_article_wx.html&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">_OUTFILE<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;D:<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">workspace<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">script<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">push_to_xiaohongshu<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">out<\/span><span class=\"se\">\\\\<\/span><span class=\"s1\">&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u9996\u5148\u521b\u5efa\u4e00\u4e2a\u4fdd\u5b58\u622a\u56fe\u7684\u6587\u4ef6\u5939<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"ow\">not<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">isdir<\/span><span class=\"p\">(<\/span><span class=\"n\">_OUTFILE<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5224\u65ad\u6587\u4ef6\u5939\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u5c31\u521b\u5efa\u4e00\u4e2a<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">makedirs<\/span><span class=\"p\">(<\/span><span class=\"n\">_OUTFILE<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5c06html\u8f6c\u6362\u6210png<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">html_to_png<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;file:\/\/\/&#34;<\/span><span class=\"o\">+<\/span><span class=\"n\">_HTML<\/span><span class=\"p\">,<\/span><span class=\"n\">_OUTFILE<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u81ea\u52a8\u53d1\u56fe\u6587\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#\u81ea\u52a8\u53d1\u56fe\u6587\" class=\"anchor-link\" aria-label=\"\u81ea\u52a8\u53d1\u56fe\u6587\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#contents:\u81ea\u52a8\u53d1\u56fe\u6587\" class=\"headings\">\u81ea\u52a8\u53d1\u56fe\u6587<\/a><\/h3>\n<ol>\n<li><a href=\"https:\/\/github.com\/menhuan\/notes\/blob\/b5e24e7e5184df538c9c4755bf70eb8202e6c75e\/python\/douyin\/upload_xiaohongshu.py\" target=\"_blank\" rel=\"noopener\">\u81ea\u52a8\u53d1\u5e03\u5c0f\u7ea2\u4e66\u89c6\u9891\u811a\u672c<\/a>\u529f\u80fd\u5f88\u5b8c\u5584\uff0c\u5fae\u5fae\u8c03\u6574\u5c31\u53ef\u4ee5\u4f7f\u7528<\/li>\n<li>**vidoe.send_keys(mp4[0])**\u4e2dmp4[0]\u8c03\u6574\u4e3a\u56fe\u7247\u5730\u5740<\/li>\n<li><strong>for label in [&quot;#\u8650\u6587&quot;,&quot;#\u77e5\u4e4e\u6587&quot;,&quot;#\u5c0f\u8bf4\u63a8\u8350&quot;,&quot;#\u77e5\u4e4e\u5c0f\u8bf4&quot;,&quot;#\u723d\u6587&quot;]:<\/strong> \u6807\u7b7e\u901a\u8fc7\u53c2\u6570\u4f20\u9012<\/li>\n<li><strong>get_publish_date<\/strong> \u51fd\u6570\u7b80\u5316\uff0c\u4e0d\u50cf\u5b9a\u65f6\u53d1\u5e03\u53ef\u6ce8\u91ca\u76f8\u5e94\u4ee3\u7801<\/li>\n<li>\u5b89\u88c5selenium\u540e\uff0c\u7b2c\u4e00\u6b21\u6267\u884cwebdriver.EdgeOptions()\u65f6\u4f1a\u4e0b\u8f7d\u76f8\u5e94\u9a71\u52a8\uff0c\u8017\u65f6\u4f1a\u6709\u70b9\u4e45<\/li>\n<li>\u81ea\u52a8\u53d1\u5e03\u89c6\u9891\u51fd\u6570\u672a\u7ecf\u6d4b\u8bd5\uff0c\u5982\u6709bug\u53ef\u81ea\u884c\u8c03\u6574<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><span class=\"lnt\">128\n<\/span><span class=\"lnt\">129\n<\/span><span class=\"lnt\">130\n<\/span><span class=\"lnt\">131\n<\/span><span class=\"lnt\">132\n<\/span><span class=\"lnt\">133\n<\/span><span class=\"lnt\">134\n<\/span><span class=\"lnt\">135\n<\/span><span class=\"lnt\">136\n<\/span><span class=\"lnt\">137\n<\/span><span class=\"lnt\">138\n<\/span><span class=\"lnt\">139\n<\/span><span class=\"lnt\">140\n<\/span><span class=\"lnt\">141\n<\/span><span class=\"lnt\">142\n<\/span><span class=\"lnt\">143\n<\/span><span class=\"lnt\">144\n<\/span><span class=\"lnt\">145\n<\/span><span class=\"lnt\">146\n<\/span><span class=\"lnt\">147\n<\/span><span class=\"lnt\">148\n<\/span><span class=\"lnt\">149\n<\/span><span class=\"lnt\">150\n<\/span><span class=\"lnt\">151\n<\/span><span class=\"lnt\">152\n<\/span><span class=\"lnt\">153\n<\/span><span class=\"lnt\">154\n<\/span><span class=\"lnt\">155\n<\/span><span class=\"lnt\">156\n<\/span><span class=\"lnt\">157\n<\/span><span class=\"lnt\">158\n<\/span><span class=\"lnt\">159\n<\/span><span class=\"lnt\">160\n<\/span><span class=\"lnt\">161\n<\/span><span class=\"lnt\">162\n<\/span><span class=\"lnt\">163\n<\/span><span class=\"lnt\">164\n<\/span><span class=\"lnt\">165\n<\/span><span class=\"lnt\">166\n<\/span><span class=\"lnt\">167\n<\/span><span class=\"lnt\">168\n<\/span><span class=\"lnt\">169\n<\/span><span class=\"lnt\">170\n<\/span><span class=\"lnt\">171\n<\/span><span class=\"lnt\">172\n<\/span><span class=\"lnt\">173\n<\/span><span class=\"lnt\">174\n<\/span><span class=\"lnt\">175\n<\/span><span class=\"lnt\">176\n<\/span><span class=\"lnt\">177\n<\/span><span class=\"lnt\">178\n<\/span><span class=\"lnt\">179\n<\/span><span class=\"lnt\">180\n<\/span><span class=\"lnt\">181\n<\/span><span class=\"lnt\">182\n<\/span><span class=\"lnt\">183\n<\/span><span class=\"lnt\">184\n<\/span><span class=\"lnt\">185\n<\/span><span class=\"lnt\">186\n<\/span><span class=\"lnt\">187\n<\/span><span class=\"lnt\">188\n<\/span><span class=\"lnt\">189\n<\/span><span class=\"lnt\">190\n<\/span><span class=\"lnt\">191\n<\/span><span class=\"lnt\">192\n<\/span><span class=\"lnt\">193\n<\/span><span class=\"lnt\">194\n<\/span><span class=\"lnt\">195\n<\/span><span class=\"lnt\">196\n<\/span><span class=\"lnt\">197\n<\/span><span class=\"lnt\">198\n<\/span><span class=\"lnt\">199\n<\/span><span class=\"lnt\">200\n<\/span><span class=\"lnt\">201\n<\/span><span class=\"lnt\">202\n<\/span><span class=\"lnt\">203\n<\/span><span class=\"lnt\">204\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">time<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">traceback<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">datetime<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">datetime<\/span><span class=\"p\">,<\/span><span class=\"n\">timedelta<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">selenium<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">webdriver<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">selenium.webdriver.common.by<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">By<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">from<\/span> <span class=\"nn\">selenium.webdriver.common.keys<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">Keys<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">XIAOHONGSHU_COOKING<\/span> <span class=\"o\">=<\/span> <span class=\"sa\">r<\/span><span class=\"s1\">&#39;D:\\workspace\\script\\push_to_xiaohongshu\\out\\config.json&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_driver<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">options<\/span> <span class=\"o\">=<\/span> <span class=\"n\">webdriver<\/span><span class=\"o\">.<\/span><span class=\"n\">EdgeOptions<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># options.add_argument(&#39;--headless&#39;) # \u4e0d\u77e5\u4e3a\u5565\u53ea\u80fd\u5728\u65e0\u5934\u6a21\u5f0f\u6267\u884c\u624d\u80fd\u622a\u5168\u5c4f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># options.add_argument(&#39;--disable-gpu&#39;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span> <span class=\"o\">=<\/span> <span class=\"n\">webdriver<\/span><span class=\"o\">.<\/span><span class=\"n\">Edge<\/span><span class=\"p\">(<\/span><span class=\"n\">options<\/span><span class=\"o\">=<\/span><span class=\"n\">options<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">maximize_window<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">driver<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">xiaohongshu_login<\/span><span class=\"p\">(<\/span><span class=\"n\">driver<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">exists<\/span><span class=\"p\">(<\/span><span class=\"n\">XIAOHONGSHU_COOKING<\/span><span class=\"p\">)):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;cookies\u5b58\u5728&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">XIAOHONGSHU_COOKING<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cookies<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">read<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;https:\/\/creator.xiaohongshu.com\/creator\/post&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">implicitly_wait<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">delete_all_cookies<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u904d\u5386cook<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u52a0\u8f7dcookie&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">cookie<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">cookies<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"s1\">&#39;expiry&#39;<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">cookie<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">del<\/span> <span class=\"n\">cookie<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;expiry&#34;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6dfb\u52a0cook<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">add_cookie<\/span><span class=\"p\">(<\/span><span class=\"n\">cookie<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5237\u65b0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5f00\u59cb\u5237\u65b0&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">refresh<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;https:\/\/creator.xiaohongshu.com\/publish\/publish&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;cookies\u4e0d\u5b58\u5728&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;https:\/\/creator.xiaohongshu.com\/creator\/post&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># driver.find_element(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># &#34;xpath&#34;, &#39;\/\/*[@placeholder=&#34;\u8bf7\u8f93\u5165\u624b\u673a\u53f7&#34;]&#39;).send_keys(&#34;&#34;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># # driver.find_element(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># # &#34;xpath&#34;, &#39;\/\/*[@placeholder=&#34;\u8bf7\u8f93\u5165\u5bc6\u7801&#34;]&#39;).send_keys(&#34;&#34;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># driver.find_element(&#34;xpath&#34;, &#39;\/\/button[text()=&#34;\u767b\u5f55&#34;]&#39;).click()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u7b49\u5f85\u767b\u5f55&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">30<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u767b\u5f55\u5b8c\u6bd5&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cookies<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">get_cookies<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">with<\/span> <span class=\"nb\">open<\/span><span class=\"p\">(<\/span><span class=\"n\">XIAOHONGSHU_COOKING<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;w&#39;<\/span><span class=\"p\">)<\/span> <span class=\"k\">as<\/span> <span class=\"n\">f<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">f<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">dumps<\/span><span class=\"p\">(<\/span><span class=\"n\">cookies<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">cookies<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_publish_date<\/span><span class=\"p\">():<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">tomorrow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">now<\/span> <span class=\"o\">=<\/span> <span class=\"n\">datetime<\/span><span class=\"o\">.<\/span><span class=\"n\">today<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">now<\/span><span class=\"o\">.<\/span><span class=\"n\">hour<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">20<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">tomorrow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">now<\/span> <span class=\"o\">+<\/span> <span class=\"n\">timedelta<\/span><span class=\"p\">(<\/span><span class=\"n\">days<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">tomorrow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">tomorrow<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"n\">hour<\/span><span class=\"o\">=<\/span><span class=\"mi\">20<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">tomorrow<\/span> <span class=\"o\">=<\/span> <span class=\"n\">tomorrow<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"n\">hour<\/span><span class=\"o\">=<\/span><span class=\"mi\">20<\/span><span class=\"p\">,<\/span><span class=\"n\">minute<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">tomorrow<\/span><span class=\"o\">.<\/span><span class=\"n\">strftime<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;%Y-%m-<\/span><span class=\"si\">%d<\/span><span class=\"s2\"> %H:%M&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">publish_xiaohongshu_video<\/span><span class=\"p\">(<\/span><span class=\"n\">driver<\/span><span class=\"p\">,<\/span> <span class=\"n\">mp4<\/span><span class=\"p\">,<\/span> <span class=\"n\">index<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[text()=&#34;\u53d1\u5e03\u7b14\u8bb0&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5f00\u59cb\u4e0a\u4f20\u6587\u4ef6&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">mp4<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># ### \u4e0a\u4f20\u89c6\u9891<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">vidoe<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/input[@type=&#34;file&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">vidoe<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">mp4<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u586b\u5199\u6807\u9898<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">mp4<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;.mp4&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u586b\u5199\u6807\u9898\uff0c\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u8d5e\u54e6\uff5e&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">content<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u586b\u5199\u63cf\u8ff0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u586b\u5199\u66f4\u5168\u9762\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u8ba9\u66f4\u591a\u7684\u4eba\u770b\u5230\u4f60\u5427\uff01&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">content<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># #\u8650\u6587\u63a8\u8350 #\u77e5\u4e4e\u5c0f\u8bf4 #\u77e5\u4e4e\u6587<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">label<\/span> <span class=\"ow\">in<\/span> <span class=\"p\">[<\/span><span class=\"s2\">&#34;#\u8650\u6587&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;#\u77e5\u4e4e\u6587&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;#\u5c0f\u8bf4\u63a8\u8350&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;#\u77e5\u4e4e\u5c0f\u8bf4&#34;<\/span><span class=\"p\">,<\/span><span class=\"s2\">&#34;#\u723d\u6587&#34;<\/span><span class=\"p\">]:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">label<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_indexs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_elements<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;class name&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;publish-topic-item&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">data_index<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">data_indexs<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">label<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">data_index<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u70b9\u51fb\u6807\u7b7e&#34;<\/span><span class=\"p\">,<\/span><span class=\"n\">label<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_index<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">traceback<\/span><span class=\"o\">.<\/span><span class=\"n\">print_exc<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5b9a\u65f6\u53d1\u5e03<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">dingshi<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_elements<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@class=&#34;css-1v54vzp&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u70b9\u51fb\u5b9a\u65f6\u53d1\u5e03&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">dingshi<\/span><span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u8bf7\u9009\u62e9\u65e5\u671f&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">Keys<\/span><span class=\"o\">.<\/span><span class=\"n\">CONTROL<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;a&#39;<\/span><span class=\"p\">)<\/span> <span class=\"c1\">#\u5168\u9009<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># input_data.send_keys(Keys.DELETE)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">get_publish_date<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># driver.find_element(&#34;xpath&#34;, &#39;\/\/*[text()=&#34;\u786e\u5b9a&#34;]&#39;).click()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u7b49\u5f85\u89c6\u9891\u4e0a\u4f20\u5b8c\u6210<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">while<\/span> <span class=\"kc\">True<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;\/\/*[@id=&#34;publish-container&#34;]\/div\/div[2]\/div[2]\/div[6]\/div\/div\/div[1]\/\/*[contains(text(),&#34;\u91cd\u65b0\u4e0a\u4f20&#34;)]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">traceback<\/span><span class=\"o\">.<\/span><span class=\"n\">print_exc<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89c6\u9891\u8fd8\u5728\u4e0a\u4f20\u4e2d\u00b7\u00b7\u00b7&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89c6\u9891\u5df2\u4e0a\u4f20\u5b8c\u6210\uff01&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u53d1\u5e03<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[text()=&#34;\u53d1\u5e03&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u89c6\u9891\u53d1\u5e03\u5b8c\u6210\uff01&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">publish_xiaohongshu_image<\/span><span class=\"p\">(<\/span><span class=\"n\">driver<\/span><span class=\"p\">,<\/span> <span class=\"n\">image_path<\/span><span class=\"p\">,<\/span><span class=\"n\">title<\/span><span class=\"p\">,<\/span><span class=\"n\">describe<\/span><span class=\"p\">,<\/span><span class=\"n\">keywords<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[text()=&#34;\u53d1\u5e03\u7b14\u8bb0&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5f00\u59cb\u4e0a\u4f20\u56fe\u7247&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># ### \u4e0a\u4f20\u56fe\u7247<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[text()=&#34;\u4e0a\u4f20\u56fe\u6587&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">push_file<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/input[@type=&#34;file&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">file_names<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">listdir<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6253\u5370\u6240\u6709\u6587\u4ef6\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">file_name<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">file_names<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">push_file<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">image_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\\\<\/span><span class=\"s2\">&#34;<\/span><span class=\"o\">+<\/span><span class=\"n\">file_name<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u586b\u5199\u6807\u9898<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u586b\u5199\u6807\u9898\uff0c\u53ef\u80fd\u4f1a\u6709\u66f4\u591a\u8d5e\u54e6\uff5e&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">title<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u586b\u5199\u63cf\u8ff0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u586b\u5199\u66f4\u5168\u9762\u7684\u63cf\u8ff0\u4fe1\u606f\uff0c\u8ba9\u66f4\u591a\u7684\u4eba\u770b\u5230\u4f60\u5427\uff01&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">describe<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># #\u8650\u6587\u63a8\u8350 #\u77e5\u4e4e\u5c0f\u8bf4 #\u77e5\u4e4e\u6587<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">label<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">keywords<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">content_clink<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">label<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_indexs<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_elements<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;class name&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;publish-topic-item&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">data_index<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">data_indexs<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">label<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">data_index<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u70b9\u51fb\u6807\u7b7e&#34;<\/span><span class=\"p\">,<\/span><span class=\"n\">label<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">data_index<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">break<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">traceback<\/span><span class=\"o\">.<\/span><span class=\"n\">print_exc<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u5b9a\u65f6\u53d1\u5e03<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">dingshi<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_elements<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@class=&#34;css-1v54vzp&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u70b9\u51fb\u5b9a\u65f6\u53d1\u5e03&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">dingshi<\/span><span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[@placeholder=&#34;\u8bf7\u9009\u62e9\u65e5\u671f&#34;]&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">Keys<\/span><span class=\"o\">.<\/span><span class=\"n\">CONTROL<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;a&#39;<\/span><span class=\"p\">)<\/span> <span class=\"c1\">#\u5168\u9009<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># input_data.send_keys(Keys.DELETE)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">input_data<\/span><span class=\"o\">.<\/span><span class=\"n\">send_keys<\/span><span class=\"p\">(<\/span><span class=\"n\">get_publish_date<\/span><span class=\"p\">())<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># driver.find_element(&#34;xpath&#34;, &#39;\/\/*[text()=&#34;\u786e\u5b9a&#34;]&#39;).click()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u53d1\u5e03<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">find_element<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;xpath&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;\/\/*[text()=&#34;\u53d1\u5e03&#34;]&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">click<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u56fe\u6587\u53d1\u5e03\u5b8c\u6210\uff01&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">10<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s2\">&#34;__main__&#34;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">title<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;\u6d4b\u8bd5\u4e0b&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">describe<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;#python&#39;<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;#\u793c\u7269&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span> <span class=\"o\">=<\/span> <span class=\"n\">get_driver<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">xiaohongshu_login<\/span><span class=\"p\">(<\/span><span class=\"n\">driver<\/span><span class=\"o\">=<\/span><span class=\"n\">driver<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># publish_xiaohongshu_video(driver, r&#34;D:\\workspace\\script\\push_to_xiaohongshu\\out\\9.png&#34;, 1)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">publish_xiaohongshu_image<\/span><span class=\"p\">(<\/span><span class=\"n\">driver<\/span><span class=\"p\">,<\/span> <span class=\"sa\">r<\/span><span class=\"s2\">&#34;D:\\workspace\\script\\push_to_xiaohongshu\\out&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">title<\/span><span class=\"p\">,<\/span><span class=\"n\">describe<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">finally<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">driver<\/span><span class=\"o\">.<\/span><span class=\"n\">quit<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/publish_xhs\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<p>selenium\u662f\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u5e93\uff0c\u53ef\u4ee5\u5b9e\u73b0\u5f88\u591a\u81ea\u52a8\u5316\u7684\u5de5\u4f5c\u3002\u7b2c\u4e00\u6b21\u4f7f\u7528\u88ab\u60ca\u8273\u5230\uff0c\u8fd9\u4e5f\u662f\u4ee3\u7801\u7684\u8ff7\u4eba\u4e4b\u5904\uff0c\u671f\u5f85\u540e\u7eed\u4f7f\u7528selenium\u505a\u7684\u5c0f\u5de5\u5177\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E8%87%AA%E5%8A%A8%E5%8C%96\/","term":"\u81ea\u52a8\u5316","label":"\u81ea\u52a8\u5316"}}]},{"title":"\n\u5199\u4e2a\u89c6\u9891\u4e0b\u8f7d\u5668\u9001\u7ed9\u8001\u5a46","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/download_video\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/download_video\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-11-21T15:09:07+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4e3a\u81ea\u5df1\u7684\u8001\u5a46\u5f00\u53d1\u4e86\u4e00\u6b3e\u652f\u6301\u4e0b\u8f7dB\u7ad9\u548c\u597d\u770b\u89c6\u9891\u7684GUI\u8f6f\u4ef6\u3002\u57fa\u4e8e\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\uff0c\u6838\u5fc3\u4e0b\u8f7d\u5668\u662fyt-dlp.exe\uff0c\u5e76\u4f7f\u7528PyInstaller\u5c06\u7a0b\u5e8f\u6253\u5305\u6210exe\u6587\u4ef6","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u4e34\u8fd1\u8001\u5a46\u751f\u65e5\u601d\u8003\u8be5\u9001\u4ec0\u4e48\uff0c\u7ecf\u5e38\u770b\u5230\u522b\u4eba\u81ea\u5df1\u5199\u4e2a\u8f6f\u4ef6\u9001\u4e2a\u8001\u5a46\uff0c\u7a0b\u5e8f\u5458\u7684\u6d6a\u6f2b\u6c38\u8fdc\u8fd9\u4e48\u7684\u803f\u76f4\u3002<\/p>\n<h3 id=\"\u6574\u4f53\u6d41\u7a0b\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u6574\u4f53\u6d41\u7a0b\" class=\"anchor-link\" aria-label=\"\u6574\u4f53\u6d41\u7a0b\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u6574\u4f53\u6d41\u7a0b\" class=\"headings\">\u6574\u4f53\u6d41\u7a0b<\/a><\/h3>\n<h4 id=\"\u786e\u5b9a\u65b9\u5411\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u786e\u5b9a\u65b9\u5411\" class=\"anchor-link\" aria-label=\"\u786e\u5b9a\u65b9\u5411\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u786e\u5b9a\u65b9\u5411\" class=\"headings\">\u786e\u5b9a\u65b9\u5411<\/a><\/h4>\n<p>\u65e5\u5e38\u8001\u5a46\u7ecf\u5e38\u8ba9\u6211\u5e2e\u5979\u4e0b\u8f7dB\u7ad9\u548c\u597d\u770b\u89c6\u9891\u7684\u5185\u5bb9\uff0c\u540c\u65f6\u8001\u5a46\u5bf9\u8ba1\u7b97\u673a\u4e00\u7a8d\u4e0d\u901a\uff0c\u53ea\u4f1a\u70b9\u70b9\u70b9\u3002\u6700\u7ec8\u786e\u5b9a\u7ed9\u8001\u5a46\u5199\u4e2a\u652f\u6301\u4e0b\u8f7dB\u7ad9\u548c\u597d\u770b\u89c6\u9891\u5e26GUI\u7684\u8f6f\u4ef6\u3002<\/p>\n<h4 id=\"\u786e\u5b9a\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u786e\u5b9a\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u786e\u5b9a\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u786e\u5b9a\u65b9\u6848\" class=\"headings\">\u786e\u5b9a\u65b9\u6848<\/a><\/h4>\n<ol>\n<li>\u672c\u4eba\u65e5\u5e38\u6709\u4f7f\u7528yt-dlp\u4e0b\u8f7dyoutube\u548cb\u7ad9\u89c6\u9891\uff0c\u5c31\u8fd9\u6837\u6572\u5b9a\u4e86\u4e0b\u8f7d\u7684\u6838\u5fc3<\/li>\n<li>\u672c\u4eba\u5f88\u5c11\u4f7f\u7528python\u5199gui\u7a0b\u5e8f\uff0c\u56e0\u800c\u9700\u8981\u627e\u4e00\u4e2ayt-dlp\u7684gui\u5f00\u6e90\u9879\u76ee\uff0c\u51cf\u5c11\u5f00\u53d1\u96be\u5ea6\n<ol>\n<li>\u7ecf\u8fc7\u5bfb\u627e\u5f00\u6e90\u9879\u76ee<a href=\"https:\/\/github.com\/MrS0m30n3\/youtube-dl-gui\" target=\"_blank\" rel=\"noopener\">youtube-dl-gui<\/a>\u5f88\u9002\u5408\uff0c\u867d\u7136\u5df2\u7ecf\u505c\u6b62\u7ef4\u62a46\u5e74<\/li>\n<\/ol>\n<\/li>\n<li>\u597d\u770b\u89c6\u9891\u76f4\u63a5\u722c\u53d6\u7f51\u9875\u4e2d\u89c6\u9891\u94fe\u63a5\uff0c\u7136\u540e\u5bf9\u89c6\u9891\u94fe\u63a5\u8fdb\u884c\u4e0b\u8f7d<\/li>\n<\/ol>\n<h4 id=\"youtube-dl-gui\u6539\u9020\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#youtube-dl-gui\u6539\u9020\" class=\"anchor-link\" aria-label=\"youtube-dl-gui\u6539\u9020\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:youtube-dl-gui\u6539\u9020\" class=\"headings\">youtube-dl-gui\u6539\u9020<\/a><\/h4>\n<ol>\n<li>\n<p>\u4e3b\u8981\u8c03\u6574\u4e3a\u5c06python2\u8c03\u6574\u4e3apython3,\u6839\u636e\u8c03\u8bd5\u62a5\u9519\u8fdb\u884c\u9488\u5bf9\u6027\u4fee\u6b63\uff0c\u4fee\u6b63\u8fc7\u7a0b\u4e0d\u8d58\u8ff0<\/p>\n<ol>\n<li>\u53ef\u4ee5\u4f7f\u7528\u4ee3\u7801\u5bf9\u6bd4\u5de5\u5177\u81ea\u884c\u5bf9\u6bd4<a href=\"https:\/\/github.com\/xiaoshame\/yt-dlp-gui\" target=\"_blank\" rel=\"noopener\">yt-dlp-gui<\/a>\u4e0e<a href=\"https:\/\/github.com\/MrS0m30n3\/youtube-dl-gui\" target=\"_blank\" rel=\"noopener\">youtube-dl-gui<\/a><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u5c06\u4e0b\u8f7d\u5668\u8c03\u6574\u4e3ayt-dlp.exe,\u53c2\u6570YOUTUBEDL_BIN\u6700\u521d\u8c03\u6574\u4e3a\u672c\u5730yt-dlp.exe\u76ee\u5f55\uff0c\u56e0\u4e3a\u5b9e\u65f6\u4e0b\u8f7d\u529f\u80fd\u672a\u5b8c\u6210\uff0c\u5c06yt-dlp.exe\u653e\u5230\/data\/exe\/\u76ee\u5f55\u4e0b\u65b9\u4fbf\u540e\u7eed\u6253\u5305\uff0c\u540c\u65f6YOUTUBEDL_BIN\u4e5f\u8c03\u6574\u4e3a\u83b7\u53d6\u8fd0\u884c\u76ee\u5f55\u52a0\u4e0a\u76f8\u5bf9\u8def\u5f84<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">YOUTUBEDL_BIN<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">getcwd<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">name<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;nt&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">YOUTUBEDL_BIN<\/span> <span class=\"o\">+=<\/span> <span class=\"s1\">&#39;\/_internal\/exe\/yt-dlp.exe&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<h4 id=\"python\u6253\u5305\u6210exe\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#python\u6253\u5305\u6210exe\" class=\"anchor-link\" aria-label=\"python\u6253\u5305\u6210exe\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:python\u6253\u5305\u6210exe\" class=\"headings\">python\u6253\u5305\u6210exe<\/a><\/h4>\n<ol>\n<li>\n<p>\u4e3b\u8981\u53c2\u8003<a href=\"https:\/\/www.cnblogs.com\/bbiu\/p\/13209612.html\" target=\"_blank\" rel=\"noopener\">PyInstaller\u6253\u5305Python\u9879\u76ee\u8be6\u89e3<\/a><\/p>\n<\/li>\n<li>\n<p>\u64cd\u4f5c\u6d41\u7a0b<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><span class=\"lnt\">68\n<\/span><span class=\"lnt\">69\n<\/span><span class=\"lnt\">70\n<\/span><span class=\"lnt\">71\n<\/span><span class=\"lnt\">72\n<\/span><span class=\"lnt\">73\n<\/span><span class=\"lnt\">74\n<\/span><span class=\"lnt\">75\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\"># 1.\u6267\u884c\u547d\u4ee4\uff0c__main__.py\u4e3a\u7a0b\u5e8f\u5165\u53e3\u6587\u4ef6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pyinstall -D __main__.py\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># 2.\u5220\u9664\u751f\u6210\u7684bulid\u548cdist\u6587\u4ef6\u5939,\u4ec5\u4fdd\u7559__main__.spec\u6587\u4ef6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># 3.\u4fee\u6539__main__.spec\u6587\u4ef6,\u7d20\u6750\u548cyt-dlp.exe\u52a0\u5165\u6253\u5305\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># -*- mode: python ; coding: utf-8 -*-\n<\/span><\/span><span class=\"line\"><span class=\"cl\">a = Analysis(\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [&#39;__main__.py&#39;],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> pathex=[&#39;D\\\\workspace\\\\youtube_dl_gui&#39;],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> binaries=[(&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\exe\\\\yt-dlp.exe&#39;,&#39;exe&#39;)],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> datas=[(&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\128x128\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\16x16\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\256x256\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\32x32\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\48x48\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\icons\\\\hicolor\\\\64x64\\\\apps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\icons\\\\hicolor&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\arrow_down_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\arrow_up_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\camera_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\cloud_download_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\delete_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\folder_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\icons-license&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\pause_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\play_arrow_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\reload_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\settings_20px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\stop_32px.png&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\youtube-dl-gui.ico&#39;,&#39;data\\\\pixmaps&#39;),\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> (&#39;D:\\\\workspace\\\\youtube_dl_gui\\\\data\\\\pixmaps\\\\youtube-dl-gui.png&#39;,&#39;data\\\\pixmaps&#39;)],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> hiddenimports=[],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> hookspath=[],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> hooksconfig={},\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> runtime_hooks=[],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> excludes=[],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> noarchive=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pyz = PYZ(a.pure)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">exe = EXE(\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> pyz,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> a.scripts,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> exclude_binaries=True,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> name=&#39;youtube_dl_gui&#39;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> debug=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> bootloader_ignore_signals=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> strip=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> upx=True,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> console=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> disable_windowed_traceback=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> argv_emulation=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> target_arch=None,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> codesign_identity=None,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> entitlements_file=None,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">coll = COLLECT(\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> exe,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> a.binaries,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> a.datas,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> strip=False,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> upx=True,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> upx_exclude=[],\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> name=&#39;__main__&#39;,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># 4.\u6267\u884c\u547d\u4ee4\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pyinstaller __main__.spec\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># 5.\u53bbdist\u6587\u4ef6\u5939\u4e0b\u627eyoutube_dl_gui.exe\u6587\u4ef6,\u8fd0\u884c\u81ea\u6d4b\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># 6.\u8fd0\u884c\u6210\u529f\uff0c\u5220\u9664\u4e34\u65f6\u6587\u4ef6\u76ee\u5f55build\uff1bdist\u76ee\u5f55\u4e3a\u6253\u5305\u7684\u7ed3\u679c\uff0c\u53ef\u6267\u884c\u6587\u4ef6\u548c\u5176\u5b83\u7a0b\u5e8f\u8fd0\u884c\u7684\u5173\u8054\u6587\u4ef6\u90fd\u5728\u8fd9\u4e2a\u76ee\u5f55\u4e0b\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<h4 id=\"\u652f\u6301\u597d\u770b\u89c6\u9891\u4e0b\u8f7d\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u652f\u6301\u597d\u770b\u89c6\u9891\u4e0b\u8f7d\" class=\"anchor-link\" aria-label=\"\u652f\u6301\u597d\u770b\u89c6\u9891\u4e0b\u8f7d\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u652f\u6301\u597d\u770b\u89c6\u9891\u4e0b\u8f7d\" class=\"headings\">\u652f\u6301\u597d\u770b\u89c6\u9891\u4e0b\u8f7d<\/a><\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">get_video<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">base_url<\/span> <span class=\"o\">=<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">bv<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">headers<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;user-agent&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;Mozilla\/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Version\/13.0.3 Mobile\/15E148 Safari\/604.1&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">url<\/span><span class=\"o\">=<\/span><span class=\"n\">base_url<\/span><span class=\"p\">,<\/span> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"n\">headers<\/span><span class=\"p\">,<\/span> <span class=\"n\">timeout<\/span><span class=\"o\">=<\/span><span class=\"mi\">5<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">status_code<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">200<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># soup = BeautifulSoup(response.text, &#39;html.parser&#39;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">start<\/span> <span class=\"o\">=<\/span> <span class=\"n\">html<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;window.__PRELOADED_STATE__ = &#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">end<\/span> <span class=\"o\">=<\/span> <span class=\"n\">html<\/span><span class=\"o\">.<\/span><span class=\"n\">find<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;}};&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">start<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">json_str<\/span> <span class=\"o\">=<\/span> <span class=\"n\">html<\/span><span class=\"p\">[<\/span><span class=\"n\">start<\/span><span class=\"o\">+<\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;window.__PRELOADED_STATE__ = &#34;<\/span><span class=\"p\">):<\/span><span class=\"n\">end<\/span><span class=\"o\">+<\/span><span class=\"mi\">2<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">json_data<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">json_str<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">title<\/span><span class=\"o\">=<\/span> <span class=\"n\">json_data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;curVideoMeta&#39;<\/span><span class=\"p\">][<\/span><span class=\"s1\">&#39;title&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">videoInfo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json_data<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;curVideoMeta&#39;<\/span><span class=\"p\">][<\/span><span class=\"s1\">&#39;clarityUrl&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">url<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">item<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">videoInfo<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">item<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;key&#39;<\/span><span class=\"p\">]<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;sc&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">url<\/span> <span class=\"o\">=<\/span> <span class=\"n\">item<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;url&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">title<\/span><span class=\"p\">,<\/span><span class=\"n\">url<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">Exception<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">,<\/span><span class=\"s1\">&#39;&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><ol>\n<li>\u6d4b\u8bd5\u4e0a\u8ff0\u4ee3\u7801\u83b7\u53d6\u5bf9\u5e94\u9875\u9762\u89c6\u9891\u94fe\u63a5\u65e0\u8bef<\/li>\n<li>\u5728downloaders.py\u4e2d\u6dfb\u52a0HaoKanDownloader\u7c7b\uff0c\u6dfb\u52a0\u4e0b\u8f7d\u548c\u4e0b\u8f7d\u8fdb\u5ea6\u4ee3\u7801<\/li>\n<li>\u91cd\u65b0\u6253\u5305\u540e\uff0c\u8fd0\u884cexe\u63d0\u793a<code>OPENSSL_Uplink{00007FFE7BF17068,08}: no OPENSSL_Applink<\/code><\/li>\n<li>\u5c1d\u8bd5<a href=\"https:\/\/github.com\/python\/cpython\/issues\/108687\" target=\"_blank\" rel=\"noopener\">issue<\/a>\u4e2d\u7684\u65b9\u6cd5\uff0c\u4f7f\u7528\u5b98\u65b9__ssl.pyd\u8986\u76d6codna DLLs\u4e2d\u7684\u6587\u4ef6\uff0c\u89e3\u51b3\u6b64\u62a5\u9519\u63d0\u793a\u53e6\u5916\u62a5\u9519\uff0c\u5c06conda DLLs\u4e2d\u6240\u6709\u6587\u4ef6\u5168\u90e8\u7528\u5b98\u65b9DLLs\u4e2d\u6587\u4ef6\u66ff\u6362\u540e\u8fd0\u884c\u6b63\u5e38\u65e0\u62a5\u9519\uff0c\u4f46\u662f\u4e0b\u8f7dB\u7ad9\u89c6\u9891\u5931\u8d25<\/li>\n<li>\u56de\u6eda\u7b2c4\u90e8\u64cd\u4f5c\uff0c\u5c1d\u8bd5\u5c06requests\u66ff\u6362\u4e3aurllib.request\uff0c\u8fd4\u56de\u7684\u6570\u636e\u4e2d\u89c6\u9891\u5730\u5740\u88ab\u52a0\u5bc6<\/li>\n<li>\u627e\u5230\u9879\u76ee<a href=\"https:\/\/github.com\/litaolemo\/crawler\" target=\"_blank\" rel=\"noopener\">crawler<\/a>\u4e2d\u652f\u6301\u597d\u770b\u89c6\u9891\u4fe1\u606f\u83b7\u53d6\uff0c\u53d1\u8d77\u8bf7\u6c42\u540c\u6837\u4f7f\u7528requests\uff0c\u8c03\u6574\u4e3aurllib.request.Request\u540e\u9a8c\u8bc1\u53ef\u4ee5\u6b63\u5e38\u4f7f\u7528<\/li>\n<li>\u518d\u6b21\u6253\u5305\u6210exe,\u8fd0\u884c\u6b63\u5e38\u65e0\u62a5\u9519\uff0c\u4e0b\u8f7dB\u7ad9\u548c\u597d\u770b\u89c6\u9891\u6b63\u5e38\uff0c\u8bbe\u7f6e\u4ee3\u7406\u540e\u53ef\u4ee5\u4e0b\u8f7dyoutube\u89c6\u9891<\/li>\n<\/ol>\n<h3 id=\"\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/download_video\/#contents:\u603b\u7ed3\" class=\"headings\">\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>\u540e\u7eed\u4fee\u6539\u5f00\u6e90\u9879\u76ee\u8fc7\u7a0b\u4e2d\uff0c\u7a0b\u5e8f\u62a5\u9519\u9700\u8981\u987a\u624b\u622a\u56fe\u7559\u5b58\uff0c\u65b9\u4fbf\u540e\u7eed\u6587\u7ae0\u7f16\u5199\u4f7f\u7528<\/li>\n<li>\u901a\u8fc7\u6b64\u9879\u76ee\u719f\u6089\u4e86wxPython\u57fa\u7840\uff0c\u540e\u7eed\u53ef\u4ee5\u4f9d\u846b\u82a6\u753b\u74e2<\/li>\n<li>\u6b64\u524dpython\u57fa\u672c\u4f5c\u4e3a\u811a\u672c\u8bed\u8a00\u4f7f\u7528\uff0c\u540e\u7eed\u53ef\u4ee5\u5728\u5c0f\u578b\u9879\u76ee\u4f7f\u7528<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/python\/","term":"python","label":"python"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E4%B8%8B%E8%BD%BD\/","term":"\u4e0b\u8f7d","label":"\u4e0b\u8f7d"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/gui\/","term":"gui","label":"gui"}}]},{"title":"\nHugo+Github\u96f6\u6210\u672c\u642d\u5efa\u535a\u5ba2\u6d41\u7a0b\u8bb0\u5f552","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-11-08T11:38:20+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u6587\u7ae0\u63d0\u5230\u4e86\u521b\u5efa\u535a\u5ba2\u8fc7\u7a0b\u4e2d\u5bf9\u654f\u611f\u4fe1\u606f\u7684\u4fdd\u62a4\u65b9\u6cd5\u3002hugo.toml\u4e2d\u7684\u654f\u611f\u4fe1\u606f\u4f7f\u7528\u79c1\u6709\u4ed3\u5e93\u548cActions\u6765\u6539\u8fdb\u3002git\u63d0\u4ea4\u8bb0\u5f55\u4e2d\u7684\u654f\u611f\u4fe1\u606f\u66f4\u6539\u914d\u7f6e\u5b9e\u73b0\u3002\u5bf9\u81ea\u52a8\u6295\u7a3f\u516c\u4f17\u53f7\u7684key\u4fdd\u62a4\uff0c\u901a\u8fc7\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u6765\u4fdd\u5b58\u654f\u611f\u4fe1\u606f","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u521b\u5efa\u535a\u5ba2\u5230\u73b0\u5728\uff0c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u5b58\u5728\u4ee5\u4e0b\u95ee\u9898<\/p>\n<ol>\n<li>hugo.toml\u4e2d\u6709\u654f\u611f\u4fe1\u606f\uff0c\u6bcf\u6b21\u63d0\u4ea4\u4ee3\u7801\u65f6\u90fd\u989d\u5916\u9700\u8981\u6ce8\u610f<\/li>\n<li>git \u63d0\u4ea4\u8bb0\u5f55\u4e2d\u5305\u542b\u654f\u611f\u4fe1\u606f<\/li>\n<li>\u516c\u4f17\u53f7APP_ID\u548cAPP_SECRET\u4fdd\u62a4<\/li>\n<\/ol>\n<h3 id=\"\u89e3\u51b3\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#\u89e3\u51b3\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u89e3\u51b3\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:\u89e3\u51b3\u65b9\u6848\" class=\"headings\">\u89e3\u51b3\u65b9\u6848<\/a><\/h3>\n<h4 id=\"hugotoml\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#hugotoml\" class=\"anchor-link\" aria-label=\"hugotoml\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:hugotoml\" class=\"headings\">hugo.toml<\/a><\/h4>\n<ol>\n<li>\u53c2\u8003<a href=\"https:\/\/www.wingoftime.cn\/p\/setup-blog-second\/\" target=\"_blank\" rel=\"noopener\">hugo \u4f7f\u7528 github actions \u4fdd\u5b58\u6e90\u7801\u548c\u81ea\u52a8\u5316\u6784\u5efa<\/a><\/li>\n<li>\u65b0\u5efa\u4e00\u4e2a\u79c1\u6709\u4ed3\u5e93blog\uff0c\u5b58\u50a8\u535a\u5ba2\u6e90\u6587\u4ef6<\/li>\n<li>\u8bbe\u7f6egithub 'Personal access tokens',\u5728\u79c1\u6709\u4ed3\u5e93blog\u4e2d\u7ed1\u5b9a\u7528\u4e8e\u540e\u7eed\u81ea\u52a8\u63a8\u9001<\/li>\n<li>\u5728\u79c1\u6709\u4ed3\u5e93blog\u4e2d\u521b\u5efa\u81ea\u52a8\u5316\u6d41\u7a0b\uff0c\u811a\u672c\u653e\u5728\u9879\u76ee\u6839\u76ee\u5f55 .github\/workflows\/deploy.yml,\u6700\u540e\u7684\u6587\u4ef6\u540d\u81ea\u884c\u5b9a\u4e49<\/li>\n<li>\u6587\u7ae0\u5185\u5bb9\u63a8\u9001\u5230\u79c1\u6709\u4ed3\u5e93blog\uff0c\u901a\u8fc7Action\u8fdb\u884chugo\u7f16\u8bd1\uff0c\u7136\u540e\u5c06blog\u5185\u5bb9\u540c\u6b65\u5230xiaoshame.github.io(\u535a\u5ba2\u4ed3\u5e93)<\/li>\n<li>xiaoshame.github.io \u4ed3\u5e93\u4e2d\u90e8\u7f72\u6a21\u5f0f\u9700\u8981\u8c03\u6574\uff0csetting-&gt;Pages-&gt;Build and deployment\u9009'Deploy from a branch'\uff0c\u9009\u62e9\u5bf9\u5e94\u5206\u652f\u4fdd\u5b58\u5373\u53ef<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-yaml\" data-lang=\"yaml\"><span class=\"line\"><span class=\"cl\"><span class=\"nt\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">deploy<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"nt\">on<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">push<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">branches<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"l\">main<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">workflow_dispatch<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"nt\">jobs<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">build<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">runs-on<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">ubuntu-latest<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">steps<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"nt\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">Checkout<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">uses<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">actions\/checkout@v3<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">with<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">submodules<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">fetch-depth<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"m\">0<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">ref<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">main<\/span><span class=\"w\"> <\/span><span class=\"c\"># \u8fd9\u91cc\u9009\u62e9\u4f60\u89e6\u53d1\u90e8\u7f72\u7684\u5206\u652f\uff01\u9ed8\u8ba4\u662f master<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"nt\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">Setup Hugo<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">uses<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">peaceiris\/actions-hugo@v2<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">with<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">hugo-version<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">&#34;latest&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">extended<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"w\"> <\/span><span class=\"c\"># \u7528 stack \u4e3b\u9898\u9700\u8981\u52a0\u8fd9\u4e2a\u914d\u7f6e<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"nt\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">Build Web<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">run<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">hugo --minify<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span>- <span class=\"nt\">name<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">Deploy Web<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">uses<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">peaceiris\/actions-gh-pages@v3<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">with<\/span><span class=\"p\">:<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">PERSONAL_TOKEN<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">${{ secrets.PERSONAL_TOKEN }}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">EXTERNAL_REPOSITORY<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">xiaoshame\/xiaoshame.github.io<\/span><span class=\"w\"> <\/span><span class=\"c\"># \u6539\u6210\u4f60\u7684\u4ed3\u5e93<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">PUBLISH_BRANCH<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">main<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">PUBLISH_DIR<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">.\/public<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"nt\">commit_message<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"l\">${{ github.event.head_commit.message }}<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"git\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#git\" class=\"anchor-link\" aria-label=\"git\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:git\" class=\"headings\">Git<\/a><\/h4>\n<ol>\n<li>\n<p>git \u7684\u914d\u7f6e\u5206\u4e3a\u4e09\u7ea7\u522b\uff0c<code>System<\/code> -&gt; <code>Global<\/code> -&gt;<code>Local<\/code>\uff0c\u4f18\u5148\u7ea7\u662f <code>Local<\/code>&gt; <code>Global<\/code>&gt; <code>System<\/code>\u3002<\/p>\n<\/li>\n<li>\n<p>\u76f4\u63a5\u5728\u9879\u76ee\u4e0b\u8bbe\u7f6e\u7528\u6237\u540d\u548c\u90ae\u7bb1,\u6ce8\u610f\u5176\u4ed6\u7684\u9879\u76ee\u8fd8\u662f\u7528\u7684 <code>Global<\/code>\u4e2d\u7684\u914d\u7f6e<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">git config --local user.name &#34;jitwxs&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git config --local user.email &#34;jitwxs@foxmail.com\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<h4 id=\"\u516c\u4f17\u53f7\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#\u516c\u4f17\u53f7\" class=\"anchor-link\" aria-label=\"\u516c\u4f17\u53f7\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:\u516c\u4f17\u53f7\" class=\"headings\">\u516c\u4f17\u53f7<\/a><\/h4>\n<ol>\n<li>\u901a\u8fc7\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u4fdd\u5b58\uff0cwindows \u6211\u7684\u7535\u8111-&gt;\u5c5e\u6027-&gt;\u9ad8\u7ea7\u7cfb\u7edf\u8bbe\u7f6e-&gt;\u73af\u5883\u53d8\u91cf-&gt;\u7cfb\u7edf\u53d8\u91cf\uff0cPATH\u4e2d\u8bbe\u7f6e<\/li>\n<li>adfa<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\"> robot.config[&#34;APP_ID&#34;] = os.environ.get(&#34;WX_GZH_APP_ID&#34;)\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> robot.config[&#34;APP_SECRET&#34;] = os.environ.get(&#34;WX_GZH_APP_SECRET&#34;)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h3 id=\"\u5f85\u5b8c\u6210\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#\u5f85\u5b8c\u6210\" class=\"anchor-link\" aria-label=\"\u5f85\u5b8c\u6210\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog2\/#contents:\u5f85\u5b8c\u6210\" class=\"headings\">\u5f85\u5b8c\u6210<\/a><\/h3>\n<p>\u76ee\u524d\u83b7\u53d6\u6587\u7ae0\u6458\u8981 \u548c \u81ea\u52a8\u63a8\u9001\u5fae\u4fe1\u516c\u4f17\u53f7\u8fd8\u9700\u8981\u5355\u72ec\u8fd0\u884c\u4e24\u4e2a\u811a\u672c\uff0c\u540e\u7eed\u8ba1\u5212\u5c06\u8fd9\u4e24\u4e2a\u64cd\u4f5c\u5408\u5e76\u5230Action\u64cd\u4f5c\u4e2d\uff0c\u6709\u4e00\u4e2a\u95ee\u9898\u662f\u600e\u4e48\u63a7\u5236\u5fae\u4fe1\u516c\u4f17\u53f7\u63a8\u9001\u7684\u65f6\u673a<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/hugo\/","term":"Hugo","label":"Hugo"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/ci\/","term":"CI","label":"CI"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/github\/","term":"github","label":"github"}}]},{"title":"\n\u6587\u7ae0\u81ea\u52a8\u540c\u6b65\u5230\u516c\u4f17\u53f72","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-10-30T15:38:16+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u4ecb\u7ecd\u4e86\u5728\u5c06\u6587\u7ae0\u540c\u6b65\u5230\u5fae\u4fe1\u516c\u4f17\u53f7\u65f6\u51fa\u73b0\u7684\u6392\u7248\u95ee\u9898\uff0c\u5e76\u63d0\u51fa\u4e86\u89e3\u51b3\u65b9\u6848\u3002\u4f5c\u8005\u5c06markdown\u6587\u4ef6\u8f6c\u5316\u4e3ahtml\u7684\u9879\u76ee\u4e0e\u6587\u7ae0\u540c\u6b65\u9879\u76ee\u8fdb\u884c\u4e86\u6574\u5408\uff0c\u5e76\u5bf9\u90e8\u5206\u4ee3\u7801\u8fdb\u884c\u4e86\u4fee\u6539\u3002\u6700\u540e\uff0c\u4f5c\u8005\u603b\u7ed3\u4e86\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u7684\u6ce8\u610f\u4e8b\u9879\u548c\u4e00\u4e9b\u4f7f\u7528\u6280\u5de7\u3002\u5b8c\u6574\u7684\u4ee3\u7801\u5df2\u4e0a\u4f20\u5230GitHub\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p><a href=\"https:\/\/xiaoshame.github.io\/article_auto_push_gzh\/\" target=\"_blank\" rel=\"noopener\">\u6587\u7ae0\u81ea\u52a8\u540c\u6b65\u5230\u516c\u4f17\u53f7<\/a>\u4e0a\u4f20\u5230\u516c\u4f17\u53f7\u8349\u7a3f\u7bb1\u540e\uff0c\u56e0\u516c\u4f17\u53f7\u63a5\u53e3\u539f\u56e0\u5bfc\u81f4\u6392\u7248\u5b58\u5728\u95ee\u9898\uff0c\u65e0\u6cd5\u505a\u5230\u76f4\u63a5\u53d1\u5e03\u3002\u6392\u7248\u95ee\u9898\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u4ee3\u7801\u65e0\u6cd5\u5c55\u793a\u5b8c\u6574<\/li>\n<li>\u6709\u5e8f\u5217\u8868\u524d\u9762\u7684\u6570\u5b57\u65e0\u6cd5\u5c55\u793a<\/li>\n<li>\u65e0\u987b\u5217\u8868\u591a\u4e86\u51e0\u5217<\/li>\n<li>\u4e09\u7ea7\/\u56db\u7ea7\u6807\u9898\u6837\u5f0f\u56fa\u5316<\/li>\n<li>\u6700\u540e\u7684\u53c2\u8003\u5185\u5bb9\u6570\u5b57\u5217\u8868\u683c\u5f0f\u9519\u4e71<\/li>\n<\/ol>\n<h3 id=\"\u89e3\u51b3\u65b9\u6848\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#\u89e3\u51b3\u65b9\u6848\" class=\"anchor-link\" aria-label=\"\u89e3\u51b3\u65b9\u6848\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#contents:\u89e3\u51b3\u65b9\u6848\" class=\"headings\">\u89e3\u51b3\u65b9\u6848<\/a><\/h3>\n<p>\u67e5\u9605\u8d44\u6599\u627e\u5230markdown\u6587\u4ef6\u8f6chtml\u5f00\u6e90\u9879\u76ee<a href=\"https:\/\/github.com\/coder-pig\/hzwz-markdown-wx\" target=\"_blank\" rel=\"noopener\">hzwz-markdown-wx<\/a>\u3002hzwz-markdown-wx\u9879\u76ee\u5b58\u5728\u5982\u4e0b\u95ee\u9898\uff1a<\/p>\n<ol>\n<li>\n<p>\u751f\u6210\u7684html\u6587\u4ef6\u590d\u5236\u5230\u5fae\u4fe1\u516c\u4f17\u53f7\u64cd\u4f5c\uff0c\u5b9e\u64cd\u5931\u8d25<\/p>\n<\/li>\n<li>\n<p>\u751f\u6210\u7684html\u6587\u4ef6\u65e0\u6cd5\u81ea\u52a8\u6295\u7a3f\u5230\u516c\u4f17\u53f7<\/p>\n<ol>\n<li>\n<p>\u4f7f\u7528highlight\u5bf9code\u9ad8\u4eae\u751f\u6210\u7684html\u6587\u4ef6\u4e0a\u4f20\u516c\u4f17\u53f7\u62a5\u9519<\/p>\n<\/li>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-plaintext\" data-lang=\"plaintext\"><span class=\"line\"><span class=\"cl\">Invalid JSON: Expecting value: line 1 column 1 (char 0)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;script&gt;var i=location.href;var v=window.btoa?window.btoa(window.encodeURIComponent(i)):&#34;&#34;;window.location.href=&#34;https:\/\/waf.tencent.com\/501page.html?u=&#34;+location.origin+&#34;&amp;id=1b5cfa348bdfe54f018dcc316bcbf1cf-1697099164938977-85119-139672863803136-76234149314225168&amp;st=01&amp;v=&#34;+v;&lt;\/script&gt;&lt;\/head&gt;&lt;\/html&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u6574\u4f53\u65b9\u6848\u662f\u5c06<a href=\"https:\/\/xiaoshame.github.io\/article_auto_push_gzh\/\" target=\"_blank\" rel=\"noopener\">\u6587\u7ae0\u81ea\u52a8\u540c\u6b65\u5230\u516c\u4f17\u53f7<\/a>\u4e2d\u7684markdown-to-wechat\u65b9\u6848\u4e0ehzwz-markdown-wx\u878d\u5408\u3002<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"\u6838\u5fc3\u6539\u52a8\u4ecb\u7ecd\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#\u6838\u5fc3\u6539\u52a8\u4ecb\u7ecd\" class=\"anchor-link\" aria-label=\"\u6838\u5fc3\u6539\u52a8\u4ecb\u7ecd\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#contents:\u6838\u5fc3\u6539\u52a8\u4ecb\u7ecd\" class=\"headings\">\u6838\u5fc3\u6539\u52a8\u4ecb\u7ecd<\/a><\/h3>\n<ol>\n<li>\n<p>\u4fee\u6539sync.py\u4e2dupload_media_news\u51fd\u6570\uff0c\u53ea\u4fdd\u7559\u53d1\u5e03\u8349\u7a3f\u7bb1\u529f\u80fd<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">def<\/span> <span class=\"nf\">upload_media_news<\/span><span class=\"p\">(<\/span><span class=\"n\">content<\/span><span class=\"p\">,<\/span><span class=\"n\">baseinfo<\/span><span class=\"p\">,<\/span><span class=\"n\">token<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;&#34;&#34;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> \u4e0a\u4f20\u5230\u5fae\u4fe1\u516c\u4f17\u53f7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\"> &#34;&#34;&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">articles<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;articles&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;title&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseinfo<\/span><span class=\"o\">.<\/span><span class=\"n\">TITLE<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;thumb_media_id&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseinfo<\/span><span class=\"o\">.<\/span><span class=\"n\">THUMB_MEDIA_ID<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;author&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseinfo<\/span><span class=\"o\">.<\/span><span class=\"n\">AUTHOR<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;digest&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseinfo<\/span><span class=\"o\">.<\/span><span class=\"n\">digest<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;show_cover_pic&#34;<\/span><span class=\"p\">:<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;content&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">content<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;content_source_url&#34;<\/span><span class=\"p\">:<\/span> <span class=\"n\">baseinfo<\/span><span class=\"o\">.<\/span><span class=\"n\">CONTENT_SOURCE_URL<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u82e5\u65b0\u589e\u7684\u662f\u591a\u56fe\u6587\u7d20\u6750\uff0c\u5219\u6b64\u5904\u5e94\u6709\u51e0\u6bb5articles\u7ed3\u6784\uff0c\u6700\u591a8\u6bb5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"p\">{<\/span><span class=\"s1\">&#39;Content-type&#39;<\/span><span class=\"p\">:<\/span> <span class=\"s1\">&#39;text\/plain; charset=utf-8&#39;<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">datas<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">dumps<\/span><span class=\"p\">(<\/span><span class=\"n\">articles<\/span><span class=\"p\">,<\/span> <span class=\"n\">ensure_ascii<\/span><span class=\"o\">=<\/span><span class=\"kc\">False<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">encode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;utf-8&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u53d1\u5e03\u8349\u7a3f\u7bb1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">postUrl<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;https:\/\/api.weixin.qq.com\/cgi-bin\/draft\/add?access_token=<\/span><span class=\"si\">%s<\/span><span class=\"s2\">&#34;<\/span> <span class=\"o\">%<\/span> <span class=\"n\">token<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">r<\/span> <span class=\"o\">=<\/span> <span class=\"n\">requests<\/span><span class=\"o\">.<\/span><span class=\"n\">post<\/span><span class=\"p\">(<\/span><span class=\"n\">postUrl<\/span><span class=\"p\">,<\/span> <span class=\"n\">data<\/span><span class=\"o\">=<\/span><span class=\"n\">datas<\/span><span class=\"p\">,<\/span> <span class=\"n\">headers<\/span><span class=\"o\">=<\/span><span class=\"n\">headers<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">try<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">resp<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">loads<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">media_id<\/span> <span class=\"o\">=<\/span> <span class=\"n\">resp<\/span><span class=\"p\">[<\/span><span class=\"s1\">&#39;media_id&#39;<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">media_id<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># ### \u53d1\u5e03<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># media_params = {<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># &#34;media_id&#34;: media_id<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># }<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># postUrl = &#34;https:\/\/api.weixin.qq.com\/cgi-bin\/freepublish\/submit?access_token=%s&#34; % token<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># datas = json.dumps(media_params, ensure_ascii=False).encode(&#39;utf-8&#39;)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># r = requests.post(postUrl,data=datas, headers=headers)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># resp = json.loads(r.text)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># print(resp)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">True<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">JSONDecodeError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6355\u83b7JSON\u89e3\u7801\u9519\u8bef<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Invalid JSON:&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">False<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">except<\/span> <span class=\"ne\">KeyError<\/span> <span class=\"k\">as<\/span> <span class=\"n\">e<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6355\u83b7\u952e\u9519\u8bef<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;Key Error:&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">e<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"o\">.<\/span><span class=\"n\">text<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"kc\">False<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>app.py\u589e\u52a0\u540c\u6b65\u56fe\u7247\u7d20\u6750\u3001\u83b7\u53d6\u6587\u7ae0\u57fa\u672c\u4fe1\u606f\u3001\u6587\u7ae0\u6295\u7a3f\u7b49\u64cd\u4f5c<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"vm\">__name__<\/span> <span class=\"o\">==<\/span> <span class=\"s1\">&#39;__main__&#39;<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u76f8\u5173\u6587\u4ef6\u5939\u521d\u59cb\u5316<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">is_dir_existed<\/span><span class=\"p\">(<\/span><span class=\"n\">md_dir<\/span><span class=\"p\">)<\/span> <span class=\"ow\">or<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">is_dir_existed<\/span><span class=\"p\">(<\/span><span class=\"n\">out_dir<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u76ee\u5f55\u4e0d\u5b58\u5728&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">is_dir_existed<\/span><span class=\"p\">(<\/span><span class=\"n\">styles_dir<\/span><span class=\"p\">)<\/span> <span class=\"ow\">or<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">is_dir_existed<\/span><span class=\"p\">(<\/span><span class=\"n\">template_dir<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u76ee\u5f55\u4e0d\u5b58\u5728&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\"># \u6587\u4ef6\u68c0\u67e5\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">md_file_path_list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">filter_file_type<\/span><span class=\"p\">(<\/span><span class=\"n\">md_dir<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;.md&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">md_file_path_list<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5f53\u524d\u76ee\u5f55\u65e0md\u6587\u4ef6\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5\uff01&#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">md_dir<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">theme_file_path_list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">filter_file_type<\/span><span class=\"p\">(<\/span><span class=\"n\">styles_dir<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;.ini&#39;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">theme_file_path_list<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5f53\u524d\u76ee\u5f55\u65e0\u6837\u5f0f\u914d\u7f6e\u6587\u4ef6\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5\uff01&#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">styles_dir<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;begin sync to wechat&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">start_time<\/span> <span class=\"o\">=<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">time<\/span><span class=\"p\">()<\/span> <span class=\"c1\"># \u5f00\u59cb\u65f6\u95f4<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">init_cache<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">client<\/span><span class=\"p\">,<\/span> <span class=\"n\">token<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">Client<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">md_file_path<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">md_file_path_list<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">split_list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">md_file_path<\/span><span class=\"o\">.<\/span><span class=\"n\">split<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">sep<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">split_list<\/span><span class=\"p\">)<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">file_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">split_list<\/span><span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u8bfb\u53d6\u6587\u4ef6 \u2192&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">file_name<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">file_content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">read_file_content<\/span><span class=\"p\">(<\/span><span class=\"n\">md_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u56fe\u7247\u8d44\u6e90\u4e0a\u4f20\u5fae\u4fe1\u516c\u4f17\u53f7<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">file_content<\/span><span class=\"p\">,<\/span><span class=\"n\">imageId<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">update_images_urls<\/span><span class=\"p\">(<\/span><span class=\"n\">file_content<\/span><span class=\"p\">,<\/span><span class=\"n\">client<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">## \u83b7\u53d6\u6587\u7ae0\u57fa\u7840\u4fe1\u606f<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">baseinfo<\/span> <span class=\"o\">=<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">BaseInfo<\/span><span class=\"p\">(<\/span><span class=\"n\">file_content<\/span><span class=\"p\">,<\/span><span class=\"n\">imageId<\/span><span class=\"p\">,<\/span><span class=\"n\">md_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">for<\/span> <span class=\"n\">theme_file_path<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">theme_file_path_list<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">theme_name<\/span> <span class=\"o\">=<\/span> <span class=\"n\">theme_file_path<\/span><span class=\"o\">.<\/span><span class=\"n\">split<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">sep<\/span><span class=\"p\">)[<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">][:<\/span><span class=\"o\">-<\/span><span class=\"mi\">4<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u5e94\u7528\u6837\u5f0f \u2192&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">theme_name<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">renderer_content<\/span> <span class=\"o\">=<\/span> <span class=\"n\">render_article<\/span><span class=\"p\">(<\/span><span class=\"n\">file_content<\/span><span class=\"p\">,<\/span> <span class=\"n\">theme_file_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">template_dir<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">out_file_path<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">path<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"n\">out_dir<\/span><span class=\"p\">,<\/span> <span class=\"n\">file_name<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;.md&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;_<\/span><span class=\"si\">{}<\/span><span class=\"s2\">.html&#34;<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"n\">theme_name<\/span><span class=\"p\">)))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;\u8f93\u51fa\u6587\u4ef6 \u2192&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">out_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">cp_utils<\/span><span class=\"o\">.<\/span><span class=\"n\">write_file<\/span><span class=\"p\">(<\/span><span class=\"n\">renderer_content<\/span><span class=\"p\">,<\/span> <span class=\"n\">out_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">upload_media_news<\/span><span class=\"p\">(<\/span><span class=\"n\">renderer_content<\/span><span class=\"p\">,<\/span><span class=\"n\">baseinfo<\/span><span class=\"p\">,<\/span><span class=\"n\">token<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">sync<\/span><span class=\"o\">.<\/span><span class=\"n\">cache_update<\/span><span class=\"p\">(<\/span><span class=\"n\">md_file_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;sync &#34;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">md_file_path<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34; to wechat successful&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u4fee\u6539styles_renderer.py\u589e\u52a0\u53bb\u6389md\u4e2d\u6587\u7ae0\u63cf\u8ff0\u4fe1\u606f\uff0c\u4fee\u6539block_code\u51fd\u6570<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-python\" data-lang=\"python\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4ee3\u7801\u5757<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">def<\/span> <span class=\"nf\">block_code<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"n\">info<\/span><span class=\"o\">=<\/span><span class=\"kc\">None<\/span><span class=\"p\">):<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mac_window_template<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">highlight_result<\/span> <span class=\"o\">=<\/span> <span class=\"n\">renderer_by_node<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">codestyle<\/span><span class=\"p\">,<\/span> <span class=\"n\">info<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">mac_window_template<\/span><span class=\"o\">.<\/span><span class=\"n\">render<\/span><span class=\"p\">(<\/span><span class=\"n\">text<\/span><span class=\"o\">=<\/span><span class=\"n\">highlight_result<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">else<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">exts<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;markdown.extensions.extra&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;markdown.extensions.tables&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;markdown.extensions.toc&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s1\">&#39;markdown.extensions.sane_lists&#39;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">codehilite<\/span><span class=\"o\">.<\/span><span class=\"n\">makeExtension<\/span><span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">guess_lang<\/span><span class=\"o\">=<\/span><span class=\"kc\">False<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">noclasses<\/span><span class=\"o\">=<\/span><span class=\"kc\">True<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">pygments_style<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;friendly&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">),]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">info<\/span> <span class=\"ow\">is<\/span> <span class=\"ow\">not<\/span> <span class=\"kc\">None<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">info<\/span> <span class=\"o\">=<\/span> <span class=\"n\">info<\/span><span class=\"o\">.<\/span><span class=\"n\">strip<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">lang<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"n\">info<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">lang<\/span> <span class=\"o\">=<\/span> <span class=\"n\">info<\/span><span class=\"o\">.<\/span><span class=\"n\">split<\/span><span class=\"p\">(<\/span><span class=\"kc\">None<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)[<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;```&#34;<\/span><span class=\"o\">+<\/span> <span class=\"n\">lang<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39;<\/span><span class=\"se\">\\n<\/span><span class=\"s1\">&#39;<\/span> <span class=\"o\">+<\/span> <span class=\"n\">code<\/span> <span class=\"o\">+<\/span> <span class=\"s2\">&#34;```&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">html<\/span> <span class=\"o\">=<\/span> <span class=\"n\">markdown<\/span><span class=\"o\">.<\/span><span class=\"n\">markdown<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">,<\/span> <span class=\"n\">extensions<\/span><span class=\"o\">=<\/span><span class=\"n\">exts<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">replace_return<\/span><span class=\"p\">(<\/span><span class=\"n\">html<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<li>\n<p>\u5bf9html\u4e86\u89e3\u4e0d\u591a\uff0c\u5229\u7528markdown.markdown\u5b8c\u6210\u4ee3\u7801\u9ad8\u4eae\uff0c\u89c4\u907f\u4f7f\u7528highlight\u8fdb\u884c\u4ee3\u7801\u9ad8\u4eae\u65e0\u6cd5\u6295\u7a3f\u7684\u95ee\u9898<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u4f7f\u7528\u603b\u7ed3\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#\u4f7f\u7528\u603b\u7ed3\" class=\"anchor-link\" aria-label=\"\u4f7f\u7528\u603b\u7ed3\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh2\/#contents:\u4f7f\u7528\u603b\u7ed3\" class=\"headings\">\u4f7f\u7528\u603b\u7ed3<\/a><\/h3>\n<ol>\n<li>blog\\push_to_gzh\\config.ini\u4e2d\u63a7\u5236\u76f8\u5173\u8d44\u6e90\u76ee\u5f55\u5730\u5740<\/li>\n<li>blog\\push_to_gzh\\styles\\custom\\cp_article_wx.ini \u914d\u7f6e\u6587\u7ae0\u6837\u5f0f\n<ol>\n<li>codespan\u548ccodestyle\u914d\u7f6e\u4e0d\u53ef\u7528\uff0c\u4f1a\u5bfc\u81f4\u6587\u7ae0\u4ecb\u7ecd\u7684\u6295\u7a3f\u5931\u8d25\u95ee\u9898\u3002<\/li>\n<\/ol>\n<\/li>\n<li>css_beautify\u51fd\u6570\u53ef\u4ee5\u7f8e\u5316html\u6587\u4ef6\uff0c\u4f7f\u7528blog\\push_to_gzh\\template\\author\\assets\u4e2d\u7684\u6587\u4ef6\u5b9e\u73b0<\/li>\n<li>\u5b8c\u6574\u7684\u4ee3\u7801\u5df2\u4e0a\u4f20<a href=\"https:\/\/github.com\/xiaoshame\/script\" target=\"_blank\" rel=\"noopener\">github<\/a>\u53ef\u81ea\u884c\u67e5\u770b<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/ci\/","term":"CI","label":"CI"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%95%88%E7%8E%87\/","term":"\u6548\u7387","label":"\u6548\u7387"}}]},{"title":"\n\u6587\u7ae0\u81ea\u52a8\u540c\u6b65\u5230\u516c\u4f17\u53f7","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-10-24T19:09:53+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u901a\u8fc7\u5c06Markdown\u6587\u4ef6\u8f6c\u6362\u4e3aHTML\u6587\u4ef6\uff0c\u5229\u7528\u5fae\u4fe1\u5f00\u53d1\u8005API\u5c06\u6587\u7ae0\u540c\u6b65\u5230\u516c\u4f17\u53f7\u7684\u8349\u7a3f\u7bb1\u4e2d\u3002\u6587\u7ae0\u8fd8\u63d0\u5230\u4e86\u4e00\u4e9b\u64cd\u4f5c\u8bb0\u5f55\u548c\u8fd0\u884c\u524d\u63d0\uff0c\u4f46\u662f\u5b58\u5728\u7684\u4e0d\u8db3\u662f\u65e0\u6cd5\u76f4\u63a5\u53d1\u5e03\u6587\u7ae0\uff0c\u53ea\u80fd\u901a\u8fc7\u624b\u52a8\u7fa4\u53d1\u8ba9\u7c89\u4e1d\u770b\u5230\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u53d7<a href=\"https:\/\/catcoding.me\/p\/publish-to-wechat\/\" target=\"_blank\" rel=\"noopener\">\u5982\u4f55\u65e0\u75db\u82e6\u66f4\u65b0\u516c\u4f17\u53f7<\/a>\u5f71\u54cd\uff0c\u5f00\u59cb\u601d\u8003\u5982\u4f55\u5e94\u7528\u5230\u6211\u7684\u65e5\u5e38\u6587\u7ae0\u7f16\u5199\u4e2d\u3002<\/p>\n<h3 id=\"\u64cd\u4f5c\u8bb0\u5f55\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/#\u64cd\u4f5c\u8bb0\u5f55\" class=\"anchor-link\" aria-label=\"\u64cd\u4f5c\u8bb0\u5f55\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/article_auto_push_gzh\/#contents:\u64cd\u4f5c\u8bb0\u5f55\" class=\"headings\">\u64cd\u4f5c\u8bb0\u5f55<\/a><\/h3>\n<p>\u5b8c\u6574\u4ee3\u7801\u5df2\u540c\u6b65<a href=\"https:\/\/github.com\/xiaoshame\/script\" target=\"_blank\" rel=\"noopener\">\u4e2a\u4eba\u4ed3\u5e93<\/a>\uff0c\u4fee\u6b63pickle\u8fd0\u884c\u95ee\u9898\uff0c\u4ee3\u7801\u9ad8\u4eae\u540e\u65e0\u6eda\u52a8\u6761\u95ee\u9898\u3002<\/p>\n<p>\u811a\u672c\u539f\u7406\uff1a<\/p>\n<ol>\n<li>\u5229\u7528markdown\u5e93\u5b9e\u73b0md\u6587\u4ef6\u8f6c\u6362\u6210html\u6587\u4ef6<\/li>\n<li>\u5229\u7528codehilite \u5b9e\u73b0\u4ee3\u7801\u9ad8\u4eae<\/li>\n<li>\u5229\u7528\u5fae\u4fe1\u5f00\u53d1\u8005API\uff0c\u57fa\u4e8ewerobot\u5e93\u5b8c\u6210\u56fe\u7247\u8d44\u6e90\u4e0a\u4f20\u548c\u6587\u7ae0\u540c\u6b65\u5230\u8349\u7a3f\u7bb1<\/li>\n<\/ol>\n<p>\u8fd0\u884c\u524d\u63d0\uff1a<\/p>\n<ol>\n<li>\u5728\u516c\u4f17\u53f7\u8bbe\u7f6e\u4e0e\u5f00\u53d1-\u57fa\u672c\u914d\u7f6e\uff0c\u83b7\u53d6\u4e2a\u4ebaAPP_ID\u548cAPP_SECRET\u586b\u5165\u811a\u672c<\/li>\n<li>\u5728\u516c\u4f17\u53f7\u8bbe\u7f6e\u4e0e\u5f00\u53d1-\u57fa\u672c\u914d\u7f6e\uff0c\u5c06\u8fd0\u884c\u811a\u672c\u7684\u673a\u5668\u51fa\u53e3IP\u52a0\u5165\u516c\u4f17\u53f7\u767d\u540d\u5355<\/li>\n<li>\u4fee\u6539blog_path\u4e3a\u9700\u8981\u540c\u6b65\u7684\u6587\u7ae0\u5730\u5740<\/li>\n<\/ol>\n<p>\u4e0d\u8db3\uff1a<\/p>\n<p>\u53ef\u4ee5\u5bf9\u6587\u7ae0\u8fdb\u884c\u53d1\u5e03\uff0c\u817e\u8baf\u516c\u4f17\u53f7\u53d1\u5e03\u7684\u5b9a\u4e49\u662f\u7c89\u4e1d\u65e0\u6cd5\u770b\u5230\u6587\u7ae0\u3002\u6587\u7ae0\u7fa4\u53d1\u540e\u7c89\u4e1d\u624d\u80fd\u770b\u5230\uff0c\u4f46\u662f\u817e\u8baf\u5f00\u53d1\u8005API\u672a\u63d0\u4f9b\u7fa4\u53d1\u63a5\u53e3\u3002<\/p>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/ci\/","term":"CI","label":"CI"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E6%95%88%E7%8E%87\/","term":"\u6548\u7387","label":"\u6548\u7387"}}]},{"title":"\n\u89e3\u51b3\u5b58\u50a8\u8fc1\u79fb\u5bfc\u81f4\u7684Gitlab Runner\u95ee\u9898","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-10-19T15:02:51+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u603b\u7ed3\u4e86\u4f7f\u7528github-runner\u8fdb\u884c\u4ee3\u7801\u89c4\u8303\u68c0\u6d4b\u78b0\u5230\u7684\u95ee\u9898\u548c\u6392\u67e5\u3001\u89e3\u51b3\u7684\u8fc7\u7a0b\u3002\u95ee\u9898\u51fa\u5728\u955c\u50cf\u6587\u4ef6\u627e\u4e0d\u5230\uff0c\u901a\u8fc7\u6062\u590d\u955c\u50cf\u548c\u6ce8\u518cGitlab-Runner\u89e3\u51b3\u3002\u6587\u7ae0\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u6b65\u9aa4\u548c\u53c2\u8003\u8d44\u6599\u4f9b\u8bfb\u8005\u53c2\u8003\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u7ec4\u5185\u4f7f\u7528github-runner\u8fdb\u884c\u4ee3\u7801\u89c4\u8303\u68c0\u6d4b\uff0c\u6700\u8fd1\u8fd0\u7ef4\u8fdb\u884c\u5b58\u50a8\u5207\u6362\u5bfc\u81f4\u4ee3\u7801\u68c0\u6d4b\u8fd0\u884c\u5931\u8d25\uff0c\u4e4b\u524d\u627e\u5176\u4ed6\u4eba\u5b89\u88c5\u7684\uff0c\u5e74\u4e45\u65e0\u4eba\u7ef4\u62a4\u53ea\u80fd\u81ea\u5df1\u4e0a\uff0c\u8bb0\u5f55\u6574\u4e2a\u8fc7\u7a0b\u3002\u672c\u6587\u9ed8\u8ba4\u5927\u5bb6\u4e86\u89e3gitlab-runner\u7684\u57fa\u7840\u77e5\u8bc6\uff0c\u4e0d\u4e86\u89e3\u7684\u53ef\u4ee5\u5148\u9605\u8bfb\u53c2\u8003\u8d44\u6599\u4e2d\u7684\u6587\u7ae0\u3002<\/p>\n<h3 id=\"\u95ee\u9898\u6392\u67e5\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u95ee\u9898\u6392\u67e5\" class=\"anchor-link\" aria-label=\"\u95ee\u9898\u6392\u67e5\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u95ee\u9898\u6392\u67e5\" class=\"headings\">\u95ee\u9898\u6392\u67e5<\/a><\/h3>\n<p>\u6211\u4eec\u4ee3\u7801\u68c0\u6d4b\u4e3b\u8981\u7528\u7684cppcheck\u548ccpplint\uff0c\u67e5\u770bGithub-Runner jobs\u62a5\u9519\uff0c\u53d1\u73b0\u662f\u5bf9\u5e94\u7684\u955c\u50cf\u6587\u4ef6\u627e\u4e0d\u5230\uff0c\u9996\u5148\u6062\u590d\u955c\u50cf<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\">Preparing the &#34;docker&#34; executor\n<\/span><\/span><span class=\"line\"><span class=\"cl\">00:48\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Using Docker executor with image 10.1.107.12:5000\/dy\/cppcheck ...\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ERROR: Preparation failed: adding cache volume: set volume permissions: running permission container &#34;a192958483eb385c5a19432a82b4bfd20d54a7a7cd28a35e3c3f85938bc8ab31&#34; for volume &#34;runner-bcvnjjb9-project-11377-concurrent-0-cache-3c3f060a0374fc8bc39395164f415a70&#34;: starting permission container: Error response from daemon: error evaluating symlinks from mount source &#34;\/dy_video1\/docker-data\/volumes\/runner-bcvnjjb9-project-11377-concurrent-0-cache-3c3f060a0374fc8bc39395164f415a70\/_data&#34;: lstat \/dy_video1\/docker-data\/volumes\/runner-bcvnjjb9-project-11377-concurrent-0-cache-3c3f060a0374fc8bc39395164f415a70: no such file or directory (linux_set.go:105:5s)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"docker-\u6e90\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#docker-\u6e90\" class=\"anchor-link\" aria-label=\"docker-\u6e90\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:docker-\u6e90\" class=\"headings\">docker \u6e90<\/a><\/h4>\n<p>docker \u5b98\u65b9\u6e90\u88ab\u5899\uff0c\u8c03\u6574\u4e3a\u56fd\u5185\u6e90<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">sudo mkdir -p \/etc\/docker\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo vim \/etc\/docker\/daemon.json\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;registry-mirrors&#34;<\/span>: <span class=\"o\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/do.nark.eu.org&#34;<\/span>,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/dc.j8.work&#34;<\/span>,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/docker.m.daocloud.io&#34;<\/span>,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/dockerproxy.com&#34;<\/span>,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/docker.mirrors.ustc.edu.cn&#34;<\/span>,\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s2\">&#34;https:\/\/docker.nju.edu.cn&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo systemctl daemon-reload\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo systemctl restart docker\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u6062\u590d\u955c\u50cf\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u6062\u590d\u955c\u50cf\" class=\"anchor-link\" aria-label=\"\u6062\u590d\u955c\u50cf\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u6062\u590d\u955c\u50cf\" class=\"headings\">\u6062\u590d\u955c\u50cf<\/a><\/h4>\n<p>\u901a\u8fc7centos\u955c\u50cf\u5b89\u88c5cppcheck\u548ccpplint,\u5b89\u88c5\u5b8c\u6210\u540e\u5bfc\u51fa\u955c\u50cf\uff0c\u91cd\u65b0\u5bfc\u5165\u5e76\u4fee\u6539\u540d\u79f0<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u4e0b\u8f7dcentos\u955c\u50cf<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker pull centos:7\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u542f\u52a8centos\u5bb9\u5668\uff0c\u8fdb\u5165\u5b89\u88c5\u73af\u5883cppcheck cpplint<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker run -it centos:7 \/bin\/bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u66f4\u6362yum \u6e90<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl -o \/etc\/yum.repos.d\/CentOS-Base.repo http:\/\/mirrors.aliyun.com\/repo\/Centos-7.repo\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u5b89\u88c5\u57fa\u7840\u7f16\u8bd1\u5de5\u5177<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">yum install wget gcc gcc-c++ make cmake\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u4e0b\u8f7dcppcheck\u6e90\u7801\u7f16\u8bd1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">wget -O cppcheck.tar.gz https:\/\/github.com\/danmar\/cppcheck\/archive\/refs\/tags\/2.12.1.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">tar -xvzf cppcheck.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> cppcheck-2.12.1 <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span> mkdir build <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span> <span class=\"nb\">cd<\/span> build <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span> cmake .. <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span> cmake --build . <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span> make install <span class=\"nv\">SRCDIR<\/span><span class=\"o\">={<\/span>\u89e3\u538b\u7684cppcheck\u8def\u5f84<span class=\"o\">}<\/span>\/cppcheck-2.12.1\/build <span class=\"nv\">CFGDIR<\/span><span class=\"o\">={<\/span>\u89e3\u538b\u7684cppcheck\u8def\u5f84<span class=\"o\">}<\/span>\/cppcheck-2.12.1\/cfg <span class=\"nv\">FILESDIR<\/span><span class=\"o\">=<\/span>\/usr\/bin\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s \/usr\/local\/bin\/cppcheck \/usr\/bin\/cppcheck\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">## \u5b89\u88c5cpplint\uff0c\u6ce8\u610f\u9700\u5148\u5b89\u88c5python3 \u7248\u672c\u9700\u89813.8\u53ca\u4ee5\u4e0a<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make\n<\/span><\/span><span class=\"line\"><span class=\"cl\">yum install libffi-devel -y\n<\/span><\/span><span class=\"line\"><span class=\"cl\">wget https:\/\/www.python.org\/ftp\/python\/3.8.12\/Python-3.8.12.tgz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">tar -xzvf Python-3.8.12.tgz\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> Python-3.8.12\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/configure\n<\/span><\/span><span class=\"line\"><span class=\"cl\">make<span class=\"o\">&amp;&amp;<\/span>make install\n<\/span><\/span><span class=\"line\"><span class=\"cl\">rm -rf \/usr\/bin\/python\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s \/usr\/local\/bin\/python3 \/usr\/bin\/python\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pip3 install cpplint -i https:\/\/pypi.tuna.tsinghua.edu.cn\/simple\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u9000\u51fa\u5bb9\u5668<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">exit<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u67e5\u770b\u5bb9\u5668ID<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker ps -a\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u5bb9\u5668\u5bfc\u51fa<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker <span class=\"nb\">export<\/span> 79362966cbdc &gt; container.tar\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### tar\u5bfc\u5165\u4e3a\u955c\u50cf\u547d\u540d\u4e3a10.1.107.12:5000\/dy\/cppcheck<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker import container.tar 10.1.107.12:5000\/dy\/cppcheck\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"gitlab-runner-\u6ce8\u518c\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#gitlab-runner-\u6ce8\u518c\" class=\"anchor-link\" aria-label=\"gitlab-runner-\u6ce8\u518c\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:gitlab-runner-\u6ce8\u518c\" class=\"headings\">Gitlab-Runner \u6ce8\u518c<\/a><\/h4>\n<p>\u5728\u4e0b\u8f7dcentos\u955c\u50cf\u64cd\u4f5c\u4e2d\uff0c\u8d70\u4e86\u5f88\u591a\u5f2f\u8def\uff0c\u6700\u5927\u7684\u5f2f\u8def\u662f\u8bbe\u7f6edocker\u4ee3\u7406\uff0c\u63d0\u9ad8docker pull\u901f\u5ea6\uff0c\u7531\u4e8e\u8bef\u64cd\u4f5c\uff0c\u5bfc\u81f4GitLab-Runner\u955c\u50cf\u4e22\u5931<\/p>\n<h5 id=\"docker\u8fd0\u884cgitlab-runner\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#docker\u8fd0\u884cgitlab-runner\" class=\"anchor-link\" aria-label=\"docker\u8fd0\u884cgitlab-runner\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:docker\u8fd0\u884cgitlab-runner\" class=\"headings\">docker\u8fd0\u884cGitlab-Runner<\/a><\/h5>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u4e0b\u8f7dgitlab-runner \u955c\u50cf\uff0calpine\u5c0f\u4e00\u70b9<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker pull gitlab\/gitlab-runner:alpine\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u4f7f\u7528\u672c\u5730\u7cfb\u7edf\u5377\u6302\u8f7d\uff0c\u542f\u52a8 Runner \u5bb9\u5668<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker run -d --name gitlab-runner --restart always -v \/srv\/gitlab-runner\/config:\/etc\/gitlab-runner -v \/var\/run\/docker.sock:\/var\/run\/docker.sock gitlab\/gitlab-runner:alpine\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u8fdb\u5165\u5bb9\u5668\u6267\u884c\u6ce8\u518c<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker <span class=\"nb\">exec<\/span> -it gitlab-runner bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u91cd\u65b0\u6ce8\u518c,git\u5730\u5740\u548cREGISTRATION_TOKEN \u5728gitlab\u8bbe\u7f6eSettings CI\/CD\u4e2d\u67e5\u770b<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo gitlab-runner register --url https:\/\/XXXX\/ --registration-token <span class=\"nv\">$REGISTRATION_TOKEN<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the gitlab-ci coordinator URL <span class=\"o\">(<\/span>e.g. https:\/\/gitlab.com <span class=\"o\">)<\/span> <span class=\"c1\">###\u76f4\u63a5\u56de\u8f66<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the gitlab-ci token <span class=\"k\">for<\/span> this runner <span class=\"c1\">#### \u76f4\u63a5\u56de\u8f66<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the gitlab-ci description <span class=\"k\">for<\/span> this runner <span class=\"c1\">### \u968f\u610f\u5199\u4e2a\u63cf\u8ff0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the gitlab-ci tags <span class=\"k\">for<\/span> this runner <span class=\"o\">(<\/span>comma separated<span class=\"o\">)<\/span>: <span class=\"c1\">### \u5b9a\u4e49\u4e2atag\uff0c\u6211\u7528\u7684<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ai-bus1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&gt; Please enter the Docker image <span class=\"o\">(<\/span>eg. ruby:2.1<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">alpine:latest\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">### \u9000\u51fa\u5bb9\u5668<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">exit<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u518d\u6b21\u62a5\u9519\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u518d\u6b21\u62a5\u9519\" class=\"anchor-link\" aria-label=\"\u518d\u6b21\u62a5\u9519\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u518d\u6b21\u62a5\u9519\" class=\"headings\">\u518d\u6b21\u62a5\u9519<\/a><\/h4>\n<ol>\n<li>\u52fe\u9009Indicates whether this runner can pick jobs without tags\n<ol>\n<li><img src=\"https:\/\/xiaoshame.github.io\/images\/posts\/gitlab_runner\/1.png\" alt=\"Run untagged jobs\"><\/li>\n<\/ol>\n<\/li>\n<li>project\u62c9\u53d6\u65b0\u5206\u652f\u6d4b\u8bd5,\u6d4b\u8bd5\u62a5\u9519<\/li>\n<\/ol>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\">WARNING: Failed to pull image with policy &#34;always&#34;: Error response from daemon: Get &#34;http:\/\/10.1.107.12:5000\/v2\/&#34;: dial tcp 10.1.107.12:5000: connect: connection refused (manager.go:237:0s)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ERROR: Job failed: failed to pull image &#34;10.1.107.12:5000\/dy\/cppcheck&#34; with specified policies [always]: Error response from daemon: Get &#34;http:\/\/10.1.107.12:5000\/v2\/&#34;: dial tcp 10.1.107.12:5000: connect: connection refused (manager.go:237:0s)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u9884\u8ba1\u662fdocker\u8fd0\u884cgitlab-runner\u672a\u7ed1\u5b9a\u7aef\u53e3\u5bfc\u81f4\uff0c\u67e5\u770b.gitlab-ci.yml\u6587\u4ef6\u4e2dimage\u5b57\u6bb5\u662f10.1.107.12:5000\/dy\/cppcheck,\u6211\u91c7\u7528\u89e3\u51b3\u65b9\u6848\u662f\u4fee\u6539\u955c\u50cf\u540d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#### \u4fee\u6539gitlab-ci.yml\u6587\u4ef6\u4e2dimage\u5b57\u6bb5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">image:codecheck:v1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#### \u5220\u966410.1.107.12:5000\/dy\/cppcheck \u955c\u50cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker rmi 10.1.107.12:5000\/dy\/cppcheck\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#### \u5bfc\u5165container.tar\u547d\u540d\u4e3acodecheck:v1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker import container.tar codecheck:v1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><h4 id=\"\u7ee7\u7eed\u62a5\u9519\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u7ee7\u7eed\u62a5\u9519\" class=\"anchor-link\" aria-label=\"\u7ee7\u7eed\u62a5\u9519\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u7ee7\u7eed\u62a5\u9519\" class=\"headings\">\u7ee7\u7eed\u62a5\u9519<\/a><\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-text\" data-lang=\"text\"><span class=\"line\"><span class=\"cl\">WARNING: Failed to pull image with policy &#34;always&#34;: Error response from daemon: pull access denied for codecheck, repository does not exist or may require &#39;docker login&#39;: denied: requested access to the resource is denied (manager.go:237:2s)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ERROR: Job failed: failed to pull image &#34;codecheck:v1&#34; with specified policies [always]: Error response from daemon: pull access denied for codecheck, repository does not exist or may require &#39;docker login&#39;: denied: requested access to the resource is denied (manager.go:237:2s)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### \u4fee\u6539\u5bbf\u4e3b\u673a\u4e2dgitlab-runner\u914d\u7f6e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">vim \/etc\/gitlab-runner\/config.toml ### \u589e\u52a0pull_policy = &#34;never&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#### \u4fee\u6539\u5bb9\u5668\u4e2dgitlab-runner\u914d\u7f6e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">docker exec -it gitlab-runner bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\">vim \/etc\/gitlab-runner\/config.toml ### \u589e\u52a0pull_policy = &#34;never&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">#### \u4fee\u6539\u53c2\u8003\n<\/span><\/span><span class=\"line\"><span class=\"cl\">[[runners]]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> name = &#34;XXXX&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> url = &#34;https:\/\/gitlab.com\/&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> id = 412\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> token = &#34;XXXX&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> token_obtained_at = 2023-10-19T02:08:04Z\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> token_expires_at = 0001-01-01T00:00:00Z\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> executor = &#34;docker&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.custom_build_dir]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.cache]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.cache.s3]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.cache.gcs]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.cache.azure]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> [runners.docker]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> tls_verify = false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> image = &#34;alpine:latest&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> privileged = false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> disable_entrypoint_overwrite = false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> oom_kill_disable = false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> disable_cache = false\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> volumes = [&#34;\/cache&#34;]\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> shm_size = 0\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> pull_policy = &#34;never&#34;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">### pull_policy\u53c2\u6570\u4f5c\u7528\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pull_policy = \u201cnever\u201d ### \u53ea\u80fd\u4f7f\u7528 Runner \u6240\u5728\u7684 Docker \u4e3b\u673a\u4e0a\u63d0\u53d6\u8fc7\u7684\u672c\u5730\u955c\u50cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pull_policy = \u201cif-not-present\u201d ### Runner \u5c06\u9996\u5148\u68c0\u67e5\u6620\u50cf\u662f\u5426\u5728\u672c\u5730\u5b58\u5728\u3002\u5982\u679c\u662f\uff0c\u5219\u4f7f\u7528\u56fe\u50cf\u7684\u672c\u5730\u7248\u672c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">pull_policy = \u201calways\u201d ### \u9ed8\u8ba4\u62c9\u53d6\u7b56\u7565 (\u672a\u8bbe\u7f6e pull_policy \u6267\u884c\u9ed8\u8ba4\u62c9\u53d6\u7b56\u7565)\uff0c\u53bb\u62c9\u53d6\u516c\u7f51\u4e0a\u7684\u955c\u50cf\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><p>\u518d\u6b21\u6d4b\u8bd5\uff0c\u6d4b\u8bd5\u901a\u8fc7\uff0c\u95ee\u9898\u4fee\u590d<\/p>\n<h3 id=\"\u540e\u7eed\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u540e\u7eed\" class=\"anchor-link\" aria-label=\"\u540e\u7eed\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u540e\u7eed\" class=\"headings\">\u540e\u7eed<\/a><\/h3>\n<p>\u5199\u5b8c\u672c\u6587\u540e\uff0c\u4e0b\u73ed\u56de\u5230\u5bb6\u6d17\u6fa1\u65f6\uff0c\u601d\u8003\u8fd9\u4e2a\u95ee\u9898\u7684\u539f\u56e0\uff0c\u56e0\u8fd0\u884c\u4ee5\u524d\u6ce8\u518c\u7684runner\u63d0\u793a\u7684\u9519\u8bef\uff0c\u4e0e\u5012\u6570\u7b2c\u4e8c\u4e2a\u9519\u8bef\u7c7b\u4f3c\uff0c\u6000\u7591\u672c\u6b21\u95ee\u9898\u4fee\u590d\uff0c\u4e3b\u8981\u539f\u56e0\u662f\u955c\u50cf\u7684\u7f3a\u5931\u548c\u8fd0\u884c\u672a\u7ed1\u5b9a\u7aef\u53e3\u5bfc\u81f4\u3002\u5173\u95edgitlab-runner docker \u5bb9\u5668\u548cgitlab\u4e2dai-bus1 runner\uff0c\u91cd\u65b0\u6d4b\u8bd5\u6d4b\u8bd5\u8fd0\u884c\u65e0\u8bef\uff0c\u8bf4\u660e\u53ea\u91cd\u65b0\u5b89\u88c5cpplint\/cppcheck\u955c\u50cf\u548c\u4fee\u6539image\u5b57\u6bb5\u955c\u50cf\u540d\uff0c\u5373\u53ef\u4fee\u590d\u6b64\u95ee\u9898\u3002<\/p>\n<h3 id=\"\u53c2\u8003\u8d44\u6599\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#\u53c2\u8003\u8d44\u6599\" class=\"anchor-link\" aria-label=\"\u53c2\u8003\u8d44\u6599\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/gitlab_runner\/#contents:\u53c2\u8003\u8d44\u6599\" class=\"headings\">\u53c2\u8003\u8d44\u6599<\/a><\/h3>\n<ul>\n<li><a href=\"https:\/\/chee5e.space\/gitlab-runner-in-docker\/\" target=\"_blank\" rel=\"noopener\">\u642d\u5efa\u4e00\u4e2a\u81ea\u5df1\u7684 Gitlab CI Runner<\/a><\/li>\n<li><a href=\"https:\/\/docs.gitlab.cn\/runner\/install\/docker.html\" target=\"_blank\" rel=\"noopener\">\u5728\u5bb9\u5668\u4e2d\u8fd0\u884c\u6781\u72d0GitLab Runner<\/a><\/li>\n<li><a href=\"https:\/\/docs.gitlab.cn\/runner\/register\/index.html#docker\" target=\"_blank\" rel=\"noopener\">\u6ce8\u518c Runner<\/a><\/li>\n<li><a href=\"https:\/\/yeasy.gitbook.io\/docker_practice\/container\/import_export\" target=\"_blank\" rel=\"noopener\">Docker-\u4ece\u5165\u95e8\u5230\u5b9e\u8df5-\u5bfc\u51fa\u548c\u5bfc\u5165<\/a><\/li>\n<\/ul>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/gitlab\/","term":"gitlab","label":"gitlab"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/cppcheck\/","term":"cppcheck","label":"cppcheck"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/cpplint\/","term":"cpplint","label":"cpplint"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/ci\/","term":"CI","label":"CI"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/docker\/","term":"docker","label":"docker"}}]},{"title":"\nHugo+Github\u96f6\u6210\u672c\u642d\u5efa\u535a\u5ba2\u6d41\u7a0b\u8bb0\u5f55","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/"}},"id":"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/","updated":"2026-01-19T18:41:44-08:00","published":"2023-10-11T10:06:03+08:00","author":{"name":"\u963f\u677e","uri":"https:\/\/xiaoshame.github.io\/","email":"xiaoshame1209@gmail.com"},"rights":"[CC BY-NC-SA 4.0](https:\/\/creativecommons.org\/licenses\/by-nc-sa\/4.0\/deed.zh)","summary":"\n\u6587\u7ae0\u4ecb\u7ecd\u4e86\u4f7f\u7528Hugo\u548cGitHub\u642d\u5efa\u535a\u5ba2\u7684\u6d41\u7a0b\uff0c\u5305\u62ec\u5b89\u88c5Hugo\u3001\u914d\u7f6e\u4e3b\u9898\u3001\u90e8\u7f72\u5230GitHub\u3001\u6dfb\u52a0\u8bc4\u8bba\u7cfb\u7edf\u3001\u521b\u5efa\u6536\u85cf\u9875\u548c\u589e\u52a0\u5c01\u9762\u56fe\u7b49\u3002\u8fd8\u4ecb\u7ecd\u4e86\u5982\u4f55\u6dfb\u52a0\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4\u548c\u4e8c\u7ea7\u83dc\u5355\u3002\u901a\u8fc7\u7b80\u5316\u64cd\u4f5c\u548c\u5229\u7528\u73b0\u6709\u8d44\u6e90\uff0c\u53ef\u4ee5\u5b9e\u73b0\u96f6\u6210\u672c\u642d\u5efa\u73b0\u4ee3\u535a\u5ba2\u3002","content":"\n<h3 id=\"\u80cc\u666f\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u80cc\u666f\" class=\"anchor-link\" aria-label=\"\u80cc\u666f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u80cc\u666f\" class=\"headings\">\u80cc\u666f<\/a><\/h3>\n<p>\u770b\u5230\u4e00\u7bc7\u6587\u7ae0<a href=\"https:\/\/www.bmpi.dev\/dev\/guide-to-setup-blog-site-with-zero-cost\/1\/\" target=\"_blank\" rel=\"noopener\">\u96f6\u6210\u672c\u642d\u5efa\u73b0\u4ee3\u535a\u5ba2\u4e4b\u642d\u5efa\u7bc7<\/a>\uff0c\u76ee\u524d\u91c7\u7528\u7684\u535a\u5ba2\u65b9\u6848\u5b58\u5728\u4ee5\u4e0b\u4e0d\u8db3\uff1a<\/p>\n<ol>\n<li>\u76ee\u524d\u6211\u535a\u5ba2\u57fa\u4e8einfinity\u642d\u5efa\uff0c\u7a7a\u95f4\u53ea\u67095G\uff0c\u65f6\u95f4\u4e45\u4e86\u7a7a\u95f4\u4e0d\u8db3<\/li>\n<li>\u57df\u540d\u7eed\u8d39\uff0c\u4e00\u5e74\u6210\u672c100+\uff0c\u6bcf\u5e74\u6362\u4e00\u4e2a\u57df\u540d\u592a\u9ebb\u70e6<\/li>\n<\/ol>\n<h3 id=\"\u5b89\u88c5\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u5b89\u88c5\" class=\"anchor-link\" aria-label=\"\u5b89\u88c5\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u5b89\u88c5\" class=\"headings\">\u5b89\u88c5<\/a><\/h3>\n<ol>\n<li>\u5b89\u88c5\u548c\u672c\u5730\u9884\u89c8\u535a\u5ba2\uff0c\u53c2\u8003<a href=\"https:\/\/gohugo.io\/getting-started\/quick-start\/\" target=\"_blank\" rel=\"noopener\">Hugo\u5b98\u65b9\u6587\u6863 quick-start<\/a><\/li>\n<li>\u6211\u9009\u62e9\u7684LoveIt\u4e3b\u9898\uff0c\u4e0b\u8f7d\u5b8c\u6210\u540e\u5c06blog\/themes\/LoveIt\/exampleSite\/config.toml \u4e2d\u7684\u5185\u5bb9\u8986\u76d6blog\/hugo.toml\u6587\u4ef6\u4e2d\u7684\u5185\u5bb9<\/li>\n<li>\u521b\u5efablog\/static\/images\u76ee\u5f55\u5b58\u653e\u56fe\u7247\uff0c\u76f4\u63a5\u76f8\u5bf9\u8def\u5f84\u5373\u53ef\u4f7f\u7528\u672c\u5730\u56fe\u7247,\u4f8b\u5982\uff1a&quot;\/images\/avatar.jpeg&quot;<\/li>\n<\/ol>\n<h4 id=\"\u4e3b\u9898\u914d\u7f6e\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u4e3b\u9898\u914d\u7f6e\" class=\"anchor-link\" aria-label=\"\u4e3b\u9898\u914d\u7f6e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u4e3b\u9898\u914d\u7f6e\" class=\"headings\">\u4e3b\u9898\u914d\u7f6e<\/a><\/h4>\n<ol>\n<li>\u91cd\u70b9\u4ecb\u7ecd\u6211\u4fee\u6539\u7684\u5730\u65b9\n<ol>\n<li>\u4e3b\u9898\u76ee\u5f55\u5730\u5740<\/li>\n<li>\u535a\u5ba2\u6807\u9898\u3001\u535a\u5ba2\u526f\u6807\u9898<\/li>\n<li>\u535a\u5ba2logo<\/li>\n<li>\u4e3b\u9875\u663e\u793a\u5934\u50cf<\/li>\n<li>\u5173\u6389\u793e\u4ea4<\/li>\n<\/ol>\n<\/li>\n<li>hugo.toml\u5b8c\u6574\u914d\u7f6e\u5982\u4e0b\uff0c\u53ef\u81ea\u884c\u5bf9\u6bd4<\/li>\n<\/ol>\n<pre tabindex=\"0\"><code>baseURL = &#34;https:\/\/xiaoshame.github.io\/&#34;\n# theme\n# \u4e3b\u9898\ntheme = &#34;LoveIt&#34;\n# themes directory\n# \u4e3b\u9898\u76ee\u5f55\nthemesDir = &#34;themes&#34;\n# website title\n# \u7f51\u7ad9\u6807\u9898\ntitle = &#34;\u963f\u677e\u65e5\u5e38&#34;\n# determines default content language [&#34;en&#34;, &#34;zh-cn&#34;, &#34;fr&#34;, &#34;pl&#34;, ...]\n# \u8bbe\u7f6e\u9ed8\u8ba4\u7684\u8bed\u8a00 [&#34;en&#34;, &#34;zh-cn&#34;, &#34;fr&#34;, &#34;pl&#34;, ...]\ndefaultContentLanguage = &#34;zh-cn&#34;\n# language code [&#34;en&#34;, &#34;zh-CN&#34;, &#34;fr&#34;, &#34;pl&#34;, ...]\n# \u7f51\u7ad9\u8bed\u8a00, \u4ec5\u5728\u8fd9\u91cc CN \u5927\u5199 [&#34;en&#34;, &#34;zh-CN&#34;, &#34;fr&#34;, &#34;pl&#34;, ...]\nlanguageCode = &#34;zh-CN&#34;\n# language name [&#34;English&#34;, &#34;\u7b80\u4f53\u4e2d\u6587&#34;, &#34;Fran\u00e7ais&#34;, &#34;Polski&#34;, ...]\n# \u8bed\u8a00\u540d\u79f0 [&#34;English&#34;, &#34;\u7b80\u4f53\u4e2d\u6587&#34;, &#34;Fran\u00e7ais&#34;, &#34;Polski&#34;, ...]\nlanguageName = &#34;\u7b80\u4f53\u4e2d\u6587&#34;\n# whether to include Chinese\/Japanese\/Korean\n# \u662f\u5426\u5305\u62ec\u4e2d\u65e5\u97e9\u6587\u5b57\nhasCJKLanguage = true\nsummaryLength = 200\n# default amount of posts in each pages\n# \u9ed8\u8ba4\u6bcf\u9875\u5217\u8868\u663e\u793a\u7684\u6587\u7ae0\u6570\u76ee\npaginate = 10\n# copyright description used only for seo schema\n# \u7248\u6743\u63cf\u8ff0\uff0c\u4ec5\u4ec5\u7528\u4e8e SEO\ncopyright = &#34;CC BY-NC 4.0&#34;\n# whether to use robots.txt\n# \u662f\u5426\u4f7f\u7528 robots.txt\nenableRobotsTXT = true\n# whether to use git commit log\n# \u662f\u5426\u4f7f\u7528 git \u4fe1\u606f\nenableGitInfo = true\n# whether to use emoji code\n# \u662f\u5426\u4f7f\u7528 emoji \u4ee3\u7801\nenableEmoji = true\n# ignore some build errors\n# \u5ffd\u7565\u4e00\u4e9b\u6784\u5efa\u9519\u8bef\nignoreErrors = [&#34;error-remote-getjson&#34;, &#34;error-missing-instagram-accesstoken&#34;]\n# Author config\n# \u4f5c\u8005\u914d\u7f6e\n[author]\nname = &#34;\u963f\u677e\u65e5\u5e38&#34;\nemail = &#34;xiaoshame1209@gmail.com&#34;\nlink = &#34;&#34;\n[params]\n# site default theme [&#34;auto&#34;, &#34;light&#34;, &#34;dark&#34;]\n# \u7f51\u7ad9\u9ed8\u8ba4\u4e3b\u9898 [&#34;auto&#34;, &#34;light&#34;, &#34;dark&#34;]\ndefaultTheme = &#34;light&#34;\n# public git repo url only then enableGitInfo is true\n# \u516c\u5171 git \u4ed3\u5e93\u8def\u5f84\uff0c\u4ec5\u5728 enableGitInfo \u8bbe\u4e3a true \u65f6\u6709\u6548\ngitRepo = &#34;https:\/\/github.com\/xiaoshame\/xiaoshame.github.io.git&#34;\n# which hash function used for SRI, when empty, no SRI is used\n# [&#34;sha256&#34;, &#34;sha384&#34;, &#34;sha512&#34;, &#34;md5&#34;]\n# \u54ea\u79cd\u54c8\u5e0c\u51fd\u6570\u7528\u6765 SRI, \u4e3a\u7a7a\u65f6\u8868\u793a\u4e0d\u4f7f\u7528 SRI\n# [&#34;sha256&#34;, &#34;sha384&#34;, &#34;sha512&#34;, &#34;md5&#34;]\nfingerprint = &#34;&#34;\n# date format\n# \u65e5\u671f\u683c\u5f0f\ndateFormat = &#34;2006-01-02&#34;\n# website title for Open Graph and Twitter Cards\n# \u7f51\u7ad9\u6807\u9898, \u7528\u4e8e Open Graph \u548c Twitter Cards\ntitle = &#34;\u963f\u677e\u65e5\u5e38&#34;\n# website description for RSS, SEO, Open Graph and Twitter Cards\n# \u7f51\u7ad9\u63cf\u8ff0, \u7528\u4e8e RSS, SEO, Open Graph \u548c Twitter Cards\ndescription = &#34;\u963f\u677e\u65e5\u5e38\u7684\u4e2a\u4eba\u535a\u5ba2\uff0c\u5976\u7238\u4e00\u679a\uff0c\u5206\u4eab\u6548\u7387\u63d0\u5347\u6280\u5de7\u548c\u5e26\u5a03\u65e5\u5e38&#34;\n# website images for Open Graph and Twitter Cards\n# \u7f51\u7ad9\u56fe\u7247, \u7528\u4e8e Open Graph \u548c Twitter Cards\nimages = &#34;\/images\/logo.png&#34;\n# Header config\n# \u9875\u9762\u5934\u90e8\u5bfc\u822a\u680f\u914d\u7f6e\n[params.header]\n# desktop header mode [&#34;fixed&#34;, &#34;normal&#34;, &#34;auto&#34;]\n# \u684c\u9762\u7aef\u5bfc\u822a\u680f\u6a21\u5f0f [&#34;fixed&#34;, &#34;normal&#34;, &#34;auto&#34;]\ndesktopMode = &#34;fixed&#34;\n# mobile header mode [&#34;fixed&#34;, &#34;normal&#34;, &#34;auto&#34;]\n# \u79fb\u52a8\u7aef\u5bfc\u822a\u680f\u6a21\u5f0f [&#34;fixed&#34;, &#34;normal&#34;, &#34;auto&#34;]\nmobileMode = &#34;auto&#34;\n# Header title config\n# \u9875\u9762\u5934\u90e8\u5bfc\u822a\u680f\u6807\u9898\u914d\u7f6e\n[params.header.title]\n# URL of the LOGO\n# LOGO \u7684 URL\nlogo = &#34;\/images\/logo.png&#34;\n# title name\n# \u6807\u9898\u540d\u79f0\nname = &#34;\u963f\u677e\u65e5\u5e38&#34;\n# you can add extra information before the name (HTML format is supported), such as icons\n# \u4f60\u53ef\u4ee5\u5728\u540d\u79f0 (\u5141\u8bb8 HTML \u683c\u5f0f) \u4e4b\u524d\u6dfb\u52a0\u5176\u4ed6\u4fe1\u606f, \u4f8b\u5982\u56fe\u6807\npre = &#34;&#34;\n# you can add extra information after the name (HTML format is supported), such as icons\n# \u4f60\u53ef\u4ee5\u5728\u540d\u79f0 (\u5141\u8bb8 HTML \u683c\u5f0f) \u4e4b\u540e\u6dfb\u52a0\u5176\u4ed6\u4fe1\u606f, \u4f8b\u5982\u56fe\u6807\npost = &#34;&#34;\n# whether to use typeit animation for title name\n# \u662f\u5426\u4e3a\u6807\u9898\u663e\u793a\u6253\u5b57\u673a\u52a8\u753b\ntypeit = false\n# Footer config\n# \u9875\u9762\u5e95\u90e8\u4fe1\u606f\u914d\u7f6e\n[params.footer]\nenable = true\n# Custom content (HTML format is supported)\n# \u81ea\u5b9a\u4e49\u5185\u5bb9 (\u652f\u6301 HTML \u683c\u5f0f)\ncustom = &#34;&#34;\n# whether to show Hugo and theme info\n# \u662f\u5426\u663e\u793a Hugo \u548c\u4e3b\u9898\u4fe1\u606f\nhugo = false\n# whether to show copyright info\n# \u662f\u5426\u663e\u793a\u7248\u6743\u4fe1\u606f\ncopyright = true\n# whether to show the author\n# \u662f\u5426\u663e\u793a\u4f5c\u8005\nauthor = true\n# site creation time\n# \u7f51\u7ad9\u521b\u7acb\u5e74\u4efd\nsince = 2023\n# ICP info only in China (HTML format is supported)\n# ICP \u5907\u6848\u4fe1\u606f\uff0c\u4ec5\u5728\u4e2d\u56fd\u4f7f\u7528 (\u652f\u6301 HTML \u683c\u5f0f)\nicp = &#34;&#34;\n# license info (HTML format is supported)\n# \u8bb8\u53ef\u534f\u8bae\u4fe1\u606f (\u652f\u6301 HTML \u683c\u5f0f)\nlicense= &#39;&lt;a rel=&#34;license external nofollow noopener noreffer&#34; href=&#34;https:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/&#34; target=&#34;_blank&#34;&gt;CC BY-NC 4.0&lt;\/a&gt;&#39;\n# Section (all posts) page config\n# Section (\u6240\u6709\u6587\u7ae0) \u9875\u9762\u914d\u7f6e\n[params.section]\n# special amount of posts in each section page\n# section \u9875\u9762\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\u91cf\npaginate = 20\n# date format (month and day)\n# \u65e5\u671f\u683c\u5f0f (\u6708\u548c\u65e5)\ndateFormat = &#34;01-02&#34;\n# amount of RSS pages\n# RSS \u6587\u7ae0\u6570\u76ee\nrss = 10\n# List (category or tag) page config\n# List (\u76ee\u5f55\u6216\u6807\u7b7e) \u9875\u9762\u914d\u7f6e\n[params.list]\n# special amount of posts in each list page\n# list \u9875\u9762\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\u91cf\npaginate = 20\n# date format (month and day)\n# \u65e5\u671f\u683c\u5f0f (\u6708\u548c\u65e5)\ndateFormat = &#34;01-02&#34;\n# amount of RSS pages\n# RSS \u6587\u7ae0\u6570\u76ee\nrss = 10\n# App icon config\n# \u5e94\u7528\u56fe\u6807\u914d\u7f6e\n[params.app]\n# optional site title override for the app when added to an iOS home screen or Android launcher\n# \u5f53\u6dfb\u52a0\u5230 iOS \u4e3b\u5c4f\u5e55\u6216\u8005 Android \u542f\u52a8\u5668\u65f6\u7684\u6807\u9898, \u8986\u76d6\u9ed8\u8ba4\u6807\u9898\ntitle = &#34;\u963f\u677e\u65e5\u5e38&#34;\n# whether to omit favicon resource links\n# \u662f\u5426\u9690\u85cf\u7f51\u7ad9\u56fe\u6807\u8d44\u6e90\u94fe\u63a5\nnoFavicon = false\n# modern SVG favicon to use in place of older style .png and .ico files\n# \u66f4\u73b0\u4ee3\u7684 SVG \u7f51\u7ad9\u56fe\u6807, \u53ef\u66ff\u4ee3\u65e7\u7684 .png \u548c .ico \u6587\u4ef6\nsvgFavicon = &#34;\/images\/logo.svg&#34;\n# Android browser theme color\n# Android \u6d4f\u89c8\u5668\u4e3b\u9898\u8272\nthemeColor = &#34;#ffffff&#34;\n# Safari mask icon color\n# Safari \u56fe\u6807\u989c\u8272\niconColor = &#34;#5bbad5&#34;\n# Windows v8-11 tile color\n# Windows v8-11 \u78c1\u8d34\u989c\u8272\ntileColor = &#34;#da532c&#34;\n# Search config\n# \u641c\u7d22\u914d\u7f6e\n[params.search]\nenable = true\n# type of search engine [&#34;lunr&#34;, &#34;algolia&#34;]\n# \u641c\u7d22\u5f15\u64ce\u7684\u7c7b\u578b [&#34;lunr&#34;, &#34;algolia&#34;]\ntype = &#34;algolia&#34;\n# max index length of the chunked content\n# \u6587\u7ae0\u5185\u5bb9\u6700\u957f\u7d22\u5f15\u957f\u5ea6\ncontentLength = 4000\n# placeholder of the search bar\n# \u641c\u7d22\u6846\u7684\u5360\u4f4d\u63d0\u793a\u8bed\nplaceholder = &#34;&#34;\n# max number of results length\n# \u6700\u5927\u7ed3\u679c\u6570\u76ee\nmaxResultLength = 10\n# snippet length of the result\n# \u7ed3\u679c\u5185\u5bb9\u7247\u6bb5\u957f\u5ea6\nsnippetLength = 30\n# HTML tag name of the highlight part in results\n# \u641c\u7d22\u7ed3\u679c\u4e2d\u9ad8\u4eae\u90e8\u5206\u7684 HTML \u6807\u7b7e\nhighlightTag = &#34;em&#34;\n# whether to use the absolute URL based on the baseURL in search index\n# \u662f\u5426\u5728\u641c\u7d22\u7d22\u5f15\u4e2d\u4f7f\u7528\u57fa\u4e8e baseURL \u7684\u7edd\u5bf9\u8def\u5f84\nabsoluteURL = false\n[params.search.algolia]\nindex = &#34;&#34;\nappID = &#34;&#34;\nsearchKey = &#34;&#34;\n# Page global config\n# \u6587\u7ae0\u9875\u9762\u5168\u5c40\u914d\u7f6e\n[params.page]\n# whether to hide a page from home page\n# \u662f\u5426\u5728\u4e3b\u9875\u9690\u85cf\u4e00\u7bc7\u6587\u7ae0\nhiddenFromHomePage = false\n# whether to hide a page from search results\n# \u662f\u5426\u5728\u641c\u7d22\u7ed3\u679c\u4e2d\u9690\u85cf\u4e00\u7bc7\u6587\u7ae0\nhiddenFromSearch = false\n# whether to enable twemoji\n# \u662f\u5426\u4f7f\u7528 twemoji\ntwemoji = false\n# whether to enable lightgallery\n# \u662f\u5426\u4f7f\u7528 lightgallery\nlightgallery = true\n# whether to enable the ruby extended syntax\n# \u662f\u5426\u4f7f\u7528 ruby \u6269\u5c55\u8bed\u6cd5\nruby = true\n# whether to enable the fraction extended syntax\n# \u662f\u5426\u4f7f\u7528 fraction \u6269\u5c55\u8bed\u6cd5\nfraction = true\n# whether to enable the fontawesome extended syntax\n# \u662f\u5426\u4f7f\u7528 fontawesome \u6269\u5c55\u8bed\u6cd5\nfontawesome = true\n# whether to show link to Raw Markdown content of the content\n# \u662f\u5426\u663e\u793a\u539f\u59cb Markdown \u6587\u6863\u5185\u5bb9\u7684\u94fe\u63a5\nlinkToMarkdown = false\n# whether to show the full text content in RSS\n# \u662f\u5426\u5728 RSS \u4e2d\u663e\u793a\u5168\u6587\u5185\u5bb9\nrssFullText = false\n# Table of the contents config\n# \u76ee\u5f55\u914d\u7f6e\n[params.page.toc]\n# whether to enable the table of the contents\n# \u662f\u5426\u4f7f\u7528\u76ee\u5f55\nenable = true\n# whether to keep the static table of the contents in front of the post\n# \u662f\u5426\u4fdd\u6301\u4f7f\u7528\u6587\u7ae0\u524d\u9762\u7684\u9759\u6001\u76ee\u5f55\nkeepStatic = false\n# whether to make the table of the contents in the sidebar automatically collapsed\n# \u662f\u5426\u4f7f\u4fa7\u8fb9\u76ee\u5f55\u81ea\u52a8\u6298\u53e0\u5c55\u5f00\nauto = true\n# Code config\n# \u4ee3\u7801\u914d\u7f6e\n[params.page.code]\n# whether to show the copy button of the code block\n# \u662f\u5426\u663e\u793a\u4ee3\u7801\u5757\u7684\u590d\u5236\u6309\u94ae\ncopy = true\n# the maximum number of lines of displayed code by default\n# \u9ed8\u8ba4\u5c55\u5f00\u663e\u793a\u7684\u4ee3\u7801\u884c\u6570\nmaxShownLines = 200\n# KaTeX mathematical formulas config (KaTeX https:\/\/katex.org\/)\n# KaTeX \u6570\u5b66\u516c\u5f0f\u914d\u7f6e (KaTeX https:\/\/katex.org\/)\n[params.page.math]\nenable = false\n# default inline delimiter is $ ... $ and \\( ... \\)\n# \u9ed8\u8ba4\u884c\u5185\u5b9a\u754c\u7b26\u662f $ ... $ \u548c \\( ... \\)\ninlineLeftDelimiter = &#34;&#34;\ninlineRightDelimiter = &#34;&#34;\n# default block delimiter is $$ ... $$, \\[ ... \\], \\begin{equation} ... \\end{equation} and some other functions\n# \u9ed8\u8ba4\u5757\u5b9a\u754c\u7b26\u662f $$ ... $$, \\[ ... \\], \\begin{equation} ... \\end{equation} \u548c\u4e00\u4e9b\u5176\u5b83\u7684\u51fd\u6570\nblockLeftDelimiter = &#34;&#34;\nblockRightDelimiter = &#34;&#34;\n# KaTeX extension copy_tex\n# KaTeX \u63d2\u4ef6 copy_tex\ncopyTex = true\n# KaTeX extension mhchem\n# KaTeX \u63d2\u4ef6 mhchem\nmhchem = true\n# Mapbox GL JS config (Mapbox GL JS https:\/\/docs.mapbox.com\/mapbox-gl-js)\n# Mapbox GL JS \u914d\u7f6e (Mapbox GL JS https:\/\/docs.mapbox.com\/mapbox-gl-js)\n[params.page.mapbox]\n# access token of Mapbox GL JS\n# Mapbox GL JS \u7684 access token\naccessToken = &#34;pk.eyJ1IjoiZGlsbG9uenEiLCJhIjoiY2s2czd2M2x3MDA0NjNmcGxmcjVrZmc2cyJ9.aSjv2BNuZUfARvxRYjSVZQ&#34;\n# style for the light theme\n# \u6d45\u8272\u4e3b\u9898\u7684\u5730\u56fe\u6837\u5f0f\nlightStyle = &#34;mapbox:\/\/styles\/mapbox\/light-v10?optimize=true&#34;\n# style for the dark theme\n# \u6df1\u8272\u4e3b\u9898\u7684\u5730\u56fe\u6837\u5f0f\ndarkStyle = &#34;mapbox:\/\/styles\/mapbox\/dark-v10?optimize=true&#34;\n# whether to add NavigationControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#navigationcontrol)\n# \u662f\u5426\u6dfb\u52a0 NavigationControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#navigationcontrol)\nnavigation = true\n# whether to add GeolocateControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#geolocatecontrol)\n# \u662f\u5426\u6dfb\u52a0 GeolocateControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#geolocatecontrol)\ngeolocate = true\n# whether to add ScaleControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#scalecontrol)\n# \u662f\u5426\u6dfb\u52a0 ScaleControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#scalecontrol)\nscale = true\n# whether to add FullscreenControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#fullscreencontrol)\n# \u662f\u5426\u6dfb\u52a0 FullscreenControl (https:\/\/docs.mapbox.com\/mapbox-gl-js\/api\/#fullscreencontrol)\nfullscreen = true\n# Social share links in post page\n# \u6587\u7ae0\u9875\u9762\u7684\u5206\u4eab\u4fe1\u606f\u8bbe\u7f6e\n[params.page.share]\nenable = false\nTwitter = true\nFacebook = true\nHackerNews = true\nReddit = true\nLine = true\n# Comment config\n# \u8bc4\u8bba\u7cfb\u7edf\u8bbe\u7f6e\n[params.page.comment]\nenable = true\n# giscus comment config (https:\/\/giscus.app\/)\n# giscus comment \u8bc4\u8bba\u7cfb\u7edf\u8bbe\u7f6e (https:\/\/giscus.app\/zh-CN)\n[params.page.comment.giscus]\n# You can refer to the official documentation of giscus to use the following configuration.\n# \u4f60\u53ef\u4ee5\u53c2\u8003\u5b98\u65b9\u6587\u6863\u6765\u4f7f\u7528\u4e0b\u5217\u914d\u7f6e\nenable = true\nrepo = &#34;xiaoshame\/xiaoshame.github.io&#34;\nrepoId = &#34;**&#34;\ncategory = &#34;Announcements&#34;\ncategoryId = &#34;**&#34;\n# automatically adapt the current theme i18n configuration when empty\n# \u4e3a\u7a7a\u65f6\u81ea\u52a8\u9002\u914d\u5f53\u524d\u4e3b\u9898 i18n \u914d\u7f6e\nlang = &#34;&#34;\nmapping = &#34;pathname&#34;\nreactionsEnabled = &#34;1&#34;\nemitMetadata = &#34;0&#34;\ninputPosition = &#34;bottom&#34;\nlazyLoading = false\nlightTheme = &#34;light&#34;\ndarkTheme = &#34;dark&#34;\n# Third-party library config\n# \u7b2c\u4e09\u65b9\u5e93\u914d\u7f6e\n[params.page.library]\n[params.page.library.css]\n# someCSS = &#34;some.css&#34;\n# located in &#34;assets\/&#34; \u4f4d\u4e8e &#34;assets\/&#34;\n# Or \u6216\u8005\n# someCSS = &#34;https:\/\/cdn.example.com\/some.css&#34;\n[params.page.library.js]\n# someJavascript = &#34;some.js&#34;\n# located in &#34;assets\/&#34; \u4f4d\u4e8e &#34;assets\/&#34;\n# Or \u6216\u8005\n# someJavascript = &#34;https:\/\/cdn.example.com\/some.js&#34;\n# Page SEO config\n# \u9875\u9762 SEO \u914d\u7f6e\n[params.page.seo]\n# image URL\n# \u56fe\u7247 URL\nimages = [&#34;\/images\/logo.png&#34;]\n# Publisher info\n# \u51fa\u7248\u8005\u4fe1\u606f\n[params.page.seo.publisher]\nname = &#34;\u963f\u677e\u65e5\u5e38&#34;\nlogoUrl = &#34;\/images\/avatar.png&#34;\n# TypeIt config\n# TypeIt \u914d\u7f6e\n[params.typeit]\n# typing speed between each step (measured in milliseconds)\n# \u6bcf\u4e00\u6b65\u7684\u6253\u5b57\u901f\u5ea6 (\u5355\u4f4d\u662f\u6beb\u79d2)\nspeed = 100\n# blinking speed of the cursor (measured in milliseconds)\n# \u5149\u6807\u7684\u95ea\u70c1\u901f\u5ea6 (\u5355\u4f4d\u662f\u6beb\u79d2)\ncursorSpeed = 1000\n# character used for the cursor (HTML format is supported)\n# \u5149\u6807\u7684\u5b57\u7b26 (\u652f\u6301 HTML \u683c\u5f0f)\ncursorChar = &#34;|&#34;\n# cursor duration after typing finishing (measured in milliseconds, &#34;-1&#34; means unlimited)\n# \u6253\u5b57\u7ed3\u675f\u4e4b\u540e\u5149\u6807\u7684\u6301\u7eed\u65f6\u95f4 (\u5355\u4f4d\u662f\u6beb\u79d2, &#34;-1&#34; \u4ee3\u8868\u65e0\u9650\u5927)\nduration = -1\n# Site verification code for Google\/Bing\/Yandex\/Pinterest\/Baidu\n# \u7f51\u7ad9\u9a8c\u8bc1\u4ee3\u7801\uff0c\u7528\u4e8e Google\/Bing\/Yandex\/Pinterest\/Baidu\n[params.verification]\ngoogle = &#34;*&#34;\nbing = &#34;&#34;\nyandex = &#34;&#34;\npinterest = &#34;&#34;\nbaidu = &#34;&#34;\n# Site SEO config\n# \u7f51\u7ad9 SEO \u914d\u7f6e\n[params.seo]\n# image URL\n# \u56fe\u7247 URL\nimage = &#34;\/images\/logo.png&#34;\n# thumbnail URL\n# \u7f29\u7565\u56fe URL\nthumbnailUrl = &#34;\/images\/logo.png&#34;\n# Analytics config\n# \u7f51\u7ad9\u5206\u6790\u914d\u7f6e\n[params.analytics]\nenable = true\n# Google Analytics\n[params.analytics.google]\nid = &#34;G-*&#34;\n# whether to anonymize IP\n# \u662f\u5426\u533f\u540d\u5316\u7528\u6237 IP\nanonymizeIP = true\n# Fathom Analytics\n[params.analytics.fathom]\nid = &#34;&#34;\n# server url for your tracker if you&#39;re self hosting\n# \u81ea\u884c\u6258\u7ba1\u8ffd\u8e2a\u5668\u65f6\u7684\u4e3b\u673a\u8def\u5f84\nserver = &#34;&#34;\n# Plausible Analytics\n[params.analytics.plausible]\ndataDomain = &#34;&#34;\n# Yandex Metrica\n[params.analytics.yandexMetrica]\nid = &#34;&#34;\n# Cookie consent config\n# Cookie \u8bb8\u53ef\u914d\u7f6e\n[params.cookieconsent]\nenable = false\n# text strings used for Cookie consent banner\n# \u7528\u4e8e Cookie \u8bb8\u53ef\u6a2a\u5e45\u7684\u6587\u672c\u5b57\u7b26\u4e32\n[params.cookieconsent.content]\nmessage = &#34;&#34;\ndismiss = &#34;&#34;\nlink = &#34;&#34;\n# CDN config for third-party library files\n# \u7b2c\u4e09\u65b9\u5e93\u6587\u4ef6\u7684 CDN \u8bbe\u7f6e\n[params.cdn]\n# CDN data file name, disabled by default\n# [&#34;jsdelivr.yml&#34;]\n# located in &#34;themes\/LoveIt\/assets\/data\/cdn\/&#34; directory\n# you can store your own data files in the same path under your project:\n# &#34;assets\/data\/cdn\/&#34;\n# CDN \u6570\u636e\u6587\u4ef6\u540d\u79f0, \u9ed8\u8ba4\u4e0d\u542f\u7528\n# [&#34;jsdelivr.yml&#34;]\n# \u4f4d\u4e8e &#34;themes\/LoveIt\/assets\/data\/cdn\/&#34; \u76ee\u5f55\n# \u53ef\u4ee5\u5728\u4f60\u7684\u9879\u76ee\u4e0b\u76f8\u540c\u8def\u5f84\u5b58\u653e\u4f60\u81ea\u5df1\u7684\u6570\u636e\u6587\u4ef6:\n# &#34;assets\/data\/cdn\/&#34;\ndata = &#34;jsdelivr.yml&#34;\n# Markup related configuration in Hugo\n# Hugo \u89e3\u6790\u6587\u6863\u7684\u914d\u7f6e\n[markup]\n# Syntax Highlighting (https:\/\/gohugo.io\/content-management\/syntax-highlighting)\n# \u8bed\u6cd5\u9ad8\u4eae\u8bbe\u7f6e (https:\/\/gohugo.io\/content-management\/syntax-highlighting)\n[markup.highlight]\ncodeFences = true\nguessSyntax = true\nlineNos = true\nlineNumbersInTable = true\n# false is a necessary configuration (https:\/\/github.com\/dillonzq\/LoveIt\/issues\/158)\n# false \u662f\u5fc5\u8981\u7684\u8bbe\u7f6e (https:\/\/github.com\/dillonzq\/LoveIt\/issues\/158)\nnoClasses = false\n# Goldmark is from Hugo 0.60 the default library used for Markdown\n# Goldmark \u662f Hugo 0.60 \u4ee5\u6765\u7684\u9ed8\u8ba4 Markdown \u89e3\u6790\u5e93\n[markup.goldmark]\n[markup.goldmark.extensions]\ndefinitionList = true\nfootnote = true\nlinkify = true\nstrikethrough = true\ntable = true\ntaskList = true\ntypographer = true\n[markup.goldmark.renderer]\n# whether to use HTML tags directly in the document\n# \u662f\u5426\u5728\u6587\u6863\u4e2d\u76f4\u63a5\u4f7f\u7528 HTML \u6807\u7b7e\nunsafe = true\n# Table Of Contents settings\n# \u76ee\u5f55\u8bbe\u7f6e\n[markup.tableOfContents]\nstartLevel = 2\nendLevel = 6\n# Sitemap config\n# \u7f51\u7ad9\u5730\u56fe\u914d\u7f6e\n[sitemap]\nchangefreq = &#34;weekly&#34;\nfilename = &#34;sitemap.xml&#34;\npriority = 0.5\n# Permalinks config (https:\/\/gohugo.io\/content-management\/urls\/#permalinks)\n# Permalinks \u914d\u7f6e (https:\/\/gohugo.io\/content-management\/urls\/#permalinks)\n[Permalinks]\n# posts = &#34;:year\/:month\/:filename&#34;\nposts = &#34;:filename&#34;\n# Options to make output .md files\n# \u7528\u4e8e\u8f93\u51fa Markdown \u683c\u5f0f\u6587\u6863\u7684\u8bbe\u7f6e\n[mediaTypes]\n[mediaTypes.&#34;text\/plain&#34;]\nsuffixes = [&#34;md&#34;]\n# Options to make output .md files\n# \u7528\u4e8e\u8f93\u51fa Markdown \u683c\u5f0f\u6587\u6863\u7684\u8bbe\u7f6e\n[outputFormats.MarkDown]\nmediaType = &#34;text\/plain&#34;\nisPlainText = true\nisHTML = false\n# Options to make hugo output files\n# \u7528\u4e8e Hugo \u8f93\u51fa\u6587\u6863\u7684\u8bbe\u7f6e\n[outputs]\nhome = [&#34;HTML&#34;, &#34;RSS&#34;, &#34;JSON&#34;]\npage = [&#34;HTML&#34;, &#34;MarkDown&#34;]\nsection = [&#34;HTML&#34;, &#34;RSS&#34;]\ntaxonomy = [&#34;HTML&#34;, &#34;RSS&#34;]\n# Multilingual\n# \u591a\u8bed\u8a00\n[languages]\n[languages.zh-cn]\nweight = 2\nlanguageCode = &#34;zh-CN&#34;\nlanguageName = &#34;\u7b80\u4f53\u4e2d\u6587&#34;\nhasCJKLanguage = true\ncopyright = &#34;This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.&#34;\n[languages.zh-cn.menu]\n[[languages.zh-cn.menu.main]]\nweight = 1\nidentifier = &#34;posts&#34;\npre = &#34;&lt;i class=&#39;fa-solid fa-book&#39;&gt;&lt;\/i&gt;&#34;\npost = &#34;&#34;\nname = &#34;\u6240\u6709\u6587\u7ae0&#34;\nurl = &#34;\/posts\/&#34;\ntitle = &#34;&#34;\n[[languages.zh-cn.menu.main]]\nweight = 2\nidentifier = &#34;favorites&#34;\npre = &#34;&lt;i class=&#39;fa-solid fa-bookmark&#39;&gt;&lt;\/i&gt;&#34;\npost = &#34;&#34;\nname = &#34;\u6536\u85cf\u5939&#34;\nurl = &#34;\/favorites\/&#34;\ntitle = &#34;&#34;\n[[languages.zh-cn.menu.main]]\nweight = 3\nidentifier = &#34;comments&#34;\npre = &#34;&lt;i class=&#39;fa-solid fa-comment&#39;&gt;&lt;\/i&gt;&#34;\npost = &#34;&#34;\nname = &#34;\u7559\u8a00\u677f&#34;\nurl = &#34;\/comments\/&#34;\ntitle = &#34;&#34;\n[[languages.zh-cn.menu.main]]\nweight = 4\nidentifier = &#34;sites&#34;\npre = &#34;&lt;i class=&#39;fa-solid fa-link&#39;&gt;&lt;\/i&gt;&#34;\npost = &#34;&#34;\nname = &#34;\u53cb\u60c5\u94fe\u63a5&#34;\nurl = &#34;\/sites\/&#34;\ntitle = &#34;&#34;\n# \u4e8c\u7ea7\u83dc\u5355\n[[languages.zh-cn.menu.main]]\nparent = &#34;posts&#34;\npre = &#34;&lt;i class=&#39;fas fa-fw fa-th&#39;&gt;&lt;\/i&gt;&#34;\nname = &#34;\u5206\u7c7b&#34;\nidentifier = &#34;categories&#34;\nurl = &#34;\/categories\/&#34;\nweight = 1\n[[languages.zh-cn.menu.main]]\nparent = &#34;posts&#34;\nidentifier = &#34;tags&#34;\npost = &#34;&#34;\npre = &#34;&lt;i class=&#39;fas fa-fw fa-tag&#39;&gt;&lt;\/i&gt;&#34;\nname = &#34;\u6807\u7b7e&#34;\nurl = &#34;\/tags\/&#34;\ntitle = &#34;&#34;\nweight = 2\n[languages.zh-cn.params]\n[languages.zh-cn.params.search]\nenable = true\ntype = &#34;algolia&#34;\ncontentLength = 4000\nplaceholder = &#34;&#34;\nmaxResultLength = 10\nsnippetLength = 50\nhighlightTag = &#34;em&#34;\nabsoluteURL = false\n[languages.zh-cn.params.search.algolia]\nindex = &#34;index.zh-cn&#34;\nappID = &#34;PASDMWALPK&#34;\nsearchKey = &#34;b42948e51daaa93df92381c8e2ac0f93&#34;\n[languages.zh-cn.params.home]\nrss = 10\n[languages.zh-cn.params.home.profile]\nenable = true\ngravatarEmail = &#34;xiaoshame1209@gmail.com&#34;\navatarURL = &#34;\/images\/avatar.png&#34;\ntitle = &#34;&#34;\nsubtitle = &#34;\u4e00\u4f4d\u666e\u901a\u7684\u5976\u7238\uff0c\u4e00\u4e2a\u4e0d\u51fa\u540d\u7684\u7a0b\u5e8f\u5458\uff0c\u6b63\u5728\u52aa\u529b\u8d5a\u94b1\u548c\u611f\u53d7\u751f\u6d3b\u7684\u9178\u751c\u82e6\u8fa3&#34;\ntypeit = true\nsocial = true\ndisclaimer = &#34;&#34;\n[languages.zh-cn.params.social]\nGitHub = &#34;https:\/\/github.com\/xiaoshame\/&#34;\nEmail = &#34;xiaoshame1209@gmail.com&#34;\nRSS = true\n[languages.zh-cn.params.home.posts]\nenable = true\n# special amount of posts in each home posts page\n# \u4e3b\u9875\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\u91cf\npaginate = 10\n<\/code><\/pre><h3 id=\"github\u90e8\u7f72\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#github\u90e8\u7f72\" class=\"anchor-link\" aria-label=\"github\u90e8\u7f72\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:github\u90e8\u7f72\" class=\"headings\">Github\u90e8\u7f72<\/a><\/h3>\n<ol>\n<li>\u53c2\u8003<a href=\"https:\/\/gohugo.io\/hosting-and-deployment\/hosting-on-github\/\" target=\"_blank\" rel=\"noopener\">Hugo\u5b98\u65b9github\u90e8\u7f72<\/a><\/li>\n<li>\u5b98\u65b9\u6587\u6863\u8981\u6c42\u5c06hugo.toml\u4f20\u5230git\u4e0a\uff0c\u5176\u4e2d\u5305\u542b\u90e8\u5206key\uff0c\u5b58\u5728\u98ce\u9669\n<ol>\n<li>\n<p>\u4f7f\u7528hugo\u751f\u6210pubilc\u6587\u4ef6\uff0c\u4e0a\u4f20\u5230\u4ed3\u5e93<\/p>\n<\/li>\n<li>\n<p>\u4fee\u6539blog\/.github\/workflows\/hugo.yaml\u6587\u4ef6,\u6838\u5fc3\u662f\u5c4f\u853dhugo\u5728\u8fdc\u7aef\u6784\u5efa\uff0c\u53ea\u5bf9pubilc\u6587\u4ef6\u6253\u5305<\/p>\n<\/li>\n<li>\n<pre tabindex=\"0\"><code> # Sample workflow for building and deploying a Hugo site to GitHub Pages\nname: Deploy Hugo site to Pages\non:\n# Runs on pushes targeting the default branch\npush:\nbranches:\n- master\n# Allows you to run this workflow manually from the Actions tab\nworkflow_dispatch:\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\ncontents: read\npages: write\nid-token: write\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\ngroup: &#34;pages&#34;\ncancel-in-progress: false\n# Default to bash\ndefaults:\nrun:\nshell: bash\njobs:\n# Build job\nbuild:\nruns-on: ubuntu-latest\n# env:\n# HUGO_VERSION: 0.119.0\nsteps:\n# - name: Install Hugo CLI\n# run: |\n# wget -O ${{ runner.temp }}\/hugo.deb https:\/\/github.com\/gohugoio\/hugo\/releases\/download\/v${HUGO_VERSION}\/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \\\n# &amp;&amp; sudo dpkg -i ${{ runner.temp }}\/hugo.deb\n- name: Install Dart Sass\nrun: sudo snap install dart-sass\n- name: Checkout\nuses: actions\/checkout@v3\nwith:\nsubmodules: recursive\nfetch-depth: 0\n- name: Setup Pages\nid: pages\nuses: actions\/configure-pages@v3\n- name: Install Node.js dependencies\nrun: &#34;[[ -f package-lock.json || -f npm-shrinkwrap.json ]] &amp;&amp; npm ci || true&#34;\n# - name: Build with Hugo\n# env:\n# # For maximum backward compatibility with Hugo modules\n# HUGO_ENVIRONMENT: production\n# HUGO_ENV: production\n# run: |\n# hugo \\\n# --gc \\\n# --minify \\\n# --baseURL &#34;${{ steps.pages.outputs.base_url }}\/&#34;\n- name: Upload artifact\nuses: actions\/upload-pages-artifact@v1\nwith:\npath: .\/public\n# Deployment job\ndeploy:\nenvironment:\nname: github-pages\nurl: ${{ steps.deployment.outputs.page_url }}\nruns-on: ubuntu-latest\nneeds: build\nsteps:\n- name: Deploy to GitHub Pages\nid: deployment\nuses: actions\/deploy-pages@v2\n<\/code><\/pre><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u914d\u7f6egiscus\u8bc4\u8bba\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u914d\u7f6egiscus\u8bc4\u8bba\" class=\"anchor-link\" aria-label=\"\u914d\u7f6egiscus\u8bc4\u8bba\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u914d\u7f6egiscus\u8bc4\u8bba\" class=\"headings\">\u914d\u7f6eGiscus\u8bc4\u8bba<\/a><\/h3>\n<ol>\n<li>\u5bf9\u5e94\u9879\u76ee\u5f00\u542fGitHub Discussions<\/li>\n<li>github\u4e0a\u5b89\u88c5<a href=\"https:\/\/github.com\/apps\/giscus\" target=\"_blank\" rel=\"noopener\">Giscus<\/a><\/li>\n<li>\u5229\u7528GitHub GraphQL API\u83b7\u53d6repoId\uff0ccategoryId\uff0c\u53c2\u8003<a href=\"https:\/\/maling.io\/posts\/get-github-repo-id\/\" target=\"_blank\" rel=\"noopener\">Github \u5982\u4f55\u83b7\u53d6\u4ed3\u5e93\u7684 repo_id \u548c category_id<\/a><\/li>\n<li>\u4fee\u6539hugo.toml\u4e2drepo\uff0crepoId\uff0ccategory\uff0ccategoryId\uff0c\u6253\u5f00giscus\u5173\u95edvaline\uff0c\u901a\u8fc7enable\u5b57\u6bb5\u63a7\u5236\uff0c\u53c2\u8003\u5b89\u88c5\u90e8\u5206hugo.toml\u6587\u4ef6<\/li>\n<li><code>hugo<\/code>\u751f\u6210\u76f8\u5e94\u4ee3\u7801\uff0c\u540c\u6b65pubilc\u6587\u4ef6\u5939\u5230\u4ed3\u5e93\u4e2d<\/li>\n<\/ol>\n<h3 id=\"\u6536\u85cf\u9875\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u6536\u85cf\u9875\" class=\"anchor-link\" aria-label=\"\u6536\u85cf\u9875\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u6536\u85cf\u9875\" class=\"headings\">\u6536\u85cf\u9875<\/a><\/h3>\n<ol>\n<li>\u4fee\u6539hugo.toml\u4e2dmenu.main\u914d\u7f6e\uff0c\u6dfb\u52a0favorites\u83dc\u5355<\/li>\n<li>\u751f\u6210\u9875\u9762\n<ol>\n<li>\u4f7f\u7528\u6307\u4ee4 <code>hugo new favorites\/index.md<\/code>\uff0c\u5728blog\/content\u76ee\u5f55\u4e0b\u751f\u6210favorites\/index.md\u6587\u4ef6<\/li>\n<li>\u5728index.md\u4e2d\u7f16\u8f91\u5185\u5bb9\uff0cdraft \u503c\u8c03\u6574\u4e3afasle\uff0c\u8868\u793a\u4e0d\u662f\u8349\u7a3f<\/li>\n<li><code>hugo<\/code>\u751f\u6210\u76f8\u5e94\u9875\u9762\u4ee3\u7801\uff0c\u540c\u6b65pubilc\u6587\u4ef6\u5939\u5230\u4ed3\u5e93<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u5c01\u9762\u56fe\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u5c01\u9762\u56fe\" class=\"anchor-link\" aria-label=\"\u5c01\u9762\u56fe\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u5c01\u9762\u56fe\" class=\"headings\">\u5c01\u9762\u56fe<\/a><\/h3>\n<p>\u672c\u60f3\u7ed9\u6587\u7ae0\u52a0\u4e2a\u5c01\u9762\u56fe\uff0c\u5728\u67e5\u8d44\u6599\u89e3\u51b3\u8fc7\u7a0b\u4e2d\uff0c\u770b\u5230\u4e00\u4e2a\u57fa\u4e8eLoveIt\u9b54\u6539\u4e3b\u9898\u642d\u5efa\u7684<a href=\"https:\/\/hakula.xyz\/\" target=\"_blank\" rel=\"noopener\">\u535a\u5ba2<\/a>\uff0c\u6587\u7ae0\u7684\u6837\u5f0f\u7b26\u5408\u9884\u671f\uff0c\u5206\u6790\u81ea\u5df1\u535a\u5ba2\u4e0e\u5bf9\u65b9\u7684\u4e0d\u540c\uff0c\u53c2\u8003\u8c03\u6574<\/p>\n<ol>\n<li>\n<p>\u5220\u9664\u539fLoveIt\u4e3b\u9898\uff0c\u5220\u9664blog\/theme\/LoveIt \u6587\u4ef6\u5939<\/p>\n<\/li>\n<li>\n<p>\u5220\u9664blog\/.git\/config\u4e2d[submodule &quot;themes\/LoveIt&quot;]\u7684\u914d\u7f6e<\/p>\n<\/li>\n<li>\n<p>\u6dfb\u52a0LoveIt\u4e3b\u9898\uff0c<code>git submodule add git@github.com:hakula139\/LoveIt.git themes\/LoveIt<\/code><\/p>\n<\/li>\n<li>\n<p>\u4e0b\u8f7d<a href=\"https:\/\/github.com\/hakula139\/hakula.xyz\" target=\"_blank\" rel=\"noopener\">\u5bf9\u65b9\u535a\u5ba2\u5185\u5bb9<\/a>\uff0c\u5c06hakula.xyz-main\/assets\u4e2d\u7684\u5185\u5bb9\u653e\u5230\u81ea\u5df1\u535a\u5ba2\u7684blog\/assets\u76ee\u5f55\u4e2d<\/p>\n<\/li>\n<li>\n<p>\u5c01\u9762\u56fe\u7247\u53ef\u4ee5\u653e\u5230\u6587\u7ae0\u540c\u7ea7\u76ee\u5f55\u4e2d<\/p>\n<\/li>\n<li>\n<p>\u4fee\u6539\u6587\u7ae0\u53c2\u6570\u8bbe\u7f6e\uff0c\u53c2\u8003\u5982\u4e0b<\/p>\n<\/li>\n<li>\n<pre tabindex=\"0\"><code>---\ntitle : &#39;Hugo+Github\u96f6\u6210\u672c\u642d\u5efa\u535a\u5ba2\u6d41\u7a0b\u8bb0\u5f55&#39;\ndate : 2023-10-11T10:06:03+08:00\ndraft : false\ntags : [hugo,github,\u535a\u5ba2]\ncategories : [\u6280\u672f]\nfeaturedImage : \/hugo_blog\/1697027912506.png\n---\n<\/code><\/pre><\/li>\n<\/ol>\n<h3 id=\"\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4\" class=\"anchor-link\" aria-label=\"\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4\" class=\"headings\">\u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4<\/a><\/h3>\n<p>\u901a\u8fc7\u81ea\u5b9a\u4e49js\u5b9e\u73b0<\/p>\n<ol>\n<li>\n<p>blog\/themes\/LoveIt\/layouts\/partials\/assets.html \u62f7\u8d1d\u5230blog\/layouts\/partials\/assets.html<\/p>\n<\/li>\n<li>\n<p>blog\/themes\/LoveIt\/layouts\/partials\/footer.html \u62f7\u8d1d\u5230blog\/layouts\/partials\/footer.html<\/p>\n<\/li>\n<li>\n<p>\u521b\u5efablog\/static\/js\/custom.js \u6587\u4ef6\uff0c\u7c98\u8d34\u5982\u4e0b\u4ee3\u7801<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/* \u7ad9\u70b9\u8fd0\u884c\u65f6\u95f4 *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">function<\/span> <span class=\"nx\">runtime<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">window<\/span><span class=\"p\">.<\/span><span class=\"nx\">setTimeout<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;runtime()&#34;<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/* \u8bf7\u4fee\u6539\u8fd9\u91cc\u7684\u8d77\u59cb\u65f6\u95f4 *\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">startTime<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;10\/10\/2023 15:00:00&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">endTime<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">usedTime<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">endTime<\/span> <span class=\"o\">-<\/span> <span class=\"nx\">startTime<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">days<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">floor<\/span><span class=\"p\">(<\/span><span class=\"nx\">usedTime<\/span> <span class=\"o\">\/<\/span> <span class=\"p\">(<\/span><span class=\"mi\">24<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">3600<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">leavel<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">usedTime<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span><span class=\"mi\">24<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">3600<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">hours<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">floor<\/span><span class=\"p\">(<\/span><span class=\"nx\">leavel<\/span> <span class=\"o\">\/<\/span> <span class=\"p\">(<\/span><span class=\"mi\">3600<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">leavel2<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">leavel<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span><span class=\"mi\">3600<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">minutes<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">floor<\/span><span class=\"p\">(<\/span><span class=\"nx\">leavel2<\/span> <span class=\"o\">\/<\/span> <span class=\"p\">(<\/span><span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">leavel3<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">leavel2<\/span> <span class=\"o\">%<\/span> <span class=\"p\">(<\/span><span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">seconds<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">Math<\/span><span class=\"p\">.<\/span><span class=\"nx\">floor<\/span><span class=\"p\">(<\/span><span class=\"nx\">leavel3<\/span> <span class=\"o\">\/<\/span> <span class=\"p\">(<\/span><span class=\"mi\">1000<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">let<\/span> <span class=\"nx\">runbox<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">getElementById<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;run-time&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">runbox<\/span><span class=\"p\">.<\/span><span class=\"nx\">innerHTML<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;\u672c\u7ad9\u5df2\u8fd0\u884c`&lt;i class=&#34;far fa-clock fa-fw&#34;&gt;&lt;\/i&gt;` &#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">+<\/span> <span class=\"p\">((<\/span><span class=\"nx\">days<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"s1\">&#39;0&#39;<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">days<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; \u5929 &#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">+<\/span> <span class=\"p\">((<\/span><span class=\"nx\">hours<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"s1\">&#39;0&#39;<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">hours<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; \u65f6 &#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">+<\/span> <span class=\"p\">((<\/span><span class=\"nx\">minutes<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"s1\">&#39;0&#39;<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">minutes<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; \u5206 &#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">+<\/span> <span class=\"p\">((<\/span><span class=\"nx\">seconds<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span> <span class=\"o\">?<\/span> <span class=\"s1\">&#39;0&#39;<\/span> <span class=\"o\">:<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">seconds<\/span> <span class=\"o\">+<\/span> <span class=\"s1\">&#39; \u79d2 &#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">runtime<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u4fee\u6539blog\/layouts\/partials\/assets.html\uff0c\u5728\u6700\u540e <code>{{- partial &quot;plugin\/analytics.html&quot; . -}}<\/code>\u524d\u9762\u52a0\u4e0a<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{{<\/span><span class=\"o\">-<\/span> <span class=\"cm\">\/* \u81ea\u5b9a\u4e49\u7684js\u6587\u4ef6 *\/<\/span> <span class=\"o\">-<\/span><span class=\"p\">}}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">script<\/span> <span class=\"nx\">type<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;text\/javascript&#34;<\/span> <span class=\"nx\">src<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;\/js\/custom.js&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"err\">\/script&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<li>\n<p>\u4fee\u6539blog\/layouts\/partials\/footer.html\uff0c\u5728 <code>&lt;divclass=&quot;footer-container&quot;&gt;<\/code>\u4e0b\u9762\u52a0\u4e0a<\/p>\n<ol>\n<li>\n<div class=\"highlight\"><div class=\"chroma\">\n<div class=\"table-container\"><table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-js\" data-lang=\"js\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"nx\">div<\/span> <span class=\"kr\">class<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;footer-line&#34;<\/span><span class=\"o\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">&lt;<\/span><span class=\"nx\">span<\/span> <span class=\"nx\">id<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;run-time&#34;<\/span><span class=\"o\">&gt;&lt;<\/span><span class=\"err\">\/span&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;<\/span><span class=\"err\">\/div&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table><\/div>\n<\/div>\n<\/div><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 id=\"\u4e8c\u7ea7\u83dc\u5355\"><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#\u4e8c\u7ea7\u83dc\u5355\" class=\"anchor-link\" aria-label=\"\u4e8c\u7ea7\u83dc\u5355\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"icon anchor-icon\"><path d=\"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"\/><\/svg><\/a><a href=\"https:\/\/xiaoshame.github.io\/posts\/hugo_blog\/#contents:\u4e8c\u7ea7\u83dc\u5355\" class=\"headings\">\u4e8c\u7ea7\u83dc\u5355<\/a><\/h3>\n<ol>\n<li>\u8c03\u6574\u548c\u76f8\u5173\u4ee3\u7801\u5b8c\u5168\u53c2\u8003<a href=\"https:\/\/lewky233.top\/posts\/hugo-3.2.html\/#%E8%8F%9C%E5%8D%95%E6%A0%8F%E6%94%AF%E6%8C%81%E5%AD%90%E8%8F%9C%E5%8D%95\" target=\"_blank\" rel=\"noopener\">Hugo\u7cfb\u5217(3.2) - LoveIt\u4e3b\u9898\u7f8e\u5316\u4e0e\u535a\u5ba2\u529f\u80fd\u589e\u5f3a \u00b7 \u7b2c\u4e09\u7ae0<\/a><\/li>\n<li>\u4e8c\u7ea7\u83dc\u5355\u8c03\u6574\u89c1\u4e0a\u9762hugo.toml<\/li>\n<li>\u83dc\u5355logo\u4f7f\u7528<a href=\"https:\/\/fontawesome.com\/\" target=\"_blank\" rel=\"noopener\">fontawesome<\/a>,\u5728hugo\u4e2d\u914d\u7f6e\u83dc\u5355\u5bf9\u5e94pre\u53c2\u6570<\/li>\n<\/ol>","category":[{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/categories\/%E6%8A%80%E6%9C%AF\/","term":"\u6280\u672f","label":"\u6280\u672f"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/hugo\/","term":"Hugo","label":"Hugo"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/github\/","term":"github","label":"github"}},{"@attributes":{"scheme":"https:\/\/xiaoshame.github.io\/tags\/%E5%BB%BA%E7%AB%99\/","term":"\u5efa\u7ad9","label":"\u5efa\u7ad9"}}]}]}