GithubHelp home page GithubHelp logo

nba's Introduction

nba

Node.js client for nba.com API endpoints

npm install nba

NOTES:

BLACKLISTED IP ADDRESSES:

It appears as though the NBA has blacklisted certain blocks of IP addresses, specifically those of cloud hosting providers including AWS. As such, you may hit a situation where an application using this package works fine on your local machine, but doesn't work at all when deployed to a cloud server. Annoyingly, requests from these IPs seem to just hang. More information here and here -- the second issue has a curl command somewhere which will quickly tell you if NBA is accepting requests from your IP. (Incidentally, this is also the same reason the TravisCI build is always "broken" but tests all pass locally). There is a simple pass-through server in scripts/proxy that can be used to get around this restriction; you can put the proxy server somewhere that can reach NBA.com (e.g. not on AWS or Heroku or similar) and host your actual application on a cloud provider.

CORS restrictions on browser usage

This package can't be used directly from the browser because of CORS restrictions imposed by nba.com. If you run some sort of intermediate server which relays requests to NBA.com, you can change the host the client points to by following the instructions in the Transport Layer section

NBA API

The stats.nba.com uses a large number of undocumented JSON endpoints to provide the statistics tables and charts displayed on that website. This library provides a JavaScript client for interacting with many of those API endpoints.

Getting Started

NBA.findPlayer(str) will return an object with a player's name, their ID, and their team information. This method is built into the package.

All methods in the NBA.stats namespace require an object to be passed in as a parameter. The keys to the object are in the docs for the stats namespace here

const NBA = require("nba");
const curry = NBA.findPlayer('Stephen Curry');
console.log(curry);
/* logs the following:
{
  firstName: 'Stephen',
  lastName: 'Curry',
  playerId: 201939,
  teamId: 1610612744,
  fullName: 'Stephen Curry',
  downcaseName: 'stephen curry'
}
*/
NBA.stats.playerInfo({ PlayerID: curry.playerId }).then(console.log);

For more example API calls, see /test/integration/stats.js and other test files.

Stability Warning

This is a client for an unstable and undocumented API. While I try to follow semver for changes to the JavaScript API this library exposes, the underlying HTTP API can (and has) changed without warning. In particular, the NBA has repeatedly deprecated endpoints, or added certain required headers without which requests will fail. Further, this library comes bundled with a (relatively) up-to-date list of current NBA players which is subject to change at any time -- the specific contents of it should not be considered part of this library's API contract.

Usability

To put it nicely, the NBA's API endpoints are a little clunky to work with. This library tries to strike a balance between being usable but not making assumptions about how the data will be used. Specifically, the NBA sends data in a concise "table" form where the column headers come first then each result is an array of values that need to be matched with the proper header. This library does a simple transformation to zip the header and values arrays into a header-keyed object. Beyond that, it tries to not do too much. This is important to note because sometimes the various "result sets" that come back on a single endpoint seem sort of arbitrary. The underlying HTTP API doesn't seem to follow standard REST practices; rather it seems the endpoints are tied directly to the data needed by specific tables and charts displayed on stats.nba.com. This is what I mean by "clunky" to work with -- it can be tricky to assemble the data you need for a specific analysis from the various endpoints available.

Documentation

still lots to do here...

There are four primary parts of this library

  • Top-level methods
  • stats namespacedocs
  • synergy namespace see testsdata namespace see tests
  • ~sportVu namespace~ NBA has removed sportVu endpoints. the methods exist here for backwards compatibility but they throw errors

Transport Layer

In some cases you will want to use a different transport layer to handle HTTP requests. Perhaps you have an HTTP client library you like better than what I used here. Better yet, you want to get stats for the WNBA or the G League. The following code snippet shows how to use the withTransport method to create a new client with your own transport function.

// here we are getting stats for the WNBA!

const nba = require("nba");
const getJSON = require("nba/src/get-json");

// for the G League, try "stats.gleague.nba.com"
const newHost = "stats.wnba.com";

const transport = (url, params, options) => {
  // simply swap the host and then defer the rest to the built in getJSON function
  const fixedURL = url.replace("stats.nba.com", "stats.wnba.com");
  return getJSON(fixedURL, params, options);
};

// create a new stats client here with our WNBA transport
const wnbaStats = nba.stats.withTransport(transport);

(async () => {
  const result = await wnbaStats.playerInfo({ PlayerID: "1628886" });
  console.log(result);
})();

"I don't use Node.js"

