coffeestraw / vvvvid-downloader Goto Github PK
View Code? Open in Web Editor NEWUn piccolo script in Python3 per scaricare contenuti multimediali (non a pagamento) offerti da VVVVID
License: MIT License
Un piccolo script in Python3 per scaricare contenuti multimediali (non a pagamento) offerti da VVVVID
License: MIT License
Qualsiasi link inserisca ricevo sempre questo errore, sia sul singolo episodio che sulla serie intera
Stagione: Episodi
Traceback (most recent call last):
File "main.py", line 266, in <module>
File "main.py", line 252, in main
File "main.py", line 167, in dl_from_vvvvid
AttributeError: 'NoneType' object has no attribute 'group'
[23272] Failed to execute script 'main' due to unhandled exception!
Ciao,
ogni episodio che viene scaricato devo sempre controllare che non abbia problemi all'audio..
ti posso fornire privatamente un episodio che si è scaricato con:
riscaricando la puntata tutto ok
ora cerco di scaricare di nuovo la stagione con il debug e vedo poi se qualche episodio si è scaricato con problemi..
Hola, mi da questo errore in WIndows 10 con Python 3.9.0:
python main.py
Traceback (most recent call last):
File "C:\opt\VVVVID-Downloader\main.py", line 205, in
main()
File "C:\opt\VVVVID-Downloader\main.py", line 157, in main
"conn_id": current_session.get(
File "C:\Users\winzozz\AppData\Roaming\Python\Python39\site-packages\requests\models.py", line 898, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Program Files\Python39\lib\json_init_.py", line 346, in loads
return _default_decoder.decode(s)
File "C:\Program Files\Python39\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files\Python39\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
in my case ID: 114
24 episode (ITA) but see only 11
Ciao,
ecco il dettaglio:
`Stagione: EXTRA
ERROR: Sign in to confirm your age
This video may be inappropriate for some users.
Traceback (most recent call last):
File "youtube_dl\YoutubeDL.py", line 815, in wrapper
File "youtube_dl\YoutubeDL.py", line 836, in __extract_info
File "youtube_dl\extractor\common.py", line 534, in extract
File "youtube_dl\extractor\youtube.py", line 1712, in _real_extract
youtube_dl.utils.ExtractorError: Sign in to confirm your age
This video may be inappropriate for some users.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 248, in
File "main.py", line 234, in main
File "main.py", line 142, in dl_from_vvvvid
File "youtube_dl\YoutubeDL.py", line 808, in extract_info
File "youtube_dl\YoutubeDL.py", line 815, in wrapper
File "youtube_dl\YoutubeDL.py", line 847, in __extract_info
File "youtube_dl\YoutubeDL.py", line 891, in process_ie_result
File "youtube_dl\YoutubeDL.py", line 808, in extract_info
File "youtube_dl\YoutubeDL.py", line 824, in wrapper
File "youtube_dl\YoutubeDL.py", line 628, in report_error
File "youtube_dl\YoutubeDL.py", line 598, in trouble
youtube_dl.utils.DownloadError: ERROR: Sign in to confirm your age
This video may be inappropriate for some users.
[15604] Failed to execute script main`
il link della serie: https://www.vvvvid.it/show/374/prison-school
puoi darci un'occhiata?
Utilizzando l'immagine Docker può accadere che youtube-dl richieda rtmpdump poichè alcuni video sono con stream RTMP. Tale tool (e relative) dipendenze mancano nell'immagine Docker.
eg: trailer of Occultic Nine (https://www.vvvvid.it/show/570/occulticnine)
Ciao,
Riscrivo di seguito l'idea avuta nel commento all'issue #8 in modo da iniziare un nuovo thread.. :)
Ho pensato che si potrebbe aggiungere un controllo per verificare che si tratti di un url valido. Ad esempio un utente potrebbe sbagliarsi e copiare ttps://www.vvvvid.it/#!show/786/steinsgate-0 invece di https://www.vvvvid.it/#!show/786/steinsgate-0 oppure ww.vvvvid.it/#!show/786/steinsgate-0 invece di www.vvvvid.it/#!show/786/steinsgate-0. La differenza è sottile e, invece di trovarsi davanti ad un errore non parlante come
Traceback (most recent call last):
File "d:/Programmi/VVVVID-Downloader-FORK/VVVVID-Downloader/main.py", line 176, in
main()
File "d:/Programmi/VVVVID-Downloader-FORK/VVVVID-Downloader/main.py", line 171, in main
dl_from_vvvvid(line, requests_obj, ffmpeg_local)
File "d:/Programmi/VVVVID-Downloader-FORK/VVVVID-Downloader/main.py", line 30, in dl_from_vvvvid
show_id, url_name = vvvvid_scraper.parse_url(url)
File "d:\Programmi\VVVVID-Downloader-FORK\VVVVID-Downloader\vvvvid_scraper.py", line 17, in parse_url
return re.search(pattern, url).groups()
AttributeError: 'NoneType' object has no attribute 'groups'
gli si potrebbe presentare un messaggio del tipo:
URL non valido: ww.vvvvid.it/#!show/786/steinsgate-0
Questo anche perchè la tua regexp fa completo affidamento sul fatto che nell'url si trova "show", e in caso contrario restituisce il suddetto errore. Ciò significa che restituiscono errore anche URL come:
Quindi per il momento basterebbe aggiungere un controllo del tipo:
if not re.match("(https?://)?www.vvvvid.it/show"):
print("Errore - URL non valido: " + url)
Perlomeno in questo modo l'utente capisce che l'url non è supportato
L'extractor di youtube-dl non è aggiornato da diverso tempo e non include alcune funzioni che questo script invece ha, come la gestione delle playlist.
Ci sarebbe la possibilità di portarle?
Issue di riferimento: #18130
Ciao,
mi scuso innanzitutto per lo spam di Issues e di informazioni che ti sto dando, ma non posso fare a meno di cercare di dare il mio meglio per questo progetto fantastico che mi sta facendo risparmiare un sacco di tempo (prima di scoprirlo mi toccava scaricare un episodio per volta dopo la pubblicità con un'estensione e avevo cercato di automatizzarlo con Selenium per prendere i link e ytdl) 😄
Usando questo script per scaricare una serie intera mi sono trovato a dover cercare di capire l'episodio che stava scaricando cercando tra le varie righe che erano state "sbrodolate" il nome del segmento... Ho pensato quindi che, essendo tutte informazioni di debug, si potevano anche "disabilitare" nella modalità di default dello script (senza flag), mentre potevano essere attivate all'occorrenza lanciando il programma con il parametro -v
/--verbose
attivato. Ad esempio python main.py --verbose
.
Questo permetterebbe un utilizzo più facile da parte dell'utente finale mantenendo però comunque intatta la possibilità di effettuare facilmente debug...
Questo risultato sarebbe comunque raggiungibile in seguito alla modifica usando il parametro -v
Lanciando lo script senza il parametro -v
(python main.py
)
Per ottenere questo risultato, se viene passato il parametro -v
(che può essere trovato tramite il pacchetto argparse
, che citerò in un'altro issue 😃) basta aggiungere nella configurazione delle opzioni passate a YTDL la seguente coppia chiave-valore: 'quiet': True
(docs)
Lines 90 to 94 in 614bb62
Ho un problema con le ultime versioni.
Da quando il tool non è più solo in “python” ma avviabile da eseguibile, capita molto spesso che un episodio risulti buggato nel senso che il video si blocca per 5/6 secondi in maniera randomica per poi ricominciare facendomi riascoltare quei 5/6 secondi di audio.
Sistema op. Win10 x64 ed episodi testati Cowboy Bebop (anche dal primo), Death Note e altri.
Ho notato che se creo il file con la vecchia versione (vecchio metodo python) il file risulta di dimensioni differenti e non si blocca.
Se fosse possibile risolvere questo bug mi farebbe molto piacere anche perchè adoro la semplicità introdotta in questa versione windows.
Grazie
Ciao,
come da titolo...
se chiudi l'app a metà download, il file generato viene considerato come ok per i successivi avvii..
non si potrebbe fare in modo di mettere nella cartella finale solo i file effettivamente scaricati al 100%?
altrimenti ad ogni avvio devi andare a cancellare a mano i file incompleti
Ciao, ho provato ad installare vari film ma tutto quello che mi dice è questo:
NOTA BENE: siccome lo script è stato lanciato da Windows i nomi delle cartelle e dei file creati potrebbero subire delle variazioni.
In preparazione: Weathering With You
Descrizione: L’estate del primo anno di liceo, Hodaka decide di fuggire. Scappa dalla sua remota isola natale per cercare fortuna a Tokyo. Qui Hodaka deve farcela con pochi soldi in tasca e qualche problema personale. Finché non incontra Hina, una ragazza brillante ed energica che possiede un’abilità meravigliosa: il potere di fermare la pioggia e far risplendere il sole!
Stagione: FILM
WARNING: Failed to download m3u8 information: HTTP Error 404: Not Found
WARNING: Unable to download f4m manifest: HTTP Error 404: Not Found
WARNING: Failed to download MPD manifest: HTTP Error 404: Not Found
WARNING: Failed to download m3u8 information: HTTP Error 404: Not Found
WARNING: Unable to download f4m manifest: HTTP Error 404: Not Found
WARNING: Failed to download MPD manifest: HTTP Error 404: Not Found
Ciao,
oggi mi è capitato questo errore:
https://pastebin.com/ExJ8n7n5
Facendo ripartire il bat prosegue da dove aveva lasciato..
Ciao,
al fine di migliorare l'usabilità utente del programma ho pensato che si potrebbe stampare a video un messaggio parlante all'utente invece di una stacktrace quando si interrompe il programma facendo CTRL + C
Come vedi la stacktrace che occupava tutto lo schermo è stata sostituita da
[VVVVID-Downloader] Errore - Download abortito dall'utente
Al momento dato che si tratta di una prova è un semplice try..except
inserito nella if finale da cui viene lanciato il main()
:
Se tale blocco venisse integrato anche all'interno del ciclo per il download del video si potrebbe inoltre specificare nella Except una sequenza di "pulizia" del file .part del video che si stava scaricando al momento dell'interruzione. Ovviamente quest'ultima è solo un'idea che mi è venuta al momento della scrittura e non è importante in quanto i file .part vengono sostituiti di volta in volta... Ma era giusto per non lasciare una situazione "sporca" se l'utente decide di interrompere il download :)
Ciao,
ho inserito il link di un anime nel file downloads_list.txt separandolo dagli esempi con una linea vuota.
Quando ho lanciato lo script con il comando python main.py
ho ottenuto il seguente errore:
Analizzando e risalendo nel codice ho trovato che il problema si trovava nel file main.py
alla riga 167 dove, durante la lettura del file, venivano inviate alla funzione dl_from_vvvvid
anche le linee vuote sotto forma di "/", facendo ritornare None
(per assenza di match) alla regex contenuta nella funzione parse_url
del file vvvvid_scraper.py
.
Questo causava l'errore AttributeError
(vedi questo thread su SO) poichè non avendo match la funzione .groups()
non aveva capture groups da ritornare.
Per risolvere il problema basta aggiungere alla riga 169 del file main.py
un semplice controllo:
if line.strip() == "":
continue
Lo snippet della lettura del file diventerebbe quindi:
# Get anime list from local file, ignoring lines commented and empty lines
with open("downloads_list.txt", 'r') as f:
for line in f:
if line.strip() == "":
continue
line = line.strip() + '/'
if not line.startswith('#'):
dl_from_vvvvid(line, requests_obj, ffmpeg_local)
Ho già testato il codice. Appena posso invierò una PR con la fix :)
Si potrebbe avere un'opzione per fermare il download degli episodi che non sia chiudere la finestra?
ciao,
di solito gli episodi hanno i sottotitoli sovraimpressi (hardsub).
I film di bleach invece sembra che vengano riprodotti con sottotitoli a parte (come fa netflix e co.)
es. https://www.vvvvid.it/show/261/bleach-the-movie/249/468221/memories-of-nobody
Potresti analizzare se nella pagina c'è il file dei sottotitoli in chiaro e magari farli scaricare?
parlo ovviamente della versione in giapponese del film
Purtroppo anche questo downloader non funziona piu, a causa del pacchetto youtube-dl
[VVVVID] Downloading JSON metadata [VVVVID] 486288: Downloading JSON metadata [VVVVID] 486288: Downloading JSON metadata [VVVVID] 486288: Downloading f4m manifest [VVVVID] 486288: Downloading m3u8 information WARNING: Failed to download m3u8 information: HTTP Error 403: Forbidden ERROR: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
purtroppo python non è proprio il mio campo,
spero tu riesca a risolvere
Traceback (most recent call last):
File "main.py", line 203, in
main()
File "main.py", line 199, in main
dl_from_vvvvid(line, requests_obj, ffmpeg_local)
File "main.py", line 53, in dl_from_vvvvid
dl_dir, os_fix_filename(cont_title + " - " + season["name"])
File "/home/fl4me/VVVVID-Downloader/text_utility.py", line 17, in os_fix_filename
return re_sub(r"[/]+", "\", filename)
File "/usr/lib/python3.8/re.py", line 208, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/usr/lib/python3.8/re.py", line 325, in _subx
template = _compile_repl(template, pattern)
File "/usr/lib/python3.8/re.py", line 316, in _compile_repl
return sre_parse.parse_template(repl, pattern)
File "/usr/lib/python3.8/sre_parse.py", line 972, in parse_template
s = Tokenizer(source)
File "/usr/lib/python3.8/sre_parse.py", line 232, in init
self.__next()
File "/usr/lib/python3.8/sre_parse.py", line 245, in __next
raise error("bad escape (end of pattern)",
re.error: bad escape (end of pattern) at position 0
Ciao,
ho questo errore
non solo su questo file ma anche sugli altri dello stesso link che riporto:
https://www.vvvvid.it/show/706/yu-gi-oh-arc-v
Potete aiutarmi?
edit: anche per altri link, sembra che il problema sia generalizzato
sto usando l'ultima versione presa da qui
Ciao, volevo segnalare un problema su Unix con gli episodi che contengono slash (la barra obliqua "/") nel titolo. In caso ciò accada il programma lo considera come una sottocartella e di conseguenza la crea.
Ho verificato l'errore sull'episodio 36 di Death Note ( https://www.vvvvid.it/show/68/death-note ) intitolato "28/01", il programma andando a salvare il file come 28/01.mp4 ha creato in pratica la sottocartella chiamata "28" con al suo interno il file "01.mp4",
Penso si possa risolvere banalmente andando a sostituire o togliere eventuali slash nel titolo dell'episodio
Ho pensato che si potrebbe migliorare la prima esperienza con lo script evitando all'utente di recuperarsi da solo ffmpeg, se non trovato.
Sarebbe molto interessante e utile dare la possibilità all'utente di poter scegliere (opzionalmente) la cartella di output in cui verranno create le cartelle degli episodi (se sta scaricando partendo da un link di una pagina con lista degli episodi).
Questo farà in modo che non debba spostare tutte le serie scaricate nella cartella personale una volta terminati i download...
Se non viene specificata verrà usata quella di default (cioè nella cartella dello script dentro "Downloads/")...
Pensavo a qualcosa del genere:
Ho utilizzato il pacchetto argparse
, inizializzandolo con i parametri -o
(per il cambio di directory di output) e -h
(per l'aiuto).
All'inizio dello script ho aggiunto la import del parser:
import argparse
Poi ho raggruppato l'inizializzazione del parser dentro una funzione:
# Using the package argparse, adds an ArgumentParser and help (try `python main.py -h` or `python main.py --help`)
def addArgumentParser():
global dl_dir
parser = argparse.ArgumentParser(
prog='VVVVID-Downloader',
description='Un piccolo script in Python3 per scaricare contenuti multimediali (non a pagamento) offerti da VVVVID. ' +
'Inserisci i link degli episodi che vuoi scaricare (episodio singolo o serie) nel file \'downloads_list.txt\'',
epilog='Homepage del progetto: https://github.com/CoffeeStraw/VVVVID-Downloader',
add_help=False
)
parser.add_argument(
'-o',
'--output-directory',
type=str,
dest='output_dir',
help='Definisce la cartella di output (default=' + dl_dir + ')'
)
parser.add_argument(
'-h',
'--help',
action='help',
help='Mostra questa schermata di aiuto ed esce'
)
args = parser.parse_args()
if args.output_dir and args.output_dir.strip() != "":
dl_dir = args.output_dir.strip()
print("[VVVVID-Downloader] %sCambiata directory di output%s: %s" % (
Fore.GREEN,
Style.RESET_ALL,
dl_dir
)
)
Poi, nella funzione main()
richiamo la funzione addArgumentParser()
:
def main():
# Getting Colorama utility ready to work
colorama_init(autoreset=True)
# Checks if there are special parameters passed to the script (-h/-o)
addArgumentParser()
When multiple links in the download list file, after downloading 1 the program crashes. if I reopen it sees what it downloaded and continues correctly.
I attach the log
log.txt
Possiedo un Windows 10 con architettura a 64 bit e Pyhon 3.9.
Ho usato lo script per scaricare gli episodi di Attack On Titan, tutto a posto tranne per il primo episodio, il quale video aveva varie sgranature.
Successivamente ho scaricato la seconda stagione e vari episodi in un certo punto hanno l'audio e il video non sincronizzato, tuttavia su VVVVID non ci sono problemi. Come potrei risolvere?
Bella la nuova interfaccia!
Peccato che dia errore sugli episodi non ancora rilasciati.
Prova con
https://www.vvvvid.it/show/1423/nomad-megalo-box-2
`In preparazione: Nomad: Megalo Box 2
Descrizione: Il campione di Megalonia, “Gearless” Joe, è scomparso dai radar. Dopo dei match indimenticabili, che fanno ancora sgolare con urla di passione i suoi fan, il pugile è fuggito dalle luci della ribalta. Sono passati sette anni dall’ultima battaglia sul ring di Joe, quando un uomo adulto dalla barba incolta e vistose cicatrici inizia a partecipare a degli incontri del circuito undergound. Si fa chiamare “Nomad”… e il suo equipaggiamento è lo stesso di Joe.
Stagione: EPISODI
Ciao,
altro errore da fixare secondo me:
https://pastebin.com/kgVJ6rBt
grazie
Ciao,
per la serie:
https://www.vvvvid.it/show/86/alexander-cronache-di-guerra-di-alessandro-il-grande
lo script dice questo:
`In preparazione: Alexander: Cronache Di Guerra Di Alessandro Il Grande
Descrizione: Macedonia, 356 a.C. La regina Olimpiade, sacerdotessa di un oscuro culto votato all'apocalisse, dà alla luce un erede maschio al consorte Filippo II. Sul futuro di quel bambino grava però una tremenda profezia: un giorno egli sarà responsabile della distruzione del mondo. Tra congiure di palazzo e dissidi famigliari, il giovane principe Alessandro, futuro dominatore del mondo, si troverà ad affrontare il dilemma fondamentale della sua esistenza: conquistare per distruggere, come vorrebbe sua madre, o conquistare per governare, come vorrebbe il suo maestro Aristotele? Fine o inizio? Ordine o caos?
Stagione: Episodi
ovviamente il link è corretto
grazie
Se provate a scaricare la serie
https://www.vvvvid.it/show/1414/l-attacco-dei-giganti-la-stagione-finale
scaricando i "LIVE con Giò" (lasciamo perdere...) avverrà un errore (anche con rtmpdump.exe nel path):
Episodio 99: Live con Giò - scaricando
[VVVVID] Downloading JSON metadata
[VVVVID] 693713: Downloading JSON metadata
[VVVVID] 693713: Downloading m3u8 information
WARNING: Failed to download m3u8 information: HTTP Error 404: Not Found
[VVVVID] 693713: Downloading f4m manifest
WARNING: Unable to download f4m manifest: HTTP Error 404: Not Found
[VVVVID] 693713: Downloading MPD manifest
WARNING: Failed to download MPD manifest: HTTP Error 404: Not Found
[download] Destination: \\192.168.103.59\Anime\Downloads\L'Attacco dei Giganti - La Stagione Finale - LIVE con Giò\99 - Live con Giò.m3u8
[rtmpdump] Downloaded 0 bytes
ERROR: rtmpdump exited with code 1
Traceback (most recent call last):
File "\\192.168.103.59\Anime\VVVVID-Downloader\main.py", line 214, in <module>
main()
File "\\192.168.103.59\Anime\VVVVID-Downloader\main.py", line 198, in main
dl_from_vvvvid(line, requests_obj)
File "\\192.168.103.59\Anime\VVVVID-Downloader\main.py", line 122, in dl_from_vvvvid
ydl.download([ep_url])
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 2059, in download
res = self.extract_info(
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 799, in extract_info
return self.__extract_info(url, ie, download, extra_info, process)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 806, in wrapper
return func(self, *args, **kwargs)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 838, in __extract_info
return self.process_ie_result(ie_result, download, extra_info)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 872, in process_ie_result
return self.process_video_result(ie_result, download=download)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 1683, in process_video_result
self.process_info(new_info)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 1967, in process_info
success = dl(filename, info_dict)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 1906, in dl
return fd.download(name, info)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\downloader\common.py", line 366, in download
return self.real_download(filename, info_dict)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\downloader\rtmp.py", line 213, in real_download
self.report_error('rtmpdump exited with code %d' % retval)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\downloader\common.py", line 165, in report_error
self.ydl.report_error(*args, **kargs)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 628, in report_error
self.trouble(error_message, tb)
File "D:\Programmi\Sistema\Python_x64\lib\site-packages\youtube_dl\YoutubeDL.py", line 598, in trouble
raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: rtmpdump exited with code 1```
L' ultima versione(1.5.4) mi da errore e non scarica nulla
:
Traceback (most recent call last):
File "main.py", line 266, in
File "main.py", line 252, in main
File "main.py", line 167, in dl_from_vvvvid
AttributeError: 'NoneType' object has no attribute 'group'
[11624] Failed to execute script 'main' due to unhandled exception!
Qualcuno sa dirmi perchè? Grazie in anticipo
So che non si dovrebbe chiedere qui, ma che vuol dire "Scaricate l'ultima release da TODO"? Cos'è un sito? Se si non lo trovo. Non ho capito come dovrei scaricare il programma.
Con caratteri come la "o" in JŌSUKE:
Traceback (most recent call last):
File "main.py", line 205, in
File "main.py", line 191, in main
File "main.py", line 109, in dl_from_vvvvid
File "utility.py", line 112, in ffmpeg_dl
File "C:\Users\Antonio\AppData\Local\Programs\Python\Python39\lib\encodings\cp1252.py", line 23, in decode
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 118: character maps to
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.