Git Product home page Git Product logo

php-fcm's People

Contributors

andygaskell avatar azizbohra avatar edwinhoksberg avatar frenchbully avatar mehrshaddarzi avatar philipp91 avatar rolinger avatar vinodkmwt 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

Watchers

 avatar  avatar  avatar  avatar  avatar

php-fcm's Issues

Getting unspecified "internal" error

Here is my first test script, getting an "internal" error that I am having a difficult time find as to why. Any thoughts on where I should be looking here? I verified that my PHP settings are permitting both allow_url_fOpen and allow_url_include (though the fOpen probably isn't needed here)

<?php
error_reporting(-1);
ini_set('display_errors', 'On');

require 'vendor/autoload.php';
include 'includes.php' ;

$senderID = "215....9" ;
$serverKey = "AAAAMjf9F3s:AP............ObhuY2ZDtC5SIoK6XEs0VwvqxrC0fIkH8G" ;
$client = new \Fcm\FcmClient($serverKey,$senderID) ;

$topicID = "C1001_2_17" ;
$deviceID = " dJKoN_DETdc:APA91bEtBo...........BCQ5i3tOqJ5x_b3zTsIpnmp8" ;

$subscribe = new \Fcm\Topic\Subscribe($topicID);
$subscribe->addDevice($deviceID);

$response = $client->send($subscribe) ;
var_dump($response) ;
?>

The error I am getting is:

  ["results"]=>
  array(1) {
    [0]=>
    array(1) {
      ["error"]=>
      string(8) "INTERNAL"
    }
  }
}

Internal server error

I tested and tried the notification on the local server and everything was going fine and the notification was sent successfully, but when I uploaded the project to the server (windows server) the function would give me 500 internal server error on the send function.
Could you please help me?
thank you in advance

No API/function retrieve a existing notification_key

I accidentally missed to store the notification_key after creating a device group.
But when try to create same group with same device , i get below error

{
    "error": {
        "code": 400,
        "message": "Client error: `POST https://android.googleapis.com/gcm/notification` resulted in a `400 Bad Request` response:\n{\"error\":\"notification_key already exists\"}\n"
    }
}

Please support for getting existing notification key by passing group name
https://android.googleapis.com/gcm/notification?notification_key_name=the_name

