Skip to content
This repository has been archived by the owner on Apr 16, 2024. It is now read-only.

[建议] 添加缓存机制和 eslint #77

Closed
u3u opened this issue Jul 21, 2017 · 10 comments
Closed

[建议] 添加缓存机制和 eslint #77

u3u opened this issue Jul 21, 2017 · 10 comments

Comments

@u3u
Copy link

u3u commented Jul 21, 2017

之前因为太年轻频繁调用接口导致服务器 IP 被网易云永久拉黑
不光接口地址 只要是 music.163.com 域的资源 访问均不返回任何数据 直到超时
目前只能靠几个代理 IP 苟活了 每次请求随机拿一个代理 并加上了缓存机制 通过配置文件配置缓存时间

缓存是根据 [接口的地址 + 请求参数保存的] 也就是短时间内请求相同的接口优先读取缓存中的数据
这样能减少访问网易云接口的次数 并且还能提高响应速度 有效防止 IP 被封

为了让请求更像真实用户访问而不是机器 建议 userAgent 请求头也随机变化

ssh

目前收集的各个终端的 UA

[
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
  "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36",
  "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36",
  "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89;GameHelper",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4",
  "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:46.0) Gecko/20100101 Firefox/46.0",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0",
  "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
  "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
  "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
  "Mozilla/5.0 (Windows NT 6.3; Win64, x64; Trident/7.0; rv:11.0) like Gecko",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586",
  "Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1"
]

不直接提 PR 的原因是当时部署的时候偷懒直接下载的 zip 没有 fork
其次一个原因是我是我还不怎么会 Node 只写过一些简单的爬虫脚本
我目前用的是 node-cache 仅仅是内存缓存 重启后缓存就丢失了

还有一个是我有代码强迫症 没有 eslint 看着很不舒服
我本地代码全部使用标准规范配置 eslint-config-standard 修复了 冲突可能比较多 (,,•́ . •̀,,)

@u3u
Copy link
Author

u3u commented Jul 21, 2017

忘了说了 很感谢作者 辛苦了qwq

@u3u
Copy link
Author

u3u commented Jul 21, 2017

还有一个问题是缓存时间不宜设置太久
因为音乐的播放地址过一段时间会失效会返回403
目前不清楚是多少分钟失效 我缓存设置了10分钟

或者也可以在获取音频URL接口的时候请求参数带上时间戳

@Binaryify
Copy link
Owner

@u3u
感谢反馈👍,周末看看有没有时间优化下

@SlowSoulWen
Copy link

按照楼主的建议做了代理IP和缓存机制,现在的问题是第一次请求数据有时候需要等待很长时间,不知道楼主有没有这种情况,想问下有什么好的解决方法吗?

@Binaryify
Copy link
Owner

缓存的话有什么推荐写法吗

@u3u
Copy link
Author

u3u commented Aug 17, 2017

@Binaryify

我是这么写的 在获取到数据之后通过当前 [请求地址 + 请求参数] 作为缓存的 key
这样在缓存时间内访问同一个接口相同参数的时候去读取最后一次获取的数据 缓存的时间通过配置文件读取
并且额外允许传一个 timestamp 时间戳参数 用来控制强制清除缓存

@u3u
Copy link
Author

u3u commented Aug 17, 2017

@SlowSoulWen
第一次请求慢是代理的问题吧

@u3u
Copy link
Author

u3u commented Aug 17, 2017

突然发现 IP 并没有永久拉黑 不过至少也有一周以上的时间了
目前我去掉代理使用缓存也没有出现被封的情况了

@Binaryify
Copy link
Owner

@u3u
我现在加了一个 https://github.com/kwhitley/apicache/ 中间件

@u3u
Copy link
Author

u3u commented Aug 17, 2017

@Binaryify
赞!看起来就比我的优雅多了!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants