Git Product home page Git Product logo

luci-app-unblockneteasemusic's Introduction

项目简介

这是一个用于解除网易云音乐播放限制的 OpenWrt 插件,完整支持 播放 / 下载 无版权 / 收费 歌曲
原理为通过获取其他平台的音乐播放链接,替换网易云音乐内 无版权 / 收费 歌曲链接

FOSSA Status

功能说明

  1. 支持自定义音源选择,一般设置默认即可;如需高音质音乐,推荐选择“酷我”或“咪咕”
  2. 支持使用 IPset / Hosts 自动劫持相关请求,客户端无需设置代理即可使用
  3. 支持 HTTPS 劫持,客户端信任证书后即可正常使用
  4. 支持将服务公开至公网(默认监听局域网),支持开启严格模式
  5. 支持设定代理,支持指定网易云音乐服务器 IP,支持设定 EndPoint
  6. 支持手动/自动更新 Core,确保插件正常运作
  7. 支持设定 JOOX/Migu/QQ Cookie / Youtube API,以正常使用相关音源
  8. 支持无损音质(目前支持 酷狗、酷我、咪咕、pyncmd、QQ 音源)

编译

    #进入 OpenWrt 源码 package 目录
    cd package
    #克隆插件源码
    git clone https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic.git
    #返回上一层目录
    cd ..
    #配置
    make menuconfig
    #在 luci -> application 选中插件,开始编译
    make package/luci-app-unblockneteasemusic/compile V=s

使用方法

  • 路由器插件配置

  1. 在路由器 LuCI 界面“服务”选项中找到“解除网易云音乐播放限制”
  2. 勾选“启用本插件”
  3. “音源接口”选择“默认”(高音质音源推荐选择“酷我”或“咪咕”)
  4. 点击“保存&应用”
  • 现在您局域网下的所有设备,(一般情况下)无需任何设置即可自动解除网易云音乐播放限制
  • 特别说明
  1. 首次使用本插件时,将会在后台下载核心程序,故启动时间可能会稍微长一点
  2. 如需使用网页端,请额外安装 Tampermonkey 插件:NeteaseMusic UI Unlocker
  3. 推荐在客户端信任 UnblockNeteaseMusic 证书,以便 HTTPS 通讯(若您不放心,也可以自行签发证书

效果图

LuCI 界面

Image text Image text

UWP 网易云音乐客户端

Image text

鸣谢

UnblockNeteaseMusic的开发者:nondaneepan934121715173329
luci-app-unblockmusic的开发者:maxlicheng
luci-app-unblockmusic(二次修改)的开发者:Lean
IPSet 劫持方式指导:恩山 692049#125 楼 rufengsuixing binsee
Hosts劫持方式指导:UnblockNeteaseMusic 云音乐安卓又搞事啦
核心程序版本检测方法指导:vernesong

协议

本项目使用 GPL-3.0-only 协议授权
在遵循此协议的前提下,你可以自由修改和分发

FOSSA Status

luci-app-unblockneteasemusic's People

Contributors

1715173329 avatar beginner-go avatar fossabot avatar hxhwing0522 avatar msylgj avatar qiusimons avatar realkiro avatar saxon-sun avatar uynhi avatar zhangguanzhang avatar zxlhhyccc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

luci-app-unblockneteasemusic's Issues

LEDE 2.35无法正常启动

手动在ssh中启动提示 out of range

上次安装很正常,今天重置LEDE后重装就出现这个,不知问题出哪里了
另一个问题安装后不能正常获得luci权限,发现获取权限文件不能正常安装进对应目录,
手动拷贝进去后可以正常获取权限(包括上次安装也是手动拷贝的)

v2.8-3 更新后 大雕 openwrt 中的bug

更新了新版之后 启用/禁用插件 插件状态不会变化
(启用>提交后 停止插件不会启动/停用>启提交后 运行的插件不会停止)
要重启路由才生效

运行出错!

events.js:288
throw er; // Unhandled 'error' event
^

Error: getaddrinfo EAI_AGAIN 192.168.88.1/24
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26)
Emitted 'error' event on Server instance at:
at GetAddrInfoReqWrap.doListen [as callback] (net.js:1493:12)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:17) {
errno: 'EAI_AGAIN',
code: 'EAI_AGAIN',
syscall: 'getaddrinfo',
hostname: '192.168.88.1/24'
}