I dont want to stop using library due to this one func,all my implementation is already done :(

Fatal Error if tokenID is not found using \Fcm\Device\Info

When retrieving existing device info about a tokenID/deviceID, if the token does not exist Google returns a 404 Not Found {"error":"No information found about this instance id."}.

This is the offending code:

  $client = new \Fcm\FcmClient($serverKey,$senderID) ;
  $info = new \Fcm\Device\Info($deviceID, true);
  $response =  $client->send($info);                         // <-----  error below  ----->
  if (array_key_exists('error',$response)) {
    echo "\n\t" .$response['error'] ;
  } else if (array_key_exists('rel',$response)) {  
    foreach ($response['rel']['topics'] as $key => $value) {
      echo "\n\tTopic: $key" ;
    }
  } else {
    echo "\nNo Topics Registered To This ID" ;
  }

If the tokenID exists all is good, however, if not found this response causes a Fatal Error:

Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `POST https://iid.googleapis.com/iid/info/dk4jUDTwi6E:APA91bFj6R4P6E0RiE5Wc9D267gquYcpKtLjczg-Ok5llCAf_BNbbFp_HyH-r4A5CrxfkCCfIqLx1j4Fc2U9XyFnyrtXBE0WK744wH8dbCz7Wr-kXJxh3ErsQ71ZoEmxbGmCXtJ-yMiS?details=true` resulted in a `404 Not Found` response:
{"error":"No information found about this instance id."}
 in /home/dev/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Stack trace:
#0 /home/dev/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response))
#1 /home/dev/public_html/api/assets/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 /home/dev/public_html/api/assets/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleH in /home/dev/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113

I have tried various things to fix this but nothing so far has worked. Though it appears to be a guzzlehttp error, I am hoping someone here could lend a hand in fixing it.

411 Length Required when sending push notifications

Hi, I'm using this very simple code to send the notifications

// Instantiate the client with the project api_token and sender_id.
$client = new \Fcm\FcmClient($api_token, $sender_id);

// Instantiate the push notification request object.
$notification = new \Fcm\Push\Notification();

// Enhance the notification object with our custom options.
$notification
    ->setTitle($my_title)
    ->setBody($my_message);

$notification->addTopic($my_topic); 

// Send the notification to the Firebase servers for further handling.
$client->send($notification);

But I'm getting a 411 error in response when sending. How can I set the Content-Length, appearently required?
Thank you!

long form vs shortcut

Finally got this working using the below:

$client = new \Fcm\FcmClient($serverKey, $senderId);
$subscribe = new \Fcm\Topic\Subscribe('my_topic_name');
$subscribe->addDevice($deviceId);
$client->send($subscribe);

However, no success using the shortcut, what am I doing wrong:

$client = new \Fcm\FcmClient($serverKey, $senderId);
// Shortcut function:
$client->topicSubscribe('my_topic_name', $deviceId);

Merge pull request please - lots of stuff added

@EdwinHoksberg I am rereading FCM documentation this morning. It turns out your documentation on expected responses is not wrong - there are multiple types of responses based on message type. There are 3 different types of protocols to communicate push notification messages and I am not fully understanding the difference between the three.

1. HTTP v1 API - I don't fully understand this one - this might be client APP direct to FCM server API - not certain though

2. XMPP Server protocol - I think this is just an xml version of the json oriented protocol.

3. Legacy HTTP Server Protocol - app server to client app via FCM. This is whats being used in this fcm-php repository, not certain why they refer to it as legacy though

The below are references to the Legacy HTTP Server Protocol
Sets up who you are trying to communicate with (IDs, Topics, etc) https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json

This defines the message / notfication payload (ie: sound,icon, badge, etc): Notice, there are 2 tables: 2a for iOS and 2b for Android - finding the overlap is probably the better/universal way to go: https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

The response messages:

a. https://firebase.google.com/docs/cloud-messaging/http-server-ref#interpret-downstream
b. Table 5: to or registration_ids JSON response (this is whats defined in your documentation
c. Table 6: topic JSON response - this is what I am getting when sending messages to my groups
d. Table 7 (Success) & Table 8 (Error) - responses to plain text (non JSON) HTTP messages

Your documentation is right...I just need to add additional documentation for both how to send notifications to a topic and for the topic responses.

I added support for all of the following:

iOS only:
* badge
* subtitle

Android only:
* tag
* color
* icon 

Both:
* title (done)
* body (done)
* sound (added)
* addData (existed)
* addDataArray (added)

I plan to add support for the following, could use some help though.

* android_channel_id
* click_action
* body_loc_key
* body_loc_args
* title_loc_key
* title_loc_args

Documentation:
Updated Messages.rst file with better examples, explanations and more extensive notes showing proper responses (success/fail) for each of the kinds of messages that can be sent. Might need your help cleaning it up though to keep it inline with proper github document formatting - I never contributed to repository before so its probably not consistent with proper methods.

Not Registered in Results => remove device_id

Hey,

@EdwinHoksberg thanks for the Github! Really love it!

We have users with a lot of devices, and we send messages to all of them. The results have error's and message ID's. But whenever there is a error I would like to know what device_id is no longer registered. Is this possible?

Here is the part of the response.

    "multicast_id": 1152899987548651788,
    "success": 16,
    "failure": 10,
    "canonical_ids": 0,
    "results": [
        {
            "error": "NotRegistered"
        },
        {
            "message_id": "1644310512120583"
        },
        {
            "error": "NotRegistered"
        },
        {
            "message_id": "1644310512135715"
        }
 ]
}```

add Badge

namespace Fcm\Push;

use Fcm\Exception\NotificationException;
use Fcm\Request;

class Notification implements Request
{
...
modify function
...
public function __construct(string $title = '', string $body = '', string $recipient = '', int $badge = 0)
{
$this->badge = $badge;
.....
}

....
add function
....

/**
 * @param int $badge
 *
 * @return $this
 */
public function setBadge(int $badge): self
{
    $this->badge = $badge;

    return $this;
}

....
modify function
....

public function getBody(): array
{

....
if ($this->badge>0) {
$request['notification']['badge'] = $this->badge;
}

    return $request;
}

}

Documentation not consistent with composer package

Hi,

I just started evaluating your component and discovered an issue that might put off less experienced users.

Documentation recommends installation with composer, but the first Notification example is using methods like setColor, setSound and setIcon which are not available in the composer package.

May I recommend to create a new release to bring the code downloaded by composer in line with the documentation.

Thank you in advance.

update: alternatively, documentation could as well mention using composer with a specific git hash.

Improve documentation

I think we could improve the documentation.

Some parts of https://php-fcm.readthedocs.io/ are unclear or out of date.

Just jotting this down as an issue so I remember to come back to it.

If anyone has any thoughts on documentation, please jot them here, like...

  • Bits that are unclear
  • Bits that are out of date
  • Features or options that are not documented
  • Any other ideas to improve the docs

Guzzle option, made a bit of a mess of the commit / merge

Hi @rolinger

Sorry, I made a bit of a mess of the Guzzle option changes, so thought I'd best jot some notes to explain.

I think the code, docs and tests are all ok, but I accidentally merged directly into the master, rather than into my branch and then making a PR.

This is related to...

  • Revert "added Guzzle options to prevent PHP fatal error" #27
  • added Guzzle options to prevent PHP fatal error #26
  • Fatal Error if tokenID is not found using \Fcm\Device\Info #17
  • Fatal error on implement Fcm\Request #19

So just writing an issue to explain, and to tie all the other threads about this together.

If you send a data only push, and empty message is sent

There is an issue in Push/Notification.php whereby if you want to send a data only message, so, you leave the title, body etc fields blank, it'll still send a non-data push message, but just with blank content.

I've a code fix for this, so will do a PR this afternoon.

FCM: Migrate from legacy HTTP to HTTP v1

Just really writing this as a note, and/or a place for a discussion about it.

So, at the moment we use the FCM API referred to as "HTTP", this is now described as legacy by google, the current one being "HTTP v1".

I didn't realise we were not using the latest version to be honest.

There are some good migration notes on...
https://firebase.google.com/docs/cloud-messaging/migrate-v1

Some background on...
https://firebase.googleblog.com/2017/11/whats-new-with-fcm-customizing-messages.html

I only noticed when a friend pointed out, on...
https://firebase.google.com/docs/cloud-messaging/send-message
...there are two different methods, and this one is described as legacy.

On first glance, it could be a drop-in replacement, but it seems like you need the Firebase project name in the URL, which current users don't have in their configuration settings.

Response messages

When I send a notification that has an error I get something like the below - obviously, the notification does not arrive to my phone:

    $client = new \Fcm\FcmClient($serverKey,$senderID) ;
    $notification = new \Fcm\Push\Notification();
    
    $notification
        ->addRecipient('/topic/' .$topicID)
        ->setTitle($sub)
        ->setBody($msg)
        ->setSound("default")
        ->setColor("blue");

In the above, /topic/ should be /topics/ - thus it will error out with the below:

array(5) {
  'multicast_id' =>
  int(9014353506250345342)
  'success' =>
  int(0)
  'failure' =>
  int(1)
  'canonical_ids' =>
  int(0)
  'results' =>
  array(1) {
    [0] =>
    array(1) {
      'error' =>
      string(19) "InvalidRegistration"
    }
  }
}

However, when I send a notification that is successful:

    $client = new \Fcm\FcmClient($serverKey,$senderID) ;
    $notification = new \Fcm\Push\Notification();
    
    $notification
        ->addRecipient('/topics/' .$topicID)
        ->setTitle($sub)
        ->setBody($msg)
        ->setSound("default")
        ->setColor("blue");

I do get the notification to my phone. And correctly sent, I only get the following:

array(1) {
    'message_id' =>
    int(154231004164960%c5f39c08c5f39c543)
  }

It seems the documentation is off...and the "success" message does not have all the other intricate data that a failed message has. I have tried multiple combinations of failures and successes - and each time the success just has the message_id. In the docs it shows a success => int(1), failure=>int(0) - but I can never get that response.

Fatal Error for device lookup

It works fine if there is a valid ID to return info on. But causes a fatal error if the ID can't be found.

  $deviceID = "eNoPRU6hj00:APA91bHt5BGE9TqIyMnFkOQd899gSoUUoNQNc8sdHyo0hV10Q63E-zgq4BEc4GI-3sFqQv0YQ6tbOhFGTRKO5kZ7DmJhSmnoThP6rOWv0Ac8Y9A6PkH6Sr9UUFOiKIUsndLSJX8JpO7t" ;
  $info = new \Fcm\Device\Info($deviceID, true);
  $response =  $client->send($info);
  foreach ($response['rel']['topics'] as $key => $value) {
    echo "\n\tTopic: $key" ;
  }
  print_r($response) ;

It looks like the response is being generated from google, but not being processed in the return handler.

Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `POST https://iid.googleapis.com/iid/info/eNoPRU6hj00:APA91bHt5BGE9TqIyMnFkOQd899gSoUUoNQNc8sdHyo0hV10Q63E-zgq4BEc4GI-3sFqQv0YQ6tbOhFGTRKO5kZ7DmJhSmnoThP6rOWv0Ac8Y9A6PkH6Sr9UUFOiKIUsndLSJX8JpO7t?details=true` resulted in a `404 Not Found` response:
{"error":"No information found about this instance id."}
 in /home/myServer/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Stack trace:
#0 /home/myServer/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response))
#1 /home/myServer/public_html/api/assets/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 /home/myServer/public_html/api/assets/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleH in /home/whipsteradmin/public_html/api/assets/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113

Fatal error on implement Fcm\Request

Dear developer,

I'm getting an PHP fatal error on the Notification class.
It seems an easy fix, but I wasn't sure because you should've seen the same error as i'm seeing right now:

PHP Fatal error: Class Fcm\Push\Notification contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Fcm\Request::getUrl) in ***/vendor/edwinhoksberg/php-fcm/src/Push/Notification.php on line 8

