Skip to content

Commit

Permalink
添加[网易严选]签到脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
chavyleung committed Jan 20, 2020
1 parent d9427f6 commit 8b991a5
Show file tree
Hide file tree
Showing 3 changed files with 257 additions and 0 deletions.
98 changes: 98 additions & 0 deletions yanxuan/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# 网易严选

> 代码已同时兼容 Surge & QuanX, 使用同一份签到脚本即可
> 2020.1.11 QuanX 在`190`版本开始, 获取 Cookie 方式需要从`script-response-body`改为`script-request-header`
## 配置 (Surge)

```properties
[MITM]
*.you.163.com

[Script]
http-request ^https:\/\/m\.you\.163\.com\/xhr\/points\/index\.json script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/yanxuan/yanxuan.cookie.js
cron "10 0 0 * * *" script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/yanxuan/yanxuan.js
```

## 配置 (QuanX)

```properties
[MITM]
*.you.163.com

[rewrite_local]
# 189及以前版本
^https:\/\/m\.you\.163\.com\/xhr\/points\/index\.json url script-response-body yanxuan.cookie.js
# 190及以后版本
^https:\/\/m\.you\.163\.com\/xhr\/points\/index\.json url script-request-header yanxuan.cookie.js



[task_local]
1 0 * * * yanxuan.js
```

## 说明

