9 Commits

Author SHA1 Message Date
eric
49a86761b6 '' 2025-09-10 09:01:01 +08:00
eric
ddf3fad972 '' 2025-09-10 08:46:57 +08:00
eric
59718010cf 's' 2025-09-09 23:51:11 +08:00
eric
9cfa939722 's' 2025-09-09 23:04:54 +08:00
eric
1cb0295d2d 's'' 2025-09-09 19:21:08 +08:00
eric
8dd0faeb34 'ss' 2025-09-06 18:43:35 +08:00
eric
87aa10a751 's' 2025-09-06 17:00:43 +08:00
eric
9f017d4569 'ss' 2025-09-06 16:34:52 +08:00
eric
43b923876c 'ss' 2025-09-06 16:12:16 +08:00
30 changed files with 1958 additions and 2440 deletions

View File

@@ -1 +1,2 @@
process.env.TARO_API_API="https://api.nomadcna.com"
# process.env.TARO_API_API="https://api.nomadcna.com"
process.env.TARO_API_API="https://payjs.dsx2020.com"

View File

@@ -124,13 +124,10 @@ const config = {
},
},
// 允许特定域名访问
allowedHosts: ["nomadyt.com", "localhost", ".nomadyt.com"], // 允许所有 *.nomadyt.com 子域访问
client: {
overlay: false,
},
allowedHosts: ["nomadro.com", "localhost", ".nomadro.com","hackrobot.cn",".hackrobot.cn"], // 允许所有 *.nomadyt.com 子域访问
},
htmlPluginOption: {
favicon: path.resolve(__dirname, "..", "src", "images", "youtube.ico"), // 同样处理 favicon 路径
favicon: path.resolve(__dirname, "..", "src", "images", "dgnomad.png"), // 同样处理 favicon 路径
meta: {
"cache-control": "no-cache, no-store, must-revalidate",
pragma: "no-cache",

View File

@@ -3,7 +3,7 @@ module.exports = {
NODE_ENV: '"production"'
},
defineConstants: {
'process.env.TARO_API_API': JSON.stringify("https://web.hackrobot.cn")
'process.env.TARO_API_API': JSON.stringify("https://payjs.dsx2020.com")
},
mini: {},
h5: {

View File

@@ -51,8 +51,7 @@
"react": "^18.0.0",
"react-dom": "^18.0.0",
"sr-sdk-h5": "^1.3.1",
"taro-ui": "^3.2.0",
"webpack-obfuscator": "^3.5.1"
"taro-ui": "^3.2.0"
},
"devDependencies": {
"@babel/core": "^7.8.0",
@@ -76,6 +75,6 @@
"ts-node": "^10.9.1",
"typescript": "^4.1.0",
"webpack": "^5.78.0",
"workbox-webpack-plugin": "^7.3.0"
"webpack-obfuscator": "^3.5.1"
}
}

BIN
src/images/AI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

28
src/images/code.svg Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="browserbinary" viewBox="0 0 232 192" enable-background="new 0 0 232 192" xml:space="preserve" width="512" height="512">
<g>
<path fill="#D0E8FF" d="M128,100h16.0156c2.2383,0,3.9922-1.7441,3.9922-3.9688V67.9688c0-2.1875-1.7891-3.9688-3.9922-3.9688H128 c-2.2383,0-3.9922,1.7441-3.9922,3.9688v28.0625C124.0078,98.2188,125.7969,100,128,100z"/>
<path fill="#D0E8FF" d="M8,184h216V40H8V184z M184.0156,160c0,6.5977-5.3789,11.9668-11.9922,11.9668h-16.0156 c-6.6133,0-11.9922-5.3691-11.9922-11.9668v-28.0645c0-6.5996,5.3789-11.9688,11.9922-11.9688h16.0156 c6.6133,0,11.9922,5.3691,11.9922,11.9688V160z M176.0156,56c6.6133,0,11.9922,5.3691,11.9922,11.9688v36.0625 c0,2.209-1.7891,4-4,4s-4-1.791-4-4V67.9688c0-2.1875-1.7891-3.9688-3.9922-3.9688c-2.2109,0-4-1.791-4-4S173.8047,56,176.0156,56z M116.0078,67.9688C116.0078,61.3691,121.3867,56,128,56h16.0156c6.6133,0,11.9922,5.3691,11.9922,11.9688v28.0625 c0,6.5996-5.3789,11.9688-11.9922,11.9688H128c-6.6133,0-11.9922-5.3691-11.9922-11.9688V67.9688z M116.0156,119.9668 c6.6133,0,11.9922,5.3691,11.9922,11.9688V168c0,2.209-1.7891,4-4,4s-4-1.791-4-4v-36.0645c0-2.1875-1.7891-3.9688-3.9922-3.9688 c-2.2109,0-4-1.791-4-4S113.8047,119.9668,116.0156,119.9668z M88.0078,56C94.6211,56,100,61.3691,100,67.9688v36.0625 c0,2.209-1.7891,4-4,4s-4-1.791-4-4V67.9688C92,65.7812,90.2109,64,88.0078,64c-2.2109,0-4-1.791-4-4S85.7969,56,88.0078,56z M88.0078,119.9668c6.6133,0,11.9922,5.3691,11.9922,11.9688V168c0,2.209-1.7891,4-4,4s-4-1.791-4-4v-36.0645 c0-2.1875-1.7891-3.9688-3.9922-3.9688c-2.2109,0-4-1.791-4-4S85.7969,119.9668,88.0078,119.9668z M28,67.9688 C28,61.3691,33.3789,56,39.9922,56h16.0156C62.6211,56,68,61.3691,68,67.9688v28.0625C68,102.6309,62.6211,108,56.0078,108H39.9922 C33.3789,108,28,102.6309,28,96.0312V67.9688z M28,131.9355c0-6.5996,5.3789-11.9688,11.9922-11.9688h16.0156 c6.6133,0,11.9922,5.3691,11.9922,11.9688V160c0,6.5977-5.3789,11.9668-11.9922,11.9668H39.9922 C33.3789,171.9668,28,166.5977,28,160V131.9355z"/>
<path fill="#D0E8FF" d="M39.9922,100h16.0156C58.2461,100,60,98.2559,60,96.0312V67.9688C60,65.7812,58.2109,64,56.0078,64H39.9922 C37.7539,64,36,65.7441,36,67.9688v28.0625C36,98.2188,37.7891,100,39.9922,100z"/>
<path fill="#D0E8FF" d="M39.9922,163.9668h16.0156C58.2461,163.9668,60,162.2246,60,160v-28.0645 c0-2.1875-1.7891-3.9688-3.9922-3.9688H39.9922c-2.2383,0-3.9922,1.7441-3.9922,3.9688V160 C36,162.1875,37.7891,163.9668,39.9922,163.9668z"/>
<path fill="#5CB0FF" d="M8,8v24h216V8H8z M20,28c-4.4102,0-8-3.5879-8-8s3.5898-8,8-8s8,3.5879,8,8S24.4102,28,20,28z M40,28 c-4.4102,0-8-3.5879-8-8s3.5898-8,8-8s8,3.5879,8,8S44.4102,28,40,28z M60,28c-4.4102,0-8-3.5879-8-8s3.5898-8,8-8s8,3.5879,8,8 S64.4102,28,60,28z"/>
<path fill="#D0E8FF" d="M172.0234,127.9668h-16.0156c-2.2383,0-3.9922,1.7441-3.9922,3.9688V160 c0,2.1875,1.7891,3.9668,3.9922,3.9668h16.0156c2.2383,0,3.9922-1.7422,3.9922-3.9668v-28.0645 C176.0156,129.748,174.2266,127.9668,172.0234,127.9668z"/>
<path fill="#1C71DA" d="M0,0v32v8v152h232V40v-8V0H0z M224,184H8V40h216V184z M8,32V8h216v24H8z"/>
<path fill="#1C71DA" d="M20,12c-4.4102,0-8,3.5879-8,8s3.5898,8,8,8s8-3.5879,8-8S24.4102,12,20,12z"/>
<path fill="#1C71DA" d="M40,12c-4.4102,0-8,3.5879-8,8s3.5898,8,8,8s8-3.5879,8-8S44.4102,12,40,12z"/>
<path fill="#1C71DA" d="M60,12c-4.4102,0-8,3.5879-8,8s3.5898,8,8,8s8-3.5879,8-8S64.4102,12,60,12z"/>
<path fill="#1C71DA" d="M39.9922,108h16.0156C62.6211,108,68,102.6309,68,96.0312V67.9688C68,61.3691,62.6211,56,56.0078,56 H39.9922C33.3789,56,28,61.3691,28,67.9688v28.0625C28,102.6309,33.3789,108,39.9922,108z M36,67.9688 C36,65.7441,37.7539,64,39.9922,64h16.0156C58.2109,64,60,65.7812,60,67.9688v28.0625C60,98.2559,58.2461,100,56.0078,100H39.9922 C37.7891,100,36,98.2188,36,96.0312V67.9688z"/>
<path fill="#1C71DA" d="M128,108h16.0156c6.6133,0,11.9922-5.3691,11.9922-11.9688V67.9688 c0-6.5996-5.3789-11.9688-11.9922-11.9688H128c-6.6133,0-11.9922,5.3691-11.9922,11.9688v28.0625 C116.0078,102.6309,121.3867,108,128,108z M124.0078,67.9688C124.0078,65.7441,125.7617,64,128,64h16.0156 c2.2031,0,3.9922,1.7812,3.9922,3.9688v28.0625c0,2.2246-1.7539,3.9688-3.9922,3.9688H128c-2.2031,0-3.9922-1.7812-3.9922-3.9688 V67.9688z"/>
<path fill="#1C71DA" d="M172.0234,119.9668h-16.0156c-6.6133,0-11.9922,5.3691-11.9922,11.9688V160 c0,6.5977,5.3789,11.9668,11.9922,11.9668h16.0156c6.6133,0,11.9922-5.3691,11.9922-11.9668v-28.0645 C184.0156,125.3359,178.6367,119.9668,172.0234,119.9668z M176.0156,160c0,2.2246-1.7539,3.9668-3.9922,3.9668h-16.0156 c-2.2031,0-3.9922-1.7793-3.9922-3.9668v-28.0645c0-2.2246,1.7539-3.9688,3.9922-3.9688h16.0156 c2.2031,0,3.9922,1.7812,3.9922,3.9688V160z"/>
<path fill="#1C71DA" d="M39.9922,171.9668h16.0156C62.6211,171.9668,68,166.5977,68,160v-28.0645 c0-6.5996-5.3789-11.9688-11.9922-11.9688H39.9922c-6.6133,0-11.9922,5.3691-11.9922,11.9688V160 C28,166.5977,33.3789,171.9668,39.9922,171.9668z M36,131.9355c0-2.2246,1.7539-3.9688,3.9922-3.9688h16.0156 c2.2031,0,3.9922,1.7812,3.9922,3.9688V160c0,2.2246-1.7539,3.9668-3.9922,3.9668H39.9922C37.7891,163.9668,36,162.1875,36,160 V131.9355z"/>
<path fill="#1C71DA" d="M88.0078,64C90.2109,64,92,65.7812,92,67.9688v36.0625c0,2.209,1.7891,4,4,4s4-1.791,4-4V67.9688 C100,61.3691,94.6211,56,88.0078,56c-2.2109,0-4,1.791-4,4S85.7969,64,88.0078,64z"/>
<path fill="#1C71DA" d="M116.0156,127.9668c2.2031,0,3.9922,1.7812,3.9922,3.9688V168c0,2.209,1.7891,4,4,4s4-1.791,4-4v-36.0645 c0-6.5996-5.3789-11.9688-11.9922-11.9688c-2.2109,0-4,1.791-4,4S113.8047,127.9668,116.0156,127.9668z"/>
<path fill="#1C71DA" d="M88.0078,127.9668c2.2031,0,3.9922,1.7812,3.9922,3.9688V168c0,2.209,1.7891,4,4,4s4-1.791,4-4v-36.0645 c0-6.5996-5.3789-11.9688-11.9922-11.9688c-2.2109,0-4,1.791-4,4S85.7969,127.9668,88.0078,127.9668z"/>
<path fill="#1C71DA" d="M176.0156,64c2.2031,0,3.9922,1.7812,3.9922,3.9688v36.0625c0,2.209,1.7891,4,4,4s4-1.791,4-4V67.9688 c0-6.5996-5.3789-11.9688-11.9922-11.9688c-2.2109,0-4,1.791-4,4S173.8047,64,176.0156,64z"/>
</g>
<path fill="#FF5D5D" d="M196.252,167.8237c-1.0234,0-2.0469-0.3906-2.8281-1.1714c-1.5625-1.5625-1.5625-4.0952,0-5.6572 l14.1426-14.1421c1.5605-1.5615,4.0938-1.5615,5.6562,0c1.5625,1.5625,1.5625,4.0952,0,5.6572l-14.1426,14.1421 C198.2998,167.4331,197.2754,167.8237,196.252,167.8237z"/>
<path fill="#FF5D5D" d="M210.3945,167.8223c-1.0234,0-2.0479-0.3906-2.8281-1.1714l-14.1426-14.1426 c-1.5625-1.5625-1.5625-4.0947,0-5.6572c1.5605-1.5615,4.0957-1.5615,5.6562,0l14.1426,14.1426 c1.5625,1.5625,1.5625,4.0947,0,5.6572C212.4424,167.4316,211.418,167.8223,210.3945,167.8223z"/>
<path fill="#00D40B" d="M206.252,87.8237c-7.7197,0-14-6.2803-14-14s6.2803-14,14-14s14,6.2803,14,14 S213.9717,87.8237,206.252,87.8237z M206.252,67.8237c-3.3086,0-6,2.6914-6,6s2.6914,6,6,6s6-2.6914,6-6 S209.5605,67.8237,206.252,67.8237z"/>
<path fill="#FFC504" d="M107.5664,50.4492c-1.0234,0-2.0469-0.3906-2.8281-1.1714L93.4238,37.9644 c-0.75-0.75-1.1719-1.7676-1.1719-2.8286s0.4219-2.0786,1.1719-2.8286l11.3145-11.3135c1.5625-1.5615,4.0938-1.5615,5.6562,0 l11.3135,11.3135c1.5625,1.5625,1.5625,4.0947,0,5.6572l-11.3135,11.3135C109.6143,50.0586,108.5898,50.4492,107.5664,50.4492z M101.9092,35.1357l5.6572,5.6567l5.6562-5.6567l-5.6562-5.6567L101.9092,35.1357z"/>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/images/dgnomad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/images/dsx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

BIN
src/images/hackrobot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

28
src/images/host.svg Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" ?>
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 50 50" enable-background="new 0 0 50 50" id="Layer_1" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<rect fill="#4E4C4D" height="28.59021" width="37.51397" x="6.24299" y="11.46645"/>
<path d="M41.94715,36.23013H8.05279c-3.89517,0-7.05282,3.15766-7.05282,7.05282v0.00002 c0,3.89516,3.15766,7.05282,7.05282,7.05282h33.89436c3.89517,0,7.05282-3.15766,7.05282-7.05282v-0.00002 C48.99997,39.38779,45.84232,36.23013,41.94715,36.23013z" fill="#656766"/>
<path d="M41.94715,17.9426H8.05279c-3.89517,0-7.05282,3.15766-7.05282,7.05282v0.00001 c0,3.89517,3.15766,7.05282,7.05282,7.05282h33.89436c3.89517,0,7.05282-3.15766,7.05282-7.05282v-0.00001 C48.99997,21.10026,45.84232,17.9426,41.94715,17.9426z" fill="#656766"/>
<path d="M41.94715-0.33579H8.05279c-3.89517,0-7.05282,3.15766-7.05282,7.05282v0.00001 c0,3.89517,3.15766,7.05282,7.05282,7.05282h33.89436c3.89517,0,7.05282-3.15766,7.05282-7.05282V6.71703 C48.99997,2.82187,45.84232-0.33579,41.94715-0.33579z" fill="#656766"/>
<g>
<circle cx="8.51297" cy="6.71704" fill="#EC6E62" r="2.71455"/>
<circle cx="16.22803" cy="6.71704" fill="#85BD57" r="2.71455"/>
</g>
<g>
<circle cx="8.51297" cy="24.99543" fill="#EC6E62" r="2.71455"/>

After

Width:  |  Height:  |  Size: 3.5 KiB

64
src/images/laptop.svg Normal file
View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 512 512" xml:space="preserve">
<path style="fill:#F6F6F7;" d="M461.228,418.472H50.772V153.386c0-9.446,7.656-17.102,17.102-17.102h376.251
c9.446,0,17.102,7.656,17.102,17.102V418.472z"/>
<g>
<path style="fill:#68727E;" d="M461.228,153.386c0-9.445-7.658-17.102-17.102-17.102H67.875c-9.446,0-17.102,7.658-17.102,17.102
v17.102h410.455V153.386z"/>
<path style="fill:#68727E;" d="M503.983,409.921H8.017v8.551c0,18.891,15.314,34.205,34.205,34.205h427.557
c18.891,0,34.205-15.314,34.205-34.205V409.921z"/>
</g>
<path style="fill:#424F5E;" d="M13.248,436.643c6.052,9.629,16.762,16.033,28.973,16.033h427.557
c12.212,0,22.922-6.405,28.973-16.033H13.248z"/>
<rect x="332.96" y="256" style="fill:#FFC44F;" width="171.023" height="119.716"/>
<path style="fill:#F7AB49;" d="M332.96,281.653l79.843,79.843c3.131,3.131,8.207,3.131,11.338,0l79.842-79.843V256H332.96V281.653z"
/>
<polygon style="fill:#FFC44F;" points="332.96,256 418.472,341.511 503.983,256 "/>
<circle style="fill:#C4DF64;" cx="256" cy="341.511" r="17.102"/>
<path style="fill:#FF8C78;" d="M196.142,136.284c0-42.505-42.113-76.96-94.063-76.96S8.017,93.779,8.017,136.284
c0,42.503,42.113,76.96,94.063,76.96c5.451,0,10.793-0.384,15.99-1.113l52.42,35.317l-17.102-46.656
C179.125,187.061,196.142,163.299,196.142,136.284z"/>
<path style="fill:#DF7A6E;" d="M33.67,136.284c0-38.944,35.356-71.126,81.236-76.245c-4.194-0.468-8.475-0.715-12.827-0.715
c-51.949,0-94.063,34.456-94.063,76.96c0,42.503,42.113,76.96,94.063,76.96c4.339,0,8.605-0.253,12.787-0.719
C69.006,207.391,33.67,175.216,33.67,136.284z"/>
<rect x="50.772" y="392.818" style="fill:#D9DCDF;" width="410.455" height="17.102"/>
<path d="M503.983,383.733c4.428,0,8.017-3.589,8.017-8.017V256c0-4.348-3.67-8.017-8.017-8.017h-34.739v-94.597
c0-13.851-11.268-25.119-25.119-25.119H203.701c-4.869-43.111-48.582-76.96-101.622-76.96C45.792,51.307,0,89.428,0,136.284
c0,28.454,16.887,53.683,42.756,69.114v130.77c0,4.427,3.588,8.017,8.017,8.017s8.017-3.589,8.017-8.017V213.229
c13.151,5.148,27.822,8.032,43.29,8.032c4.671,0,9.371-0.267,14.009-0.797l49.921,33.634c3.09,2.082,7.321,1.719,10.016-0.852
c2.284-2.181,3.078-5.59,1.991-8.555l-14.782-40.325c11.378-7.07,20.685-15.901,27.536-25.888c0.186,0.013,0.372,0.029,0.562,0.029
h261.879v69.478H332.96c-4.364,0-8.017,3.661-8.017,8.017v119.716c0,4.427,3.588,8.017,8.017,8.017h120.251v18.171H58.789v-24.05
c0-4.427-3.588-8.017-8.017-8.017s-8.017,3.589-8.017,8.017v24.049H8.017c-4.428,0-8.017,3.589-8.017,8.017v8.551
c0,23.28,18.941,42.221,42.221,42.221h335.098c4.428,0,8.017-3.589,8.017-8.017c0-4.427-3.588-8.017-8.017-8.017H42.221
c-14.441,0-26.188-11.748-26.188-26.188v-0.534h479.933v0.534c0,14.44-11.747,26.188-26.188,26.188h-51.841
c-4.428,0-8.017,3.589-8.017,8.017c0,4.427,3.588,8.017,8.017,8.017h51.841c23.28,0,42.221-18.941,42.221-42.221v-8.551
c0-4.427-3.588-8.017-8.017-8.017h-34.739v-18.171H503.983z M149.613,193.719c-3.528,1.882-5.13,6.078-3.754,9.832l8.585,23.423
l-31.897-21.49c-3.017-2.032-6.342-1.133-9.697-0.796c-3.578,0.359-7.174,0.541-10.771,0.541c-47.446,0-86.046-30.928-86.046-68.944
s38.6-68.944,86.046-68.944s86.046,30.928,86.046,68.944C188.125,159.383,173.727,180.854,149.613,193.719z M199.236,162.472
c2.26-5.847,3.77-11.933,4.469-18.171h240.42c5.01,0,9.086,4.076,9.086,9.086v9.086H199.236z M484.63,264.017l-66.158,66.158
l-66.158-66.158H484.63z M340.977,275.354l71.825,71.825c3.089,3.088,8.249,3.088,11.338,0l71.826-71.825v92.345h-154.99V275.354z"
/>
<path d="M256,316.392c-13.851,0-25.119,11.268-25.119,25.119c0,13.851,11.268,25.119,25.119,25.119
c13.851,0,25.119-11.268,25.119-25.119C281.119,327.661,269.851,316.392,256,316.392z M256,350.597c-5.01,0-9.086-4.076-9.086-9.086
c0-5.01,4.076-9.086,9.086-9.086c5.01,0,9.086,4.076,9.086,9.086C265.086,346.521,261.01,350.597,256,350.597z"/>
<path d="M288.595,301.085c2.217-3.832,0.908-8.736-2.924-10.954c-8.982-5.196-19.241-7.943-29.67-7.943
c-10.427,0-20.686,2.746-29.667,7.941c-3.833,2.217-5.144,7.121-2.926,10.954c2.216,3.832,7.124,5.144,10.953,2.926
c6.545-3.786,14.028-5.787,21.64-5.787c7.613,0,15.096,2.002,21.641,5.788c1.264,0.732,2.644,1.08,4.007,1.08
C284.415,305.088,287.109,303.652,288.595,301.085z"/>
<path d="M305.692,271.452c2.217-3.832,0.908-8.736-2.926-10.953c-14.155-8.188-30.327-12.516-46.766-12.516
c-16.441,0-32.614,4.328-46.77,12.517c-3.832,2.217-5.142,7.121-2.924,10.954c1.487,2.569,4.178,4.004,6.947,4.004
c1.362,0,2.743-0.348,4.007-1.079c11.719-6.779,25.116-10.363,38.741-10.363c13.624,0,27.02,3.583,38.739,10.361
C298.572,276.595,303.476,275.285,305.692,271.452z"/>
<path d="M317.684,246.911c2.718,0,5.369-1.382,6.874-3.881c2.285-3.792,1.062-8.719-2.73-11.003
c-19.815-11.938-42.578-18.248-65.828-18.248c-22.454,0-44.541,5.911-63.873,17.094c-3.833,2.217-5.144,7.121-2.926,10.954
c2.217,3.833,7.122,5.142,10.953,2.926c16.896-9.774,36.207-14.94,55.845-14.94c20.334,0,40.236,5.514,57.555,15.948
C314.849,246.54,316.275,246.911,317.684,246.911z"/>
<path d="M106.355,128.267h-8.551c-4.428,0-8.017,3.589-8.017,8.017c0,4.427,3.588,8.017,8.017,8.017h8.551
c4.428,0,8.017-3.589,8.017-8.017C114.372,131.857,110.783,128.267,106.355,128.267z"/>
<path d="M72.15,128.267h-8.551c-4.428,0-8.017,3.589-8.017,8.017c0,4.427,3.588,8.017,8.017,8.017h8.551
c4.428,0,8.017-3.589,8.017-8.017C80.167,131.857,76.579,128.267,72.15,128.267z"/>
<path d="M140.56,128.267h-8.551c-4.428,0-8.017,3.589-8.017,8.017c0,4.427,3.588,8.017,8.017,8.017h8.551
c4.428,0,8.017-3.589,8.017-8.017C148.576,131.857,144.988,128.267,140.56,128.267z"/>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
src/images/nomadro.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

BIN
src/images/phone2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

3
src/images/robot.svg Normal file
View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 -77.5 1179 1179" class="icon" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M597.215632 994.574713h403.714943s43.549425-8.945287 43.549425-114.64092 94.16092-577.677241-459.976092-577.677241-457.151264 541.425287-457.151264 541.425287-25.423448 160.77977 54.848735 157.013333 415.014253-6.12046 415.014253-6.120459z" fill="#FFFFFF" /><path d="M1071.786667 712.798161h72.503908v136.297931h-72.503908zM36.016552 712.798161h72.503908v136.297931H36.016552z" fill="#EA5D5C" /><path d="M305.68366 559.40926l556.254412-1.165018 0.398364 190.20464-556.254412 1.165018-0.398364-190.20464Z" fill="#4C66AF" /><path d="M1129.931034 680.312644h-59.556781c-3.295632-152.069885-67.56046-258.942529-172.079081-324.384368l115.347127-238.462529a47.08046 47.08046 0 1 0-42.372414-20.48l-114.640919 236.57931a625.934713 625.934713 0 0 0-269.30023-53.200919 625.228506 625.228506 0 0 0-270.006437 54.848736l-115.817931-235.402299a47.08046 47.08046 0 1 0-42.372414 20.715402l117.701149 238.462529c-103.812414 65.441839-167.135632 173.02069-169.960459 324.61977H47.786667a47.08046 47.08046 0 0 0-47.08046 47.08046v117.701149a47.08046 47.08046 0 0 0 47.08046 47.08046h58.615172v57.908965a70.62069 70.62069 0 0 0 70.62069 70.62069l823.908046-1.647816a70.62069 70.62069 0 0 0 70.620689-70.62069v-57.908965h59.085977a47.08046 47.08046 0 0 0 47.08046-47.08046v-117.701149A47.08046 47.08046 0 0 0 1129.931034 680.312644zM94.16092 847.212874H47.08046v-117.70115h47.08046v117.70115z m929.83908 103.106206a23.54023 23.54023 0 0 1-23.54023 23.54023l-823.908046 1.647816a23.54023 23.54023 0 0 1-23.54023-23.540229v-258.942529c0-329.563218 303.668966-365.57977 434.788046-365.815173s435.494253 34.604138 436.20046 363.931954z m105.46023-105.224827h-47.08046v-117.70115h47.08046v117.70115z" fill="#3F4651" /><path d="M464.684138 135.827126l22.363218-19.53839 40.018391 62.381609a30.131494 30.131494 0 0 0 25.423448 13.888735h2.824828a30.131494 30.131494 0 0 0 25.188046-19.067586l20.715402-79.095172 21.186207 74.387126v2.118621a30.366897 30.366897 0 0 0 52.494713 6.826667l30.366896-57.202759 13.182529 12.947126a30.131494 30.131494 0 0 0 21.186207 8.709886h57.673563a23.54023 23.54023 0 0 0 23.54023-23.54023 23.54023 23.54023 0 0 0-23.54023-23.54023h-50.140689l-23.54023-23.54023a30.366897 30.366897 0 0 0-45.668046 3.766437l-21.42161 40.01839L629.465747 19.302989a30.131494 30.131494 0 0 0-28.012873-19.067587 30.131494 30.131494 0 0 0-28.012874 19.067587l-26.60046 101.693793-29.660689-47.08046a30.366897 30.366897 0 0 0-20.48-13.653333 30.837701 30.837701 0 0 0-23.54023 6.826666l-32.250115 28.248276h-60.027586a23.54023 23.54023 0 0 0-23.54023 23.54023 23.54023 23.54023 0 0 0 23.54023 23.54023h66.148046a31.308506 31.308506 0 0 0 17.655172-6.591265zM776.121379 532.950805H404.421149A121.232184 121.232184 0 0 0 282.482759 639.352644a117.701149 117.701149 0 0 0 117.701149 129.000459h371.70023a121.232184 121.232184 0 0 0 121.938391-106.401839 117.701149 117.701149 0 0 0-117.70115-129.000459z m0 188.321839H402.302529a72.503908 72.503908 0 0 1-72.268506-56.496552 70.62069 70.62069 0 0 1 68.972874-84.744828h373.81885a72.503908 72.503908 0 0 1 72.268506 56.496552 70.62069 70.62069 0 0 1-68.502069 84.744828z" fill="#3F4651" /></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

7
src/images/ssh.svg Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="48" height="48" fill="white" fill-opacity="0.01"/>
<rect x="4" y="8" width="40" height="32" rx="2" fill="#2F88FF" stroke="#000000" stroke-width="4" stroke-linejoin="round"/>
<path d="M12 18L19 24L12 30" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M23 32H36" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 625 B

3
src/images/travel.svg Normal file
View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 1024 1024" class="icon" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M885.76 921.28h-106.56l-0.32-26.77333333c0.10666667-0.74666667-0.10666667-68.26666667-7.46666667-171.52-8.96-125.65333333-21.76-243.41333333-167.57333333-334.82666667l24.53333333-26.02666667c78.72 46.93333333 146.24 112 178.88 167.36 42.34666667 72 56.85333333 110.29333333 69.54666667 176.85333334 21.65333333 112.64 9.49333333 211.30666667 8.96 214.93333333z" fill="#755E49" /><path d="M565.65333333 893.40444445c0 14.93333333-1.38666667 29.44-4.05333333 43.52H129.28c-2.66666667-14.08-4.05333333-28.69333333-4.05333333-43.52 0-25.81333333 4.26666667-50.66666667 11.94666666-73.81333334 29.76-88.64 111.78666667-152.32 208.21333334-152.32 96.42666667 0 178.45333333 63.68 208.21333333 152.32 7.89333333 23.14666667 12.05333333 48 12.05333333 73.81333334z" fill="#FF9D00" /><path d="M989.12 926.61333333c0 16.21333333-6.61333333 30.82666667-17.17333333 41.49333334-10.56 10.66666667-25.28 17.17333333-41.49333334 17.17333333h-838.4c-32.42666667 0-58.66666667-26.24-58.66666666-58.66666667 0-16.21333333 6.61333333-30.82666667 17.17333333-41.49333333 10.66666667-10.56 25.28-17.17333333 41.49333333-17.17333333h838.4c32.42666667 0 58.66666667 26.24 58.66666667 58.66666666z" fill="#00B7FF" /><path d="M981.86666667 399.57333333c10.45333333 0 14.50666667-17.17333333 5.86666666-24.42666666-31.14666667-26.24-91.73333333-64.21333333-181.01333333-64.74666667-89.92-0.64-150.29333333 38.50666667-180.90666667 65.28-8.53333333 7.46666667-4.37333333 24.32 5.97333334 24.32l350.08-0.42666667z" fill="#02C652" /><path d="M882.77333333 158.61333333c7.36-7.36-1.81333333-22.4-13.12-21.44-40.64 3.52-110.29333333 19.52-173.76 82.24-64 63.14666667-79.04 133.44-81.81333333 174.08-0.74666667 11.30666667 14.08 20.37333333 21.44 13.01333334l247.25333333-247.89333334z" fill="#02C652" /><path d="M648 391.89333333c7.36-7.36-1.81333333-22.4-13.12-21.44-40.64 3.52-110.29333333 19.52-173.76 82.24-64 63.14666667-79.04 133.44-81.81333333 174.08-0.74666667 11.30666667 14.08 20.37333333 21.44 13.01333334l247.25333333-247.89333334z" fill="#02C652" /><path d="M657.92 44.69333333c0-10.45333333-17.17333333-14.50666667-24.42666667-5.86666666-26.24 31.14666667-64.21333333 91.73333333-64.74666666 181.01333333-0.64 89.92 38.50666667 150.29333333 65.28 180.90666667 7.46666667 8.53333333 24.32 4.37333333 24.32-5.97333334l-0.42666667-350.08z" fill="#02C652" /><path d="M657.92 372.58666667c0-10.45333333-17.17333333-14.50666667-24.42666667-5.86666667-26.24 31.14666667-64.21333333 91.73333333-64.74666666 181.01333333-0.64 89.92 38.50666667 150.29333333 65.28 180.90666667 7.46666667 8.53333333 24.32 4.37333333 24.32-5.97333333l-0.42666667-350.08z" fill="#02C652" /><path d="M642.66666667 402.24c10.45333333 0 14.50666667-17.17333333 5.86666666-24.42666667-31.14666667-26.24-91.73333333-64.21333333-181.01333333-64.74666666-89.92-0.64-150.29333333 38.50666667-180.90666667 65.28-8.53333333 7.46666667-4.37333333 24.32 5.97333334 24.32l350.08-0.42666667z" fill="#02C652" /></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="none"><path fill="red" d="M14.712 4.633a1.754 1.754 0 00-1.234-1.234C12.382 3.11 8 3.11 8 3.11s-4.382 0-5.478.289c-.6.161-1.072.634-1.234 1.234C1 5.728 1 8 1 8s0 2.283.288 3.367c.162.6.635 1.073 1.234 1.234C3.618 12.89 8 12.89 8 12.89s4.382 0 5.478-.289a1.754 1.754 0 001.234-1.234C15 10.272 15 8 15 8s0-2.272-.288-3.367z"/><path fill="#ffffff" d="M6.593 10.11l3.644-2.098-3.644-2.11v4.208z"/></svg>

After

Width:  |  Height:  |  Size: 613 B

BIN
src/images/youtube2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,39 +1,34 @@
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport">
<!-- <meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes"> -->
<!-- 安卓webapp -->
<!-- <meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#ffffff">
<meta name="application-name" content="Youtube运营"> -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="format-detection" content="telephone=no,address=no">
<meta name="apple-mobile-web-app-status-bar-style" content="white">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 添加icon图标 -->
<!-- <link rel="apple-touch-icon" href="/static/images/images/youtube192.png" />
<link rel="icon" sizes="192x192" href="/static/images/images/youtube192.png" />
-->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
<link rel="apple-touch-icon" href="/static/images/images/youtube.ico" />
<!-- <link rel="apple-touch-icon" href="/static/images/images/youtube.svg" /> -->
<!-- <link rel="icon" type="image/x-icon" href="/static/images/youtube.ico"> -->
<title>Youtube运营</title>
<meta name="description" content="Youtube运营笔记">
<meta property="og:description" content="Youtube运营笔记">
<meta name="twitter:description" content="Youtube运营笔记">
<link
rel="icon"
sizes="192x192"
href="/static/images/images/youtube.ico"
/>
<title>youtube运营</title>
<meta name="description" content="youtube运营">
<meta property="og:description" content="youtube运营">
<meta name="twitter:description" content="youtube运营">
<script><%= htmlWebpackPlugin.options.script %></script>
<!-- 禁止缓存 -->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
</head>
<body>
<div id="app"></div>
</body>
</html>
</html>

View File

@@ -1,45 +1,155 @@
## Youtube运营笔记
# 前言
> 媒体是普通人的最好的杠杆
## 🚀 云手机
从佛系到认真的运营youtube(油管),也快有1年的时间了
> 📱系统安装
在这里分享一些心得,以及踩过的坑
- 开源硬件选择 (百元级),
- 刷入安卓系统(Android)
- 获取root权限(magisk面具)
- lsposed环境 (xposed外挂模块)
- 谷歌框架
> 🚫风控设置
- 机型参数修改
- 静态住宅ip (链式代理)
- gps定位 (fake location)
- 权限控制
- 安卓虚拟机 (多开系统)
> 💻远程控制
- frp内网穿透
- scrcpy (adb远控)
- qscrcpy(群控)
> 💰应用场景
- 无人直播
- RPA自动化
- 聊天机器人
---
## 为什么youtube值得做?
## 硬件选择
> 成本低
> 百元级开发板
自媒体是普通人最好的杠杆,只需要1部手机,就可以拍摄vlog,也可以剪辑影片
现在的剪辑软件,不仅在手机端可以方便操作,还结合的ai功能,比如
rk3576芯片的开发,是目前性价比较高的选择
ROCK 4D 的4gb版本只要 299
nanopiM5的 4gb 399
- 语音翻译/克隆
- 自动生成双语字幕
- 特效/音效
<img title="" src="https://hackrobot-1258475618.cos.ap-shenzhen-fsi.myqcloud.com/M5_01-900x630.jpg?imageSlim" alt="M5_01-900x630.jpg" width="265">
随时随地都可以剪辑+上传
M5相比较4D有以下区别
> 赚美金,回报高
- 支持M2 ssd固态硬盘
- 双网口,可以做软路由openwrt
- 安卓镜像默认支持谷歌框架
同样的视频,在不同的平台上传后,收益汇率不一样
为什么不选择 二手手机,或者 主板机
二手手机不是标准品,型号和系统都是定制的,解锁BL越来越难
油管结算是美金,换成人民,就有7倍左右的购买力
国内基本已经不开放,不可拆卸的电池,会因发热造成巨大的安全隐患
主板机,一般是成套出售,动辄几千元,适合有规模化业务的"商家"
而开发板,属于开源硬件, AOSP安卓属于开源系统,方便购买和定制化
综合来说,推荐nanopi
而如果你居住下三四线城市,或者县城,那么由于生活成本低
> 刷入安卓系统
每月即使1000$的收益,都可以过的不错了
目前基本用tf卡可以直接刷入img镜像文件
使用`Balena Etcher`软件,windows/mac系统都可以使用
tf卡读取,最好购买一个`SD/TF读写器`,插入电脑主机的usb即可
刷入img文件后
将开发板,插电开机,并接入网线
如果为了方柏霓,建议购买开发板时,一并购买支持蓝牙wifi的配件
这样可以设置无线连接
> 商业模式健康
---
youtube给创作者的收益,长视频是`55%`,短视频shorts是`45%`
> 获取root权限
可以说是世界上很慷慨的公司了
安卓的系统的优势在于开放性
但是商业手机,都限制了bl锁,以及内置电池
让系统失去了可玩性
通过tF卡刷入的aosp安卓镜像, 可以用工具 读取出boot.img
仅仅是平台广告,就能够带来巨大的收益
- 在安卓系统下载magisk.apk安装
用magisk修复boot.img, 比如生成magiskboot.img
然后用磁盘管理工具,将magiskboot.img 刷入系统
重启后,就有了root权限
完全不必申请解锁bl
不用去接`业配/商单`,以及自己带货,纯粹的视频不会让人厌恶
---
> 安装lsposed环境
lsposed是xposed外挂模块的环境
下载zip安装包:
https://github.com/LSPosed/LSPosed/releases/download/v1.9.2/LSPosed-v1.9.2-7024-zygisk-release.zip
在magisk软件里, 点击 设置, 刷入即可
重启后,即可进入lsposed
# 视频教程
### 百度网盘下载
```
链接: https://pan.baidu.com/s/1DFsdtgL-pvQt22U4MNXjHg?pwd=call
提取码: call
```
---
# 魔法上网
> vps服务器
如果想要出海浏览
只需要买一台海外的vps服务器,比如 [vultr](https://www.vultr.com/?ref=8985003),每月5$
> 静态住宅ip
但是如果想做业务,赚美金
一定需要`静态住宅ip`,来避免风控,
可以在[proxycheap](https://app.proxy-cheap.com/r/bmcMoY),3$/月
> 域名
即时不搭建网站,关于魔法线路,也需要配置域名
可以在[namesilo](https://www.namesilo.com) 购买
把dns,交给[cloudflare](https://cloudflare.com)托管
### 链式代理
> 中转线路+落地节点
为什么一定要中转?
因为便宜的静态住宅ip一般只提供`http/socks`连接
在国内是绝对无法直连的
但是通过中国国家的服务器,链式代理,到目标国家落地
就可以避免风控
建议使用clash meta,文档- [虚空终端](https://wiki.metacubex.one)
### 实际流程
- 1.买vps服务器
- 2.买域名
- 3.买静态住宅ip
- 4.服务器部署中转脚本: [八合一脚本](https://github.com/mack-a/v2ray-agent),建议Hysteria2协议
- 5.在任何设备,使用`clash meta`,配置yaml信息: vps中转+静态ip
- 6.clash`链式代理`: `dialer-proxy`
提示: 目前在云手机测试,代理api并没有过tiktok风控,建议从`软路由`测试
软路由系统是`openwrt`
可以买nanopi双网口开发板进行配置,比如`R2S`

View File

@@ -1,3 +1,3 @@
export default {
navigationBarTitleText: 'Youtube运营笔记'
navigationBarTitleText: 'youtube运营'
}

View File

@@ -1,7 +1,6 @@
// 在 src/index.scss 中引入 GitHub Markdown 主题
@import "github-markdown-css/github-markdown.css";
// marktext的换行处理
.markdown-body p,
.markdown-body blockquote,
@@ -14,11 +13,10 @@
margin-bottom: 10px;
}
.markdown-body li>p {
.markdown-body li > p {
margin-top: 0px;
}
.book_header_div {
width: 100%;
height: 80px;
@@ -90,6 +88,9 @@
}
}
}
.joinSalon {
margin-top: 30px;
}
}
@media (min-width: 1536px) {
@@ -97,7 +98,7 @@
width: 100%;
// height: 100%;
display: flex;
flex-direction: row;
flex-direction: column;
align-items: center;
justify-content: center;
@@ -121,5 +122,14 @@
height: 100%;
background-color: greenyellow;
}
.joinSalon {
// width: 100%;
// height: 100px;
display: none;
// background-color: yellow;
}
}
}

View File

@@ -12,18 +12,11 @@ import Taro from "@tarojs/taro";
import { AtAvatar } from "taro-ui";
import { AtTag } from "taro-ui";
import { AtList, AtListItem } from "taro-ui";
import {
AtForm,
AtMessage,
AtDrawer,
AtIcon,
AtTimeline,
AtDivider,
} from "taro-ui";
import { AtForm, AtMessage, AtDrawer, AtIcon } from "taro-ui";
import { marked } from "marked";
import infoText from "./info.md";
import bookText from "./book.md";
import youtubeIco from "../../images/youtube.ico";
// import youtubeIco from "../../images/youtube.ico";
marked.setOptions({
breaks: true, // 是否回车换行
@@ -56,6 +49,7 @@ const Book = () => {
const contentRef = useRef(null); // 用于获取渲染后的 DOM
useEffect(() => {
// window.localStorage.removeItem("book");
isWeChatFun();
}, []);
@@ -78,7 +72,6 @@ const Book = () => {
const h1Elements = contentRef.current.querySelectorAll("h1");
for (let h1 of h1Elements) {
if (h1.textContent.trim() === text.trim()) {
console.log("Current h1 text:", h1.textContent); // 输出每个 h1 的文本
// if (h1.textContent === text) {
h1.scrollIntoView({ behavior: "smooth" });
break;
@@ -87,7 +80,7 @@ const Book = () => {
};
// const handleClick = (value) => {
// // 跳转到目的页面,在当前页面打开_
// // 跳转到目的页面,在当前页面打开
// Taro.navigateTo({
// url: "/pages/index/index",
// });
@@ -165,7 +158,7 @@ const Book = () => {
>
<AtIcon value="chevron-left"></AtIcon>
</View>
<View className="book_header_middle">{`📗 Youtube运营日记`}</View>
<View className="book_header_middle">{`云手机`}</View>
<View
className="book_header_right"
onClick={() => {
@@ -180,12 +173,11 @@ const Book = () => {
ref={contentRef}
className="markdown-body" // 添加 GitHub Markdown 主题类
dangerouslySetInnerHTML={{
__html: marked(markText),
// __html: marked(book == 1 ? bookText : infoText),
// __html: marked(markText),
__html: marked(book == 1 ? bookText : infoText),
}}
></View>
{/* 目录 */}
<AtDrawer
className="book_AtDrawer"
show={show}
@@ -205,41 +197,53 @@ const Book = () => {
</View> */}
</AtDrawer>
{/* 分割线 */}
<AtDivider>
{/* <AtIcon value="check-circle"></AtIcon> */}
<span> </span>
{/* <AtIcon value="check-circle"></AtIcon> */}
</AtDivider>
{/* 判断是否是微信 */}
{!isWeChat && <div style={{ color: "red" }}></div>}
{/* 更新日志 */}
<View className="log">
<AtTimeline
pending
items={[
{
title: "新建电子书",
content: ["2025年4月4日"],
icon: "check-circle",
},
{
title: "目录大纲",
content: ["2025年4月5日"],
icon: "clock",
},
{
title: "核心内容",
content: ["2025年4月6日"],
icon: "clock",
},
{
title: "新增日志log",
content: ["2025年4月7日"],
icon: "clock",
},
]}
></AtTimeline>
</View>
{/* 判断有没有wxid */}
{book != 1 ? (
<AtButton
type="primary"
size="normal"
className="joinSalon"
onClick={() => {
if (book == 1) {
return false;
} else {
if (!!isWeChat) {
//98元
payh5("book", 9800);
} else {
window.location.href = `https://mp.weixin.qq.com/s/16xcMIgxEEGBPY7fanNq0g`;
}
}
}}
>
{`阅读更多`}
</AtButton>
) : (
<span style={{ color: "green" }}>....</span>
)}
{/* <AtButton
type="primary"
size="normal"
className="joinSalon"
onClick={() => {
if (book == 1) {
return false;
} else {
if (!!isWeChat) {
// 198元
payh5("group", 29800);
} else {
window.location.href = `https://mp.weixin.qq.com/s/GBU3THKaXRRkdpZXH_18jw`;
}
}
}}
>
{`游民社群`}
</AtButton> */}
</View>
</>
);

View File

@@ -1,621 +1,59 @@
# 前言
> 本文是在线电子书,不定时更新
# 🚀云手机教程
你看到的`电子书`,一个在线的网页
<!-- ![2024-12-22-01-00-03-Escrcpy.png](https://hackrobot-1258475618.cos.ap-shenzhen-fsi.myqcloud.com/2024-12-22-01-00-03-Escrcpy.png?imageSlim) -->
内容会根据作者的经历和心得,不定时更新
<!-- > tiktokz直播
当然,如果你也可以关注公众号:
<video style="max-width:100%;height:auto;" controls>
<source src="https://hackrobot-1258475618.cos.ap-shenzhen-fsi.myqcloud.com/9.%20tiktok%E7%9B%B4%E6%92%AD-2.mp4" type="video/mp4">
您的浏览器不支持 video 标签。
</video> -->
`Eric的云游日记`
加群交流
一个人走得开,一群人走的远
# 目录
> 📱系统安装
- 开源硬件选择 (百元级),
> 声明:
- 刷入安卓系统(Android)
本人不会针对Youtube内容进行收费
- 获取root权限(magisk面具)
也不进行账号买卖
- lsposed环境 (xposed外挂模块)
文中内容`仅供参考`
- 谷歌框架
---
> 🚫风控设置
> nomadyt.com
- 机型参数修改
[nomadyt.com](https://nomadyt.com) 是`nomad`+`yt`的缩写组合,意思是以油管为收益的数字游民
- 静态住宅ip (链式代理)
油管适合做为`副业`尝试
- gps定位 (fake location)
申请ypp通过后,就可以设置视频播放广告,产生美金收益
- 权限控制
# 为什么选择Youtube?
- 安卓虚拟机 (多开系统)
> 💻远程控制
- frp内网穿透
- scrcpy (adb远控)
- qscrcpy(群控)
## Youtube运营笔记
> 💰应用场景
> 媒体是普通人的最好的杠杆
- 无人直播
从佛系到认真的运营youtube(油管),也快有1年的时间了
在这里分享一些心得,以及踩过的坑
> 成本低
自媒体是普通人最好的杠杆,只需要1部手机,就可以拍摄vlog,也可以剪辑影片
现在的剪辑软件,不仅在手机端可以方便操作,还结合的ai功能,比如
- 语音翻译/克隆
- 自动生成双语字幕
- 特效/音效
随时随地都可以剪辑+上传
> 赚美金,回报高
同样的视频,在不同的平台上传后,收益汇率不一样
油管结算是美金,换成人民,就有7倍左右的购买力
而如果你居住下三四线城市,或者县城,那么由于生活成本低
每月即使1000$的收益,都可以过的不错了
> 商业模式健康
youtube给创作者的收益,长视频是`55%`,短视频shorts是`45%`
可以说是世界上很慷慨的公司了
仅仅是平台广告,就能够带来巨大的收益
不用去接`业配/商单`,以及自己带货,纯粹的视频不会让人厌恶
---
# 开通YPP(合作伙伴计划)
> 1000粉丝和4000小时观看时长
开通ypp的`基础`门槛是:1000个粉丝和4000小时观看时长
之所以说是基础,是因为最后还要被`审核`
如果人工审核不通过,那么一切努力都是徒劳
> ypp是youtube官方的`合作伙伴计划`
开通之后,无论是直播/短视频shorts还是长视频,都可以自动或者手动投放广告
从而赚取收益
> 快速开通的方式
- 1.直接买号
- 2.刷粉刷量
- 3.制造爆款视频
- 4.直播引流,计算时长
youtube买号的方式,是最快的,极限情况
- 3天左右,就可以上传视频
- 7天就可以完全迁移管理员
这已经是最快的速度了,毕竟ip更换和`品牌频道`交易的规则就是这样
> 在哪里买号?
一个youtube账号的正常报价在2k-3k左右,具体看交易平台,以及托管人出价
在这里本人不做推荐,因为有被骗过
海外网站无序备案,大多是利用wordpress建站+信用卡收款,你根本不知道背后运营的人是谁
而且即便是有信誉的交易
无一例外,都会提醒你:如果交易账号,导致`ypp被收回`,购买者自行承担风险
想想你花了2-3k人民币,结果最后买了一个最终时区没有获利资格的账号
> 刷粉刷量
如果你不想买卖账号,也可以选择刷量的方式,而这个成本,其实也在2k左右
平台会利用第三方国家,提供的`电子农场`,给账号点击关注,和播放,积累粉丝和观看时长
但是一般该国家都是极度落后,且货币价值低
youtube官方,算法会检测到刷量行为,不仅会有清空,还有封号的风险
即便是没有处理,粉丝的质量,也决定的账号的权重,youtube限流,0播放,ypp的rpm单价极低
所以结论是,刷量和买卖账号一样,风险很大,代价很大
唯一的好处,就是快,刷量7天,待数据同步更新要7天,审核1-3天,半个月就能起号
就看你能不能抗住试错成本
> 爆款视频
如果某个视频,击中了youtube官方的爆款算法,那么就会像病毒一样
凭借1视频,快速涨粉,积累播放时长
爆款除了当前的热点事件,也有长期的流量词
一个新人,本身就在摸索运营,所以做好,是要赌概率的
很多都是3-6个月,才勉强达到开通ypp的资格
也以为者,之前没有开通ypp的流量,都是无法变现
> 直播引流
这个是我比较推荐的1个,因为`直播权重高`
所以可以快速积累观看时长
注意,我说的直播,并不是依赖`ffmpeg`或者`OBS`的推流直播
而是手机+实时摄像头
只有真实的场景和互动,youtube的推荐就会极高
# 网络与环境
## 出海赚美金,ip不行,都是白塔
> 普通ip
科学上网,如果只是为了增长眼界,可以使用`搬瓦工`推出的[just m socks](https://justmysocks.net/members/aff.php?aff=12475)
`机场`的坏处就是,ip并不是纯净,也不是独享的
会有很多人共用,一旦你经营社交媒体,就会被限流,甚至封号
那么just m socks值不值的购买呢?-值得,在`速度快,稳定`的前提下,它可以作为`前置代理`
后续会讲讲`前置代理+落地代理`
> 独立ip
但如果是为了`收益`,做自媒体,最基本要使用`独立ip`
独立的意思,就是独享,不与他人共同使用
最简单的方案,就是购买vps服务器,比如
- [vultr](https://www.vultr.com/?ref=8985003)
- [搬瓦工-bandwagonhost](https://bandwagonhost.com/aff.php?aff=25463)
前者支持`支付宝`,且按分钟计算,可随时停用
后者针对国内线路做优化,速度快,稳定
具体的方式就是,开通vps服务器后,使用`xx`一键脚本,安装代理服务
可自行谷歌,不在此推荐
> 静态住宅ip
无论是youtube还是tiktok,社交媒体,都会检查ip
一旦发现是机房ip,而不是住宅ip,就会降权
所以出海赚赚美金的第一步,就是`静态住宅ip`
这里推荐 [proxy-cehap](https://app.proxy-cheap.com/r/bmcMoY),只需要3$/m,就可以拥有可靠的ip地址
但它只提供`http`和socks`2种基本协议
如果直接使用,是没有办法正常科学的上网的,必须使用`链式代理`
也就是把之前提到[just m socks](https://www.vultr.com/?ref=8985003)自部署的代理,作为前置节点
而它作为落地节点
`链式代理`,是成本最低的方案,后续会展开如何操作
> 住宅ip-vps服务器
前面提到了`机场`/`独立ip`/`静态住宅ip`
那么能不能让vps服务器的ip本身就是静态住宅ip呢?
有,但是相比之前的方案,会贵一些,需25$-30$最低
但是能就解决非常核心的应用场景
- 直播推流
- 协议提速
毕竟链式代理,经过中转之后,有2层,会慢太多
## 链式代理如何操作?
> 软件方案
安卓或者电脑,都可以使用支持singbox的客户端,比如
- [nekobox](https://github.com/MatsuriDayo/NekoBoxForAndroid)
新建2个分组, 在其中的分支,设置landProxy(落地节点),即可
> 硬件方案
买一个支持openwrt的开发板,比如nanopi
然后刷固件,包含`passwall2`
使用xray进行节点分流即可,也是设置`落地节点`
---
# 硬件设备与剪辑软件
## 4k高清
> 使用`剪映`进行剪辑
在商业软件中,剪映,已对普通创者者做了优化
不用像专业的剪辑师一样,了解adobe的各种理念和操作
运营youtube的细节是
- 输出成4K高清,AI 补帧
- 生成srt字幕 (支持双语)
当然,开源免费的剪辑软件也有[shotcut](https://github.com/mltframework/shotcut)
---
## 游戏笔记本
> 使用`显卡`渲染
建议入手一个`游戏笔记本`,其最低可以包含
- 8GB显卡
- 1TB固态硬盘
- 2k高清显示屏
这对剪辑视频来说,可以大大节省时间,也避免了硬盘空间的不足的情况
当然,从性价比来说,品牌肯定不是适合电竞的`外星人`,而是`机械革命`之类
> 配件:`视频采集卡`
如果不是拍摄,而是录制屏幕,制作教程类
可以准备1个视频采集卡,最好有hdml`环出`功能
这样可以在硬件间进行录制,而不影响主屏幕
---
# Adsense账号与PIN实体信件
adsense是googel的收益账户,与gmail,youtube等谷歌旗下应用是独立的
所以开通adsense后,再手动与频道进行绑定
其中adsense又分为`site`和`youtube`
查看收益数据的时候.点击`adsense for youube`进入后台
一般油管会在每月6号左右,完成上个月数据统计
打款会在月末
最低打款金额是100$,大多数人,可能没那么快达到
## PIN码接收
> 验证真实地址
谷歌会要求输入PIN code,也就是6位数验证码
才会正式开通adsense收款
在经营youtube频道的时候,你可以给频道设置国家`美国`,它与adsense没有关系
如果在中国国内
可以填写真实的住址,但是谨记:一定在末尾添加`(+86手机号)`
不然邮政的快递员没有办法联系上你,就会退回
当然如果忘记了,也可以联系所在城市的邮政客服,确认是否国际信件
收到PIN码的时候,与所在国家位置相关,国内半个月也能收到
---
# 收款与结汇
> 招商银行储蓄卡
做出海业务,大家其实很关心怎么收款
而youtube的adsense是可以`直接打款`到招商银行卡的外汇
如果需要转换成人民币,在招商app里进行`结汇`就可以了
那么,其他银行卡可以吗?,答案是`可以`
但是建议用招商,毕竟`商业银行`里,它的服务态度和开放性是比较好的
> wise
如果你有`护照`,那么就可以注册[wise]()账号
它会给你开通多个国家的银行账号,就算个户,而是公户,也可以解决外汇收款
但除了护照,还有1个难点是`入金激活`
这个可以自行谷歌相关的教程,一旦激活成功,收款就多一个选择
## 税务证明
如果收款数额较大,银行也会要求出具相关的税务证明
这个也可以在网上搜索相关详细的教程
值得注意的是,adsense打款前,要把美国/新加坡的税务资料进行填写
不然会按最大扣税率进行打款,少了30%的收益,可就很难受喽
---
# 24小时无人直播
> 使用ffmpeg推流
油管有3种视频形式
- 直播live
- 长视频video
- 短视频shorts
直播live,就可以借助ffmpeg进行24小时推流直播,只要准备一段素材循环播放就好了
比如有的频道是`助眠`,有的是`知识科普`
之前在`网络`一章提到过使用vps服务器-[vultr](https://www.vultr.com/?ref=8985003)搭建独立ip
如果仅仅是代理,科学的上网,云端的服务器闲置有些浪费
只需要一行代码,就可以24小时直播
```
ffmpeg -re -stream_loop -1 -i xx.mp4 \
-c:v libx264 -preset veryfast -b:v 4500k -maxrate 4500k -bufsize 9000k \
-c:a aac -b:a 128k -ar 44100 -ac 2 \
-f flv "rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY"
```
> OBS推流直播
同ffmpeg一样,obs也是开源免费,但区别在于它是客户端
需要在图形操作系统使用,比如windows,mac os
由于是GUI界面,只需要再设置里,输入youtube的推流url和密钥
就可以无限直播了
> 安卓开发板
前端提到了ffmpeg和obs,它们适合在PC直播-长视频
那如果直播形式,类似tiktok或者抖音的9:16比例呢?
那么安卓开发板,没有 电池,就不用担心发热爆炸事故
也可以利用xposed的camera模块,替换uvc摄像头的实时视频流
手机短视频直播,油管的`权重更高`
记住,直播的收益不高,但是它的观看时长是记入统计的,可以累积申请ypp合作后半计划
---
# 扩展获利方案
> wordpress建站,接入`adsense广告`
在前面的`开通ypp`一章,已经强调过adsense其实区分了网站和youtube
利用开源的`wordpress建站`,就可以轻松接入谷歌广告
只需要后台安装google插件即可,自动关联,审核
> 宝塔面板
前面针对vps服务器 [vultr](https://www.vultr.com/?ref=8985003) 的使用,提到以下方式
- 独立ip,科学代理脚本
- 24小时ffmpeg命令,推流直播
那么安装`宝塔面板`之后,就可以立马安装`wordpress程序`
- 新建一个wordpress网站
当用户观看视频后,也会查看`简介`里的网址
这样除了视频广告,网站的广告也可以增加一份收益
> 知识产品: 电子书/视频教程
如果你自身的专业领域,有知识底蕴
那么可以总结后,发布到`kindle`或者`udmey`
以电子书和视频教程的形式,教授学习
> sass网站或者ios app
由于AI的普及,编程已经不是程序员的专利
小白也可以借助`vscode`或`cursor`等编辑器,借助内置AI插件,开发产品
比如我就在尝试模仿`nomadlist` (数字游民),进行web开发
域名是 [nomadcna.com](https://nomadcna.com/)
如果有兴趣,可以去搜索创始人的故事,非常有启发性
---
# 展望和结束语
> 为什么我要写这本小书?
如果你去电商或者实体书店,寻找youtube运营的书籍,几乎没有
大多都是tiktok电商/直播带货相关的
而互联网的在线资料,也大多是寥寥无几的博客,中文更是匮乏
在此分享一些经历,供大家参考,避免踩坑
> 不会完结,持续更新
这是初版的目录
后续我会更新内容,比如:
- 如何选题,制作封面?
- 好用的chrome插件
- 搬运/二创/与AIGC
- 等等
内容都是纯手写编辑,没有借助AI,当然也是随性分享
暂时没有做整理
后续会根据读者的反馈,进行梳理,拓展
## 数字游民
youtube运营,作为`副业`,在下班后尝试,也一个很有性价比的选择
一部手机就以足够进行实验
如果你也想成为一个`数字游民`,从自媒体入手,低成本,收益高
我个人也不段尝试成为一个数字游民
目前小册正在编写中, 网址: [nomadro.com](https://nomadro.com/)
有兴趣的可以去阅读
- RPA自动化
- 聊天机器人

View File

@@ -1,3 +1,3 @@
export default {
navigationBarTitleText: 'Youtube运营笔记'
navigationBarTitleText: 'youtube运营'
}

View File

@@ -3,7 +3,7 @@ import Taro from "@tarojs/taro";
import { View, Text, Image, Button } from "@tarojs/components";
import "./index.scss";
import { AtTabBar } from "taro-ui";
import React, { useCallback, useEffect, useState } from "react";
import React, { useCallback, useEffect, useState, useRef } from "react";
import { AtGrid } from "taro-ui";
import { Swiper, SwiperItem } from "@tarojs/components";
import { AtCard } from "taro-ui";
@@ -12,6 +12,11 @@ import { AtButton } from "taro-ui";
import { AtSearchBar } from "taro-ui";
import { Picker } from "@tarojs/components";
import { AtList, AtListItem, AtNavBar, AtTag, AtMessage } from "taro-ui";
import { marked } from "marked";
import infoText from "../book/info.md";
import bookText from "../book/book.md";
import index from "./index.md";
import {
AtModal,
AtModalHeader,
@@ -25,12 +30,18 @@ import { AtIcon } from "taro-ui";
import { VIEW } from "@tarojs/runtime";
import "animate.css";
import touxiang from "../../images/touxiang.png";
import dsx from "../../images/dsx.png";
import youtube2 from "../../images/youtube2.png";
import hackrobot from "../../images/hackrobot.png";
import cat from "../../images/cat.jpg";
import girl from "../../images/girl.jpg";
import emoji from "../../images/emoji.png";
import phone from "../../images/phone.png";
import robot from "../../images/robot.png";
// import robot from "../../images/robot.png";
import nomad from "../../images/nomad.png";
// import book from "../../images/book.png";
import qrcode from "../../images/qrcode.png";
@@ -40,22 +51,26 @@ import bookqr from "../../images/bookqr.jpg";
import loft from "../../images/loft.png";
import AIGC from "../../images/AIGC.png";
import robot192 from "../../images/robot192.png";
import youtubesvg from "../../images/youtube.svg";
import youtube2 from "../../images/yt2.svg";
import youtube3 from "../../images/yt3.svg";
import youtube4 from "../../images/yt4.svg";
import youtube from "../../images/youtube.svg";
import ssh from "../../images/ssh.svg";
import robot from "../../images/robot.svg";
import host from "../../images/host.svg";
import ytGpt from "../../images/ytGpt.png";
import demo from "../../images/demo.svg";
import AI from "../../images/AI.png";
import nomadro from "../../images/nomadro.png";
import phone2 from "../../images/phone2.png";
import code from "../../images/code.svg";
import laptop from "../../images/laptop.svg";
import travel from "../../images/travel.svg";
import group from "../../images/group.svg";
import book from "../../images/book.svg";
import youtubeIco from "../../images/youtube.ico";
import youtube from "../../images/youtube.png";
import youtube192 from "../../images/youtube192.png";
import youtubesvg from "../../images/youtube.svg";
// export default class Index extends Component {
const Index = () => {
const [vip, setvip] = useState(window.localStorage.getItem("vip"));
const [current, setcurrent] = useState(0);
const [openId, setopenId] = useState(null);
const [wxid, setwxid] = useState(null);
@@ -74,7 +89,41 @@ const Index = () => {
const [bookpay, setbookpay] = useState(0);
const [isWeChat, setisWeChat] = useState(false);
const [markText, setmarkText] = useState(vip == 1 ? index : index);
const [headers, setHeaders] = useState([]); // 存储所有 <h1> 的内容
const contentRef = useRef(null); // 用于获取渲染后的 DOM
marked.setOptions({
breaks: true, // 是否回车换行
gfm: true, //使用经批准的 GitHub Flavored Markdown (GFM) 规范
// pedantic: true, //严格模式
// highlight(code:any, lang:any) {
// // 语法高亮
// let val = code;
// if (lang) {
// val = hljs.highlight(lang, code).value;
// } else {
// val = hljs.highlightAuto(code).value;
// }
// return val;
// },
});
useEffect(() => {
// window.localStorage.removeItem('vip')
// window.alert(window.localStorage.getItem("username"));
if (contentRef.current) {
const h1Elements = contentRef.current.querySelectorAll("h1");
const h2Elements = contentRef.current.querySelectorAll("h2");
const h1Texts = Array.from(h1Elements).map((el) => el.textContent);
const h2Texts = Array.from(h2Elements).map((el) => el.textContent);
setHeaders(h1Texts);
// console.log("获取到的 H1 标题:"); // 控制台查看
console.log("获取到的 H1 标题:", h1Texts); // 控制台查看
console.log("获取到的 H2 标题:", h2Texts); // 控制台查看
}
}, [markText]); // 监听 HTML 内容变化
const getOpenidFromUrl = (url) => {
const pattern = /[?&]openid=([^&#]+)/;
const match = url.match(pattern);
@@ -96,18 +145,6 @@ const Index = () => {
}
};
// pwa安装弹窗
// useEffect(() => {
// window.addEventListener("beforeinstallprompt", (event) => {
// event.preventDefault();
// let installPrompt = event;
// // 显示安装按钮
// document.getElementById("install-btn").addEventListener("click", () => {
// installPrompt.prompt();
// });
// });
// }, []);
// 获取openid
const getOpenid = () => {
// let newparams = Taro.getCurrentInstance().router.params;
@@ -199,7 +236,7 @@ const Index = () => {
window.localStorage.removeItem("userInfo");
window.localStorage.removeItem("openid");
window.localStorage.removeItem("wxid");
window.location.href = "http://nomad.hackrobot.cn";
window.location.href = "https://vipgroup.hackrobot.cn";
} else {
// 有完整的用户信息userInfo
setuserInfo(res?.data?.userInfo);
@@ -215,12 +252,12 @@ const Index = () => {
},
complete: function (finy) {
// tg消息通知
tgMessage();
// tgMessage();
},
});
} else {
// tg消息通知
tgMessage();
// tgMessage();
}
return wxid;
};
@@ -273,26 +310,14 @@ const Index = () => {
process.env.TARO_API_API
}/tgMessage?openid=${window.localStorage.getItem("openid")}`, //仅为示例,并非真实的接口地址
// url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址
success: function (res) {
// console.log("访问提醒发送成功");
},
});
};
const sendNtfy = () => {
// fetch("https://ntfy.nomadcna.com/awE5vPZI1LoRvsN1", {
// method: "POST", // PUT works too
// body: "Backup successful 😀",
// });
Taro.request({
method: "POST",
url: `${`https://ntfy.nomadcna.com/awE5vPZI1LoRvsN1`}`,
success: function (res) {
console.log("访问提醒发送成功");
},
});
};
// 入群申请
useEffect(() => {
let inwechat = isWeChatFun();
if (inwechat) {
@@ -317,15 +342,36 @@ const Index = () => {
setopen(value);
};
const createUser = (username, password) => {
Taro.request({
method: "POST",
url: `${process.env.TARO_API_API}/create_user`,
data: {
username: username,
password: password || "123456", // 如果没有传入密码,则使用默认密码
},
header: {
"content-type": "application/json",
},
success: function (res) {
console.log("用户创建结果:", res.data);
window.localStorage.setItem("username", res?.data?.username);
window.localStorage.setItem("password", res?.data?.password);
},
fail: function (err) {
console.error("创建用户失败:", err);
Taro.showToast({
title: "请求失败",
icon: "error",
});
},
});
};
const payh5 = (type, total_fee = 1000) => {
// console.log("111");
Taro.request({
method: "POST",
url: `${process.env.TARO_API_API}/payh5`,
// url: "${process.env.TARO_API_API}/payh5",
// url: "https://pay.hackrobot.cn${process.env.TARO_API_API}/payh5", //仅为示例,并非真实的接口地址
data: {
callback_url: window.location.href,
openid: window.localStorage.getItem("openid"),
@@ -336,8 +382,10 @@ const Index = () => {
"content-type": "application/json", // 默认值
},
success: function (res) {
// payjs数据返回
console.log(res.data);
// window.alert(res.data.jsapi);
// window.alert(res.data.username);
// window.alert(JSON.stringify(res?.data, null, 2));
WeixinJSBridge.invoke(
"getBrandWCPayRequest",
{
@@ -350,11 +398,21 @@ const Index = () => {
// paySign: "2A823C8D47CCF871C6C65A56DC228CF8",
...(res?.data?.jsapi ?? {}),
},
function (res) {
function (reslut) {
// 支付成功
if (res.err_msg == "get_brand_wcpay_request:ok") {
if (reslut.err_msg == "get_brand_wcpay_request:ok") {
// 新增memos用户
// 动态生成用户名,若 username 没传入则使用默认值 "user" + 当前时间戳
const finalUsername = `user${Date.now()}`;
createUser(finalUsername, "123456");
window.localStorage.setItem(type, 1); //订单类型 book/meetup/video/vip
WeixinJSBridge.call("closeWindow");
window.localStorage.setItem("username", finalUsername);
window.localStorage.setItem("password", "123456");
// WeixinJSBridge.call("closeWindow");
} else {
window.alert("支付取消/失败");
// createUser();
}
}
);
@@ -368,139 +426,201 @@ const Index = () => {
});
};
const handleCopyUsername = () => {
Taro.setClipboardData({
data: window.localStorage.getItem("username"), // 复制账号
success: () => {
Taro.showToast({
title: "账号已复制",
icon: "success",
});
},
fail: () => {
Taro.showToast({
title: "复制失败",
icon: "none",
});
},
});
};
const handleCopyPassword = () => {
Taro.setClipboardData({
data: '123456', // 复制密码
success: () => {
Taro.showToast({
title: "密码已复制",
icon: "success",
});
},
fail: () => {
Taro.showToast({
title: "复制失败",
icon: "none",
});
},
});
};
return (
<>
<View className="index">
{/* 在线图书 */}
{/* 参考资料https://readmake.com/ */}
<View className="index_book animate__animated animate__pulse">
<View className="index-book animate__animated animate__pulse">
<View className="index_book_left">
<View className="left_title">Youtube运营笔记</View>
<View className="left_text">数字游民-手册1</View>
{/* <View className="left_title"> 异度世界</View> */}
{/* <View className="left_text">手册3</View> */}
{/* <View className="left_mobile">
<Text>🚀 边旅行转赚钱</Text>
<Text>1⃣ 杠杆:媒体与代码</Text>
<Text>2⃣ 出海:地理套利</Text>
<Text>3⃣ 即时业务:一夜之间上线网站</Text>
<Text>4⃣ homelab:你的全球总部</Text>
<Text>5⃣ 远程团队:分布式协作</Text>
<Text>5⃣ -----------------</Text>
<Text>🔥 一起实践,交流</Text>
</View> */}
{/* 卡片 */}
<View className="card">
<View className="cardItem">
{/* <View className="cardItem">
<View className="cardItem_left">
<Image
className="cardItem_left_img youtubeSvg"
src={youtubesvg}
src={travel}
></Image>
</View>
<View className="cardItem_right">
<View className="cardItem_rightUp">出海赚美金</View>
<View className="cardItem_rightDown">
开通YPP合作伙伴计划
</View>
<View className="cardItem_rightUp">无人直播</View>
<View className="cardItem_rightDown">录播素材/数字人</View>
</View>
</View>
<View className="cardItem">
<View className="cardItem_left">
<Image className="cardItem_left_img" src={book}></Image>
<Image className="cardItem_left_img" src={laptop}></Image>
</View>
<View className="cardItem_right">
<View className="cardItem_rightUp">持续更新</View>
<View className="cardItem_rightDown">在线电子书-免费</View>
<View className="cardItem_rightUp">RPA自动化</View>
<View className="cardItem_rightDown">自动私信/数据分析</View>
</View>
</View>
</View> */}
<View className="cardItem">
<View className="cardItem_left">
<Image className="cardItem_left_img" src={group}></Image>
</View>
<View className="cardItem_right">
<View className="cardItem_rightUp">群聊交流</View>
<View className="cardItem_rightDown">
一个人走得快,一群人走的远
</View>
<View className="cardItem_rightUp">油管交流</View>
<View className="cardItem_rightDown">出海赚美金</View>
</View>
</View>
{/* <View className="cardItem">
<View className="left_mobile">
<Text>🚀 油管踩坑笔记</Text>
<Text>1⃣ YPP: 如何加入合作伙伴计划</Text>
<Text>2⃣ 基础:系统环境与静态住宅ip</Text>
<Text>3⃣ 收款:PIN码验证与外汇结算</Text>
<Text>4⃣ AI:辅助剪辑/生成视频</Text>
<Text>5⃣ -----------------</Text>
<Text>🔥 一起实践,交流</Text>
</View>
</View> */}
</View>
<View
ref={contentRef}
className="markdown-body markVip" // 添加 GitHub Markdown 主题类
dangerouslySetInnerHTML={{
// __html: marked(markText),
__html: marked(vip == 1 ? index : index),
}}
></View>
<View className="left_btn ">
<AtButton
onClick={() => {
try {
sendNtfy();
} catch (err) {
console.error("Error sending notification:", err);
}
goRead();
}}
className="startRead"
type="primary"
size="small"
circle
>
开始阅读
</AtButton>
<View className="left_btn">
{vip != 1 ? (
<AtButton
onClick={() => {
// md页面
// goRead();
if (vip == 1) {
return false;
} else {
if (!!isWeChat) {
//19.8元
payh5("vip", 1980);
} else {
window.location.href = `https://mp.weixin.qq.com/s/16xcMIgxEEGBPY7fanNq0g`;
}
}
}}
className="startRead"
type="primary"
size="small"
circle
>
{`${"加 入 交 流"}`}
</AtButton>
) : (
<View className="vipcode">
<View
onClick={() => {
window.location.href = `https://memos.hackrobot.org`;
}}
>
👉星球地址:{" "}
<span style={{ color: "blue" }}>memos.hackrobot.org</span>
</View>
<View>账号:{window.localStorage.getItem("username")}</View>
<Button onClick={handleCopyUsername}>复制账号</Button>
<View>密码:{"123456"}</View>{" "}
{/* <Button onClick={handleCopyPassword}>复制密码</Button> */}
<View>
添加
<span style={{ color: "green" }}>微信好友: Ella199406</span>
</View>
{/* <View>获取 账号</View> */}
<Image className="vipcodeImg" src={dsx}></Image>
</View>
)}
</View>
</View>
<View className="index_book_img">
<Image
className="book_img"
// style="width: 40%px;height:100%;background: #fff;"
src={ytGpt}
src={youtube2}
// src={phone2}
/>
</View>
</View>
{/* <View className="group">
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
<View className="groupItem"></View>
</View> */}
<View className="svgItems">
<View className="svgItem">
{" "}
<View className="bookImg">
<Image
// style="width: 40%px;height:100%;background: #fff;"
// src={book}
src={youtube2}
src={laptop}
// src={phone2}
/>
<View className="bookImg_text">YPP(合作伙伴计划)</View>
<View className="bookImg_text">无人直播</View>
</View>
<View className="bookImg">
<Image
// style="width: 40%px;height:100%;background: #fff;"
// src={book}
src={travel}
/>
<View className="bookImg_text">RPA自动化</View>
</View>
<View className="bookImg">
<Image
// style="width: 40%px;height:100%;background: #fff;"
// src={book}
src={youtube3}
src={code}
/>
<View className="bookImg_text">💰赚美金</View>
</View>
<View className="bookImg">
<Image
// style="width: 40%px;height:100%;background: #fff;"
// src={book}
src={youtube4}
/>
<View className="bookImg_text">📷自媒体</View>
<View className="bookImg_text">聊天机器人</View>
</View>
</View>
</View>
{/* <View className="footer_div"></View> */}
{/* <View className="footer">
<View>Copyright © 2025 </View>
</View> */}
</View>
{/* <View className="footer_div"></View> */}
</>
);
};

9
src/pages/index/index.md Normal file
View File

@@ -0,0 +1,9 @@
😩 做 YouTube你是不是也遇到过
粉丝涨不动
视频没人看
收益遥遥无期
🔥 来社群吧!
这里有同样在路上的伙伴,互帮互助、实时答疑,不用再孤军奋战。
💡 一起摸清算法脉络,把创作当作事业,而不是孤单的试错。

View File

@@ -1,16 +1,82 @@
// 在 src/index.scss 中引入 GitHub Markdown 主题
@import "github-markdown-css/github-markdown.css";
// marktext的换行处理
.markdown-body p,
.markdown-body blockquote,
.markdown-body ul,
.markdown-body ol,
.markdown-body dl,
.markdown-body table,
.markdown-body pre,
.markdown-body details {
margin-bottom: 10px;
}
.markdown-body li > p {
margin-top: 0px;
}
.markVip {
padding-left: 100px;
padding-right: 100px;
}
.markdown-body p {
font-size: 30px;
}
.book_header_div {
width: 100%;
height: 80px;
}
.book_header {
position: fixed;
top: 0px;
width: 100%;
height: 80px;
// background-color: aquamarine;
// background-color: #f0f5ff;
border-bottom: 2px solid #f0f5ff;
background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.book_header_left {
width: 100px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
color: #69b1ff;
}
.book_header_middle {
flex: 1;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
color: #69b1ff;
}
.book_header_right {
width: 100px;
// background-color: yellow;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
color: #69b1ff;
}
}
.index {
// background-color: #002329;
// width: 100vw;
// height: 100vh;
// padding-top: 80px;
height: 100vh;
// height: 100%;
// padding-left: 100px;
// padding-right: 100px;
display: flex;
flex-direction: column;
// align-items: center;
// justify-content: center;
.index_book {
margin-top: 80px;
// background-color: yellow;
.index-book {
// margin-top: 80px;
// width: 100%;
min-height: 300px;
// padding: 20px;
@@ -22,7 +88,7 @@
// background-color: #f0f5ff;
// background-color: yellow;
.index_book_left {
width: 600px;
min-width: 600px;
min-height: 300px;
display: flex;
flex-direction: column;
@@ -33,13 +99,24 @@
font-size: 50px;
font-weight: 700;
color: #69b1ff;
margin-top: 10px;
}
.left_text {
font-size: 30px;
}
.left_mobile {
margin-top: 20px;
width: 100%;
font-size: 30px;
display: flex;
flex-direction: column;
// align-items: center;
// justify-content: space-around;
// background-color: yellow;
}
.card {
margin-top: 20px;
margin-top: 40px;
display: flex;
flex-direction: column;
align-items: center;
@@ -71,9 +148,9 @@
margin-right: 40px;
.cardItem_left_img {
width: 80px;
height:80px;
height: 80px;
}
.youtubeSvg{
.youtubeSvg {
position: relative;
top: -5px;
}
@@ -106,9 +183,8 @@
// align-items: center;
// justify-content: center;
font-size: 30px;
flex-wrap:wrap ;
flex-wrap: wrap;
color: #262626;
}
}
.left_mobile {
@@ -126,6 +202,9 @@
}
.left_btn {
// position: fixed;
// bottom: -10px;
margin-top: 40px;
// background-color: aqua;
// display: none;
@@ -135,28 +214,9 @@
}
}
.index_book_img {
margin-top: 80px;
width: 400px;
height: 400px;
}
}
.group {
padding: 20px;
// width: 400px;
// height: 400px;
background-color: yellow;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
.groupItem {
width: 80px;
height: 80px;
background-color: aqua;
border-radius: 50%;
margin-right: -20px;
// left: 10px;
// position: relative;
// height: 400px;
}
}
@@ -174,24 +234,39 @@
}
.index_btn {
// background-color: yellow;
// margin-top: 40px;
.startRead {
width: 200px;
}
}
.footer {
position: absolute;
// position: fixed;
bottom: 0px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 60px;
// margin-bottom: 20px;
font-size: 14px;
// background-color: yellow;
}
}
@media (min-width: 1536px) {
.index {
// padding: 100px;
// height: 100vh;
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
// background-color: aqua;
position: relative;
.index_book {
.index-book {
width: 100%;
max-width: 1400px;
@@ -212,10 +287,10 @@
justify-content: space-around;
// background-color: yellow;
// background-color: #69b1ff;
.card{
.left_mobile {
display: none;
}
.left_mobile {
.card {
display: none;
}
.left_btn {
@@ -232,13 +307,14 @@
flex-direction: column;
align-items: center;
justify-content: center;
// height: 100%;
// background-color: yellow;
.book_img {
// margin-bottom: 40px;
}
}
}
.group {
display: none;
}
.svgItems {
// width: 1400px;
width: 100%;
@@ -261,6 +337,8 @@
justify-content: space-around;
// background-color: #69b1ff;
.bookImg {
width: 350px;
height: 350px;
display: flex;
flex-direction: column;
align-items: center;
@@ -281,18 +359,34 @@
}
.footer {
// position: absolute;
position: fixed;
position: absolute;
// position: fixed;
bottom: 0px;
display: flex;
flex-direction: row;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 60px;
// margin-bottom: 20px;
font-size: 14px;
background-color: yellow;
// background-color: yellow;
}
}
}
.footer_div {
width: 100%;
height: 60px;
}
.vipcode {
display: flex;
flex-direction: column;
align-items: center;
font-size: 30px;
.vipcodeImg {
width: 300px;
height: 300px;
}
}

View File

@@ -1,3 +1,3 @@
export default {
navigationBarTitleText: '云手机'
navigationBarTitleText: 'youtube运营'
}

2746
yarn.lock

File diff suppressed because it is too large Load Diff