I don't see the implementation in the Notification class, I do see it in the Data and Push class...
Could you clarify for me please?

Sending messages to subscription topics

Hi, I just discovered this php-fcm package. Looks slick and clean and I will be replacing my custom code with this - so much easier to use. Thx.

Question though - using php-fcm how do you send messages to a subscription topic? I have thousands of users subscribed to a various topics, but I see no way to send messages to a particular topic? Your documentation shows how to subscribe/unsubscribe devices from particular topics - but not now to send messages to those topics.

Referencing: https://firebase.google.com/docs/cloud-messaging/js/topic-messaging#build_send_requests

question : how to broadcast ?

Hello,

In your example below: what is the variable $deviceId ?

How should we initialize it?

How to send a message to all the people who accepted the fcm notification? (do a broadcast).

Thank you for your work.

Sending to multiple topics fails

Sending to multiple topics fails, I think it should work.

So, this code works...

# Load composer
require 'vendor/autoload.php';

# set up the client
$client = new \Fcm\FcmClient($serverKey, $senderId);

# fake up some content
$title = "Test title at " . date("H-i-s");
$body = "Test body at " . date("H-i-s"); 

# set up the notification
$notification = new \Fcm\Push\Notification();

# send the push
$notification = $client->pushNotification($title, $body, "");
$notification->addRecipient("/topics/grangehill_all");
$response = $client->send($notification);