Please take a look at nba-client-template. The relevant part of the repo is a single JSON document from which many programming languages can dynamically generate an API client. The repo contains (sloppy) examples in Ruby and Python. Compiled languages can use code generation techniques to the same effect -- there's a (again, sloppy) example in Go. If you'd like me to publish it to a specific registry so you can install it with your language's package manager, please open an issue. Please note, however, that package only includes the endpoints exposed by this library under the stats namespace -- sportvu and synergy endpoints aren't yet included in it. I also plan to add a command-line interface to this library so that it can be easily driven as a child process by another program.

nba's People

Contributors

brandly avatar bttmly avatar calesce avatar code-is-alright avatar dependabot[bot] avatar homerchen19 avatar jcostello93 avatar scottdj92 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  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

nba's Issues

`data` endpoint: Add box score and play-by-play

Thanks for adding the data.scoreboard method. Please also add these data endpoints too:

  • Box score
    • Format: /data/5s/json/cms/noseason/game/{DATE}/{GAME_ID}/boxscore.json
  • Play by play
    • Format: /data/5s/json/cms/noseason/game/{DATE}/{GAME_ID}/pbp_all.json

The DATEs are in YYYYMMDD format. The GAME_IDs are from the data.scoreboard endpoint.

WIKI

Please maintain a wiki. It has been tough following the documentation

Update Docs

I know you're aware of it, but I figured I'd open the issue.

One thing I think would be nice is including an example of the options under a method, so you can see how to call the method, but also click the URL to view an actual response.

Most of my use has been reading stats-endpoints, and then logging out responses to see what data I'm working with. If you're open to it, I could follow this workflow and write some docs. Let me know what you think!

Slow stats.nba endpoints

It seems like the endpoints to stats.nba are slow. I tried making a request directly to the stats.nba API and the same thing happened. It all takes about 8~10 seconds to run.

What's interesting is that if I make a request from Postman rather than localhost, the speed is just fine.

I was wondering if I was running into a DNS lookup issue, so I curled with the following:

curl --trace-time -w "time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_appconnect: %{time_appconnect}\ntime_pretransfer: %{time_pretransfer}\ntime_redirect: %{time_redirect}\ntime_starttransfer: %{time_starttransfer}\n----------\ntime_total: %{time_total}\n" -v http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=12/25/2016

And got this as the result:

time_namelookup:  0.013
time_connect:  0.038
time_appconnect:  0.000
time_pretransfer:  0.038
time_redirect:  0.000
time_starttransfer:  9.077
----------
time_total:  9.078

Both the time_starttransfer and the ttfb from the Chrome console seems to indicate that it's something on their end?

What I'm wondering is if you're experiencing this as well?

Hangs in shell

My code is this, similar to the tutorial, in Node 8.11.2 and v4.3.0 of this package.

const nba = require('nba');

async function main() {
  const curry = nba.findPlayer('Stephen Curry');
  const player = await nba.stats.playerInfo({ PlayerID: curry.playerId });
  console.log(player);
}

main();

When I run it in my shell with node app.js, it prints the expected info, but then it just hangs and never exits the app, unless I Ctrl-C to kill it.

Is there anything I need to do, for it to end? I've never had this happen before. Does it have something to do with the promise? Yet the promise seems to resolve properly, since the console.log executes.

Recieving error for missing module.

You might need to update your package.json to include the node-fetch module. Here is the error I received after installing and trying to run the example code from the readme

module.js:340
throw err;
^
Error: Cannot find module 'node-fetch'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at createGetJson (/{PROJECT_PATH}/node_modules/nba/lib/get-json.js:24:15)
at Object. (/{PROJECT_PATH}/node_modules/nba/lib/get-json.js:63:50)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)

better errors when fetching JSON fails

when NBA changes something and starts returning e.g. HTML the errors are cryptic. using response headers and some simple heuristics we should be able to provide much better experience for users when they encounter an error

2018-19 rookies not in players.json file

Hi! I was using the findPlayer function to find a couple of rookies (Trae Young, Luka Doncic), and I saw that rookie players this season (2018-19) aren't in the players.json file. Thanks

Players database with team association

I was wondering if there's some way to connect the teams to the players? I'd like to do some stats study by team to figure out the best rotations, but right now the players.json only has first and last name, no position or team. Is there any endpoint we can take advantage of to do that?

playerProfile calls returning 500

nba.stats.playerProfile({ 
  PlayerID: 201939
}).then(profile => {
  // do something
}, error => {
  console.log(error)
})

i'm seeing an error like

[Error: 500 Internal Server Error – {"Message":"An error has occurred."}]

i'm guessing the API changed underneath you, but i haven't done any digging yet.

