Giter Club home page Giter Club logo

webvideo-downloader's Introduction

webvideo-downloader

🚀 视频下载器,用于下载网站中可以在线播放的视频。


目录

功能介绍

主要支持网站

站点 URL 普通画质 VIP专属
哔哩哔哩(单P/多P) https://www.bilibili.com/
爱奇艺 https://www.iqiyi.com/
腾讯视频 https://v.qq.com/
芒果TV https://www.mgtv.com/
WeTV https://wetv.vip/
爱奇艺国际站 https://www.iq.com/

此外,备用的 CommonHlsDownloader 脚本支持绝大部分基于 HLS 流式视频的网站,如 LPL官网 等。

特性

  • 跨平台(Windows/Linux/Mac)
  • 多线程下载(单文件分段/多文件并行)
  • 字幕下载和集成(集成字幕的视频需使用支持字幕的播放器播放,如 PotPlayerVLC Player 等)

关于 VIP

本项目支持1080p蓝光画质、VIP专享、VIP点播、付费视频的下载,前提是你是VIP/用了券/付了费。

What you can watch determined what you can download.

你只能下载你或你的账号可以在线观看的视频,本项目没有VIP破解功能。

快速开始

安装

安装依赖程序

本项目基于PythonFFmpeg 和浏览器扩展 Violentmonkey/Tampermonkey 开发:

获取项目

直接下载压缩包,或使用 git clone:

git clone https://github.com/jaysonlong/webvideo-downloader.git
安装项目

浏览器安装以下基于 Violentmonkey/Tampermonkey 的脚本。直接点击以下链接即可安装:

安装 python 依赖包:

cd webvideo-downloader/downloader
pip install -r requirements.txt

(按需安装)浏览器安装广告拦截器:

对于某些网站,视频存在广告时,浏览器插件脚本会延迟到广告即将结束时才能提取到视频链接,安装拦截器可不用等待广告播放完毕

运行

本项目分为两部分,Violentmonkey 目录下的 javascript 脚本用于在浏览器中提取视频链接,Downloader 目录下的 python 脚本用于下载、合并视频。

首先执行 python 脚本:

python daemon.py

然后访问视频网站并点击某个视频,网页会自动弹出下载按钮,点击按钮即可下载。

示例链接:https://www.bilibili.com/video/BV1c741157Wb

bilibili

下载进度可在 python 脚本的命令窗口查看:

$ python daemon.py
Listening on port 18888 for clients...

Receive: {
    "fileName": "看小黄书会被处罚吗",
    "linksurl": "http://xxx",
    "type": "link"
}

Handle: "看小黄书会被处罚吗"

