首页
留言
动态
归档
推荐
音乐
工具
Search
1
Emby公益服-上万部电影电视剧免费看
56,789 阅读
2
openwrt-docker部署lxk0301京东自动签到脚本
12,150 阅读
3
QuantumultX-京东签到撸京东豆
10,464 阅读
4
LXK0301京东签到脚本-自动提交互助码
9,016 阅读
5
微信-域名被封监测以及自动更换被封域名
8,751 阅读
随便写写
科学上网
Web开发
瞎折腾
登录
Search
标签搜索
quantumultx
laravel
openwrt
laravel nova
laradock
telegram
薅羊毛
google adsense
jd_scripts
京东签到
ubuntu
oh-my-zsh
web开发环境
nginx
工具
shadowsocks shadowsocksR
RBAC
权限管理
内网穿透
Python
orzlee
累计撰写
43
篇文章
累计收到
595
条评论
首页
栏目
随便写写
科学上网
Web开发
瞎折腾
页面
留言
动态
归档
推荐
音乐
工具
搜索到
43
篇与
orzlee
的结果
2021-02-08
openwrt-docker部署lxk0301京东自动签到脚本
前言 最近弄了个软路由,J4105/8G/128G SSD,只是用来科学上网太浪费了,内存经常空闲7个多G,CPU 5%左右。 本来在手机上跑lxk0301大佬的京东签到脚本已经很爽了(有兴趣可以阅读我的文章-QuantumultX-京东签到撸京东豆),最近京东有个疯狂的JOY活动,自动看视频、领金币、合成JOY。脚本一旦启动不会停止,8s执行一次,手机上跑不太合适,可能会比较耗电。本想在服务器上弄个docker,想着软路由性能过剩还是折腾下软路由吧。 开撸 推荐科学上网后再折腾,虽然不是必要。 我是用的是eSir高大全,功能比较多,eSir youtube频道有固件讲解视频,包括一些使用教程等。 eSir高大全已经包含了DockerMan,如果没有可以去 DockerMan github看说明安装,当然也可以不使用DockerMan工具,看个人喜好。本片文章是基于DockerMan工具。 开始之前 默认eSir高大全的Overlay分区大小固定,如果硬盘较大其实很多空间都没有使用,可以看eSir说明以及教程OpenWrt扩容Overlay。 eSir推荐docker分区重新分配一个,这样在升级或者恢复出厂设置后不会丢失docker数据,所以在扩容Overlay分区的时候不要把硬盘全部用光,给docker分区多留点。这部分教程可以看eSir-玩转Docker系列视频,第一弹里面有讲到docker分区,视频中使用分区工具diskman,eSir高大全版本在openwrt管理页面 系统 目录下。 配置docker 2021-05-08 LXK0301 jd_docker仓库也被封掉了,最新地址Github jd_docker。 2021-02-20 LXK0301 gitee仓库被大量外链访问封掉了,仓库已被禁止访问,返回403。目前已经套用CDN访问。 大佬telegram脚本更新通知频道JD_fruit Script。 以下是LXK0301大佬telegram bot最新消息: 云端使用仓库自带的docker。更新一下镜像后,然后可继续更新仓库最新脚本。 openwrt docker在 Docker-容器-点击容器名称-升级容器,旧的容器会在名称后面追加_old,删除带有_old的容器,启动新的就好了。 获取京东cookie方法,推荐使用扫码,可以保存cookies 90天。 环境变量说明总汇:jd_scripts docker 环境变量 在opt目录下创建一个目录,存放签到脚本目录,使用shell工具或者WinSCP操作 新建一个docker容器: 配置项 容器名称自定义 Docker 镜像 lxk0301/jd_scripts 始终拉取镜像 √ (每次启动、重启都会拉取最新镜像) 重启策略 Always 环境变量 JD_COOKIE必须,REPO_URL=https://gitee.com/lxk0301/jd_scripts.git 指定更新源,推荐gitee仓库,GitHub总是有人滥用GitHub Action导致作者仓库被封。gitee仓库不存在此问题,相对较稳定。我是用telegram推送签到信息(教程:Telegram通知BOT配置教程),其他环境变量去看jd_scripts docker 环境变量 挂载 具体看使用什么配置,jd_scripts docker 配置说明中举例了几种配置,一般默认挂载出日志文件就好了,当然也可以不挂载命令格式 第一步创建的目录:/scripts/logs,推荐使用绝对路径 点击提交后会回到第一步界面,勾选刚刚创建的容器,点击启动即可。 互助码 在你创建的并且挂载的日志目录下,jd_get_share_code.log、sharecode.log以及其他活动对应的日志中都包含该活动的互助码(如果活动可以互助的话),前两个日志文件会包含多个活动。如果没有想要的活动互助码只能在对应活动脚本日志中找,对应活动脚本(日志文件名与脚本名一致)可以查看脚本列表。 手机用户手动跑一遍脚本或者看看是否有脚本日志,一般会在日志或手动跑脚本的时候输出互助码 使用telegram提交互助码, 有两个BOT: @TuringLabbot @LvanLamCommitCodeBot 进入BOT点击消息输入框右边的斜杠按钮可以查看所有命令,使用/help查看说明,最好看一下,两个bot提交的互助码活动不一样,一个是长期活动,一个是临时活动。切勿频繁提交。BOT在1、8、16、24号0点会清空数据,0点后重新提交自己的互助码,作者服务器资源有限,互助码有上限(目前好像是5500个)。有兴趣可以折腾下:LXK0301京东签到脚本-自动提交互助码 docker容器相关操作命令 docker exec -it jd_scripts /bin/sh -c 'git -C /scripts pull && node /scripts/jd_bean_change.js' 手动拉取仓库最新脚本并且运行jd_bean_change.js脚本 docker exec -it jd_scripts /bin/sh -c 'env' 查看设置的环境变量 docker exec -it jd_scripts /bin/sh -c 'git pull' 手动更新jd_scripts仓库最新脚本 docker exec -it jd_scripts /bin/sh 仅进入容器命令(进入容器后也可以手动运行脚本: node /scripts/jd_bean_change.js) rm -rf logs/*.log 删除logs文件夹里面所有的日志文件(这行命令一般是在进入容器后执行) 结语 使用docker可以解放手机了,docker默认会开启jd_crazy_joy_coin.js脚本。这个docker不怎么耗资源,所以低配置软路由也没有问题,我同时跑了3个账号,除了内存上去了几百M,CPU还是老样子。脚本每天23:50会清空日志,每天会自动拉取最新脚本,所有挂上去后除了更新cookie基本上不用管。 diskman没法编辑环境变量,每次都要重建,在Docker-容器-点击你得容器名称-复制/编辑容器-可以复制一份容器配置文件,REPO_URL=https://xxxx 环境变量会丢失,估计是包含特殊符号,如果需要记得加上,补全信息:容器名称,始终拉取镜像,重启策略,修改cookie后删除原容器, 点击提交,操作麻烦了点,但比重新创建一个要简单。 有时候启动会无限重启,查看docker 容器日志会发现脚本没有执行完。 ... stderr: + expr 16 '%' 8 stderr: + remainder_h=0 可能是脚本BUG,当前时间小时数取余如果为0就会发生此问题,修改系统时间没有用,要修改容器时间才行,还是等待下一个小时在启动吧。
2021年02月08日
12,150 阅读
101 评论
2 点赞
2020-12-26
NeteaseCloudMusicApi +YesPlayMusic +UnblockNeteaseMusic搭建自己的音乐站(解锁网易云无版权音乐)
前言 最近逛论坛,看到一篇文章一台国内的1h1g1m小鸡可以做些什么?来看看我的吧(多图),其中有个项目吸引了我,网易云api及在线音乐播放器。顺腾摸瓜看教程。 可惜,文档比较少,前端知识也不够,折腾了我许久。 必须要有国内服务器,不然UnblockNeteaseMusic没法用的,其他音乐平台都屏蔽了国外IP。可能有部分平台屏蔽国外服务器,但是我没发现!!! 2021-05-09 更新,YesPlayMusic作者这短时间更新了不少代码,但是使用UnblockNeteaseMusic依然非常简单! 思路 NeteaseCloudMusicApi - 网易云音乐 Node.js API service。 YesPlayMusic - 高颜值的第三方网易云播放器 UnblockNeteaseMusic - 解锁网易云音乐客户端变灰歌曲 YesPlayMusic作为客户端请求自己部署的NeteaseCloudMusicApi网易云音乐API服务,这样可以形成一个闭环,前后端齐了,使用没有问题。 但是我们还要解锁网易云没有版权的歌曲。相信很多人都知道网易云没有版权的歌曲可能在其他平台上可以播放,这时候UnblockNeteaseMusic的好处来了,它可以将想听的歌曲在多个指定平台上搜索,然后将找到的歌曲url拼装请求返回。 在服务器端将网易云音乐部分服务域名重定向到UnblockNeteaseMusic服务就可以很完美的解锁大部分歌曲了!目前来说,不论音质的话,Music-YouTube的歌曲是我听过最全的了! 安装 如果部署到国内服务器,那么一台服务器就够了,如果部署在国外服务器,可能需要一台国内服务器,不然搜不到国内歌曲/艺人。歌曲还是能在国外服务器上解锁。 一个个来,不然乱套了。 NeteaseCloudMusicApi 1.1 安装nodejs 这个比较简单,上命令: apt update && apt install -y git curl curl -sL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y nodejs 1.2 克隆NeteaseCloudMusicApi项目: git clone https://github.com/Binaryify/NeteaseCloudMusicApi.git cd NeteaseCloudMusicApi npm install 1.3 配置Nginx: 我使用的是Nginx反向代理: server { listen 80; server_name xxx.xxx.com; ### 记得替换 rewrite ^(.*) https://$server_name$1 permanent; } #跨域配置 map $http_origin $allow_origin { default ""; "~^(https?://[\w]+.domain.com)" $1; ##你的域名,记得替换,*.domain.com,这里可以添加多行域名 } server { listen 443 http2 ssl; ssl_certificate /xxx/xxx.cer; #证书 记得替换 ssl_certificate_key /xxx/xxx.key; #私钥 记得替换 ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; #屏蔽不安全的加密方式 server_name xxx.xxx.com; #域名, 记得替换成自己的 charset utf-8; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_hide_header Access-Control-Allow-Origin; proxy_hide_header Access-Control-Allow-Credentials; proxy_hide_header Access-Control-Allow-Methods; proxy_hide_header Access-Control-Allow-Headers; proxy_pass http://0.0.0.0:3000; ###API端口,修改了下面supervisorctl配置也要同步修改 # 跨域配置 add_header Access-Control-Allow-Origin $allow_origin always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,DELETE,PATCH' always; add_header 'Access-Control-Allow-Headers' 'Token,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,X_Requested_With,If-Modified-Since,Cache-Control,Content-Type' always; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; #浏览日志,关了, 要开自己填写路径 error_log /var/log/nginx/xxx.xxx.xxx-error.log error; #错误日志路径 sendfile off; location ~ /\.ht { deny all; } } 1.4 需要添加一处代码,忽略ssl错误(大概122行左右,其实无所谓,因为是环境变量,但是要加在请求执行之前): nano NeteaseCloudMusicApi/util/request.js ... const settings = { method: method, url: url.replace(/^https:/, 'http:'), //将HTTPS全部转换成HTTP请求,不然一堆502错误 headers: headers, data: queryString.stringify(data), httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), } //添加下面这一行代码 process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; 1.5 配置supervisorctl守护进程: 安装: apt update && apt install -y supervisor 写配置 nano /etc/supervisor/conf.d/music-api.conf 端口3000,如果端口改了记得nginx配置文件也要改 [program:music-api] command=/bin/bash -c 'PORT=3000 HOST=127.0.0.1 /usr/bin/node /var/www/NeteaseCloudMusicApi/app.js' autostart=true autorestart=true user=root numprocs=1 更新配置文件,启动 sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start music-api:* 搞定,看看状态: $ supervisorctl status music-api:* music-api RUNNING pid 3312, uptime 0:57:01 1.6 如果不想用Nginx,那就记得服务器开放3000端口(或者你自己配置的端口, 还是建议使用Nginx)。 YesPlayMusic 以下步骤可以到本地操作,之后把编译的文件传到服务器就好了,当然服务器上操作也没问题。 2.1 安装yarn: curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list apt-get update && apt-get install -y yarn 2.2 安装YesPlayMusic: git clone https://github.com/qier222/YesPlayMusic.git cd YesPlayMusic yarn install cp .env.example .env 2.3 编辑.env环境变量: 用了Nginx填写域名,没有使用Nginx的填写http://服务器外网IP:3000(改了端口记得改) nano .env ... VUE_APP_NETEASE_API_URL=https://xxx.xxx.com VUE_APP_ELECTRON_API_URL=/api VUE_APP_ELECTRON_API_URL_DEV=https://xxx.xxx.com VUE_APP_ENABLE_SENTRY=false DEV_SERVER_PORT=20201 NODE_ENV=production VUE_APP_LASTFM_API_KEY=09c55292403d961aa517ff7f5e8a3d9c VUE_APP_LASTFM_API_SHARED_SECRET=307c9fda32b3904e53654baff215cb67 vue.config.js文件可以修改网页标题版权信息。 src/mian.js可以修改google analytics追踪代码ID。 src/Utils/Player.js 44行 document.title = ${track.name} · ${track.ar[0].name} - YesPlayMusic;这里YesPlayMusic是播放音乐的时候标题尾。 其他 YesPlayMusic 关键词要修改全局代码搜索吧,有点多! 2.4 修改代码,为了后面使用UnblockNeteaseMusic: 文件路径 YesPlayMusic/src/Utils/Player.js。 _getAudioSourceFromNetease(track) { if (isAccountLoggedIn()) { return getMP3(track.id).then(result => { if (!result.data[0]) return null; if (!result.data[0].url) return null; if (result.data[0].freeTrialInfo !== null) return null; // 跳过只能试听的歌曲 const source = result.data[0].url.replace(/^http:/, 'https:'); if (store.state.settings.automaticallyCacheSongs) { cacheTrackSource(track, source, result.data[0].br); } return source; }); } else { //这段代码替换,其实应该能更解耦,不就结了! let url = `https://music.163.com/song/media/outer/url?id=${track.id}`; return getMP3(track.id).then(result => { if (!result.data[0] || !result.data[0].url || result.data[0].freeTrialInfo !== null) { resolve(url); } const source = result.data[0].url.replace(/^http:/, 'https:'); // const source = result.data[0].url; if (store.state.settings.automaticallyCacheSongs) { cacheTrackSource(track, source, result.data[0].br); } return source; }); } } 2.5 编译: yarn run build 2.6 配置Nginx: 此处需要新的域名,不能用NeteaseCloudMusicApi的域名 server { listen 80; server_name xxx.xxx.com; ### 记得替换 rewrite ^(.*) https://$server_name$1 permanent; ### 强制重定向到https } server { listen 443 http2 ssl; ssl_certificate /root/xxx.cer; ### 域名证书 ssl_certificate_key /root/xxx.key; ### 域名证书私钥 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; #屏蔽不安全的加密方式 ssl_prefer_server_ciphers on; server_name xxx.xxx.com; root "/var/www/YesPlayMusic/dist"; #### 如果服务器上编译那就是这个目录,本地编译上传dist目录到服务器,然后填写dist目录地址 index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ =404; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/xxx.xxx.com-error.log error; sendfile off; location ~ /\.ht { deny all; } } 2.7 Tips 其实这样就已经弄好了,只是我在折腾的时候发现了一个更又意思的东西,发现前端技术现在真心酷。 我是在windows上操作的,要先在windows安装Nodejs,yarn,这部分就直接去NodeJS、yarn官网下载吧! 我被electronjs坑惨了,根本不知道electronjs是跨平台桌面平台(相信很多前端都没有接触过这东西),使用electronjs可以编译出windows(MacOS, Linux)客户端,如果这样操作可以省去折腾UnblockNeteaseMusic,因为YesPlayMusic已经集成了。 起初只是看到YesPlayMusic有人提交PR,说是集成了UnblockNeteaseMusic,我就去看源码,发现 .env 中添加一个环境变量 IS_ELECTRON=true 就会开启UnblockNeteaseMusic,操作一番发现依赖electronjs通讯,window.require not a function 这错误让我在网上找了好久,其实是electronjs依赖nodejs,就算解决了 window.require not a function 问题,还是会接着来新问题。 后面发现electronjs不可能编译后通过浏览器使用的,这过程折腾了我一个晚上。 以下操作都是在本地windows系统操作的,可以按上文2-3部操作,NodeJS、yarn官网下载 开搞吧,先到.env中添加IS_ELECTRON=true。 安装electronjsnpm install -g electron 编译:"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint", "electron:build": "vue-cli-service electron:build -mwl -p never", //编译macos, windows, linux三个平台 "electron:build-mac": "vue-cli-service electron:build -m -p never", //编译MacOS "electron:build-win": "vue-cli-service electron:build -w -p never", //编译windows "electron:build-linux": "vue-cli-service electron:build -l -p never", //编译linux "electron:serve": "vue-cli-service electron:serve", //运行服务,没什么用折腾我好久 "electron:buildicon": "electron-icon-builder --input=./build/icons/icon.png --output=build --flatten", "electron:publish": "vue-cli-service electron:build -mwl -p always", "postinstall": "electron-builder install-app-deps", "postuninstall": "electron-builder install-app-deps", "prettier": "npx prettier --write ./src ./script", "netease_api:run": "cd ./netease_api && npm run start", "netease_api:pull": "node script/pull.js", "netease_api:install": "cd ./netease_api && npm install", "netease_api:setup": "npm run netease_api:pull && npm run netease_api:install" }, 以上都是yarn run ...支持的命令,开始编译windows版本: yarn run electron:build-win 编译完了在YesPlayMusic\dist_electron目录下,进入目录,你会看到YesPlayMusic Steup.exe,这是安装程序,YesPlayMusic\dist_electron\win-unpacked里面有已解包程序YesPlayMusic.exe,点击就可以执行。 和网页版一样的效果,不得不说这界面做的真的好看。首页拉到底设置里面有深色模式。 点击右上角x并没有退出,最小化了,如果你再新开一个程序会提示你端口占用报错的。 UnblockNeteaseMusic 3.1 安装UnblockNeteaseMusic 其实也说不上安装,目前有四种方法: npx @nondanee/unblockneteasemusic docker run nondanee/unblockneteasemusic docker-compose up git clone https://github.com/nondanee/UnblockNeteaseMusic.git cd UnblockNeteaseMusic // node app.js //运行 不过暂时不用,下文配置supervisor守护进程 自己选吧,都可以用,前三种要自己生成163.com域名证书。 目前我使用的是替换host全局代理方法,其他方法实在懒得折腾了,真心累。 作者说替换host方法必须要开启80(443)端口,其实也不用(80端口占了就docker也能搞定),nginx反代就好了。 3.2 配置nginx: server{ listen 80; server_name music.163.com *.music.163.com; ##这里就别替换了 location / { proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:3001; ##UnblockNeteaseMusic绑定端口 80 } } server { listen 443 ssl http2; server_name music.163.com *.music.163.com; ssl_certificate /var/www/UnblockNeteaseMusic/server.crt; ##不用换了 ssl_certificate_key /var/www/UnblockNeteaseMusic/server.key; ##不用换了 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_set_header Host $http_host; proxy_pass https://127.0.0.1:3002; ##UnblockNeteaseMusic绑定端口 443 } } 如果是国外服务器(国内服务器请忽略),那么你需要一台国内服务器,这份nginx配置只需要配置在国内服务器就好了,不然听不了歌,全是502错误。 国内外服务器都没有问题,国外只是会出现搜索不到中文歌曲/艺人,大部分都是对应服务器所在国家的歌曲/艺人,可以将解锁服务部署到国内服务器。当然方法有很多种,下面我给出我正在使用的部分,这并不是最简单的方法,因为需要两台服务器部署解锁服务,但是我这样也有优点,国外服务器依然可以自己解锁歌曲,不必全部交给国内服务器,如果服务器线路好延迟低倒是无所谓,不然响应很慢,如果不在意搜索不到国内信息那大可不必折腾国内服务器和修改代码。修改代码如下: // UnblockNeteaseMusic/src/request.js const configure = (method, url, headers, proxy) => { ... if (url.pathname == '/weapi/search/get') { options.hostname = '123.123.123.123' //这里的修改是为了将搜索服务交给自己国内服务器上,这样搜索出来包含很多国内的歌曲或艺人 } return options } 3.3 https反代歌曲URL域名: 此处需要新的域名,不能用NeteaseCloudMusicApi或YesPlayMusic的域名。 server { listen 443; server_name xxx.xxx.com; # 改为你自己的域名 ssl on; ssl_certificate /root/xxx.cer; ## 证书记得换 ssl_certificate_key /root/xxx.xxx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:3001; # 代理到 Unblock 服务地址 } } 3.4 修改hosts文件, 末尾添加,把域名劫持到本机,NeteaseCloudMusicApi请求API就会通过nginx到UnblockNeteaseMusic,让UnblockNeteaseMusic通过其他音乐平台获取相关资源: nano /etc/hosts ... ... 127.0.0.1 music.163.com 127.0.0.1 interface.music.163.com 127.0.0.1 music.126.net 127.0.0.1 interface3.music.163.com 如果是国外服务器(国内服务器请忽略),并且3.2节使用了国内服务器,这里本机地址需要修改成国外服务器地址。因为只有国内才能使用,很多音乐没有国外版权! 最近试了下国外服务器一样可以解锁国内外歌曲(UnblockNeteaseMusic新增了 X-Real-IP 参数解锁海外限制),如果国外服务器和国内服务器之间线路比较好可以直接使用国内服务器,将解锁服务部署到国内服务器就行了,不需要两边折腾!如果线路拉跨,那就部署国内外服务器,国内服务器只部署解锁服务即可,然后按照3.2加粗部分操作即可! 3.5 添加supervisor守护进程: xxx.xxx.xxx用你的服务器ping music.163.com,然后替换掉。这里不使用-f参数指定域名会死循环的,直接爆出http 502错误 -e https://xxx.xxx.com 这个参数是指定歌曲URL输出域名,刚刚第3部配置的域名,网易的域名不会替换,只有网易没版权通过其他音乐平台获取的歌曲URL的才会替换。如果不替换的话其他平台大多只支持http协议,你的网站如果是https,chrome会强制https访问站点下所有资源(外链也不放过),这时候https其他音乐平台又不支持,嗝屁了。所以只能通过这种方式用服务器反向代理了。 nano /etc/supervisor/conf.d/music-unblock.conf [program:music-unblock] command=/usr/bin/node /var/www/UnblockNeteaseMusic/app.js -p 3001:3002 -s -f xxx.xxx.xxx -a 127.0.0.1 -e https://xxx.xxx.com autostart=true autorestart=true user=root numprocs=1 3.6 更新配置文件,启动 sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start music-unblock:* 看状态: $ supervisorctl status music-unblock:* music-unblock RUNNING pid 3373, uptime 2:39:00 搞定,nginx -t看看有错误没有,没错误nginx -s reload,然后打开网站看看。 结语 虽然碰到很多问题,但是确实有意思,感兴趣才有动力去研究。大大小小的坑都趟过去了,还有意外发现electronjs。 看Demo可以访问我刚刚搭建好的站点Music OrzLee,可能有点卡,毕竟UnblockNeteaseMusic要绕回国。然后套了CF,就随便看看吧,主要还是自己搭建个国内站点最好了。
2020年12月26日
2,628 阅读
23 评论
4 点赞
2020-12-24
Vue-videoJS播放m3u8视频
前言 找到一部分M3U8视频源,之前用H5 video 标签播放MP4视频,但是支持视频格式很少,索性换掉算了。 M3U8简单了解 引用维基百科: M3U8是Unicode版本的M3U,用UTF-8编码。"M3U"和"M3U8M3U8"文件都是苹果公司使用的HTTP Live Streaming格式的基础,这种格式可以在iPhone和Macbook等设备播放。 引用知乎: 上述文字定义来自于维基百科。可以看到,m3u8 文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。 HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。 HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。 简单理解,M3U8其实就是视频文件碎片索引URL(类似于播放列表),播放器会解析并且下载这些视频碎片,拼接成一整个视频。MP4格式对HTTP和Flash都比较友好,但是MP4文件头部结果比较复杂,播放过程对网络带宽要求较高,在网络复杂的场景用户体验较差。 Vue集成 集成之前大致了解了下,网上比较多的是vue-video-player和videojs,我选择了后者(之前video标签转过来还是不能跨度太大,免得拉跨)。 这东西让我折腾挺久的,只能怪自己懒,好好的文档不看,到处搜,结果搜到一堆复制粘贴的垃圾文章,也不知道什么年代的了,结果发布日期全是今年的。 官方文档相当简洁,其实非常简单,文档在此tutorial-vue,一目了然。 说说我的情况吧!,官方文档是在mounted方法中初始化播放器,但是我的视频流是动态加载的,这样直接加载会报错: CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) No compatible source was found for this media 因为我的视频地址和视频类型都没有请求,只能在请求完成之后再初始化播放器。 播放器已经封装成组件了,看代码。 安装videojs: npm install --save video.js npm install --save @videojs/http-streaming //这个应该是不需要的,video.js在7.x就已经包含了,报错就还是加上吧,懒得试了 <template> <video ref="video" class="video-js" > <source :src="src" :type="video_type"> </video> </template> import Video from 'video.js' import '@videojs/http-streaming' import 'video.js/dist/video-js.css' //css要加载 export default { name: "playVideo", data: () => { return { player: null, } }, props: { width: { type: Number, default: 0, }, height: { type: Number, default: 0, }, src: { type:String, default: '', }, video_type: { type: String, default: 'video/mp4', } }, watch: { video_type(){ //监听props赋值,初始化播放器 this.initVideo(); } }, beforeDestroy() { //销毁不能少啊!!!!! if (this.player) { this.player.dispose() } }, methods: { pause() { this.$nextTick(function () { // DOM 现在更新了 // `this` 绑定到当前实例 this.$refs.video.pause(); }) }, initVideo() { //初始化视频方法 this.player = Video(this.$refs.video, { //确定播放器是否具有用户可以与之交互的控件。没有控件, //启动视频播放的唯一方法是使用autoplay属性或通过Player API。 controls: true, //自动播放属性,muted:静音播放 autoplay: "muted", //建议浏览器是否应在<video>加载元素后立即开始下载视频数据。 preload: "auto", //设置视频播放器的显示宽度(以像素为单位) width: this.width, //设置视频播放器的显示高度(以像素为单位) height: this.height, //网上很多没有用这个参数,默认获取<video><source src="" type=""/></video> //标签中的 source中的链接和类型,手动指定就可以避免动态获取视频信息的坑 sources: { src: this.src, //视频地址 type: this.video_type //视频类型 } }); } } } 结语 其实分分钟的是,搞了大半天。不过这个项目快一年没碰了,搞起来还有点懵逼。Graphql只用过一次,就是这项目上,Vue也好久没碰了,边熟悉边折腾,真是学无止尽啊。
2020年12月24日
932 阅读
0 评论
0 点赞
2020-12-22
QuantumultX-京东签到撸京东豆
前言 自从有了QuantumultX,各种签到脚本满天飞,调试、抓包都非常方便。京东签到脚本真的多,各种大大小小的签到、活动都做完,一天一百多个京东豆还是很容易的。 开撸 QuantumultX在1.0.17 (build 433) TF版加入了 task-gallery,而且正式版已经更新几个月了。 这东西就像是个脚本库,已经有大佬把脚本集合了,先放上来方便撸友: 2021-02-20 LXK0301 gitee仓库被大量外链访问封掉了,仓库访问已被禁止访问,返回403。目前已经套用CDN访问 大佬telegram脚本更新通知频道JD_fruit Script 以下是LXK0301大佬telegram bot最新消息,CDN节点已经屏蔽中国IP,需要梯子! 下面链接都是CDN,没流量了再说 BoxJs订阅地址:https://jdsharedresourcescdn.azureedge.net/jdresource/lxk0301.boxjs.json Surge的Task&Cookies脚本模块地址: https://jdsharedresourcescdn.azureedge.net/jdresource/lxk0301_Task.sgmodule.sgmodule Loon的Task&Cookies脚本订阅链接: https://jdsharedresourcescdn.azureedge.net/jdresource/lxk0301_LoonTask.conf 圈x: Task脚本订阅链接: https://jdsharedresourcescdn.azureedge.net/jdresource/lxk0301_gallery.json cookie脚本订阅链接: https://jdsharedresourcescdn.azureedge.net/jdresource/llxk0301_cookies.conf Peng-YM:https://gist.githubusercontent.com/Peng-YM/cc2cd6205b305d36544a44ec77129832/raw/gallery.json HotKids:https://raw.githubusercontent.com/HotKids/Rules/master/Quantumult/X/TaskGallery.json blackmatrix7:https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/gallery.json lxk0301 大佬:https://jdsharedresourcescdn.azureedge.net/jdresource/lxk0301_gallery.json 锄禾合集:https://dove.589669.xyz/task2qxgallery?sub=https://raw.githubusercontent.com/ChuheGit/1/main/Surge/Module/Task.sgmodule&img=1 打开QuantumultX,进入设置-构造请求(按红框标记点击): 点击+后输入上面大佬脚本地址,然后想要什么脚本就点击什么脚本,它会自动添加到定时任务中。 京东有些活动脚本不要随便修改执行时间,以免错失良机。 所有京东cookies通用,获取一次即可,保持一个月左右。 添加完脚本就要获取自己京东账号的cookies了,看大佬脚本描述: [rewrite_local] # 获取京东Cookie. # 注意此为远程路径, 低版本用户请自行调整为本地路径. https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js [mitm] hostname = api.m.jd.com 在QuantumultX配置文件中编辑rewrite_local和mitm,加入上文代码。保存后用手机浏览器访问https://bean.m.jd.com,登录(安装京东APP后一键登录,方便快捷),手动签到一次,QuantumultX会提示获取cookies成功,这时大功告成。 有些活动到时间后一次几百京东豆,不亦乐乎。 上面大神们的脚本有些签到哦已经失效了,使用过程签到不成功之类的问题就不要疑惑了,直接放弃就好! 结语 大神太多,脚本都用不过来,各种签到脚本已经很全了,小众的签到只能自己抓包调试了。
2020年12月22日
10,464 阅读
0 评论
3 点赞
2020-12-22
Laravel-关系预加载数量限制
前言 最近开发一个项目,关于用户评论。评论可以被用户再次评论,当然只做了一级限制,没有做太多层级,可以回复某个评论中的特定用户(类似于@功能)。 在输出评论列表中,是应该输出部分评论的回复,但是看似简单,实际情况却相对复杂。 分析 在laravel中查询出两级并不难, 使用预加载可以轻松完成: class Comment extends Model { ... public function comments() { return $this->hasMany($this, 'comment_id'); } ... } Comment::with('comments')->simplePaginate() 当需要限制评论回复的数量时,首先想到的是如下方法: Comment::with( [ 'comments' => function (HasMany $query) { $query->take(5); }, ] )->simplePaginate() 但是返回的模型关系comments被限制小于等5条,并不是每条评论的回复,而是整个查询结果的评论回复。如果第一条评论回复有10条,那么会显示5条,之后其他评论的回复全部为空。 其中的Sql语句是这样: select * from `comments` where `comments`.`comment_id` in (1, 2, ...) limit 5 要实现每条评论显示N条回复并不难,只是回到了N + 1的问题, 查询出列表后再加载关系: $comments = Comment::simplePaginate(); $comments->each(function($comment) { $comment->load( [ 'comments' => function (HasMany $query) { $query->take(5); }, ] ); }); Sql: select * from `comments` where `comments`.`comment_id` in (1) limit 5 select * from `comments` where `comments`.`comment_id` in (2) limit 5 ... 这样确实可以解决问题,但是非常笨。 在laravel-framework的issue中找到了类似问题Eager-loading with a limit on collection...,其中有位开发者通过修改limit和take方法来实现预加载关系数量限制,但是提交PR被laravel作者拒绝,于是封装成扩展eloquent-eager-limit。 我安装后试了下,确实能达到效果,于是看了下源码。作者几乎把所有关系的limit和take方法全部重写,然后封装成Trait,模型中使用该Trait相当于重写了limit和take方法。使用方法和之前一样,但是要注意,一旦使用eloquent-eager-limit的Trait后,该模型就不再有之前关系limit或take的总限制效果了,相信laravel作者拒绝也是因为此原因。 来看看生成的语句: select laravel_table.*, @laravel_row := if(@laravel_partition = `comment_id`, @laravel_row + 1, 1) as laravel_row, @laravel_partition := `comment_id` from (select @laravel_row := 0, @laravel_partition := 0) as laravel_vars, (select * from `comments` where `comments`.`comment_id` in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) order by `comments`.`comment_id` asc) as laravel_table having laravel_row <= 10 order by laravel_row; 从Sql语句看来确实只用两次查询就可以获得结果,比之前load遍历加载方法更优。 来看看最终效果: { "data": [ { "id": 1, "post_id": 2, "comment_id": null, "contents": "contents...", "created_at": "2020-12-21 09:31:26", "comments": [ { "id": 24, "post_id": 2, "comment_id": 1, "contents": "contents....", "created_at": "2020-12-22 10:21:40", ... }, { "id": 18, "post_id": 2, "comment_id": 1, "contents": "contents....", "created_at": "2020-12-22 10:18:10", ... }, ... ], }, { "id": 7, "post_id": 2, "comment_id": null, "contents": "contents....", "created_at": "2020-12-22 09:38:07", "comments": [ { "id": 13, "post_id": 2, "comment_id": 7, "contents": "contents....", "created_at": "2020-12-22 10:11:02", }, { "id": 8, "post_id": 2, "comment_id": 7, "contents": "contents....", "created_at": "2020-12-22 09:59:43", } ... ] }, ... ], ... "status": "success", "code": 200 结语 其实也可以手动写Sql语句,缩成一条语句查询。但是太过于复杂的Sql并不易于维护,而且性能并不是一次复杂查询就一定比两次查询快。损失一点性能提高代码可维护性还是赚的。如果项目用户量较大,就要考虑缓存等其他技术优化了。
2020年12月22日
693 阅读
0 评论
0 点赞
2020-12-18
laradock-xdebug与php版本不兼容
前言 今天掉坑里了,为了添加grpc-php扩展,重新build php-fpm和workspace。过程相当顺利,而且启动docker都没问题,开发过程也没发现(api 调式和开发)。知道访问laravel-admin后台页面,访问半天打不开。HTTP 502错误。 摸索过程 出现502错误开始没在意,以为是早上composer update,太慢直接手动中断了,可能缓存什么的出问题了。 刚开始没在意,直到我尝试php artisan ide-helper:gen (ide-helper开发工具)时出错了 segmentation fault php artisan ide-helper:gen。 这下真有问题了。 尝试访问其他开发站点,登录页没有问题,laravel日志也没有。 查看docker日志 docker-compose logs php-fpm 出现大量日志 看到这行感觉莫名其妙: Illuminate\Contracts\Container\BindingResolutionException: Target [Closure] is not instantiable while building [Encore\Admin\Layout\Content]. in /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php on line。 不可能会出现这种错误啊,查看源码: namespace Encore\Admin\Layout; use ... class Content implements Renderable { ... /** * Content constructor. * * @param Closure|null $callback */ public function __construct(\Closure $callback = null) { if ($callback instanceof Closure) { $callback($this); } } } 构造函数有默认值,而且参数也是个闭包,不可能出现字符串Closure被容器实例化啊。简直一脸懵逼... 想断点调试代码,xdebug也失效了。开始用gdb调试过,发现大量xdebug关键字,想着八成与它脱不了干系。 去laradock看源码,对比本地php-fmp和workspace的Dockerfile文件,虽然没有新版本发布,但是这两文件确实有改动xdebug部分。 php-fpm ########################################################################### # xDebug: ########################################################################### ARG INSTALL_XDEBUG=false RUN if [ ${INSTALL_XDEBUG} = true ]; then \ # Install the xdebug extension if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ pecl install xdebug-2.5.5; \ else \ if [ $(php -r "echo PHP_MINOR_VERSION;") = "0" ]; then \ pecl install xdebug-2.9.0; \ else \ pecl install xdebug-2.9.8; \ fi \ fi && \ docker-php-ext-enable xdebug \ ;fi # Copy xdebug configuration for remote debugging COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /usr/local/etc/php/conf.d/xdebug.ini && \ sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /usr/local/etc/php/conf.d/xdebug.ini && \ sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /usr/local/etc/php/conf.d/xdebug.ini workspace ########################################################################### # xDebug: ########################################################################### USER root ARG INSTALL_XDEBUG=false RUN if [ ${INSTALL_XDEBUG} = true ]; then \ # Install the xdebug extension if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \ pecl install xdebug-2.5.5; \ else \ if [ $(php -r "echo PHP_MAJOR_VERSION;") = "7" ] && [ $(php -r "echo PHP_MINOR_VERSION;") = "0" ]; then \ pecl install xdebug-2.9.0; \ else \ if [ $(php -r "echo PHP_MAJOR_VERSION;") = "7" ] && [ $(php -r "echo PHP_MINOR_VERSION;") = "1" ]; then \ pecl install xdebug-2.9.8; \ else \ if [ $(php -r "echo PHP_MAJOR_VERSION;") = "7" ]; then \ pecl install xdebug-2.9.8; \ else \ #pecl install xdebug; \ echo "xDebug 3 required, not supported."; \ fi \ fi \ fi \ fi && \ echo "zend_extension=xdebug.so" >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-xdebug.ini \ ;fi # ADD for REMOTE debugging COPY ./xdebug.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \ sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \ sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini xdebug版本被限制在2.9.8,我去xdebug官网查看发现最新3.0.1,立马去workspace执行php -v: PHP 7.4.13 (cli) (built: Nov 28 2020 06:24:43) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.13, Copyright (c), by Zend Technologies with Xdebug v3.0.1, Copyright (c) 2002-2020, by Derick Rethans 果然是最新版本,这是laradock问题,将php-fpm和workspace Dockerfile xdebug代码段替换再 build 就能解决了。 结语 xdebug 3.x估计是对应php8,目前开发环境使用PHP7,出现这种莫名其妙的错误真的很难调试。浪费大半天时间,重新build不知道多少遍,总之记住扩展不兼容也会出现各种莫名其妙问题。
2020年12月18日
729 阅读
0 评论
0 点赞
2020-06-23
IOS14-beta-尝鲜
前言 WWDC20 今天凌晨已经召开,与以往不同,这届是录播方式,可能与疫情有关! 整个开发者大会将近两个小时,我只特意关注了IOS14部分。没有那些炸天的新特性,大多数还是一些体验改进。 介绍 ios14描述文件下载 小组件 搜索页面小组件有形状多样化,而且长按还可以直接添加到桌面,添加到桌面会叠加你所使用的小组件,你可以向上或者向下翻动,显示更多。 翻译APP 一直使用google-翻译,IOS14新增了自带的翻译APP。 隐藏APP页面 在IOS14下可以隐藏其他APP页面,只保留主页面,其他被隐藏的app都会集中在APP资源库,也就是最后一页。 长按页面空白处,再点击dock栏上面的小点点就可以根据自己的喜欢隐藏页面了。 APP 资源库 APP资源库包含所有APP,并且会自动归类,大图标是经常使用的APP,而小图标是不常使用的APP,点击小图标会列出该类所有APP。 向下拉或者点击搜索,所有APP会已开头字母或者拼音首写字母排序,这样就方便多了。 来电更友好 来电不再是全屏显示了,可以继续干别的,向上推会缩起来,时间显示位置会有一个小电话的动画效果。锁屏界面还是全屏的。 vedio 画中画 在safari网页中播放的视频可以使用画中画功能,在设置-通用-画中画中可以关闭facetime和视频app返回页面时自动画中画功能。其他APP暂未发现此功能,说不定以后会支持。画中画只能拖放到四个角,不能放在任何你想放的位置。 向左或者向右可以把视频隐藏起来,但是还是在播放。 新增点击手机背部功能 在设置-辅助功能-触控-轻点背面中可以设置,分别为轻点两下和三下,可配置预设功能。 quantumultX 用户可能在wifi下其他APP没有网络 因为quantumultX作为代理,接管了路由,所以要开启本地网络权限。 按照作者的说明添加,并且允许即可。本机IP地址查看已连接wifi中的IP地址填上,如果出现无法链接服务器一般是已经允许,或者换wifi中的网关地址再试。 其实我以上方式都不行,估计是允许了,开机自动启动quantumultX时看到提示错误,重新开关下就好了。 结语 这次IOSBeta版本并没有太多BUG,至少没有发现严重影响使用的BUG。APP情况大多数都OK。不像IOS13Beta刚出来那会,wifi下电话都打不进来,漏接不少电话。虽然这次没有多少BUG,但是也确实没有很惊艳的功能,慢慢等IOS15吧............
2020年06月23日
1,063 阅读
0 评论
0 点赞
2020-06-05
阿里云活动-答题送T恤
前言 阿里云活动,限量 Linux X Hands-on Labs T恤免费领,参与linux实验并答题送T恤!!! 开搞 活动6月1-10号 获取路径: 访问 https://summit.aliyun.com/hol 体验馆-《Linux命令入门》 体验Linux场景,通过10道测试题 拿90分,T恤 Get 点击开始体验,实例创建完成,然后直接结束体验,再点击再次体验,再结束就可以开始做下一个任务了。 每天凌晨刷新200件,上午11点刷新300件好像是这样的,听说8-9号每天1000件。 可以先完成所有任务包括考试,等到刷新T恤后直接领取,领取要填写姓名,手机和收货地址 T恤有码,活动后统一收集! 考试答案 题目都一样,只是顺序可能不同。 1,下面哪个命令可以用于删除文件而无需确认 B A. rm B. rm -f C.del D.remove 2,下面哪个命令可以获取到当前工作目录的绝对路径 B A.passwd B.pwd C.whereis D.whois 3,下面哪条命令可以把f1.tst 复制为f2.txt? C A. cp f1.txt | f2.txt B.cat f1.txt | f2.txt C.cat f1.txt > f2.txt D. copy f1.txt | f1.txt 4,为了让文件的所有者有读(r)和写{w}的权限,而其他用户只能进行只读访问,权限应设置为 C A.566 B.655 C.644 D.744 5,在vim 编辑器中的命令模式下,键入( )可以光标当前所在行下添加一新行 A A.o B.p C.i D.a 6.在ps命令中,哪个参数可以用来 显示所有用户的进程? A A.a B.b C.u D.x 7,如何在文件中查找显示所有以“*”开头的行? D A. find \* file B.wc -l * < file C.grep -n * file D.grep '^\*' file (多选)8,下面哪些命令可以看到文件的大小? ACD (D选项存疑 自行判断) A.wc B.df C.du D.state (多选)9,Linux下用哪些命令可以在管道统计一个文件中单词出现的次数?ABD A.grep B.wc C.find D.awk (多选)10,下面哪些命令可以停止sshd服务? ABD A.ps -ef | grep sshd | xargs kill -9 B.killall sshd C.kill -9 sshd D.pidof sshd |xargs kill -9 结语 赶紧去撸羊毛吧!!!
2020年06月05日
867 阅读
0 评论
0 点赞
2020-05-15
GTA5限免了-7天内领取
前言 《侠盗猎车手5》(Grand Theft Auto V)从昨晚11:00开始免费领取了,昨晚官方站点已爆炸,直接500错误。今天缓解很多,可以正常领取了。活动截止到5月21日。 领取 领取地址 领取时最好不要用代理,如果IP领取次数太多可能会出现您的账户目前无法下载更多的免费游戏。epic对同一IP申请的游戏数量进行了限制(您单独的IP是绝对不会达到这个限制的),加速器可能会使大量用户使用同一IP,造成无法下载更多免费游戏,建议遇到这个问题的玩家尝试更改自己的IP 免费的东西总有很多人批量领取,然后你懂的。风气太差了,哎不想多说。 正在下载,游戏真的大!!!
2020年05月15日
598 阅读
0 评论
0 点赞
2020-05-14
jetbrains 学生包 500个
前言 找到一部分jetbrains学生包领取码,分享给大家。500个学生包(让你爽一年jetbrains全家桶),领完就没了。 使用 登陆你的jetbrains账号,然后拼接链接https://www.jetbrains.com/shop/eform/students/request?code=加上下面的code,在登陆的浏览器打开链接,下面是500个学生包code: a1ys9j11ho0gznptueydc7kmo 1fn11mctn5o3w77cdxwvij5m6 a9pjjx1ommm33sh617xymejqw 70gm6f47o654e42xdt7gi3sw5 8kcz8nk8nrg1ez1fit1fxhejh 71znawiuth942frbm9hxl4z9s 6onm2yttj081k5mgf91ajj859 1u7rmph8e9h79luuwi6avnvqz 575jycq0lsghaxauvgqdyof5l 1z2sicdpclrpasss7w8mezxcd 3inceny3o2q5jvl7gnv9ivvc4 aaw0gdgweac8v4jz6wgtdqbho cxrilafk5w7dwobsrsj98ekoa de1cdyyk5coq6n18l9sg478ix dk5rfrtlbnu8gu32rrrkfz46y 2n2l0jqserhoxnvqp748nh9cc 752sxb43wlv6kpwtrcdmc9oig bbj4kvxlvcsv0957ch58xn8s4 551ofkn5oo1llgbkxxyiuecq5 ezm1em2doh7vcdh21m58sf2vj 22f7yf06b0ldxwqh84qgezoli dvamfusy9mvoqnbxsg15iz2xb 6wdxb6y0bx2deh1ij5blibhuu 88ph0ndl9vcrcoc5qzzv1hefx 8bfcl789ysy4g7vcqt4qix89n egu0rp627hn3pm8r8b4e9abn3 43myqmm80ya1qs4wwl29wkavk 1ir72n12u0818sptofcgx918u 4gui8p7di4h3wf9jngk4metvc cg62hrmqdr62q05ivea3cprhv 2l27ea99qqby8q7wk4iwi4we 65da9zpk5v6qgm5i6lveu5hbi 858qf7psg85n0f9jnziyq0v9d 5qjpiy3j5ch7bj28x7l1op8ew 2dy0uime2wp7b1a2jns4onlob a9eejeco8ella0dyzknnwdfif e9icd3z8xg6fwtr322h3wlozf 2e164sqay2k42je7gxlqzzi11 21k7ar53iqd5m7uf95rqh4rpb 4g1cv00mzb6i19eiaztgiae7g aifpm0qihnmektz7ixbwg2hkb 3rw3ack62cdjxjik3hl14x0jd 49ta0025b7xen7uzseh6hwm4o 5ptf61mvs920kl9424buof3ib 8hnpopzktzk2x9smqetiup1hb flwu756j3eng7t08jj5ba4jo 6izv80ko8ob0ub2swp2kt7hn1 57j0zroy21mvmts3u9jdsdiv7 5996f0mnu313qhi8cs67a7iux 8t2t3y27m2xsyn3qo1ayg1agp edgqnqpeuff432gobfo9yi98q bpqeedqn3g05rdonvfwnx53pg bha7vhm7obl2mitx8mr9ca02u dwsggvft4srp2043erf7lqsxh 1bt9op8mdbe8yvvfk2661p5gw 4eaz7cd8f6eif555z0cxra7o0 8g13tt42kz8xeibz76czqo26q mcxieql6bgz2z64b9y2zyszj 8ynpqwf0zhcwwynqhhfsm72c9 1t70tzll100rwjwytqml3gurt 32fg6el0okwgr9jdlazy78rvv dj6aj2638mase96n0nm1l7f7h 4rkv6xoafvy4oxgodl4z8k466 65pu9fbnsx3cauig826mh92he avuao8jvriardzjyscohgdl5a bvulstsxcvlfyzxsdsa9bglqp 5mmvssxj68t4fom98m76e9q9g tq9h731emxu8bj4ghvxd8ckx 2jkffukbvx39uk9hw8g2dug9q 13y66c3h1dxlxgj9f8u4xinua 71a40maqjsnvgidtihsabshf9 a7ghifeu14xs56bn9tsw32qvf 46d421bv69f25zyy0bo7gvtm2 cds86t50qy0c3vd3c6e86ocva 6ia9ctlr4rpg5necl4c8xuj42 65vbqj9xh3uckay102ohzi6x9 b4t8f5kiqlod3a1gyusfv0hej 210ltg5lt6xva8u4yrvq7b9rm 67itw48x2bermtek4a0wz3akk cc70400dng6mvo416s7kn54ie 636lksxeqdy8pzzrytoupsbhk dw6d69xgpx7s4vlibws74dg9q d7snq55iu52x7u0uofoyhz7mq 7cg94ong6cjnsjn1z5wj0e745 9cvas6eiu6bborb9l7amnedyt vp2n0iskt8ssexrprkxctxkp 4gvpv023bwopk5o6e4m8ofefg 5t36otvgd92v72c2gmpk9x7x3 48ar905nfzooeh65u4d7vrpz6 cjk0udxkidou5r2ly9csl6l9y 7ttt9omwx7unw64cp0cvetufl 44qre7zqh6dylbbcdcos0clyj 172135jehftcije2sf69q36sw 70ou9w1eeetm3f5824pgovdzt 62m3amr2ezo6ci9oh6hc1cuqz 9q98usyypvdopi9hsvg7ta9gn 6jv9p85wwxp0slzbpu5vdqrdj bzy3nk8cq7jdk4zm3k09tjpp6 907a65synhz4clqrnpr5abuok 16evb5eq2c481zapmdhxqu7xt dthzdxkgy39mhr4yxfh1i09u7 42fqa4w37h6stdtco76htj2v0 3wm5uxjcsv7nmps34apsugn42 6tvdsno543rahhbll13ljhkwm 1diymr6kdqd951qct3vsho1m6 b7g6g1b98ibnoa6rh208e4wjs c44cckhqup3cpi537wtnvqn1e 8y0sdjx1kuv5orx2b3y9hs2xr 5e4lk0s87vh79zgaal4ydqc4l 7yr8gx7drzknky3wx14r6npxe zq2o40p57d5jb1f2aqex9fta 2zrrqy06y72gv1z65mpb0zohg bb05yheqk7aus2jotd7xvrj5w eqsggefmxonra8xaz1wa5luz1 41ibj1o17droy698ro9u3mcu0 3zuhxu1od7q8snrdh62gd1qdy 31kmrd3q7so0neu0a3km4zitm b9dbv4fpggxrb7rx75ixbycu6 6qzunx0oy2zb9ldavceh1f6al bhdjpmtcdr8972itslcbirvor emfg4d9w0zvsq536t1wnk03tg b073f115pd45j86bthgu53s8p aslr0ivqmcd9bfb5gl5val7h9 2vvthdvnuj4qe8n7ox0q5es8a 20a0sa8ad8ja3s194pbt4nfgy 1e6qclo1qnzhdbft1b50if6t3 4lx1hwsqcoim2zw0i7u9h42py ejax44s5p0lqypunlmbhypfu bvu8gp95e1419ed1ph59123bn 8ztsxgguf5bgliksqtwxlmuz2 1ccxtf0iqs7wzbrqyvb8matjo aj6rzl56qu8qoknwtp0npgwvx bwtdyggkx5txe72chtvp7s3c ntncswqozls41p4k79wiy4pz 851a3kzpa6lmgaleuslu3t94h cvbr5b5ckv0dp2grpyjye2zec 8naq9rd3gxv0531nbyl88yfm0 5z1qlbq1qk2lj4tae96wb4s72 5099hdcn02lilpp59g3ay9rlt eydrkpq7hfv330yc0768l6u43 6bd2vvw2rvkq39t2bdgaacj5i b7jdg339jcetu3ggalsjjpmu5 avcgx6or0p5dfsl02eqyk4fsz 2fgl1izsodnsxpvemwvrz9dri dudg69lzzcnnijt09c5n571lc 4p672xoulhls3wu7kw0db365w 396pp48igvrjrag34pcou8c6s 6x6u4tbt8ygdphos03bg4wr4v 1q410gvqb716i7xzbuk3tpqif 4ukvfgavggfcqw4fmc9xykj8k kqkqjxfd7qhsik852jb9lmwl 86evjcgsz67scmr3p3pszujge b1383debllopietw07gum02nu 14bf5cj9xvbj0bqtmv7tmtshn 4epzzj2yijx36rp09bk9gocby 4sfqbzy4t7eg7mc622ddj4j6j 4v3bvykjtk4a9igtwqg6crngi 3rkg9fm3p9d6dqazy7mp87ldv 1452o399ulgekroz155mxjv2 mbrum25jqrv4d8rt7y828fes eb1eq48ws6s6727va5e2pqe83 44ae38lft8e9uoostutfeoaf2 8s4ejc7qh6h5g3ked50y0hknc 1dg9cfgz1f32yq1r85ahp9m91 53aj9h12d6cwn9leagt1t1kfx 665smsbk4tyuj6zujjqgbk72j egeg1j2k03vccadjit81w33l3 12pqv962bpwgnj7jjtk67o6vm ex57kvw9ftonbqfg735lrunri 5r2y58tuza8i3i46bzh2yu15e beftz7pxsl419ony8m7lef34b edav9gnyyi3tx0jswknukhe25 59szyzhspjmiaeynyoztwaal5 1k5qpvvc8xuymm9lzkzjbsxf5 anoll8k3sep3lkd5dg8q9uwd eajo5gy1u4tzwza39x1bhrut9 3qi6xdgza4m04jis0k3x8eev2 fn5vuocq3xfpmc61t49dfin4 dm9lxognqpisedi76uuou1jcc 97fe2tfdk0yfd0o42a3n1dl2l cqcl05br4vhcsm2tqv9badxtf 38bltii1m9jym329g93sqpkia 80rqul6ocprxmee2skffe2b6c c0j101805d0gbtg7s4xi8advi 19o8nq2zzu94q8l4i9miet8z8 bnkkfyeykv4t63xfy0wmy352k w0cqsm5twphjxi1la60cw5ga 4bygvwxvywxgxoedggg3hgafz 5cpaic6uxicn7oixfk2ia51ad cvp32bc3vi2kcbzwlbr8addu9 6hcmzzru4wmhtuczc8fwcfa4 dzg301g3uemf4wtzmxw9ttnwt 47r8jr01fz3taldqqpgby8aud 8ayevxq67ess0di9tzli527ag djp93d2zcgbzbzju4u17nx11x 12m5o1s15owzcxz6kopmx4roy 63oar10rccelbmz4w2e1nr3mi 1pbjzi1kmqprkwckfermkjyr8 6y5alezj47cti453w93bxrzk 2fihtyo754w2peoqdn11h13v5 10w52i1h3zrkbha0zwd4yshri 9cy77ofzr97sueuwczic6a2oo 12zlagt3l5gba82hhaqgzj482 3r3xi1jzpsz78iwv9vi0kesbi be5gnh4l2td2d44hhvrfwnwvo bw50nh8ca01gmorp3vw6dajtg ehglyxuwr9dr4twprvqxsbvw4 9w1u1tksxcelv2u6eepm0ql1l dplr9bw2ysjirzzcbpylrt2m9 7cpn3zqpdsup4twonshcyw8rh ekbmzrwbkv0h1hmrgloph1fla cvedj63zzx8yd40qy4ileqjhw 8ybidwxixdnoctnzr2gjrrlbb cciemiizalj6hrb1ntbdr6yq2 crvcyh5zl51tytn6cqtn11h6f e9t41pqy4d8eerh2bhs4wazec d7z53lg5ftlqzumrobq02din 7z3raqetqxgfgs8a6vmlbjpx1 eh635578cs82427u5rwdpmwnz bkpqedgfc9hfhjjc0g5inzs8l 1tywjw1gcjianj4d984rs3uyr 7dcus27vp3wmr3uptjm42kx1s 4pbfvnxuvs56ajxjsr73kxp35 a73nee2zxjmznwt42ercozmeq 94ogie2v6po71yn5azxituin6 ec9vi249qtbuizr153j7sn67h ao7sw7ip4ain6yb7x2otyebi6 c07sskia6brjpg924rfsxl6ja 999x3ecp64ee4z0ehslpoxb2r 34nik9ouvlyhgmihc75jfwz54 alr6s9yl0lwnv7j7o8vy1zbjk 91yo99o3r45epnonea1go66ee bpbyrnr37g0wlprifnixl7x84 7nnprg99lwj155ya4jyax4b27 80nptpf2vua2dj32pmbcq9u4 es8cjagwamdkm1utfzpgr3e5h aa96lnuum088x2zmzi9x95nqh ey485dm2zdpk81axgbitd55vn 4r5aahlxa4ghqhuvkeyyxdsl1 1hnnrjgcxfhwpi4168wb7qc4o 1rm5mieelpumnk9yx3q60j926 7vmz76tiyeh9hkel6dk394vdu 88rfrc1ibnjdknovttezgchm3 c1dhzw40lf0119dwmkl91zo3r ahdnk89nglgxurl5ja6u89xyo 4t8jkmhoet983zh4zfnazicmp 2ssul0lo64uj6rz50ajxg1fmh 40labewa808b4krderzspnrcx 42i78x99sjbrn2nxmrjd6dmul 45m3czoaaz46ldjw9m9n1ywv1 982vq5jzrod3oj3p3fg7d9kmp 4d59taxdtf3ik**uqtjvg0b1 7ch57im09h0ug5nduundd6wwx cn6bqsy4jz5iuxho7rgwpclov eiw0nxverf7wsznyc01dm2rwy 12vy5yok1k7bvhlbeoreqlzxj 2gky2gi8f25h5epythbyi92q0 c0vwwzu8d27r8eca2siqymcca 2a20z477jwwu5pw6zpp8yvxgi 36eo6436fktyn6unem4ar2l0b 925qbaw90v64tikbu5tl6o1be er7hrx64eaqgz13r5cjoh5kde c2677hyvjxcbmd9jf101fl386 3hlzb4b0k7kvemxpfpwao29dw 7vur6n2mz8ynzg3xk85rde1kg 8xm7sd2puv8pt7w0gzjm6883n aa3n7br1qbl78xgkl887oy80 1duucdri7oip1t29txwzgdssn eqpvgd501vxkf25bp0gyb4x5h 16suyms7ws89r3y2uqnv76vkj a83v66klg2c8fokpia99gg4ig 61vgll9osdqja0z5qhx1rlkse 1dh5m850luq788nv5lvjvui7w bch9hm9zx6n1lu5i6r2o5omba bl5jffhr7ytok9sn8f9gt2voh 8frhkt5vv3tuncmbjgfckx5zu 17ekeuw002hbeorl4e61uagza 8b34h8l88xuafnz05fh1bq79x d1e3z4eo9k1nzlkcd9edmhh9l 7bgbwtq0vujmyq29o6k5i8o4g 4glyhu0ffetmwa62nj4h1d9x9 31956p2mowvubzw3cvyhqjzi0 a32e0nahgqulrricarotsigra c5rnlzbn9vatd7ak3rx2lg72y 4q3s3q5i6p6ya0ckp3slubxgc dvzfeprnqug1zq6e2wol4xsy0 a58a6q7hm8jragcyl0c092zal c44f1khvcq5lp0tztg4wm7ea2 c3t4lmiimpd60l6hpp3jgdkqg cgwyazq7yvlqkssscs6awlv3u 8zruj1y8o4a2vlygap13gk4et 8iwhqnzczjbsq0c0999j1s8wh 5vigkqigbipffd6418gnt80gd ahotsny4ykdhmv3rhilqb8k6h dioxi6rk8ozmeyc7wryvteszv 7x0qbej4xjb580perumj9nlcj 9lxibxvvcx34gzwxyosnmhj5n 4bi5dxwiwctv5xjxqok1n3x09 9uhjjolej9fqiph12xyp5e00p c4j0wz3ixdo313r2ffco8srbe 1h987lxm1r1w6pr3yc0gsz3ip ds3t2t5kz2lc82zephf41c3b3 bibzbsnryc59rf0q3vdydj63x egjs0obnv1h8gee26fanvxw8b f1yo9d482l4a85m9kupm3emht 3pnj2xxqbdbf10sbll03x6wve afvamwfwmscoobt6gf0ovz5jm f14s9nq7lay90c8z959dcnty 1s5i3wg3i7n043qkzwer1by3a 4c8ejvcc1wqbikri8oeuaqysb co338b66qjivrptbepsz0c08m 7mldkuzr8vkrl3rk43441zg16 3sd02hjrcwjxl2xusydbx5vc1 31i47lnyaeu6wgypheqo3pwzd 5kishche3dwgrh4boutnz3d8s 2gv1tf4y0c16gdwmjwvfnpmew 49velndurayyspfuoy6cncrlq 30vhhi5fu8avf455qg95ezsok aaxdqive0unbnwoiy11fmhx6o 4t91ht0y5bmwyynmz5qhipnx 56u7bgbla0x32w0nfu7t4jv8z 9shhi9d4dgqkkrsjwqkladlqw duo7swzxu60vhnydjuie6vtbb 7akgfn8xkan3lcwayz8o141wo 3ug2pfdwicn905rwnnj0opepl 17i5xv2w7625d2p9r1ephlzgl 3cf1ruslqa7lt7mblpt5t2by0 1uaxuof6tujsnakrrqhv4gc6k 72hs3972da0cigcidfedbxdnw a9w2nuiloof59muuiacuvhe4b 6vk28kwma0b4d4edz41zqnksz 8i4b3v4k3vm67rj1u31iwicq8 eyp9m2ukg3541i69ktczg8bxi 1s29npl30faal3sx1g1rud9xo byts3bi0ashd40f8qihug2mfr efw4zpje3s65h7l7k0yv4rdii eo4t4aa9efe9p3g3dwkk12e0i 4mzqifwbdcaai3w1obcip27c1 ebnkecqgr9j7j4ktpq49961wf 3unjqfrfv5br6lqkw60xkukfa 5hfgkqb5eyzearg5h9fl3lqcb 4h0o6ta6en78osxcfp4r8qwma e0etx1b4q486gl485v0atb1uh adh01zyf08ia4tmpgiumi5fm5 1yjrzu3d0xxdnpinlob9rbc1l 66d1u2rl8pss6g4k1l8sb61m3 54t9snxzrysvphxa8fsfkh78a 8vjucis05k9j9knglgkdplfst 2236dyoequfn3klqkw7iu7xn9 8vsa0ta2airv7gtpfuhcrsb1 bjnrgmbc9xpp7r8oqe0rl863n 4xgvrca0zceeal2i91lwcyy96 oqydeeo1wx9w0h1mbvx1day1 7xy91bu21nxz172qrhgrn01rr 6tmle7x2o66obc75fl7y3awct 1caks9vr22btb470t20qyrjb3 7uh5jedeyblqamlnaxjqcnxzn a8lb4fztr1g52zl8xg2hj2alz c3xbtuh1rhbso3dx51h0lm2n 9ifk5bvct2trktyeo88coqbv 4ok5pixbffdyj9f900li5d07m 961terh0e8ipyueleniuslto3 7mdz77yx3tir86nc8xbnviy1u cmtdswut3bk6cn8sz2vkkb1ai bcgpn8cbycf9tkqhkv6y9yn0v 3ab5ni18y5bd8zdr72foiuvn5 2d9mp9jrbc93ttd7aph8ra32h 8lrslvsiygpssre08hz31uoid 6lwjv7ky8ht08374oe8es94ku bn1q83iz9tgduh1pslr82ojjc ab8pwz8w3ndlbkcg5q1tvypw4 c51rkuy2735o10m27515sash9 3c9vmqgn2uvnmatiqem4sbp22 d5uoykfcqfrjabmxp5oe3nujk 4xdbhrbixxpm8rsyilo49alga 4wmj46odsqrsbga1lzpghee8k 6zc9fcazrm3cu72z8z7trxxqn 1gu1ad88k4ali8td7qh5u8uuz azjeu2t9i6unuoeqcvx1v2li9 9axe8rv1ggjgzk3f3bmx07c88 bhkyyjwc33bvqautu41c7tplr ucmf8gpr1xkyqsdmbvdv9ulu 3rsgvmniutsly1fmuh5wo8nmu bkl8lpx711o8h0px4y13edb9h 4swvzmfrldcodersgy5j3e2xv c27aho4r9qdy9ecmnb4ja3nxz dnnnkw4svn1iele4nq1titmd9 42rjmab18tq5he1e2mvlc3mr5 d5fl67b04rsuxssl0awsb10q8 czeydcwmewr6xf4q8xmmjjdl5 dgyrmwqdcrds55feg62fjz96e gxfmtcdszg787b3y3t8xqqj3 327fg7wudceo7nkign6fbhfsy 5zwbw64swzits0z3xz0duk8y8 1ri8t74f797nzy75dmd4jl06s 80kmm7xia0y1frx6qfufvqw3w uv3m4nje8gyero8iidhghy33 2fdn60h8qq4n6dfm79ffji1wt 4cm1jpzqk4ydgsg5xodypdkfj ejpsd6davj2di1irvvtgrwyej 13w4o8046ev5i794zkpjwmv0u 3etqvhaxkthhhov4tdpkdg34j ecdv9lg5fq74a6ppkk1kgw05m u3i3pmahrv9a5eble2g7m6ku 9crmllkoomdjqne9u1umfe1e2 cpcocbpuect7t4i5tyt3swrfx 640el5d6u4mzk7zi2et0etmtv dc0dc7gqz5rxfqwlrhkx1uz9j 77re3oqv9jygowbe51nzr2ime 296zgefacz2ctae4ggy6im5ge vkjjfty7q71knjvd108ifbf0 6otvuxc2gkaj2z7abjq3eg6wp 9wwj7acfleqb08r5tp3g0z4k baac45w53i6fyu8jdoccop7k5 5fcprf3apbvv29i5w9ah0xdna 3qzkj3pwgp5fagb379t6p1rc2 chpbhihfkaposwpvwh4o44nqi 7sfwmcev6utmom3pkjagnb30s 4zigt23edivik37xq06ztpgph 541q14oly9b9s97a33vthz274 3svhdavtlma9xz0ag5flzeq64 d8sc6bo0mf9jcya9gl9qggz79 asg6yxxk7ozlqza7s04vfo456 av5xy88kwrdo3orvnybzhdiq9 a5zxptqj5qhcu32rtb16meem0 ehot8e1k7uaa0ybv5zhyzi8uo 7mdit3dkxb3xmr015dph7ubk8 30chg9fjlzmeiyb3rhfhd0rct 5q0y0c4y2eh6an51ys4k8vf2d 1vviccpxltp0iy7xjm2dmyo81 17ad429ogoqgplrwitqp5n0uo 3bxct227tyoapn7zg6dhygke3 12zchcgtj6hwupe8ug5odg207 e674df6mytv50vp0y1ty54hb6 b4rntonleum4jcen5vbuhob5b 4shtodz2g4oy5jv0l3113erpo djpuiawhg5erjm5wdzm7144nq 8fek5rtcmw9f8cijsuwi8c8lx 2hgmz0naaxx49yvc9sdqftqqj 4zk2lkfylyg95m1vgdhqhv1xf bs1ix4ifg54flbx2ep20kg9bt 27omr37rjs2wmd528spluep2i 44jow559auwkw7f31ymiia9z0 cgmokrwre2dp7567gde3hmz0b 4wpr027bvo6rmlcw99t5xifmv 72n988hdv3avwq5p1w4sploya 3b1l9nm8p11cliry9atxpslaq 4wbqp5n1dxd400lzwj5027fqb a8f8l5b0fdqzea86b5pejk4r4 7xmsgdptim5rzv659uo3u1soy 1ut35s8n3gch3s2u8n92po9xa 62gau6g56l4tk0z9kvradrj3d ckrtaslxjos9na3mwq7m46twb 1c9u1caw1ujchllkveq2oggm0 2i9horgp2hw9ywqm3xr8p4xlw 1hqq0pponbhkr1ced6wiiwstx 957k81updxije0zdm2m4p79rb dvdhbiusuhl7g5i5zfshv7v1f 26b8sr3ufn0n91dpixvql9prd 9ungr2hzx1hjoyykja1m9bkq2 3z5bk43oyn1pi02txxc76d7vh 6int508q42sz8l0elb74ocmlc 83a1m7kz3v8uw2m4j2gy3xwkl 6tqpkrnweda0m1kq0yn3n2wbj a4a83l411ffw3bt1hfnrurzup aufetm82g2el984pdrwq4vvlc 2gpfzy3ava40rvvdvd6cg1q8c e6ccyrsu5j1sa70qgo00fvl8x 1cu8cik5q22uhjii9zt6qvfqh 5g5pnn1r2t4ck3oz5p23ialyd e0xby9sknm28cb4p9dqcgk98h 2h90h8yn2s3k5aifm4quu69x3 71v6zldr2is8qyv8jvg0kynj8 8d6vtz9i9xw8jjlv02u0ueys0 7tsjqcbxu209qqg3bsz5loy4n 36dk4h8xp5uj6yw7hz6uxrm1o exnfs8e6y2jj5xa8w980wlvlc 2keyfnsso3g5v14lm12x0elec dbvfu3ud577r4jfwlj320wwb0 95ogfluh1izz0hqdtn24pjfq0 cqgyaydiunyr20ycd0bekkj5o 6xe7m8w8qsht5llhvmhzioydp 6b46ghava2q4oxbjwwxapi1xt 7dnbcgig61md966vsxwkr7zs6 dgci7uiae3gyv4qeiem0ary87 dwu36p3sx66uv9goc6a5z6fix 2dc7r4yqjpxr3w51jm25uu0xi 5y6er5gz31jia4wl6x12dz0q9 2x067vvk9n4xsayk4p849fn1w 6jiln85xesx3nmufzvnbc92yx 4hz7ontepmqvkrkrfllekt3ix otx7omf73czm2q8w4idmrygq 5a1fbz5axqo98yxuifnef240t 3pslpvafjxr0hf02r9xg3nskl 5xxkq6bjqk385gs2e8vmf0z61 9smokkesa5jpysb7u8jbgw3rq cmo8i802p8fa6162x38txdxlr 33pzs6gfsth9p5kma5x7dvo2a e4vxudaxxq499ngi7e0ue80a0 4ocrx9k7r4fmmhgu9b9snb7ax
2020年05月14日
2,639 阅读
2 评论
0 点赞
1
2
3
...
5