ipk很小,请问依赖包大概有多大?

我flash有16m的路由器上不了这款插件,每次编译固件总出不来,因为超了上限。我想问一下,该插件的依赖有多大?我好空出一定空间来安装。

打开"部署到公网"和"严格模式"后防火墙重启会卡死

重启第一次防火墙可以
root@ImmortalWrt:~# service firewall restart
Warning: Section @defaults[0] requires unavailable target extension FLOWOFFLOAD, disabling
Warning: Section @defaults[0] requires unavailable target extension FLOWOFFLOAD, disabling

  • Flushing IPv4 filter table
  • Flushing IPv4 nat table
  • Flushing IPv4 mangle table
  • Flushing IPv4 raw table
  • Flushing IPv6 filter table
  • Flushing IPv6 nat table
  • Flushing IPv6 mangle table
  • Flushing conntrack table ...
  • Populating IPv4 filter table
    • Rule 'Allow-DHCP-Renew'
    • Rule 'Allow-Ping'
    • Rule 'Allow-IGMP'
    • Rule 'Allow-IPSec-ESP'
    • Rule 'Allow-ISAKMP'
    • Rule 'adblock'
    • Forward 'lan' -> 'wan'
    • Zone 'lan'
    • Zone 'wan'
  • Populating IPv4 nat table
    • Zone 'lan'
    • Zone 'wan'
      Warning: wan will enable FULLCONE-NAT
  • Populating IPv4 mangle table
    • Zone 'lan'
    • Zone 'wan'
  • Populating IPv4 raw table
    • Zone 'lan'
      • Using automatic conntrack helper attachment
    • Zone 'wan'
  • Populating IPv6 filter table
    • Rule 'Allow-DHCPv6'
    • Rule 'Allow-MLD'
    • Rule 'Allow-ICMPv6-Input'
    • Rule 'Allow-ICMPv6-Forward'
    • Rule 'Allow-IPSec-ESP'
    • Rule 'Allow-ISAKMP'
    • Rule 'adblock'
    • Forward 'lan' -> 'wan'
    • Zone 'lan'
    • Zone 'wan'
  • Populating IPv6 nat table
    Warning: fw3_ipt_rule_append(): Can't find target 'prerouting_lan_rule'
    Warning: fw3_ipt_rule_append(): Can't find target 'postrouting_lan_rule'
    Warning: fw3_ipt_rule_append(): Can't find target 'prerouting_wan_rule'
    Warning: fw3_ipt_rule_append(): Can't find target 'postrouting_wan_rule'
    Warning: fw3_ipt_rule_append(): Can't find target 'prerouting_rule'
    Warning: fw3_ipt_rule_append(): Can't find target 'postrouting_rule'
    • Zone 'lan'
    • Zone 'wan'
  • Populating IPv6 mangle table
    • Zone 'lan'
    • Zone 'wan'
  • Set tcp_ecn to off
  • Set tcp_syncookies to on
  • Set tcp_window_scaling to on
  • Running script '/etc/firewall.user'
  • Running script '/etc/zerotier.start'
  • Running script '/usr/share/miniupnpd/firewall.include'
  • Running script '/var/etc/adbyby.include'
    ! Skipping due to path error: No such file or directory
  • Running script '/var/etc/shadowsocksr.include'
  • Running script '/etc/mia.include'
  • Running script '/var/etc/unblockneteasemusic.include'
  • Running script '/var/etc/openclash.include'
    root@ImmortalWrt:~# service firewall restart

,第二次重启的时候就会卡死在那,这会导致端口转发在openclash重启或者是重新拨号以后端口转发失效...
不知道是不是自己编译的时候有什么没有选择

希望对自签名证书进行支持

自己本地签名了一个证书并放到了插件的 “/core” 目录下进行了替换,但是发现插件更新核心后,自签名证书也会直接被替换掉。
不知道能否对自签名证书进行支持,例如能够上传自签名证书,或者在更新内核时保存当前证书之类。

iPv6公网代理无效

有用过另一个作者的同类软件,他那个外网直接代理全部路由器流量了,您的作品是公网连接不能代理通过网易云音乐的流量,我尝试看了proxy.pac发现是直接返回到192.168.1.1:5200(路由器iP),不知道和这个有没有关系,请求帮助,谢谢您!

The module causes LuCI's startup page failing to be loaded.

When I enabled the module, I found that LuCI's startup page could not be loaded normally, showing "XHR request timed out". The problem disappeared when I disabled it.

This is a very useful module. I'm looking forward to you guys fixing this error, although few people may open the startup page.

Thanks a lot!

[WARNING] Please take care

Hi,

Happen to encounter your project, have not checked. Today [Pandownload] dev is caught, please take care of yourself.

Good luck,
MiaoDX

开启本插件后会影响部分网站访问和passwall代理

1,目前发现虎牙和斗鱼两个网站证书不正确,chrome无法访问,firefox可以正常访问
huya.com
douyu.com

2,影响passwall全局代理,估计也是证书问题
passwall代理gfwlist的网站访问非常慢,关掉网易云插件后可以正常代理

无法运行

{ Error: unable to verify the first certificate
at TLSSocket. (_tls_wrap.js:1116:38)
at emitNone (events.js:106:13)
at TLSSocket.emit (events.js:208:7)
at TLSSocket._finishInit (_tls_wrap.js:643:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:473:38) code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

关于启动延时的建议

log:

{ Error: connect ENETUNREACH 59.111.181.38:443 - Local (0.0.0.0:0)
    at internalConnect (net.js:964:16)
    at defaultTriggerAsyncIdScope (internal/async_hooks.js:281:19)
    at net.js:1062:9
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)
    at Function.Module.runMain (module.js:696:11)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3
  errno: 'ENETUNREACH',
  code: 'ENETUNREACH',
  syscall: 'connect',
  address: '59.111.181.38',
  port: 443 }

该情况发生在重启路由器时,而路由器启动以后手动重启插件即可正常使用,初步估计是启动时路由还在pppoe登录,无网络。若是该问题希望能够添加延迟启动选项

网易云插件无法启动

日志内容
Error: getaddrinfo ENOTFOUND httpdns.n.netease.com
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'httpdns.n.netease.com'
}

luci-app-unblockneteasemusic 无法启动,日志提示以下错误,有大佬知道什么意思吗?

/usr/share/unblockneteasemusic/core/src/app.js:59
const target = Array.from(hook.target.host)
^

TypeError: Cannot read property 'host' of undefined
at Object. (/usr/share/unblockneteasemusic/core/src/app.js:59:39)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object. (/usr/share/unblockneteasemusic/core/app.js:2:1)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)

不能自动在线编译

我是用的github在线编译Lean 大的opnewrt..他内置了另外一个unlockmusic.我在编译时的sh文件设成了这个:

git clone https://github.com/project-openwrt/luci-app-unblockneteasemusic package/luci-app-unblockneteasemusic

然后

# CONFIG_PACKAGE_luci-app-unblockmusic IS NOT SET
CONFIG_PACKAGE_luci-app-unblockneteasemusic=y

试了几次都不行..但是相同的格式,我加入主题和luci-app-koolproxyR都没有问题,这是为什么呢?

谢谢

无法启用插件

/usr/share/unblockneteasemusic/core/src/provider/match.js:54
song.md5 = response.headers['etag'].replace(/"/g, '').toLowerCase()
^^^^

SyntaxError: Unexpected identifier
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object. (/usr/share/unblockneteasemusic/core/src/hook.js:5:15)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)

无法设置HTTPS端口为空(不指定第二个端口)

首先当然是要感谢大佬为OpenWrt做了这个配置高度自定义的可视化luci插件>w<

我的Issue是第本插件二个HTTPS端口无法设置为空,如果设置为"0",启动则报错:端口必须在0到65535之间.

原项目不指定端口的话,会默认单个端口8080启动,并且不会配置第二个HTTPS端口,这样就可以使用endpoint到自己域名的HTTPS网站来做反代.

示例:
本人在OpenWrt上搭了个HTTPS站点,由于家用宽带被封80,8080,443常用网页端口,使用的Ngnix监听的4443端口,并设置反代到本插件默认端口localhost:5200.

使用以下单端口命令启动:
node /usr/share/unblockneteasemusic/core/app.js -s -e https://MyDomian:4443 -p 5200

可以给IOS和Windows用解锁和播放音乐(安卓能解锁但不能播放,不过我有Xposed模块).

总结:
希望大佬可以设置一个HTTPS(第二个端口)的开关,判断关闭时使用下面命令启动(删掉:${https_port});
或者加个判断,设置"0"或者为"Null"后,判断并使用下面命令启动(删掉:${https_port}).
也就是:
nohup node "/usr/share/$NAME/core/app.js" -a "${addr}" -p "${http_port}":"${https_port}" ${music_source} -e "${endpoint_url}" ${netease_server_ip} ${proxy_server_ip} ${strict_mode} >> "/tmp/$NAME.log" 2>&1 &
目前我是改成上面的命令了

当然,要是能做两个配置页面,分别运行两个实例就更好了,这样就三端通吃啦~

无法获取网易云歌词

使用foobar播放器的eslyric插件,其中获取网易云歌词的脚本为:
https://github.com/cimoc-sokka/Some-js-script-for-FB2K
这个项目中的ncm.js
脚本中歌词api为:
无标题
已安装证书,但搜索依然无法显示网易云歌词
另外在浏览器上访问 https://music.163.com 会显示证书不安全:
无标题
猜想可能有所联系?

之前是证书安装位置选自动选择,后来手动选择“受信任的根证书颁发机构”后浏览器不出现不安全的标志,但foobar依然搜索不出网易云歌词
image

启动报错确认这边DNS没有问题

Error: getaddrinfo ENOTFOUND httpdns.n.netease.com
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'httpdns.n.netease.com'
}

openclash fake-ip

感谢您的指点,插件我安装成功并运行了,还是上个issues的提到的问题,是固件问题还是我的规则有问题,跟另外一个解锁插件一样,在fake-ip模式下听歌一会就失效了无法播放,歌曲变灰色,关闭openclash再次打开播放器解锁成功,只有redir-host模式不会发生这样的情况,大佬给个意见怎么搞一下?谢谢
image

建议多加一个启动项可以实现本地+远程IOS都可以用

nohup node "/usr/share/$NAME/core/app.js" -a "${addr}" -p 4200:4201 ${music_source} -e "http://music.163.com" ${netease_server_ip} ${proxy_server_ip} ${strict_mode} >> "/tmp/$NAME.log" 2>&1 &
nohup node "/usr/share/$NAME/core/app.js" -a "${addr}" -p "${http_port}":"${https_port}" ${music_source} -e "${endpoint_url}" ${netease_server_ip} ${proxy_server_ip} ${strict_mode} >> "/tmp/$NAME.log" 2>&1 &

对应的iptable 也要添加相应接口

4200:4201 用于本地局域网监听
5200:5201 配置 endpoint + ssl 域名证书 实现 IOS小火箭 用流量听

比如你的域名 是 www.xxx.com 绑定路由的 DDNS 那么申请对应的SSL endpoint 设置为 https://www.xxx.com:5200 端口转发5200
小火箭设置 HTTP 节点
配合 https://raw.fastgit.org/DesperadoJ/Rules-for-UnblockNeteaseMusic/master/Shadowrocket/UnblockNeteaseMusic.conf
规则就行了
原因:PC 需要 http 协议 ,IOS 需要 https 协议。

目前我的解决办法就是这个。适合没有VPS 的折腾 ,本地局域网PC 免配置代理 就可以听,但 IOS 还是需要挂小火箭不挂代理提示(网络不给力,无法继续播放,证书什么的都信任了)

Enabling this plugin blocks out IPv6 access in LAN

I have a working IPv6 connection(with prefix) and my router can successfully assign IPv6 addresses to devices in LAN.

However, enabling this plugin causes IPv6 connectivity in LAN to be unusable. The address is still assigned, but any attempt to ping an IPv6 address failed with: "Destination Unreachable: no route". Disabling this plugin and rebooting the router fixed it.

Is that an issue with iptables configuration in this plugin?

在旁路由模式下 手机网易云杀掉进程后不能解锁的问题

在主路由的情况下貌似没这个问题,主要是旁路由模式下会出现这样的情况,安装完成第一次打开都是能解锁的,但是当杀掉这个进程或者手机重启之后就照常显示灰色,需要在wifi那里设置一下代理才行,不知道大家有没有遇到过这个问题

大佬我想请问下如果挂载在op上 电脑端可以正常解锁 安卓端无法解锁该如何操作

image
MITM > api2.music.163.com
MITM > apm3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog.music.163.com
MITM > clientlog3.music.163.com
MITM > music.163.com
MITM > interface3.music.163.com
MITM > interface3.music.163.com
MITM > interface3.music.163.com
MITM > interface3.music.163.com
MITM > interface3.music.163.com
MITM > api2.music.163.com
MITM > apm3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog3.music.163.com
MITM > interface3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog3.music.163.com
MITM > clientlog3.music.163.com

更新核心页面炸了

升级安装的,luci页面打不开提示:
/usr/lib/lua/luci/dispatcher.lua:381: Failed to execute cbi dispatcher target for entry '/admin/services/unblockneteasemusic/upgrade_core'.
The called action terminated with an exception:
/usr/lib/lua/luci/cbi.lua:38: Model 'unblockneteasemusic_upcore' not found!
stack traceback:
[C]: in function 'assert'
/usr/lib/lua/luci/dispatcher.lua:381: in function 'dispatch'
/usr/lib/lua/luci/dispatcher.lua:95: in function </usr/lib/lua/luci/dispatcher.lua:94>

卸载重装旧版正常,卸载重装新版就报错。

歌曲对应不准确

测试音源:酷我,QQ,咪咕,酷狗
网易云的某个4分55秒完整歌曲,代理自动转到了其他音源的1分32秒的TV size
换了网易云的其他同名曲,全部代理到同一首1分32秒的TV size
去酷我,QQ平台搜索之后发现
这两个平台分别有完整版和TV size两首歌曲
无法正确对应歌曲版本

日志:
{"Id":"27901487","Size":3718919,"Br":320000,"Url":"http://other.player.rf01.sycdn.kuwo.cn/26d295cb33af6803213dd07f0385ebd5/5e857fc7/resource/n3/10/96/3175538996.mp3","Md5":"","Name":"lull そして僕らは (TV Size)","Artist":"Ray","MatchScore":0.81142855}

ledeV2.36安装了一直未运行

ledeV2.36,自带的因为证书老是过期,全部卸载后安装了这个ipk,但是不管怎么设置都一直是未运行呢

无法hook 目标地址?

/usr/share/unblockneteasemusic/core/src/app.js:59
const target = Array.from(hook.target.host)
                                      ^

TypeError: Cannot read property 'host' of undefined
    at Object.<anonymous> (/usr/share/unblockneteasemusic/core/src/app.js:59:39)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/usr/share/unblockneteasemusic/core/app.js:2:1)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)

QQ音乐cookie Tab替换出错

设备是armv7架构Pandorabox。
使用QQ音乐并设置相应cookie后,启动失败。

报错信息是/usr/share/unblockneteasemusic/core/provider/qq.js中对应行替换不正确,'cookie':前应为Tab而实际替换成了字母t,导致没有认出t'cookie':。

应该是129行的\\t转义没有被正确理解:
sed -i -e "${qq_cookie_line}i \\t'cookie': '${qq_cookie}'" "/usr/share/unblockneteasemusic/core/provider/qq.js"

望检查修复。

手机访问页面路由unblockneteasemusic管理页面403

Request URL: http://openwrt.lan/cgi-bin/luci/admin/services/unblockneteasemusic
Request Method: GET
Status Code: 403 Forbidden
Remote Address: 192.168.0.1:80
Referrer Policy: strict-origin-when-cross-origin
Connection: Keep-Alive
Keep-Alive: timeout=20
Transfer-Encoding: chunked
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: sysauth=b157fd6ae7c7c1acfed1271bdd4d12db
Host: openwrt.lan
Pragma: no-cache
Referer: http://openwrt.lan/cgi-bin/luci/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Mobile Safari/537.36

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.