thanks nick!

Can't import module (returns empty object)

Hi!
When I try to import this module and use it in my app, I get an empty object and all of its functions are undefined. It seems like my text editor can see these functions, but when I run it in the browser it crashes.

Broken API end point : playerDashPtShotLog

Hi,
Today a few hours earlier I noticed nba.stats.playerDashPtShotLog, was no longer functional ; On further investigation, I found that the url is not returning any JSON data.

(URL I used)
http://stats.nba.com/stats/playerdashptshotlog?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&Period=0&PlayerID=200826&Season=2015-16&SeasonSegment=&SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision=

This makes me think the url has been removed or the API end point has been deprecated/removed
Could you point me to the new API end point having the same results of the above, I tried to find it on the stats.nba.com with no luck.

Regards

HTTP error

I've been starting to see these errors when making a Scoreboard API call:

requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://stats.nba.com/stats/scoreboard/?LeagueID=00&GameDate=02%2F01%2F2016&DayOffset=0

I can add an exception for this, but I don't know why these calls stopped working. When I actually go to the URL, it works just fine. Kind of annoying.

Test responses are undefined

Tried testing out the lib and found that responses are undefined.

Is this expected?

diff --git a/test/integration/stats.js b/test/integration/stats.js
index 93eb1fa..6115fbc 100644
--- a/test/integration/stats.js
+++ b/test/integration/stats.js
@@ -16,6 +16,7 @@ describe("#playerProfile", function () {
   it("works", function (done) {
     stats.playerProfile({playerId: steph}, function (err, response) {
       global.StatsData.playerProfile = response;
+      console.log('> profile', response);
       done(err);
     });
   });
@@ -25,6 +26,7 @@ describe("#playerInfo", function () {
   it("works", function (done) {
     stats.playerInfo({playerId: steph}, function (err, response) {
       global.StatsData.playerInfo = response;
+      console.log('> info', response);
       done(err);
     });
   });
@@ -34,6 +36,8 @@ describe("#playersInfo", function () {
   it("works", function (done) {
     stats.playersInfo(function (err, response) {
       global.StatsData.playersInfo = response;
+      console.log('> info', response);
+
       done(err);
     });
   });
> profile undefined
> info undefined
> info undefined

Angular implementation

Sorry to open an issue but i've been trying for days using this API in an AngularJs Exercise.

Im trying to use $http to GET the result of something, but when i try, i get all kind of Forbidden/Denied access to the data.

For example:

var app = angular.module('app',[]);

app.controller('myCtrl', function($http){
	var self = this;

	$http.get(http://stats.nba.com/stats/teamdashboardbygeneralsplits')
	.then(function(response) {
            self.stats = response.data;
        });
});

Is this the right way to do it or im completely off? Or do i have to use $resourceProvider?

Error examples:

GET http://stats.nba.com/stats/teamdashboardbygeneralsplits 400 (Bad Request)

XMLHttpRequest cannot load http://stats.nba.com/stats/teamdashboardbygeneralsplits. No 'Access-Control-Allow-Origin' header is present on the requested resource. The response had HTTP status code 400.

Thanks in advance.

Endpoint with the most up-to-date scores

This endpoint (which is used in this library) has by far the most up-to-date scores (within seconds of the live score). In comparison, the source currently in use by the nba library is often delayed by about 5 minutes of game-time, and even this source (which is the basis of this page as mentioned in #54) is often delayed by about a minute of game-time.

Please consider using the first URL mentioned in this post. I imagine the format is different though, so that might be a problem? I know that a number of NBA apps on GitHub use the other library for the most up-to-date scores, but this library for general player stats, etc.

Otherwise, at least consider using the second source, which I believe is the same format as the source currently in use by this library.

How to access the players and teams in nba.js

I'm pretty new to JS and I'm trying to figure out how to access the players.json data without importing the json file since the information is already included in the nba.js file? Is this possible without node?

EDIT: figured it out. nba.api.playersInfo()

Vue yarn build error

ERROR in static/js/vendor.15653ba71d70b10565f1.js from UglifyJs Name expected [./node_modules/nba/src/sport-vu.js:1,0][static/js/vendor.15653ba71d70b10565f1.js:6,6]

running yarn build, here is my .bablerc file

{ "presets": [ [ "env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } } ], "stage-2", "es2015" ], "plugins": ["transform-runtime"], "env": { "test": { "presets": ["env", "es2015", "stage-2"], "plugins": ["istanbul"] } } }

New JSON endpoints from 2014-2015 season

Hi there -- I just stumbled upon this repo thanks to a www.poundingtherock.com post, and wanted to make you aware of some endpoints that NBA.com recently added. I figured if you knew about them already, you could update your documentation, update your codebase to pull those in as well.

The nice thing about these new endpoints are that they are summarized SportVU data (at the player level) with the same object schema as all the other endpoints you've explored (with the resource and resultSets properties and so on). They are:

  • http://stats.nba.com/stats/playerdashptshotlog
  • http://stats.nba.com/stats/playerdashptreboundlogs

There's also http://stats.nba.com/stats/videoevents but it looks non-standard. Examples of the SportVU JSON:

DeAndre Jordan shot logs: http://stats.nba.com/player/#!/201599/tracking/shotslogs/
JSON: http://stats.nba.com/stats/playerdashptshotlog?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&Period=0&PlayerID=201599&Season=2014-15&SeasonSegment=&SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision=

DeAndre Jordan rebound logs: http://stats.nba.com/player/#!/201599/tracking/reboundslogs/
JSON: http://stats.nba.com/stats/playerdashptreboundlogs?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&Period=0&PlayerID=201599&Season=2014-15&SeasonSegment=&SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision=

This data appears to be available for all of the 2013-14 season as well.

Live box score data

I noticed that the scoreboard endpoint is updated while games are being played, but the two box score endpoints (boxScore and boxScoreSummary) aren't. Do you know any other way to get live box score data using this module?

player movement API

There is a JSON endpoint serving the player movement data that gets visualized in the stats.nba.com play-by-play area. To see what I'm talking about go here, then click on one of the plays and select "movement" (not "video").

I've done some initial work (on the movement branch) to pull the data for an entire game from the NBA's api, but as usual, the data is in unlabeled tuples to reduce data size, making it unclear what the data actually means. There is some example JSON in the /src/apis/movement directory, any help understanding this scheme would be much appreciated!

API to fetch team logo

Hello

It would be great if there was an API call that will return url to team logo. Something like eg:

var url = nba.getTeamLogo(teamId)

Team Stats - Advanced

NBA.stats.teamStats({ TeamID: 1610612737 }).then(response => {
this.atlantaStats = response;
});

I have this call setup, but was wondering how you would drill down to a team's Advanced stats - such as Offensive Rating, Defensive Rating, etc. This call returns what appears to be the "Traditional" stats.

Thanks

Usage

How is this supposed to be used? If it is an npm package that would lead me to believe I could use it with my Angular application. What is its intended use if it can't be used in the browser? Could I deploy this on a server and use it as middleware for the endpoints?

Cannot find module 'querystring' when using in React-Native app

Hello,

I am trying to use this module in react-native app but I am getting following error:

error: bundling failed: Error: Unable to resolve module `querystring` from `/Users/zymfilip/Development/src/NBABrowseApp/node_modules/nba/src/stats.js`: Module does not exist in the module map

This might be related to https://github.com/facebook/react-native/issues/4968
To resolve try the following:
  1. Clear watchman watches: `watchman watch-del-all`.
  2. Delete the `node_modules` folder: `rm -rf node_modules && npm install`.
  3. Reset Metro Bundler cache: `rm -rf /tmp/metro-bundler-cache-*` or `npm start -- --reset-cache`.  4. Remove haste cache: `rm -rf /tmp/haste-map-react-native-packager-*`.

I tried proposed solution but it does not work. Here's my env setup:

node v6.13.1
npm v3.10.10
nba v4.2.0

Stats API rejecting traffic from AWS?

About a year ago I wrote a shot chart app in R that uses the the shotchartdetail endpoint: https://github.com/toddwschneider/ballr

Recently my hosted version of the app stopped working. The app still works fine if I run it on my own computer. It seems like the problem is that the Stats API is rejecting requests that come from AWS, where my app is hosted. I've tried tinkering with request headers but haven't been able to make anything work.

Just curious if anyone here has ideas for how to make a request to shotchartdetail from within AWS. Thanks!

Make stats endpoints https

Can you make the stats.nba.com endpoints https? I'd be happy to do a PR if you want to add me as a contributor.

Live games aren't updated

Not sure where the problem lies, but there are some games that are ongoing right now, and the NBA website here shows the correct score and time remaining, yet this library's data (which presumably uses the same source) is lagging behind (i.e. showing scores and times that are a few minutes to an hour old).

Access Denied

When using the playerSplits method I get the following:
You don't have permission to access "http://stats.nba.com/stats/playerdashboardbygeneralsplits?" on this server.

Have they changed something and we can't access it now?

teamPlayerDashboard return 400 with right parameter

Hi there, when trying to use the teamPlayerDashboard endpoint I encounter a 400 bad request throwing The field TeamID must be between 1 and 2147483647. No matter the teamID I use I get the same response.

Here is my call

nba.stats.teamPlayerDashboard({
  teamID: 1610612749,
  SeasonType: "Regular Season"
}).then(function(data) {
  fs.writeFile('team-player-dashboard.json', JSON.stringify(data, null, 2), function(err) {
    if (err) throw err
    console.log('team-player-dashboard.json saved!')
  })
}).catch(function(err) {
  console.log(err)
})

Capitalization on Query Params

Hey Nick,

I was messing around with some of the API methods, and I noticed some behavior where the parameters had to be lower case for them to override the defaults.

Here's an example in express, using the correct key, 'Season':

router.get('/', function(req, res) {
  nba.ready(function() {
    nba.api.playersInfo({ Season: "2010-11"}, function(err, data) {
      res.send(data);
    });
  });
});

This would result in the request:

{ LeagueID: '00', Season: '2014-15', IsOnlyCurrentSeason: '1', season: '2010-11' }

However, if I changed the key to 'season', the request would work properly, and I would get the players for the 2010-11 season:

{ LeagueID: '00', Season: '2010-11', IsOnlyCurrentSeason: '1' }

I know this has something to do with the twoWayMap function and it should work regardless of capitalization. I'm not sure yet how all of the utility functions work and how they transform the parameters, but when I get some time to dig in I'll hopefully be able to figure it out and make a PR.

using NBA endpoints with AJAX

Apologies in advance since this isn't an issue with this js client, but just an issue with using the NBA APIs more generally.

I'm trying to build a simple site that uses some of the NBA endpoints via AJAX, and I'm running into CORS issues. Basically I'm trying to use jQuery to retrieve some data from stats.nba.com and data.nba.com (e.g. https://data.nba.net/10s/prod/v1/2017/playoffsBracket.json). The problem I'm running into is that the response headers don't include Access-Control-Allow-Origin, so the browser refuses it.

The part that's confusing to me is that on nba.com it's seemingly doing the exact same thing but in that case the response headers include Access-Control-Allow-Origin: *. E.g. on this page.

In the readme here it says that this works for the browser or Node, so I'm wondering if you have a solution for this problem. Is there some way to get the API to return Access-Control-Allow-Origin: * in the response header so that I can call it with AJAX?

Failed to minify the code

using create-react-app

npm run build

Failed to minify the code from this file: 

 	./node_modules/nba/src/get-json.js:24 

Read more here: http://bit.ly/2tRViJ9

npm ERR! code ELIFECYCLE

Getting 400 Bad Request despite supplying required parameters

Hi, I just discovered this package and am trying to use it without much success:

My short script:

const NBA = require('nba');

NBA.stats.scoreboard({GameDate: '03/19/2017'}).then((data) => {
  console.log('data = ' + JSON.stringify(data));
}).catch((err) => {
  console.log('Error: ' + err);
});

Produces the following error:

$ npm start

> [email protected] start c:\Users\Quasar\Desktop\nba-test
> node index.js

Error: Error: 400 Bad Request - GameDate is required

I looked in the tests and made sure that I was inputting the GameDate parameter correctly, and am still receiving this error. Please help!

Thanks

unable to install

I am installing with npm install and also tried with sudo npm install. Keep getting cannot read property o of undefined

0.3.0 broke promises for me

Hey, first off, just wanted to say a huge thanks for your work on this project. I've used it to build an automatic stats generator for Pounding The Rock post-game summary posts. Your node wrapper around the utterly undocumented stats.nba.com endpoints is a lifesaver.

So I just tried to update from 0.2.0 to 0.3.0, but now I'm getting errors:

[TypeError: Must pass a callback.]

This occurs when I use the Promise-style .then():

nba.api.scoreboard({ GameDate: moment(date).format('MM/DD/YYYY') }).then(function(resp) {
        /* do stuff */
    });

It is important that I be able to use promises, since I have a part of my app in which I make multiple calls and use Promise.all().then() to fire my callback after all of the promises have been resolved:

Promise.all([nba.api.boxScoreFourFactors(options), nba.api.boxScoreAdvanced(options), nba.api.boxScoreUsage(options), nba.api.playByPlay(options)])
       .then(function(results) { /*do stuff with the 3 response*/ })

If you could update so that callback functions are not required, that would be great, as I'd love to get up to date with your latest.

Thanks again for the great project!

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.