echo "response: ";
print_r($response);

Giving the response...

response: Array
(
    [message_id] => 7289727257921136224
)

But this code, with two topics, does not work...

# Load composer
require 'vendor/autoload.php';

# set up the client
$client = new \Fcm\FcmClient($serverKey, $senderId);

# fake up some content
$title = "Test title at " . date("H-i-s");
$body = "Test body at " . date("H-i-s"); 

# set up the notification
$notification = new \Fcm\Push\Notification();

# send the push
$notification = $client->pushNotification($title, $body, "");
$notification->addRecipient("/topics/grangehill_all");
$notification->addRecipient("/topics/grangehill_year1");
$response = $client->send($notification);

echo "response: ";
print_r($response);

It gives...

response: Array
(
    [multicast_id] => 7828145588169844186
    [success] => 0
    [failure] => 2
    [canonical_ids] => 0
    [results] => Array
        (
            [0] => Array
                (
                    [error] => InvalidRegistration
                )
            [1] => Array
                (
                    [error] => InvalidRegistration
                )
        )
)

Priority settings missing?

Hello and thanks for a great work!

I have been going through the documentation and it seams that there is no way of setting the message priority for the notification. As it is now it sends with no settings and it gets "normal" priority by default at FCM-level. Or did I miss to set it manually somewhere?

I think this is a very important feature as on battery saving mode or locked screen the notification is now delayed until the user becomes active with the display.

Add Sound and Vibrate