匹配到1段音频,1段视频,开始下载
-- dispatcher/downloadDash
正在下载 E:\Workspace\Github\webvideo-downloader\temp\看小黄书会被处罚吗.audio.m4s
分8段, 并行8线程下载
进度: [########################################] 100%    0.9/0.9MB  450KB/s 0s
正在下载 E:\Workspace\Github\webvideo-downloader\temp\看小黄书会被处罚吗.video.m4s
分8段, 并行8线程下载
进度: [########################################] 100%  11.2/11.2MB  5.2MB/s 2s
正在合并视频
Finish.

下载目录默认为项目根目录下的 videos 文件夹,可在 downloader/config.py 中配置。

python 脚本可选命令行参数:

$ python daemon.py -h
usage: daemon.py [-h] [-t:h N] [-t:f N] [-f N] [-p PORT] [-c] [-s] [-d] [-i]

optional arguments:
  -h, --help     show this help message and exit
  -t:h N         the thread count of hls download, default 8
  -t:f N         the thread count of fragments download, default 8
  -f N           the fragments count of each file, default 0 using the thread count
  -p PORT        the port that the backend server listens on, default 18888
  -c, --correct  correct the timestamp of hls video, merge fragments using binnary mode
  -s             if set, will save the temp files
  -d             debug mode, log more info and save the temp files (ignore -s)
  -i             interactive mode, get url and file name from the command line

工作原理

浏览器播放视频原理

用户登录生成session ——> 发送获取视频资源的HTTP请求 ——> 服务器基于session认证用户身份 ——> 认证通过后返回视频资源描述文件(如经典的m3u8文件,其中包含视频的所有分片的下载地址) ——> 浏览器解析描述文件,依次下载每个视频分片,并组装播放

本项目工作原理

1、暴力猴脚本:作用于浏览器,通过hook浏览器的HTTP请求(主要为ajax hook和jsonp hook),拦截服务器返回的视频资源描述文件,再将视频资源描述文件通过HTTP请求发送给下载器。

2、下载器:在本机启动一个Web服务器,接收暴力猴脚本发送过来的视频资源描述文件,并解析资源描述文件依次下载所有视频分片(模仿浏览器行为),最终合成单个视频。

更新日志

v2.0 - 2020-11-09

新增

  • 支持腾讯视频长分段下载(由用户上传的视频)
  • 支持爱奇艺国际站 VIP 下载、WeTV 无字幕下载
  • 增加 debug 模式

变更

  • 合并守护模式和交互模式为一个 python 脚本
  • 在爱奇艺国际站(iq.com)中禁用 WebAssembly 扩展,防止字幕加密

v1.6 - 2020-09-12

新增

  • 支持爱奇艺国际站视频下载
  • 支持多个字幕文件集成到视频中

v1.5 - 2020-09-01

新增

  • 支持 WeTV,愛奇藝台灣站视频下载
  • 支持部分网站字幕文件集成到视频中
  • 下载文件完整性检查

变更

  • MP4 文件 moov box 前置,便于网络传输

v1.4 - 2020-06-30

变更

  • 守护模式运行时端口复用,其监听模式同时支持 HTTP Server 和 WebSocket
  • 暴力猴脚本可自定义远程调用模式(HTTP 或 WebSocket)

v1.3 - 2020-06-27

变更

  • 暴力猴脚本重构 & 界面重写

v1.2 - 2020-06-18

新增

  • 支持爱奇艺 MPD 格式文件解析
  • 支持 MSE 视频流通过 WebSocket导出(实验性)
  • 新增两个暴力猴脚本:通用 hls 下载脚本和 MSE 视频流导出脚本(实验性)
  • 命令行参数支持

变更

  • 守护模式运行时的监听模式由 HTTP Server 更改为 WebSocket
  • 哔哩哔哩多P下载脚本合并到通用下载脚本中

v1.1 - 2020-05-29

新增

  • 支持基于 HTTP Server 以守护模式运行,浏览器点击链接直接调用后台下载

变更

  • 合并4个网站脚本为单个,便于安装和管理

v1.0 - 2020-05-26

新增

  • 支持哔哩哔哩、爱奇艺、腾讯视频、芒果TV视频下载(手动复制链接粘贴)

webvideo-downloader's People

Contributors

jaysonlong 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  avatar

webvideo-downloader's Issues

416错误

不刷新网站的情况下偶尔有416错误

please help

FileNotFoundError: [WinError 2] The system cannot find the file specified:

下载腾讯720p视频出现错误

Traceback (most recent call last):
File "E:\Anaconda3\envs\newStock\lib\site-packages\urllib3\connectionpool.py", line 677, in urlopen
chunked=chunked,
File "E:\Anaconda3\envs\newStock\lib\site-packages\urllib3\connectionpool.py", line 381, in _make_request
self._validate_conn(conn)
File "E:\Anaconda3\envs\newStock\lib\site-packages\urllib3\connectionpool.py", line 976, in _validate_conn
conn.connect()
File "E:\Anaconda3\envs\newStock\lib\site-packages\urllib3\connection.py", line 396, in connect
_match_hostname(cert, self.assert_hostname or server_hostname)
File "E:\Anaconda3\envs\newStock\lib\site-packages\urllib3\connection.py", line 406, in _match_hostname
match_hostname(cert, asserted_hostname)
File "E:\Anaconda3\envs\newStock\lib\ssl.py", line 334, in match_hostname
% (hostname, ', '.join(map(repr, dnsnames))))
ssl.SSLCertVerificationError: ("hostname 'vhot2.qqvideo.tc.qq.com' doesn't match either of '.music.tc.qq.com', '.kg.tc.qq.com', '.stream.kg.qq.com', '.tc.qq.com', '*.tsmusic.kg.qq.com', 'music.tc.qq.com'",)

daemon.py 运行错误

C:\Users\hooke\Videos>python daemon.py
Traceback (most recent call last):
  File "daemon.py", line 5, in <module>
    from dispatcher import TaskDispatcher
ModuleNotFoundError: No module named 'dispatcher'

english

hi!
nice tool :-)
is it possible to translate it to english?

