Git Product home page Git Product logo

fbconsole's Introduction

fbconsole

fbconsole is a small Facebook API client for use in Python scripts.

You can install fbconsole using pip:

pip install fbconsole

Quick Start Guide

Authentication

For many API calls, you will need to authenticate your script with Facebook. fbconsole makes this easy by providing an authenticate function. If your script needs extended permissions, such as the permission to post a status update, you can specify which extended permissions to request using the AUTH_SCOPE setting. For example:

import fbconsole

fbconsole.AUTH_SCOPE = ['publish_stream', 'publish_checkins']
fbconsole.authenticate()

You can find a list of permissions in the Facebook Login Permissions reference.

During the authentication process, a browser window will be opened where you can enter in your Facebook credentials. After logging in, you can close the browser window. Your script will continue executing in the background.

The access token used for authentication will be stored in a file, so the next time your script is executed, the authenticate() function won't have to do anything. To remove this access token, you can call logout():

fbconsole.logout()

See below for other modes of authentication.

Graph API Basics

You can make HTTP POST requests using the post function. Here is how you would update your status:

status = fbconsole.post('/me/feed', {'message':'Hello from my awesome script'})

You can make HTTP GET requests using the get function. Here is how you would fetch likes on a status update:

likes = fbconsole.get('/'+status['id']+'/likes')

You can make HTTP DELETE requests using the delete function. Here is how you would delete a status message:

fbconsole.delete('/'+status['id'])

To upload a photo, you can provide a file-like object as a POST parameter:

fbconsole.post('/me/photos', {'source':open('my-photo.jpg')})

You can also make FQL queries using the fql function. For example:

friends = fbconsole.fql("SELECT name FROM user WHERE uid IN "
                        "(SELECT uid2 FROM friend WHERE uid1 = me())")

If you just want a URL to a particular Graph API endpoint, for example to download a profile picture, you can use the graph_url function:

profile_pic = graph_url('/zuck/picture')
urlretrieve(profile_pic, 'zuck.jpg')

Advanced Graph API

fbconsole also provides access and utilities around some more advanced Graph API features.

iter_pages

If you are trying to fetch a lot of data, you may be required to make multiple requests to the Graph API via the "paging" values that are sent back. You can use iter_pages to automatically iterate through multiple requests. For example, you can iterate through all of your posts:

for post in iter_pages(fbconsole.get('/me/posts')):
    print post['message']

More Authentication Options

By default, fbconsole will make all its requests with the app ID of the fbconsole Facebook app. If you want the requests to be made by your own Facebook app, you must modify the APP_ID setting. For example:

fbconsole.APP_ID = '<your-app-id>'
fbconsole.authenticate()

For the authentication flow to work, you must configure your Facebook app correctly by setting the "Site URL" option to http://local.fbconsole.com:8080.

If you don't want to change your app settings, you can also specify an access token to use directly, in which case you can skip authentication altogether:

fbconsole.ACCESS_TOKEN = '<your-access-token>'

As a means to set the ACCESS_TOKEN, fbconsole provides an automatic mechanism (Python 2.x only) for authenticating server-side scripts by completing the OAuth process automatically:

# WARNING: only supported for Python 2.x
fbconsole.automatically_authenticate(
    username,     # Facebook username for authentication
    password,     # Facebook password for authentication
    app_secret,   # App secret from Facebook app settings
    redirect_uri, # Redirect URI specified in Facebook app settings
)

This authentication method is particularly helpful when running cron jobs that grab data from the Graph API on a daily basis. If you have any trouble using the automatic_authentication method, be sure to double-check that the username, password, app secret, and redirect URI are all consistent with your app's settings.

Other Options

There are a few other options you can specify:

  • SERVER_PORT controls which port the local server runs on. If you modify this, make sure your app's settings on Facebook, specifically the "Site URL" field, reflect the port number you are using. The default is 8080.

  • ACCESS_TOKEN_FILE controls where the access token gets stored on the file system. The default is .fb_access_token.

  • AUTH_SUCCESS_HTML is the HTML page content displayed to the user in their browser window once they have successfully authenticated.

  • SANDBOX_DOMAIN lets you specify a special domain to use for all requests. For example, setting SANDBOX_DOMAIN to "beta" will allow you to test Facebook's Beta Tier by sending all requests to http://graph.beta.facebook.com. See the Beta Tier docs for more information.