1. 先把`*.you.163.com`加到`[MITM]`
2. 再配置重写规则:
- Surge: 把两条远程脚本放到`[Script]`
- QuanX: 把`yanxuan.cookie.js``yanxuan.js`传到`On My iPhone - Quantumult X - Scripts` (传到 iCloud 相同目录也可, 注意要打开 quanx 的 iCloud 开关)
3. 打开 APP, 访问下`个人`>`每日签到`(右上角)
4. 系统提示: `获取Cookie: 成功` (如果不提示获取成功, 尝试杀进程再进`个人`>`每日签到`
5. 最后就可以把第 1 条脚本注释掉了

> 第 1 条脚本是用来获取 cookie 的, 用浏览器访问一次获取 cookie 成功后就可以删掉或注释掉了, 但请确保在`登录成功`后再获取 cookie.
> 第 2 条脚本是签到脚本, 每天`00:00:10`执行一次.
## 常见问题

1. 无法写入 Cookie

- 检查 Surge 系统通知权限放开了没
- 如果你用的是 Safari, 请尝试在浏览地址栏`手动输入网址`(不要用复制粘贴)

2. 写入 Cookie 成功, 但签到不成功

- 看看是不是在登录前就写入 Cookie 了
- 如果是,请确保在登录成功后,再尝试写入 Cookie

3. 为什么有时成功有时失败

- 很正常,网络问题,哪怕你是手工签到也可能失败(凌晨签到容易拥堵就容易失败)
- 暂时不考虑代码级的重试机制,但咱有配置级的(暴力美学):

- `Surge`配置:

```properties
# 没有什么是一顿饭解决不了的:
cron "10 0 0 * * *" script-path=xxx.js # 每天00:00:10执行一次
# 如果有,那就两顿:
cron "20 0 0 * * *" script-path=xxx.js # 每天00:00:20执行一次
# 实在不行,三顿也能接受:
cron "30 0 0 * * *" script-path=xxx.js # 每天00:00:30执行一次

# 再粗暴点,直接:
cron "* */60 * * * *" script-path=xxx.js # 每60分执行一次
```

- `QuanX`配置:

```properties
[task_local]
1 0 * * * xxx.js # 每天00:01执行一次
2 0 * * * xxx.js # 每天00:02执行一次
3 0 * * * xxx.js # 每天00:03执行一次

*/60 * * * * xxx.js # 每60分执行一次
```

## 感谢

[@NobyDa](https://github.com/NobyDa)

[@lhie1](https://github.com/lhie1)

[@ConnersHua](https://github.com/ConnersHua)
72 changes: 72 additions & 0 deletions yanxuan/yanxuan.cookie.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
const cookieName = '网易严选'
const cookieKey = 'chavy_cookie_yanxuan'
const tokenKey = 'chavy_token_yanxuan'
const chavy = init()
const cookieVal = $request.headers['Cookie']
if (cookieVal.indexOf('yx_csrf') > 0) {
if (chavy.setdata(cookieVal, cookieKey)) {
chavy.msg(`${cookieName}`, '获取Cookie: 成功', '')
chavy.log(`[${cookieName}] 获取Cookie: 成功, cookie: ${cookieVal}`)
}
} else {
chavy.msg(`${cookieName}`, '获取Cookie: 失败', `请确保在已登录状态下获取Cookie`)
chavy.log(`[${cookieName}] ${subTitle}, cookie: ${cookieVal}`)
}

const queryparam = $request.url.split('?')[1]
if (queryparam) {
const params = {}
for (param of $request.url.split('?')[1].split('&')) {
params[param.split('=')[0]] = param.split('=')[1]
}
const token = JSON.stringify(params)
if (params['csrf_token'] && chavy.setdata(token, tokenKey)) {
chavy.msg(`${cookieName}`, '获取Token: 成功', '')
chavy.log(`[${cookieName}] 获取Token: 成功, token: ${token}`)
}
}

function init() {
isSurge = () => {
return undefined === this.$httpClient ? false : true
}
isQuanX = () => {
return undefined === this.$task ? false : true
}
getdata = (key) => {
if (isSurge()) return $persistentStore.read(key)
if (isQuanX()) return $prefs.valueForKey(key)
}
setdata = (key, val) => {
if (isSurge()) return $persistentStore.write(key, val)
if (isQuanX()) return $prefs.setValueForKey(key, val)
}
msg = (title, subtitle, body) => {
if (isSurge()) $notification.post(title, subtitle, body)
if (isQuanX()) $notify(title, subtitle, body)
}
log = (message) => console.log(message)
get = (url, cb) => {
if (isSurge()) {
$httpClient.get(url, cb)
}
if (isQuanX()) {
url.method = 'GET'
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
}
}
post = (url, cb) => {
if (isSurge()) {
$httpClient.post(url, cb)
}
if (isQuanX()) {
url.method = 'POST'
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
}
}
done = (value = {}) => {
$done(value)
}
return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done }
}
chavy.done()
87 changes: 87 additions & 0 deletions yanxuan/yanxuan.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
const cookieName = '网易严选'
const cookieKey = 'chavy_cookie_yanxuan'
const tokenKey = 'chavy_token_yanxuan'
const chavy = init()
let cookieVal = chavy.getdata(cookieKey)
let tokenVal = chavy.getdata(tokenKey)

sign()

function sign() {
const token = JSON.parse(tokenVal)
let url = { url: `https://m.you.163.com/xhr/points/sign.json?csrf_token=${token.csrf_token}`, headers: { Cookie: cookieVal } }
url.headers['Accept'] = `application/json, text/javascript, */*; q=0.01`
url.headers['Accept-Encoding'] = `gzip, deflate, br`
url.headers['Origin'] = `https://m.you.163.com`
url.headers['Connection'] = `keep-alive`
url.headers['Host'] = `m.you.163.com`
url.headers['Content-Length'] = `0`
url.headers['User-Agent'] = `Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 yanxuan/5.1.2 device-id/d7af0a77d9d88bd33a8ae5b35e6219ad app-chan-id/AppStore trustId/ios_trustid_3353a5577f9c4677bddec1ca7ac490fb`
url.headers['Referer'] = `https://m.you.163.com/points/index`
url.headers['Accept-Language'] = `zh-cn`
url.headers['X-Requested-With'] = `XMLHttpRequest`

chavy.post(url, (error, response, data) => {
chavy.log(`${cookieName}, data: ${data}`)
const result = JSON.parse(data)
const title = `${cookieName}`
let subTitle = ``
let detail = ``
if (result.code == '200') {
subTitle = `签到结果: 成功`
detail = `积分: ${result.data.point}`
} else if (result.code == '400') {
subTitle = `签到结果: 成功 (重复签到)`
detail = `说明: ${result.errorCode}`
} else {
subTitle = `签到失败: 未知`
detail = `编码: ${result.code}, 说明: ${result.errorCode}`
}
chavy.msg(title, subTitle, detail)
})
chavy.done()
}

function init() {
isSurge = () => {
return undefined === this.$httpClient ? false : true
}
isQuanX = () => {
return undefined === this.$task ? false : true
}
getdata = (key) => {
if (isSurge()) return $persistentStore.read(key)
if (isQuanX()) return $prefs.valueForKey(key)
}
setdata = (key, val) => {
if (isSurge()) return $persistentStore.write(key, val)
if (isQuanX()) return $prefs.setValueForKey(key, val)
}
msg = (title, subtitle, body) => {
if (isSurge()) $notification.post(title, subtitle, body)
if (isQuanX()) $notify(title, subtitle, body)
}
log = (message) => console.log(message)
get = (url, cb) => {
if (isSurge()) {
$httpClient.get(url, cb)
}
if (isQuanX()) {
url.method = 'GET'
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
}
}
post = (url, cb) => {
if (isSurge()) {
$httpClient.post(url, cb)
}
if (isQuanX()) {
url.method = 'POST'
$task.fetch(url).then((resp) => cb(null, {}, resp.body))
}
}
done = (value = {}) => {
$done(value)
}
return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done }
}

0 comments on commit 8b991a5

Please sign in to comment.