请先运行 "python daemon.py"

Thanks for your application. I'm really like it
I have no knowledge about IT so in the step install daemon.py, I don't know how to install ans run it. Can you instruct me or record an instruction video? Thanks so much.

打不开daemon.py

我下了压缩包然后还下了3.9版本的python 但是我双击上面这个文件就一直在闪退,从网站点进去就一直写 “请先运行 python daemon.py” 我百度了但是也没有解决这个问题 不知道是我下的py版本有问题还是那出现问题了

Issues on MacBook Air M1

I got everything installed except when I try to execute daemon.py in terminal I get this error.

Screen Shot 2020-12-26 at 2 08 25 PM

Is it possible for you to do a step by step for Mac users.

Help!!!

IMG_20201222_232700_HDR
Could you help me solve this?

Issues with no Subtitles

Hello,

   The latest update scripts couldn't download the subtitles, and I know these scripts won't support to download the subtitles.

   I love Chinese drama, But without subtitles difficult to understand the conversion. I don't know the Chinese language.

   Kindly re-update the script to prompt the subtitle option for optionally.

iq VIP download only 6:04 and stop

Hello,

First thank you for the script, but it only download 6 minutes then stop.

Duration                    : 6 min 4 s

URL: https://www.iq.com/play/1pzjbnp7ftg

General
Complete name               : Love Yourself Episode 36 _ iQIYI.mp4
Format                      : MPEG-4
Format profile              : Base Media
Codec ID                    : isom (isom/iso2/avc1/mp41)
File size                   : 84.2 MiB
Duration                    : 42 min 43 s
Overall bit rate mode       : Variable
Overall bit rate            : 275 kb/s
Writing application         : Lavf58.22.100

Video
ID                          : 1
Format                      : AVC
Format/Info                 : Advanced Video Codec
Format profile              : High@L4
Format settings             : CABAC / 3 Ref Frames
Format settings, CABAC      : Yes
Format settings, Reference  : 3 frames
Codec ID                    : avc1
Codec ID/Info               : Advanced Video Coding
Duration                    : 6 min 4 s
Bit rate                    : 1 796 kb/s
Width                       : 1 920 pixels
Height                      : 800 pixels
Display aspect ratio        : 2.40:1
Frame rate mode             : Constant
Frame rate                  : 25.000 FPS
Color space                 : YUV
Chroma subsampling          : 4:2:0
Bit depth                   : 8 bits
Scan type                   : Progressive
Bits/(Pixel*Frame)          : 0.047
Stream size                 : 78.0 MiB (93%)
Writing library             : qiyi.com vtc-test
Color range                 : Limited
Color primaries             : BT.709
Transfer characteristics    : BT.709
Matrix coefficients         : BT.709
Codec configuration box     : avcC

Audio
ID                          : 2
Format                      : AAC LC
Format/Info                 : Advanced Audio Codec Low Complexity
Codec ID                    : mp4a-40-2
Duration                    : 6 min 4 s
Bit rate mode               : Constant
Bit rate                    : 124 kb/s
Channel(s)                  : 2 channels
Channel layout              : L R
Sampling rate               : 44.1 kHz
Frame rate                  : 43.066 FPS (1024 SPF)
Compression mode            : Lossy
Stream size                 : 5.37 MiB (6%)
Default                     : Yes
Alternate group             : 1

Text #1
ID                          : 3
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 104 b/s
Stream size                 : 32.6 KiB (0%)
Title                       : Arabic
Default                     : Yes
Forced                      : No
Alternate group             : 3

Text #2
ID                          : 4
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 77 b/s
Stream size                 : 24.0 KiB (0%)
Title                       : Spanish
Default                     : No
Forced                      : No
Alternate group             : 3

Text #3
ID                          : 5
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 90 b/s
Stream size                 : 28.3 KiB (0%)
Title                       : Korean
Default                     : No
Forced                      : No
Alternate group             : 3

Text #4
ID                          : 6
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 103 b/s
Stream size                 : 32.3 KiB (0%)
Title                       : Vietnamese
Default                     : No
Forced                      : No
Alternate group             : 3

Text #5
ID                          : 7
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 79 b/s
Stream size                 : 24.8 KiB (0%)
Title                       : Bahasa Malaysia
Default                     : No
Forced                      : No
Alternate group             : 3

Text #6
ID                          : 8
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 195 b/s
Stream size                 : 61.0 KiB (0%)
Title                       : Thai
Default                     : No
Forced                      : No
Alternate group             : 3

Text #7
ID                          : 9
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 65 b/s
Stream size                 : 20.2 KiB (0%)
Title                       : Simplified Chinese
Default                     : No
Forced                      : No
Alternate group             : 3

Text #8
ID                          : 10
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 65 b/s
Stream size                 : 20.2 KiB (0%)
Title                       : Traditional Chinese
Default                     : No
Forced                      : No
Alternate group             : 3

Text #9
ID                          : 11
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 81 b/s
Stream size                 : 25.2 KiB (0%)
Title                       : Indonesian
Default                     : No
Forced                      : No
Alternate group             : 3

Text #10
ID                          : 12
Format                      : Timed Text
Muxing mode                 : sbtl
Codec ID                    : tx3g
Duration                    : 42 min 43 s
Bit rate mode               : Variable
Bit rate                    : 78 b/s
Stream size                 : 24.5 KiB (0%)
Title                       : English
Default                     : No
Forced                      : No
Alternate group             : 3

集成字幕不保存为MP4

如何修改 集成字幕 成MKV格式,或者不进行合并,因为要修改字幕文件的
是修改这一段吗 麻烦给指点一下
def integrateSubtitles(subtitlesInfo, videoName):
print('正在集成字幕')

subtitleNames = list(map(lambda x: x[1], subtitlesInfo))
fileNames = [videoName] + subtitleNames
inputCmd = ' '.join(map(lambda x: ('-i "%s"' % x), fileNames))
mapCmd = '-map 0'
for i, (name, subtitleName) in enumerate(subtitlesInfo):
    mapCmd += ' -map %d -metadata:s:s:%d title="%s"' % (i+1, i, name)

isMp4 = videoName.endswith('.mp4')
tempVideoName = videoName.rsplit('.', 1)[0] + '.srt.mp4'
targetFileName = videoName if isMp4 else (videoName.rsplit('.', 1)[0] + '.mp4')
logLevel = 'info' if debug else 'fatal'

support sites

Hello Jaysonlong,

           Your script was too good man 🙂. Please add a viki website to your supported website on future. 

python daemon.py

每次要下载时都跳出(请先运行 "python daemon.py")
请问是哪里没有设定到?
抱歉小弟没什么基础
谢谢

iq.com support

Hello, would it be possible to add support for iQiyi videos on iq.com? Thanks a lot.

现在都下载不了了 提示以下错误

Listening on port 18888 for clients...

Receive: {
"fileName": "犬夜叉:第1话_番剧_bilibili_哔哩哔哩",
"url": "https://221-236-179-235.mcdn.bilivideo.cn:480/upgcxcode/64/59/126445
964/126445964_nb2-1-30280.m4s?expires=1601805686&platform=pc&ssig=ZltCyaVb5GNpw5
P5AWlXDQ&oi=1946701278&trid=2f0fbc3a5d3d4a1aaec2e1383adc32b1p&nfc=1&nfb=maPYqpoe
l5MI3qOUX6YpRA==&mcdnid=1001039&mid=13872689&orderid=0,3&agrr=1&logo=A0000001|ht
tps://upos-sz-mirrorcos.bilivideo.com/upgcxcode/64/59/126445964/126445964_da2-1-
30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0Mv
Xg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNv
NC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1601805686&ge
n=playurl&os=cosbv&oi=1946701278&trid=2f0fbc3a5d3d4a1aaec2e1383adc32b1p&platform
=pc&upsig=0c6736f9b12db86ac8e66cb41b7413de&uparams=e,uipk,nbs,deadline,gen,os,oi
,trid,platform&mid=13872689&orderid=0,3&agrr=1&logo=80000000",
"type": "link"
}