Feedback

For issues pertaining to fbconsole only, file an issue on GitHub. For issues with the Graph API or other aspects of Facebook's platform, please refer to the developer docs or file a bug.

License Information

fbconsole is licensed under the license found in the LICENSE file in the root directory of this source tree.

fbconsole's People

Contributors

adamgross42 avatar jamesgpearce avatar michaelabon avatar myusuf3 avatar pcardune avatar psineur 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

fbconsole's Issues

Video Upload Support

videos must be uploaded to graph-video.facebook.com instead of just graph.facebook.com. We should detect a video upload api call and change the url automatically.

iter_pages?

I might be missing something really simple, but using iter_pages throws a NameError: (global name 'iter_pages' is not defined).

I assume I can use fbconsole.iter_pages(fbconsole.get('/me/posts')) to get the expected results?

Automatic Facebook Authentication not working

I want to automatically authenticate into facebook without using a browser or any users involvement.

I've tried several pieces of sample code that says it will do that, but I always come back to this error. I think it might have something to do with a certificate?

Any insight would be appreciated.

Thanks!

Traceback (most recent call last):
File "test.py", line 16, in
'http://local.fbconsole.com:8080/',
File "/usr/local/lib/python2.7/dist-packages/fbconsole-0.3-py2.7.egg/fbconsole.py", line 427, in automatically_authenticate
code = oauth["code"][0]
KeyError: 'code'

HTTP Error 400 - After changing APP_ID

I changed APP_ID for my Facebook's APP ID, but after making the change it seems that I get a 400 HTTP Error: Bad request.

Did I miss anything here?

Traceback (most recent call last):
  File "__init__.py", line 11, in <module>
stat.postMessage()
  File "/home/ephexeve/Workspace/FacebookConsole/poststatus.py", line 14, in     postMessage
    status = fbconsole.post(WALL_STATUS, {"message": self.message})
  File "/usr/lib/python2.7/site-packages/fbconsole.py", line 286, in post
    return json.load(urllib2.urlopen(request))
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request

FQL queries returning nothing

Hey there,

Most FQL queries from fbconsole seem to not return anything, whereas the queries work from the facebook FQL documentation pages at http://developers.facebook.com/docs/reference/fql/stream/

ie,
fbconsole.fql("SELECT post_id, actor_id, target_id, message FROM stream WHERE filter_key = 'others' AND source_id = me()")

returns [], whereas the same query when done via Facebook itself returns all the posts others have made on my wall.

Removing Status not made by fbconsole

When trying to remove a status made on the main site using fbconsole.delete I get the following error

File "./DelComment.py", line 9, in
fbconsole.delete('/'+id)
File "/usr/local/lib/python2.6/dist-packages/fbconsole.py", line 239, in delete
return post(path, params)
File "/usr/local/lib/python2.6/dist-packages/fbconsole.py", line 225, in post
return json.load(opener.open(_get_url(path), params))
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 435, in error
return self._call_chain(_args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(_args)
File "/usr/lib/python2.6/urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

It works fine when the status was made via the fbconsole calls, but not when made via the site. The Id's are of a similar format too.

[Related to #25] Expired Token kills fbconsole (Original Title: "Problem posting status in facebook")

I use your amazing software but in the last days i have a problem posting status in facebook

Traceback (most recent call last):
File "/opt/mis_scripts/publicarenfacebook", line 103, in
fbconsole.post('/me/feed', {'message': cadena})
File "build/bdist.linux-x86_64/egg/fbconsole.py", line 763, in post
File "build/bdist.linux-x86_64/egg/fbconsole.py", line 667, in post
File "build/bdist.linux-x86_64/egg/fbconsole.py", line 280, in _safe_json_load
File "build/bdist.linux-x86_64/egg/fbconsole.py", line 277, in _safe_url_load
fbconsole.OAuthException: Error validating access token: Session has expired on Thursday, 07-May-15 03:00:00 PDT. The current time is Thursday, 07-May-15 04:30:19 PDT.

i actualize the token but appears the same message

when i try the other authentication it says

Traceback (most recent call last):
File "8txt2facebook2", line 19, in
redirect_uri
File "build/bdist.linux-x86_64/egg/fbconsole.py", line 413, in automatically_authenticate
File "build/bdist.linux-x86_64/egg/mechanize/_mechanize.py", line 524, in select_form
mechanize._mechanize.FormNotFoundError: no form matching nr 0

thanks for your answer!

Move to Requests

I've used this library before and have found it very easy to use and of high quality.
This will simplify fbconsole's code and possible solve few existing issues.

Facebook won't let me use fbconsole with new APP_ID

According to the documentation, I need to change the fbconsole's APP_ID variable to authenticate with any app other than fbconsole. I assigned my APP_ID and changed the SITE_URL to the following:

http://local.fbconsole.com:8080

However, even after doing these things, facebook still gives me the error "Given URL is not allowed by the Application configuration..."

In case you're wondering, my APP_ID is 136092716585009 and the app domains box is currently empty (although I tried it with local.fbconsole.com and it still didn't work).

How can I use a different APP_ID other than fbconsole's without getting this error?

Given URL is not permitted by the application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains

I have used the following steps to configure the facebook app:
My project is in the smm/smm_app folder

  1. installed django-allauth
  2. Added the following bits to settings.py:

AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of allauth
"django.contrib.auth.backends.ModelBackend",
# allauth specific authentication methods, such as login by e-mail
"allauth.account.auth_backends.AuthenticationBackend"
)

TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)

auth and allauth settings

LOGIN_REDIRECT_URL = '/'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
'SCOPE': ['email', 'publish_stream'],
'METHOD': 'js_sdk' # instead of 'oauth2'
}
}

And to INSTALLED_APPS, we’ll add these:

'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',

Now we have to add this to urls.py:

url(r'^accounts/', include('allauth.urls')),

And finally, we’ll create the database:

python manage.py syncdb

  1. Create and configure a Facebook app

  2. selected Web as the platform

  3. url: http://127.0.0.1:8000/

  4. Add the following parameters to the database:
    UPDATE django_site SET DOMAIN = '127.0.0.1:8000', name = 'SMM' WHERE id=1;
    INSERT INTO socialaccount_socialapp (provider, name, secret, client_id, key)
    VALUES ("facebook", "Facebook", "app-secret", "app-id-here", '');
    INSERT INTO socialaccount_socialapp_sites (socialapp_id, site_id) VALUES (1,1);

Now when I click 'Facebook', I get the sign-in page. But after putting in the credentials and clicking login, I get this message:
"Given URL is not permitted by the application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains."

Please help.

Uploading a photo produces HTTP Error 502

The following call produces an error:

>>> fb.post('/me/photos',{'source':open('0008.jpg')})

---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
C:\java\python\Python27\Scripts\ in ()
----> 1 fb.post('/me/photos',{'source':open('0008.jpg')})

