Giter Club home page Giter Club logo

fullcontact-api-ruby's Introduction

FullContact Ruby Gem

A Ruby wrapper for the FullContact API

Build Status Gem Version Code Climate Test Coverage

Changes

  • 0.18.1
    • Always use the token in header even when the option is given as query.
  • 0.18.0
    • Add ability to query Company API by company name
    • Fix XML bug in Company API module
  • 0.17.0 - Upgrade Faraday plugin to ~> 0.11.0
  • 0.16.0 - Upgrade Faraday plugin to ~> 0.10.0.
  • 0.15.0 - Add header-based auth via config.auth_type = :header control.
  • 0.14.0 - Remove plissken gem to support Rails 5 (#42)
  • 0.13.0
    • Raise ArgumentError if query by Facebook ID/username is used.
    • Remove deprecated messages.
  • 0.12.0 - include_headers_in_response = true includes response headers in returned payload
    • Accessible as http_headers in response. Also accessible on thrown errors (e.g. RateLimited)
  • 0.11.0 - Plisskin transformation can be disabled by specifying a skip_rubyize = true in config block.
  • 0.10.0 - Support for FullContact Company API
  • 0.9.0 - Removed Rash gem and replaced with Mashify + Plisskin
  • 0.8.2 - Fix for 0.8.0 constant resolution issue.
  • 0.8.0
    • Hashie now allowed from [2.2, 4.0) to support a wide range of other applications
    • Default useragent includes version number for our own information
    • Useless XML mode and dep on multi_xml removed
    • Code reformatting & basic code hygiene, prep for new features in 0.9.0
  • 0.7.0 - Faraday 0.9.0
  • 0.6.0 - Removal of timeoutSeconds parameter. This parameter is automatically stripped from your request if included.

Installation

gem install fullcontact

Documentation

http://rdoc.info/gems/fullcontact

Usage Examples

    require 'fullcontact'

    # This could go in an initializer
    FullContact.configure do |config|
        config.api_key = 'fullcontact_api_key_goes_here'
    end

    # Get information about an email address
    person = FullContact.person(email: '[email protected]')

All returned values are Hashie structs. You can access fields as if they were fields:

    # Get person's family_name
    person.contact_info.family_name
     => "Lorang"

But you can also turn it into a normal hash

    # Get person's family_name
    person.to_hash['contact_info']['family_name']
     => "Lorang"

Authentication is done through query parameters by default. If you want to use headers instead:

    # This could go in an initializer
    FullContact.configure do |config|
        config.api_key = 'fullcontact_api_key_goes_here'
        config.auth_type = :headers # :header or :query
    end

There's other ways you can query the Person API:

    # Get information about an email address, organized by hashes vs. lists
    person2 = FullContact.person(email: '[email protected]', style: 'dictionary')

    # You can pass in any arbitrary parameters the Person API supports
    person3 = FullContact.person(email: '[email protected]', style: 'dictionary', webhookUrl: 'https://...')

    # Get information about a twitter handle
    person4 = FullContact.person(twitter: "bartlorang")

    # Get information from a phone number
    person6 = FullContact.person(phone:13037170414)

    # Get information about a twitter and ensure a 30s socket open timeout and a 15s socket read timeout
    # Can throw a Faraday::Error::TimeoutError if timeouts are exceeded
    person7 = FullContact.person({:twitter => "bartlorang"}, {:request => {:timeout => 15, :open_timeout => 30}})

Response formats can more closely mirror FullContact's APIs by disabling snake_case transformation:

    FullContact.configure do |config|
        config.api_key = "fullcontact_api_key_goes_here"
        config.skip_rubyize = true
    end

    person8 = FullContact.person(email: "[email protected]")

    => #<Hashie::Mash contactInfo=#<Hashie::Mash chats=[#<Hashie::Mash client="gtalk" handle="[email protected]">,
    #<Hashie::Mash client="skype" handle="bart.lorang">] familyName="Lorang" fullName="Bart Lorang" givenName="Bart...

You can also query the Company API

    # Get information about a company
    company1 = FullContact.company(domain: 'fullcontact.com')

    company1.organization.name
     => "FullContact Inc."

The Company API also supports searching by company name. Please see our API documentation for more details.

    # Gets a list of search results for a company name ordered by relevance
    companies = FullContact.company(companyName: 'FullContact')

    # Get the API url for full company profile lookup (append api key to use)
    # Note the array access, we are just grabbing the first (top) result
    companies[0].company_api_link
     => "https://api.fullcontact.com/v2/company/lookup?domain=fullcontact.com&apiKey="

    companies[0].org_name
     => "FullContact Inc."

Contributions

A full list of contributors can be found in GitHub

License

Copyright (c) 2016 FullContact Inc. and contributors

See LICENSE for details.

fullcontact-api-ruby's People

Contributors

ajglover avatar ameng avatar brandonmwest avatar digitaltracer avatar ericboehs avatar i-taptera avatar jamesy829 avatar jjb avatar johkelly avatar oagr avatar parismi avatar scottwater avatar skiggz avatar stefanofontanelli avatar swanandp avatar xorlev 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

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

fullcontact-api-ruby's Issues

NoMethodError: undefined method '[]=' for nil:NilClass

Hi!
I'm using version 0.16.0 and I'm using config.include_headers_in_response = true configuration option. Here's the stacktrace:

…-ruby-4b4dcabc0da4/lib/faraday/response/add_headers.rb:    4:in `on_complete'
…gems/2.4.0/gems/faraday-0.10.1/lib/faraday/response.rb:    9:in `block in call'
…gems/2.4.0/gems/faraday-0.10.1/lib/faraday/response.rb:   61:in `on_complete'
…gems/2.4.0/gems/faraday-0.10.1/lib/faraday/response.rb:    8:in `call'
…gems/2.4.0/gems/faraday-0.10.1/lib/faraday/response.rb:    8:in `call'
…gems/faraday-0.10.1/lib/faraday/request/url_encoded.rb:   15:in `call'
…/2.4.0/gems/faraday-0.10.1/lib/faraday/rack_builder.rb:  139:in `build_response'
…ms/2.4.0/gems/faraday-0.10.1/lib/faraday/connection.rb:  377:in `run_request'
…ms/2.4.0/gems/faraday-0.10.1/lib/faraday/connection.rb:  140:in `get'
…ntact-api-ruby-4b4dcabc0da4/lib/fullcontact/request.rb:   17:in `request'
…ntact-api-ruby-4b4dcabc0da4/lib/fullcontact/request.rb:    6:in `get'
…api-ruby-4b4dcabc0da4/lib/fullcontact/client/person.rb:   15:in `person'
…s/fullcontact-api-ruby-4b4dcabc0da4/lib/fullcontact.rb:   23:in `method_missing'
…services/contacts/full_contact/full_contact_service.rb:   32:in `person'
...

So it seems that when FullContact returns error (NotFound for example), then in the on_complete callback env.body is nil.

Syntax example in Readme uses "headers" instead of "header"

Took me a little bit of time to figure this out.

# This could go in an initializer
    FullContact.configure do |config|
        config.api_key = 'fullcontact_api_key_goes_here'
        config.auth_type = :headers # :header or :query
    end

Should be

# This could go in an initializer
    FullContact.configure do |config|
        config.api_key = 'fullcontact_api_key_goes_here'
        config.auth_type = :header # :header or :query
    end

Incompatibility with Twitter Gem

Can you update the dependency of faraday to ~> 0.7.5?

Bundler could not find compatible versions for gem "faraday":
In Gemfile:
fullcontact (>= 0) ruby depends on
faraday (~> 0.6.1) ruby

twitter (>= 0) ruby depends on
  faraday (0.7.5)

FullContact::NotFound throwing error not proper status

When I submit an email that "claims" to return a 404 I end up getting an error. I don't think I should have to catch this as an error right?

1.9.2p320 :008 > person = FullContact.person(email: '[email protected]')FullContact::NotFound: GET https://api.fullcontact.com/v2/person.json?email=crapemail%40doodle.com&apiKey=13c50288e1c1a556: 404
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/fullcontact-0.4.1/lib/faraday/response/fullcontact_errors.rb:12:in `on_complete'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/response.rb:9:in `block in call'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/response.rb:63:in `on_complete'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/response.rb:8:in `call'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday_middleware-0.8.8/lib/faraday_middleware/response_middleware.rb:30:in `call'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/response.rb:8:in `call'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/request/url_encoded.rb:14:in `call'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/connection.rb:226:in `run_request'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/faraday-0.8.1/lib/faraday/connection.rb:87:in `get'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/fullcontact-0.4.1/lib/fullcontact/request.rb:15:in `request'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/fullcontact-0.4.1/lib/fullcontact/request.rb:6:in `get'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/fullcontact-0.4.1/lib/fullcontact/client/person.rb:11:in `person'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/fullcontact-0.4.1/lib/fullcontact.rb:21:in `method_missing'
from (irb):8
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
from /Users/amanelis/.rvm/gems/ruby-1.9.2-p320@milkshake/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'1.9.2p320 :009 > person

=> #<Hashie::Rash message="Queued for search. Please retry your query in 5 minutes!" status=202>

Then when I try to access the object I get do not get a 404 on the status.

1.9.2p320 :011 > person
=> #<Hashie::Rash message="Queued for search. Please retry your query in 5 minutes!" status=202> 

Am I crazy or this is kind not making sense?

JSON formatting inconsistency

If you use this code:

FullContact.person(email: "[email protected]")

your JSON responses come out as snake_case

"social_profiles": [
{
"type": "linkedin"
}]

but hitting the Full Contact API directly this is presented as CamelCase

"socialProfiles": [
{
"type": "linkedin"
}]

which is as per their schema: http://www.fullcontact.com/developer/docs/person/

Not necessarily an issue but if you are trying to mix webhooks via the FC gem you then get CamelCase which is inconsistent. So this:

FullContact.person(email: "[email protected]", webhookUrl: ENV['WEBHOOK_URL'], webhookId:"[email protected]")

Also gives you "socialProfiles" (assuming because it's just a POST from Full Contact)

I think:

FullContact.person(email: "[email protected]")

and

FullContact.person(email: "[email protected]", webhookUrl: ENV['WEBHOOK_URL'], webhookId:"[email protected]")

should return the same JSON Format (Probably as per the schema)

Cheers!

Enhanced

Does this API support Enhanced lookup?

Company Search Feature

Hey! Just getting started with FullContact and am interested in using the company search functionality. I looked through the repo and couldnt find functionality with the company/search api domain.

Bundler could not find compatible versions for gem "hashie"

It seems fullcontact uses hashie (~> 1.1.0). One of my other gem(which I am currently using) uses hashie (2.1.1). Because of this i am getting this error, "Bundler could not find compatible versions for gem "hashie"".

It is not possible to have different versions of same gem. Because of this, i am not able to use fullcontact-api-ruby gem. Given that, current stable version of hashie is 3.0, Why is it locked at version 1.1?

Will there be an update in near future? (or) is there a fix for this?

Cannot get response in json same as webhook

Hi

I am using the api to access data in two ways( webhook and normal request
so
result = FullContact.person(email: email, webhookBody: 'json', webhookUrl: webhook_url) returns the results in json format
but
FullContact.person(email: email, format: 'json') returns the results in Hashie format

How can i get the same format(json) in both requests?

Thank you for the help

Just a simple hash?

Is there a way to get the results of a request back as a simple hash rather than the Hashie format? Or, perhaps you could provide a couple of examples of how to interact with the Hashie object?

(I'm not familiar with Hashie so having to learn it is creating a barrier for my script creation; a simple JSON response would be much more straightforward for me :))

Gateway for testing

Is there anyway to run tests? Maybe a dummy-data test server that doesnt deduct from monthly limits for every 200 response status?

Undefined method '[]' showing up

Getting the following error when trying to call FullContact.configure

/gems/fullcontact-0.6.1/lib/fullcontact.rb:20:in `method_missing': undefined method `[]' for FullContact:Module (NoMethodError)

Not sure what's going on here.

Better handling of the different status codes

I want to know, if it is possible to fix or if it is under develop a better handling of statuses like the 404 (that is raising a custom error) and the 202 (Your request is currently being processed. You can check again later to see the request has been processed.)

Thanks

Update to Hashie 3.2.0

Omniauth depends on hashie 3.2.0. It would be convenient to get fullcontact to update its hashie dependency to version 3.2.0

response formatting

We would like to be able to retrieve the data with the default FullContact formatting. It looks like the gem is reformatting all the keys to be underscored, but our app is expecting camelCasing. Is it possible to get a response with camelCasing instead?

error for emails such as this one: [email protected]

Plugin works for many email addresses but there are several producing errors. Here is one example.

calling this:
person = FullContact.person(email: '[email protected]')

produces this:
.rvm/gems/ruby-2.4.1/gems/fullcontact-0.18.0/lib/faraday/response/fullcontact_errors.rb:12:in on_complete': GET https://api.fullcontact.com/v2/person.json?apiKey=EPBLFrAaubnSB11Pe4T7W2ay6LoBfr9I&email=alostengineer%40users.noreply.github.com: 404 (FullContact::NotFound) from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/response.rb:9:in block in call'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/response.rb:61:in on_complete' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/response.rb:8:in call'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday_middleware-0.12.2/lib/faraday_middleware/response_middleware.rb:31:in call' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/response.rb:8:in call'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/response.rb:8:in call' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/request/url_encoded.rb:15:in call'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/rack_builder.rb:139:in build_response' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/connection.rb:377:in run_request'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/faraday-0.11.0/lib/faraday/connection.rb:140:in get' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/fullcontact-0.18.0/lib/fullcontact/request.rb:17:in request'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/fullcontact-0.18.0/lib/fullcontact/request.rb:6:in get' from /Users/rd/.rvm/gems/ruby-2.4.1/gems/fullcontact-0.18.0/lib/fullcontact/client/person.rb:15:in person'
from /Users/rd/.rvm/gems/ruby-2.4.1/gems/fullcontact-0.18.0/lib/fullcontact.rb:23:in `method_missing'

Publish new version

I see 0.18.1 has been tagged but is not published yet. Could this please be updated so that we can resolve the Faraday dependency?

Issue with Multi-Json dependency

Sorry to keep you so busy but I still can't add this to my project because if multi-json now. Thanks for the quick fix before and I imagine it must be tough to keep up with all the changing gems!

Bundler could not find compatible versions for gem "multi_json":
In Gemfile:
fullcontact (>= 0) ruby depends on
multi_json (~> 1.0.0) ruby

rabl (~> 0.6.10) ruby depends on
  multi_json (1.1.0)

Faraday and Twitter Gem Dependencies

Hi,

I noticed you just updated faraday to 0.7.5 but I can't include your gem until it works with the twitter gem which requires at least faraday 0.8.0. I would think it would be a good idea to try and keep up with some of their dependencies since this gem and the twitter gem go hand in hand.

Keep up the good work!

Faraday::ConnectionFailed: execution expired when setting timeout

I'd expect a subclass of a Fullcontact Error to be returned if we can't connect, not a Faraday error.

We're passing these options along: { request: { timeout: 15, open_timeout: 5 }

/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:879 in initialize
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:879 in open
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:879 in block in connect
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/timeout.rb:89 in block in timeout
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/timeout.rb:99 in call
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/timeout.rb:99 in timeout
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:878 in connect
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:863 in do_start
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:852 in start
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:1375 in request
/usr/local/tanga/ruby_2.2.0-gh-201503006-1/lib/ruby/2.2.0/net/http.rb:1133 in get
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:80 in perform_request
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:40 in block in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:87 in with_net_http_connection
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/adapter/net_http.rb:32 in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/response.rb:8 in call
vendor/bundle/ruby/2.2.0/gems/faraday_middleware-0.10.0/lib/faraday_middleware/response_middleware.rb:30 in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/response.rb:8 in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/response.rb:8 in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/request/url_encoded.rb:15 in call
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/rack_builder.rb:139 in build_response
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/connection.rb:377 in run_request
vendor/bundle/ruby/2.2.0/gems/faraday-0.9.2/lib/faraday/connection.rb:140 in get
vendor/bundle/ruby/2.2.0/gems/fullcontact-0.13.0/lib/fullcontact/request.rb:15 in request
vendor/bundle/ruby/2.2.0/gems/fullcontact-0.13.0/lib/fullcontact/request.rb:6 in get
vendor/bundle/ruby/2.2.0/gems/fullcontact-0.13.0/lib/fullcontact/client/person.rb:15 in person
vendor/bundle/ruby/2.2.0/gems/fullcontact-0.13.0/lib/fullcontact.rb:22 in method_missing
app/tanga_api/customers/profile.rb:33 in block in fetch_and_store_profile

Response headers

Hello,

We are running into rate limits issues, but are not sure how to retrieve the X-Rate-Limit-Remaining header from the response. It would be nice if there was a key "headers" or something in the Hashie::Mash that contained all the response headers for review.

License missing from gemspec

RubyGems.org doesn't report a license for your gem. This is because it is not specified in the gemspec of your last release.

via e.g.

  spec.license = 'MIT'
  # or
  spec.licenses = ['MIT', 'GPL-2']

Including a license in your gemspec is an easy way for rubygems.org and other tools to check how your gem is licensed. As you can imagine, scanning your repository for a LICENSE file or parsing the README, and then attempting to identify the license or licenses is much more difficult and more error prone. So, even for projects that already specify a license, including a license in your gemspec is a good practice. See, for example, how rubygems.org uses the gemspec to display the rails gem license.

There is even a License Finder gem to help companies/individuals ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec. This is an important enough issue that even Bundler now generates gems with a default 'MIT' license.

I hope you'll consider specifying a license in your gemspec. If not, please just close the issue with a nice message. In either case, I'll follow up. Thanks for your time!

Appendix:

If you need help choosing a license (sorry, I haven't checked your readme or looked for a license file), GitHub has created a license picker tool. Code without a license specified defaults to 'All rights reserved'-- denying others all rights to use of the code.
Here's a list of the license names I've found and their frequencies

p.s. In case you're wondering how I found you and why I made this issue, it's because I'm collecting stats on gems (I was originally looking for download data) and decided to collect license metadata,too, and make issues for gemspecs not specifying a license as a public service :). See the previous link or my blog post about this project for more information.

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.