Handle: {
"fileName": "犬夜叉:第1话_番剧_bilibili_哔哩哔哩",
"url": "https://221-236-179-235.mcdn.bilivideo.cn:480/upgcxcode/64/59/126445
964/126445964_nb2-1-30280.m4s?expires=1601805686&platform=pc&ssig=ZltCyaVb5GNpw5
P5AWlXDQ&oi=1946701278&trid=2f0fbc3a5d3d4a1aaec2e1383adc32b1p&nfc=1&nfb=maPYqpoe
l5MI3qOUX6YpRA==&mcdnid=1001039&mid=13872689&orderid=0,3&agrr=1&logo=A0000001|ht
tps://upos-sz-mirrorcos.bilivideo.com/upgcxcode/64/59/126445964/126445964_da2-1-
30112.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0Mv
Xg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNv
NC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1601805686&ge
n=playurl&os=cosbv&oi=1946701278&trid=2f0fbc3a5d3d4a1aaec2e1383adc32b1p&platform
=pc&upsig=0c6736f9b12db86ac8e66cb41b7413de&uparams=e,uipk,nbs,deadline,gen,os,oi
,trid,platform&mid=13872689&orderid=0,3&agrr=1&logo=80000000",
"type": "link"
}



Traceback (most recent call last):
File "D:\webvideo-downloader-jaysonlong\webvideo-downlo
ader-1.6\webvideo-downloader-1.6\downloader\dispatcher.py", line 160, in dispatc
h
linksurl, fileName = task['linksurl'], task['fileName']
KeyError: 'linksurl'


Traceback (most recent call last):

Traceback (most recent call last):
File "C:\Users\lily\Downloads\daemon.py", line 5, in
from dispatcher import TaskDispatcher
ModuleNotFoundError: No module named 'dispatcher'

How do I install daemon.py?
I can't handle Python.
Please let me know the answer.

Thanks.

Please Mr. jaysonlong

Please Mr. jaysonlong
When I download Drama from iq.com, Some of the videos durations are not as the durations of them at the site, What's the problem here?

tengxun downloaded video seems to be a little jittery

Hi thanks for the great work.

I downloaded a ~20 minute video from v.qq.com, it's mostly great but there are a few little jumps / ticks which I feel might be from incorrect joining of small segments. The downloaded video has length 22:37 whereas the original is 22:19, which is odd. I wonder if you have any ideas if this is possible to fix?

Thanks

UnicodeEncodeError: 'charmap' codec can't encode character '\u7b2c'

Hi, Please help to check this error. Any idea on how to fix it?

Traceback (most recent call last):
File "dispatcher.py", line 164, in dispatch
self.download(linksurl, fileName)
File "dispatcher.py", line 129, in download
targetFileName = self._downloadHls(videoUrls, fileName, headers, concat)
File "dispatcher.py", line 38, in _downloadHls
tools.mergePartialVideos(fileNames, targetFileName, concat=concat)
File "utils.py", line 250, in mergePartialVideos
f.write(text)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python38\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u7b2c' in position 66: character maps to

mac运行解析芒果405错误

Traceback (most recent call last):
File "/Volumes/数据/Download/m3u8download/downloader/dispatcher.py", line 125, in dispatch
self.download(linksurl, fileName)
File "/Volumes/数据/Download/m3u8download/downloader/dispatcher.py", line 94, in download
videoType, headers, audioUrls, videoUrls = api.preProcessUrl(linksurl)
File "/Volumes/数据/Download/m3u8download/downloader/api.py", line 75, in preProcessUrl
videoUrls = parseHls(url, headers)
File "/Volumes/数据/Download/m3u8download/downloader/api.py", line 45, in parseHls
content = tools.getText(url, headers)
File "/Volumes/数据/Download/m3u8download/downloader/tools/utils.py", line 72, in getText
response = request('GET', url, headers=headers)
File "/Volumes/数据/Download/m3u8download/downloader/tools/utils.py", line 64, in request
raise Exception('http响应: %d错误' % response.status_code)
Exception: http响应: 405错误

MangoTV download

Hi, when I try to download video from MangoTV, it does't appear the place for choosing the download option. Can you check this site?
image

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.