C:\java\python\Python27\lib\site-packages\fbconsole-0.3-py2.7.egg\fbconsole.pyc
in post(path, params)
    626
    627     """
--> 628     return _get_client().post(path, params=params)
    629
    630 def delete(path, params=None):

C:\java\python\Python27\lib\site-packages\fbconsole-0.3-py2.7.egg\fbconsole.pyc
in post(self, path, params)
    533             data, headers = poster.encode.multipart_encode(params)
    534             request = Request(self.__get_url(path), data, headers)
--> 535             return _safe_json_load(request)
    536         else:
    537             opener = build_opener(

C:\java\python\Python27\lib\site-packages\fbconsole-0.3-py2.7.egg\fbconsole.pyc
in _safe_json_load(*args, **kwargs)
    258
    259 def _safe_json_load(*args, **kwargs):
--> 260     f = _safe_url_load(*args, **kwargs)
    261     if six.PY3:
    262         return json.loads(f.read().decode('utf-8'))

C:\java\python\Python27\lib\site-packages\fbconsole-0.3-py2.7.egg\fbconsole.pyc
in _safe_url_load(*args, **kwargs)
    255     except HTTPError, e:
    256         error = _handle_http_error(e)
--> 257     raise error
    258
    259 def _safe_json_load(*args, **kwargs):

HTTPError: HTTP Error 502: Error parsing server response

FBConole: Inconsistente state

I saw this cool library but I've been having issues trying to authenticate without login window.

import fbconsole as F

F.AUTH_SCOPE = ['publish_stream']

F.automatically_authenticate(
    username,     # facebook username for authentication
    password,     # facebook password for authentication
    APP_SECRET,   # "app secret" from facebook app settings
    'http://127.0.0.1:8080', # redirect uri specified in facebook app settings    
    True
    )

Here is my stack trace...really need some help here please

Traceback (most recent call last):
File "facebook-stream.py", line 11, in
'http://127.0.0.1:8080' # redirect uri specified in facebook app settings
File "build/bdist.macosx-10.8-intel/egg/fbconsole.py", line 425, in automatically_authenticate
AssertionError: Inconsistent state: ngG3UMD2kO3h3cSerlHYNsJSEtb0D8/ != ngG3UMD2kO3h3cSerlHYNsJSEtb0D8

'offline_access' deprecated

https://developers.facebook.com/docs/offline-access-deprecation/

Relevant to your script?

"Deprecation of Offline Access Permission
Access_tokens allow users to interact with your [Facebook] apps in meaningful and social ways. While [Facebook] is deprecating the use of the offline_access permission, through a migration setting in the Developer App, we are now allowing the option to reset the expiration time for existing, valid access_tokens each time a user interacts with your site. For existing apps, there are no changes required for your app, but you should consider using the new endpoint that allows you to get access tokens with a longer expiration time.

Extending the expiration of existing access_tokens

When a user visits your site with an existing, valid access_token, you have the option to extend the expiration time of that access token without requiring the user to login again. Our platform will only extend the expiration time once per day, so even if a user revists your site multiple times a day, the token will be extended the first time requested."

more here: https://developers.facebook.com/docs/offline-access-deprecation/

Settings in fb auth part

Hi I create a new app id in fb and also create a new token. Login works fine and I also see all Infos via /me but It is not possible to update/create a status message. The return result is forbidden. Is there any addition permissions requesting in the fb app setting. New new app auth settings confusing, so I didnt see something like basic permissions.
Regrads,
Thorsten

fbconsole.authenticate() not spawning any window

fbconsole.authenticate() does not spawn a new window asking for permissions, it simply does nothing at all. It sits there waiting to return.

Code:

import fbconsole

fbconsole.AUTH_SCOPE = ['publish_stream', 'publish_checkins']
fbconsole.authenticate()

Handle expired access tokens

We currently do not handle the expiry of access tokens. So if it's been a while since you've run the script, it will stop working for no apparent reason. fbconsole.authenticate() should check the expiry first.

Module object has not attribute automatically_authenticate

Hello,

I am currently trying to use fbconsole.automatically_authenticate() however when I attempt to do so I get an error reading "module object has no attribute automatically_authenticate". Your documentation states "As a means to set the ACCESS_TOKEN, fbconsole provides an automatic mechanism (python 2.x only) for authenticating server-side apps by completing the OAuth process automatically". It then provides an example of how to use fbconsole.automatically_authenticate.

I am using python 2.7
I used pip to install fbconsole

The following is the code I am using:

import fbconsole
fbconsole.AUTH_SCOPE = ['publish_stream', 'publish_checkins', 'offline_access', 'manage_pages']

fbconsole.automatically_authenticate( facebook_username, facebook_password, my_app_secret, redirect_uri,)

Am I missing something or is automatically_authenticate no longer supported? Thank you for your help.

Given URL is not allowed by the Application configuration

Whenever, I try to use the code example:

import fbconsole

fbconsole.AUTH_SCOPE = ['publish_stream', 'publish_checkins']
fbconsole.authenticate()

It gives the following error:
Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.

Did the fbconsole url get changed?

I can't grab a profile picture

Hi!

I'm not able to grab a profile picture using graph, not sure if it's possible...

Maybe just get the http address of a pic or a profile pic would be nice!

Thanks

feature request: programmatic oauth login

I would like to have a cron job running on our server that automatically pulls in information about Posts on our company's Page to ultimately display on our company's website. Having to pull up a browser every time an access token becomes invalid (if I'm understanding things correctly, these access tokens expire after a certain period of time), is really not an option for me. It would be awesome to have a programmatic oauth login for facebook "apps" that are specifically designed to pull in data from facebook.

Update fbconsole version number

installing these package from Pip I can't see the last updates
(I cant' do :
from fbconsole import Client
!)

So please can you update the version number in the setup.py file?
Thanks in advance

Best regards

invalid page album id bug

I am trying to post image to a specific album on a page of which i am admin

The permissions I have set are:
user_photos
friends_photos
publish_actions
manage_pages
publish_stream
photo_upload

page id is 604915026260980
album on the page id is 604917512927398
album url : https://www.facebook.com/604917512927398

i can successfully post to page wall as admin using
status = fb.post('/pageid/feed', {'message':'testing api2. ignore this post'})

I can even post photo to page using
fb.post("/pageid/photos", { "source":open("temp.jpg")}) but this will not post photo as an admin.

but i want to post photo to a specific album on the page.
i have tried everything to post on specific album using

fb.post("/albumonthepageid/photos", {"source":open("temp.jpg")})

The line below gives error "invalid album id" but it is valid because i can open this album using https://www.facebook.com/604917512927398)

please help me

fbconsole-0.2.tar.gz doesn't include graph_url

Hi pcardune,

I think the version downloaded by pip is an old one. The graph_url function returned: 'NameError: name 'graph_url' is not defined'.

I downloaded fbconsole-0.2.tar.gz via pip (an hour ago) and the fbconsole.py file omitts the graph_url function and optional reference in the 'all' list.

When I copied the graph_url function from the github page into my fbconsole.py file it now works.

Really nice API btw :-)

Problem retrieving photo

Hello, I'm trying to retrieve a profile photo from my facebook friends, but only works with the default mode /user_id/picture. When I try /user_id/picture?type=large, for example, the program returns a corrupted file.
How do I solve the problem? :~
Thanks the attention and sorry my poor english.

HTTP Error 400: Bad Request

The post status function works in the morning but then fails later on in the day for me. Once it fails, deleting the access token wont fix it. The only way to fix it I found was waiting a few hours. The get friends function still works though.

Is this possibly the result of facebook banning the use of fbconsole on my account due to similar status updates?

Critical: Facebook API v1.0 deprecated by April 30, 2015

Hi,

According to Facebook the API version 1.0 (what we're currently using) is going to be deprecated by the end of April 2015.

TL; DR: This basically means fbconsole will have to be patched to include the API version number in every call to the Graph API endpoints. I am working on a patch and will issue a pull request when it's done (hopefully before the deadline...).

I received this message to my developer account at 2015-01-21:

Your app is making calls to v1.0 of the Graph API which will be deprecated on Thursday, 30 April 2015. Please upgrade your app to v2.0 or later by that date.

Relevant section from the Graph API docs[1]:

All Facebook-enabled apps will be automaticaly upgraded to API v2.0 on April 30, 2015.

Implementing Versions in your Apps

The largest change is the introduction of API versioning. Many services that Facebook offer are now versioned, such as:

  • The behavior and content of certain Graph API endpoints
  • What permissions are available and what your app can see when they are granted
  • The behavior of dialogs.

We'll introduce new versions of the API whenever we make a breaking change an existing API. APIs are supported for at least two years after they're introduced, except for v1.0, which will only be available for one year after the release of v2.0. Multiple versions of the API will be in service at the same time. We strongly encourage you to upgrade when new versions are introduced, but it's not required.

With the launch of v2.0 of the API, we have two versions in service at the same time:

  • Version 1.0, which is what we call the API as it existed the day before v2.0 was launched. We'll support v1.0 for one year and it will expire on April 30th, 2015.
  • Version 2.0, which is what this upgrade guide covers. Version 2.0 is supported for at least two years. At the earliest, it will expire on April 30th, 2016.

You can choose which version of the API you want to use by:

  • Initializing the JavaScript SDK with the version you want to use and then making calls through FB.api(), which will automatically route API calls to the versioned endpoint you choose.
  • Integrating the Facebook SDKs for iOS or Android, which are set up to call the latest version of the API that was available on the day the SDK was released.
  • For people making manual calls to our API without an SDK, the version is picked by putting the version in the path when you make an API call (such as graph.facebook.com/v2.0/me).

For apps created before April 30th 2014, making API calls without specifying a version number is equivalent to calling v1.0 of the API.

For apps created on or after April 30th 2014, making API calls without specifying a version number is equivalent to calling v2.0 of the API. These apps won't be able to call v1.0 of the API.

[1] https://developers.facebook.com/docs/apps/upgrading#v1tov2

Regards,
kchr

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.