$request['notification']['default_sound'] = true; $request['notification']['default_vibrate_timings'] = true; `
I recommend that you link it to the library and add optional.
src/Push/Notification.php

Cloud Messaging API (Legacy) Deprecated

The legacy authentication way of using Authorization: key=AIzaSyZ-1u...0GBYzPu7Udno5aA has been deprecated in favor of Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
The payload structure and URLs are also affected.

Phalcon MVC giving error

Greetings,
your class really is very simple and clean. Thank you so much.
I wanted to use phalcon framework. But when I create an autoload with composer, I do not get the namespace of the class.
I've tried all the options.
namespace Vokuro\Controllers; use Phalcon\Tag; use Phalcon\Mvc\Model\Criteria; use Phalcon\Paginator\Adapter\Model as Paginator; use Vokuro\Models\Aksiyonlar; use Vokuro\Models\Atamalar; use Vokuro\Models\Users; use Vokuro\Models\Yorumlar; use Vokuro\Models\Dosyalar; use Vokuro\Models\Push; use FcmClient;

$client = new \FcmClient('AAAAWtYCPEM...', '390..'); $notification = $client->pushNotification('The title', 'The body', $kayit['push_user_key']); $response = $client->send($notification);

Can you help me ?

Standard notification with data

Reading through the code in src/push/notification.php and I see that there is code in the getBody() function for:

    if (!empty($this->data)) {
        $request['data'] = $this->data;
    }

Unless I am missing something, I don't see where or how the data is getting passed in? I think we should merge the Data.php and Notification.php into a single file and the user can just do a ->addData to a standard notification. I don't think there is anything else very special about a data msg that it needs to be its own method/file.

Or is there another method for adding data to a notification that is enabled but not documented?

content_available field

Not sure if this is an issue on your side or on my side, but my iOS app (built in Unity and using Firebase Messaging SDK) does not receive any data messages unless I add:

$request['content_available'] = true;

to the Notification / Data object. (Android works perfectly fine without it)

Class fcm\fcmclient not found

Getting this error: Fatal error: Uncaught Error: Class 'Fcm\FcmClient' not found

My install:

 composer require edwinhoksberg/php-fcm
Using version ^1.0 for edwinhoksberg/php-fcm
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

And my script:
$senderID = "2...........9" ;
$serverKey = "AAAAMjf9F3s:APA91bEjl4MJ............VwvqxrC0fIkH8G" ;
$response = $client = new \Fcm\FcmClient($serverKey,$senderID) ;

I even tried adding: use Fcm\FcmClient ;

But still get same error, class not found

addTopic in && non only in ||

Is it possibile to implement the feature wich we can control the push condition by ourself.
So we can control the query to select the correct user to sent notification direct, in OR, AND or a both method!

Thanks

If you add more than five topics in FCM, the push doesn't send

This is an odd one, but in FCM, if you add more than 5 topics, the message doesn't send.

This is really unhelpful in Firebase.

It's mentioned in the docs...
https://firebase.google.com/docs/cloud-messaging/send-message

There is discussion about it at...
https://stackoverflow.com/questions/44413037/how-to-send-fcm-push-notifications-to-multiple-topics

I was thinking we could throw an exception when a 6th topic is added.

At the very least we can mention this in the docs, in #39 Improve documentation

So, a 5 topic test ...

# set up the notification
$notification = new \Fcm\Push\Notification();

# send the push
$notification = $client->pushNotification($title, $body, "");
$notification->addTopic("mytopic_all");
$notification->addTopic("mytopic_nursery");
$notification->addTopic("mytopic_year1");
$notification->addTopic("mytopic_year2");
$notification->addTopic("mytopic_year3");
$response = $client->send($notification);

echo "response: ";
print_r($response);

Works fine, and returns...

response: Array
(
    [message_id] => 7035919789268175198
)

And a 6 topic / channel test ...

# set up the notification
$notification = new \Fcm\Push\Notification();

# send the push
$notification = $client->pushNotification($title, $body, "");
$notification->addTopic("mytopic_all");
$notification->addTopic("mytopic_nursery");
$notification->addTopic("mytopic_year1");
$notification->addTopic("mytopic_year2");
$notification->addTopic("mytopic_year3");
$notification->addTopic("mytopic_year4");
$response = $client->send($notification);

echo "response: ";
print_r($response);

Will not send the message to anyone, and returns...

response: Array
(
)

LUMEN/LARAVEL

So, this is not really an issue per se; I want to know if i can use this as is within Lumen or Laravel or I need some adjustments.

Apart from this, this is a really nice package to have. Kudos!

Increase automated test coverage to 100%

Think we just need 2 more tests to increase automated test coverage to 100%.

It's at 98.9% at the moment on https://coveralls.io/github/EdwinHoksberg/php-fcm

Add a test that passes data param into the constructor...
https://coveralls.io/builds/32427333/source?filename=src/Push/Notification.php#L69

Add a test to test exception catching when passing a non-array into the addDataArray function...
https://coveralls.io/builds/32427333/source?filename=src/Push/Push.php#L69

This is not an issue really, just a reminder to myself as much as anything.

Optional Laravel support

Hello,
Would you be open to merge a PR to add a simple Laravel support?
It could be done with a few new files (ServiceProvider, config file and composer.json) and none would change.
Thank you,
Karel

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.