GithubHelp home page GithubHelp logo

nova-poshta-api-2's Introduction

Документація українською мовою доступна за посиланням

Build Status

Nova Poshta API 2.0

Класс предоставляет доступ к функциям API 2.0 службы доставки Новая Почта

Подготовка

Получение ключа API

Для использования API необходимо:

После получения ключа API предоставляется возможность использовать все методы класса официальной из документации

Установка последней версии класса для работы с API

Git

Необходимо выполнить в командной строке

git clone https://github.com/lis-dev/nova-poshta-api-2

Composer

Необходимо создать файл composer.json со следующим содержанием

{
    "require": {
        "lis-dev/nova-poshta-api-2": "~0.1.0"
    }
}

и запустить из командной строки команду php composer.phar install или php composer.phar update Или выполнить в командной строке

composer require lis-dev/nova-poshta-api-2

Альтернативная установка

Необходимо скачать архив по ссылке

https://github.com/lis-dev/nova-poshta-api-2/archive/master.zip

Форматы данных

Для входящих данных используются PHP массивы, ответ сервера может быть получен в формате:

  • как PHP массив
  • JSON
  • XML

Использование

Подключение класса при установке через composer

require __DIR__ . '/vendor/autoload.php';

Подключение класса при альтернативной установке

require '<path_to_dir>/src/Delivery/NovaPoshtaApi2.php';

Создание экземпляра класса

Класс по умолчанию находится в namespace \LisDev\Delivery. При создании экземпляра класса необходимо или использовать Full Qualified Class Name:

$np = new \LisDev\Delivery\NovaPoshtaApi2('Ваш_ключ_API_2.0');

или указать используемый namespace в секции use:

use LisDev\Delivery\NovaPoshtaApi2;
...
$np = new NovaPoshtaApi2('Ваш_ключ_API_2.0');

Более подробную информацию по работе с namespace можно получить на сайте документации php

Создание экземпляра класса (с расширенными параметрами)

Рекомендуется использовать, если необходимо получать данные на языке, отличном от русского, выбрасывать Exception при ошибке запроса, или при отсутствии установленной библиотеки curl на сервере

$np = new NovaPoshtaApi2(
	'Ваш_ключ_API_2.0',
	'ru', // Язык возвращаемых данных: ru (default) | ua | en
	FALSE, // При ошибке в запросе выбрасывать Exception: FALSE (default) | TRUE
	'curl' // Используемый механизм запроса: curl (defalut) | file_get_content
);

Получение информации о трек-номере

$result = $np->documentsTracking('59000000000000');

Получение сроков доставки

// Получение кода города по названию города и области
$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// Получение кода города по названию города и области
$recipient_city = $np->getCity('Киев', 'Киевская');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Дата отправки груза
$date = date('d.m.Y');
// Получение ориентировочной даты прибытия груза между складами в разных городах
$result = $np->getDocumentDeliveryDate($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $date);	

Получение стоимости доставки

// Получение кода города по названию города и области
$sender_city = $np->getCity('Белгород-Днестровский', 'Одесская');
$sender_city_ref = $sender_city['data'][0]['Ref'];
// Получение кода города по названию города и области
$recipient_city = $np->getCity('Киев', 'Киевская');
$recipient_city_ref = $recipient_city['data'][0]['Ref'];
// Вес товара
$weight = 7;
// Цена в грн
$price = 5450;
// Получение стоимости доставки груза с указанным весом и стоимостью между складами в разных городах 
$result = $np->getDocumentPrice($sender_city_ref, $recipient_city_ref, 'WarehouseWarehouse', $weight, $price);

Генерирование новой электронной накладной

// Перед генерированием ЭН необходимо получить данные отправителя
// Получение всех отправителей
$senderInfo = $np->getCounterparties('Sender', 1, '', '');
// Выбор отправителя в конкретном городе (в данном случае - в первом попавшемся)
$sender = $senderInfo['data'][0];
// Информация о складе отправителя
$senderWarehouses = $np->getWarehouses($sender['City']);
// Генерирование новой накладной
$result = $np->newInternetDocument(
    // Данные отправителя
    array(
        // Данные пользователя
        'FirstName' => $sender['FirstName'],
        'MiddleName' => $sender['MiddleName'],
        'LastName' => $sender['LastName'],
        // Вместо FirstName, MiddleName, LastName можно ввести зарегистрированные ФИО отправителя или название фирмы для юрлиц
        // (можно получить, вызвав метод getCounterparties('Sender', 1, '', ''))
        // 'Description' => $sender['Description'],
        // Необязательное поле, в случае отсутствия будет использоваться из данных контакта
        // 'Phone' => '0631112233',
        // Город отправления
        // 'City' => 'Белгород-Днестровский',
        // Область отправления
        // 'Region' => 'Одесская',
        'CitySender' => $sender['City'],
        // Отделение отправления по ID (в данном случае - в первом попавшемся)
        'SenderAddress' => $senderWarehouses['data'][0]['Ref'],
        // Отделение отправления по адресу
        // 'Warehouse' => $senderWarehouses['data'][0]['DescriptionRu'],
    ),
    // Данные получателя
    array(
        'FirstName' => 'Сидор',
        'MiddleName' => 'Сидорович',
        'LastName' => 'Сиродов',
        'Phone' => '0509998877',
        'City' => 'Киев',
        'Region' => 'Киевская',
        'Warehouse' => 'Отделение №3: ул. Калачевская, 13 (Старая Дарница)',
    ),
    array(
        // Дата отправления
        'DateTime' => date('d.m.Y'),
        // Тип доставки, дополнительно - getServiceTypes()
        'ServiceType' => 'WarehouseWarehouse',
        // Тип оплаты, дополнительно - getPaymentForms()
        'PaymentMethod' => 'Cash',
        // Кто оплачивает за доставку
        'PayerType' => 'Recipient',
        // Стоимость груза в грн
        'Cost' => '500',
        // Кол-во мест
        'SeatsAmount' => '1',
        // Описание груза
        'Description' => 'Кастрюля',
        // Тип доставки, дополнительно - getCargoTypes
        'CargoType' => 'Cargo',
        // Вес груза
        'Weight' => '10',
        // Объем груза в куб.м.
        'VolumeGeneral' => '0.5',
        // Обратная доставка
        'BackwardDeliveryData' => array(
            array(
                // Кто оплачивает обратную доставку
                'PayerType' => 'Recipient',
                // Тип доставки
                'CargoType' => 'Money',
                // Значение обратной доставки
                'RedeliveryString' => 4552,
            )
        )
    )
);

Получение складов в определенном городе

// В параметрах указывается город и область (для более точного поиска)
$city = $np->getCity('Киев', 'Киевская');
$result = $np->getWarehouses($city['data'][0]['Ref']);

Вызов произвольного метода

$result = $np
	->model('Имя_модели')
	->method('Имя_метода')
	->params(array(
		'Имя_параметра_1' => 'Значение_параметра_1',
		'Имя_параметра_2' => 'Значение_параметра_2',
	))
	->execute();

Реализованные методы для работы с моделями

Модель InternetDocument

  • save
  • update
  • delete
  • getDocumentPrice
  • getDocumentDeliveryDate
  • getDocumentList
  • getDocument
  • printDocument
  • printMarkings
  • documentsTracking
  • newInternetDocument
  • generateReport

Модель Counterparty

  • save
  • update
  • delete
  • cloneLoyaltyCounterpartySender
  • getCounterparties
  • getCounterpartyAddresses
  • getCounterpartyContactPersons
  • getCounterpartyByEDRPOU
  • getCounterpartyOptions

Модель ContactPerson

  • save
  • update
  • delete

Модель Address

  • save
  • update
  • delete
  • getCities
  • getStreet
  • getWarehouses
  • getAreas
  • findNearestWarehouse

Модель Common

  • getTypesOfCounterparties
  • getBackwardDeliveryCargoTypes
  • getCargoDescriptionList
  • getCargoTypes
  • getDocumentStatuses
  • getOwnershipFormsList
  • getPalletsList
  • getPaymentForms
  • getTimeIntervals
  • getServiceTypes
  • getTiresWheelsList
  • getTraysList
  • getTypesOfPayers
  • getTypesOfPayersForRedelivery

Тесты

Актуальные тесты и примеры использования класса находятся в файле tests/NovaPoshtaApi2Test.php

Для запуска тестов локально необходимо выполнить в командной строке

composer install
NOVA_POSHTA_API2_KEY=Ваш_ключ_API_2.0 vendor/phpunit/phpunit/phpunit tests

nova-poshta-api-2's People

Contributors

ezoterik avatar holyspecter avatar lis-dev avatar maxcxam avatar pinchukd avatar rshkabko avatar sap55 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

nova-poshta-api-2's Issues

Дата доставки ТТН

Добрый день
как я понял, проштудировав доку почты, даты доставки по ТТН теперь нет в выдаче?
дата ориентировочной доставки не интересует, нужна именно дата доставки по ТТН. на сайте есть, а в доке нет(

Error: Class 'LisDev\Delivery\NovaPoshtaApi2' not found in .....DeliveryForm.php:76

Прежде всего спасибо за расширение. Очень удобное и понятное, но...
На днях ни с того ни с сего стал получать Error: Class 'LisDev\Delivery\NovaPoshtaApi2' not found in ....../DeliveryForm.php:76
Но все в данном файле на месте и самым первым юзом стоит use LisDev\Delivery\NovaPoshtaApi2.
Как это понять и куда копать - ума не приложу...

Создаются не в тот город 2

Доброй ночи, с теми городами что я писал в вопросе 41 проблема решилась, спасибо Вам, но...(

теперь если город получателя будет - м. Покровськ, Покровська міськрада, Донецька обл. и выбрать отделение например - Відділення №2 (до 30 кг на одне місце): мкрн. Шахтарський, ТЦ
то создается накладная вот сюда :
Покровське (Мангушський р-н), Відділення №1: вул. Азовської флотилії, 2 (пос. Моряків)

PHP8

В php8 request отдаёт пустой ответ при типе соединения curl

Не хочет подключать класс

Fatal error: Class 'NovaPoshtaApi2' not found in F:\OSPanel\domains\test.loc\nova.php on line 3
После установки выдает такую ошибку. В чем может быть проблема?

Фикс тестов

Необходимо актуализировать тесты в соответствие с текущей версией апи

getDocumentList

Покажите как правильно пользоваться getDocumentList? у меня постоянно возрощяет пусто :(

$np = new NovaPoshtaApi2(NPKEY, 'ru');
$rez=$np->getDocumentList(array('GetFullList'=>1, "DateTimeFrom"=>"01.10.2018", "DateTimeFrom" => "12.10.2018"));
print_r($rez);

Array
(
[success] => 1
[data] => Array
(
)
[errors] => Array
(
)
[warnings] => Array
(
)
[info] => Array
(
[totalCount] => 0
)
[messageCodes] => Array
(
)
[errorCodes] => Array
(
)
[warningCodes] => Array
(
)
[infoCodes] => Array
(
)

)

Неоголошена змінна $error

Якшо немає errors, то вилітає notice, що $error не оголошена в методах getCity, getWarehouse, getArea.

Наприклад:

Notice: Undefined variable: error in src/Delivery/NovaPoshtaApi2.php on line 448

Fix:
оголосити змінну
$error = NULL;

Новый ЕН

Не нашол фукцию создаюшюю ЕН может я не разобрался но доки нет

Интеграция в Travis CI

Т.к. Новая Почта меняет API в рамках одной версии без предупреждения, необходимо реализовать работоспособность тестов и возможность определить неработающий функционал в кратчайшие сроки.
Для этого первым делом следует подключить автоматическую систему тестирования билдов.
За основу взять travis ci.

Невозможность создания отправителя при создании ЭН

Новая Почта заблокировала возможность использования контрагентов-получателей в качестве отправителей. Таким образом, отправителя теперь необходимо создавать вручную. Для большинства пользователей метод save() модели Counterparty вернет ошибку о невозможности создания им контаргента-отправителя. Поддержка Новой Почты рекомендует использовать метод cloneLoyaltyCounterpartySender() для создания контрагента с данными аккаунта в другом городе. При этом, не смотря на то, что данный метод возвращает статус true и выполняется без ошибок, вновь созданного контрагента-отправителя вы не найдете ни вызвав getCounterparties, ни в личном кабинете (здесь вы можете только увидеть, что "Контрагент создается" без получения каких-либо временных рамок). Таким образом, в данный момент нет возможности динамически создать отправителя и сразу же его использовать для создания ЭН, можно работать только с уже существующими отправителями.

Создаются не в тот город 3

Добрый день, все таки наверное существует еще один баг с городами, попытаюсь объяснить:

когда я заметил ошибку с созданиями городов первый раз, например если создать в город:

Кам'янське Дніпропетровська обл Відділення №12 (до 30 кг): бульв. Будівельників, 27а (маг.VARUS, ТЦ

то создаст вот сюда:

Кам'янське (Нікопольський р-н), Пункт приймання-видачі (до 30 кг): вул. Будівників, 3а

Эту проблему пофиксили в релизе 2 - 0.1.4 (вот ссылка Fixed: https://github.com/lis-dev/nova-poshta-api-2/releases/tag/0.1.4)

Но в этом релизе некорректно создавалась накладная , если выбрать город:

Покровськ, Покровська міськрада, Донецька обл. Відділення №2 (до 30 кг на одне місце): мкрн. Шахтарський, ТЦ

получалась сюда:

Покровське (Мангушський р-н), Відділення №1: вул. Азовської флотилії, 2 (пос. Моряків)

Эту пофиксили в релизе 2-0.1.5 , теперь опять моя посылка поехала в другой город(
Вернулась проблема что была пофиксина в релизе 2-0.1.4 с городом :
Кам'янське Дніпропетровська обл Відділення №12 (до 30 кг): бульв. Будівельників, 27а (маг.VARUS, ТЦ
опять создалось в :
Кам'янське (Нікопольський р-н), Пункт приймання-видачі (до 30 кг): вул. Будівників, 3а
Спасибо что помогаете в решении проблемы!

Новая почта начало ругаться на получателя

Раньше все работало хорошо а теперь новая почта начала ругаться мол не выбран контрагент
[errors] => Array
(
[0] => Recipient not selected
[1] => ContactRecipient not selected
[2] => RecipientsPhone invalid format
)

Имея номер телефона получателя как проверить есть ли он у меня в НП и если есть получить индификатор, если нет завести?

Нужна помощь. не понятно в инструкции

Нужна помощь. не понятно в инструкции. Что вбивать в $senderInfo = $np->getCounterparties('Sender', 1, '', '');

Какие данные там нужны для последующего создания ТТН? С мануалами на НП путаница, там вообще часть страниц просто не открываются.

При создании документа для получения ТТН постоянно ошибка:

array (
  'success' => false,
  'data' => 
  array (
  ),
  'errors' => 
  array (
    0 => 'CitySender not found',
    1 => 'SenderAddress not selected',
    2 => 'CityRecipient not selected',
    3 => 'Recipient not selected',
    4 => 'BackwardDelivery Money is unavailable, CityRecipient not selected',
    5 => 'ContactRecipient not selected',
  ),

Есть ли где-то прозрачный понятный мануал для этого АПИ?

Невозможность создать ТТН(при некоторых выбранных городах)

Николаев, Отделение №12 (до 30 кг): ул. Пушкинская, 33 - вот выбранный город получателя

if (!isset($sender['CityRecipient']) || ! $recipient['CityRecipient']) {
$recipientCity = $this->getCity($recipient['City'], $recipient['Region']);
print_r($recipientCity)

[data] => Array
(
[0] => Array
(
[0] => Array
(
[Description] => Миколаїв
[DescriptionRu] => Николаев
[Ref] => db5c888c-391c-11dd-90d9-001a92567626
[Delivery1] => 1
[Delivery2] => 1
[Delivery3] => 1
[Delivery4] => 1
[Delivery5] => 1
[Delivery6] => 1
[Delivery7] => 0
[Area] => 71508135-9b87-11de-822f-000c2965ae0e
[Conglomerates] =>
[CityID] => 9
)

            )

    )

Undefined index: Ref in

$recipient['CityRecipient'] = $recipientCity['data'][0]['Ref']; - на этой строке затыкается. вверху массив, который есть перед этой строкой.

Как я понял. У нас тут вот массив вложенный еще раз, и тут должно быть $recipientCity['data'][0][0]['Ref']; Но иногда. в большинстве городов массив вложен 1 раз. И тогда все верно

Не поможете с решением?

Создаются не в тот город

Добрый день, подключил библиотеку, все работает , спасибо, но столкнулся уже второй раз с проблемой, что создало ттн не в тот город. кидаю код:

array(
'FirstName' => $row_order_data['order_name'],
'MiddleName' => $row_order_data['order_patronymic'],
'LastName' => $row_order_data['order_surname'],
'Phone' => $row_order_data['order_phone'],
'City' => 'Калинівка',
'Region' => 'Київська',
'Warehouse' => 'Відділення №1: вул. Центральна, 57',
),

Если данные получателя будут по такому адресу и городу- то к сожалению ттн создается на такое отделение :

Калинівка (Броварський р-н), Відділення № 1: вул. Чернігівська, 9/1

Было еще одно село, что так создалось..

Кто то сталкивался с такой проблемой?

WarehouseDoors - Создание экспресс-накладной на адрес

Добрый день!
Подскажите что не так когда указываю отправку на адрес
вроде как пару раз сработало - потом начало отправить полюбому на отделение

при отправки на адрес указываю:

$optionsArray['ServiceType'] = 'WarehouseDoors';
$optionsArray['RecipientCityName'] = "Название города";
$optionsArray['RecipientAddressName'] = "Название улицы";
$optionsArray['RecipientHouse'] = "Номер дома";
$optionsArray['RecipientFlat'] = 'Этаж';

Метод getSettlements

Привет.
Спасибо за библиотеку, очень классная.
В Новой Почте появился метод getSettlements, для загрузки всех населенных пунктов, в которые делает доставку НП (т.е. не только те где есть отделения, но и те в которые делает адресную доставку), я себе добавил, вот так
function getSettlements($page = 0, $findByString = '', $ref = '') {
return $this->request('AddressGeneral', 'getSettlements', array(
'Page' => $page,
'FindByString' => $findByString,
'Ref' => $ref,
));
}
будет время обнови репозиторий.

Ошибка непонятная!

Ошибка
"success" => false
"data" => []
"errors" => array:1 [▼
0 => "Method InternetDocumentGeneral_documentsTracking not found"
]
Причем эта ошибка не всегда. Иногда она есть а иногда ее нет. Подскажите в чем проблема плиз?

Невозможно создать отправление типа Documents

Если отправлять не груз, а документы, используя newInternetDocument() то НП постоянно возвращает ошибку "VolumeGeneral must be empty" даже если VolumeGeneral не передаешь или установил в 0. Проблема в том, что в checkInternetDocumentParams() устанавливается вес по умолчанию в 0.0004 если он не указан, эту функцию лучше убрать (как минимум для 'CargoType' => 'Documents')

getAreas

Данный метод есть у новой почты. "getAreas"

Некоторые неточности с некоторыми городами

Прежде хочу Вас поблагодарить за Ваш труд, интегрировал ее на свой сайт , но есть проблема, попробую описать:

  • проблема с созданием интернет ТТН в которой присутствует город Покровск( смею предположить, что и другие города могут быть с проблемами), Ваш код:
    public function testNewInternetDocument($sender)
    {
    $result = $this->np->newInternetDocument(
    array(
    'LastName' => $sender['LastName'],
    'FirstName' => $sender['FirstName'],
    'MiddleName' => $sender['MiddleName'],
    'City' => 'Киев',
    'Region' => 'Киевская',
    'Warehouse' => 'Отделение №1: ул. Пироговский путь, 135',
    ),

я изменил на такой и вроде как заработало с городом отправителя Покровск:
$result = $np->newInternetDocument(
array(
'LastName' => $sender['LastName'],
'FirstName' => $sender['FirstName'],
'MiddleName' => $sender['MiddleName'],
'CitySender' => 'e71a0c98-4b33-11e4-ab6d-005056801329',
'SenderAddress' => '5a39e562-e1c2-11e3-8c4a-0050568002cf',
),

а вот с получателем есть проблема. Ввожу город получателя "Покровск" по Вашему коду:
array(
'FirstName' => 'Виктория',
'MiddleName' => 'Викторовна',
'LastName' => 'Ремизова',
'Phone' => '380950960973',
'City' => 'Покровск',
'Region' => 'Донецкая',
'Warehouse' => 'Відділення №3 (до 30 кг): вул. Поштова (ран. Соціалистична), 12',
),

и получаю ответ от новой почты
array(1) { [0]=> string(26) "CityRecipient not selected" }

Пробовал сделать так же как и с отправителем , получаю ошибку от sdk:

Fatal error: Uncaught Exception: City is required filed for recipient in /home/virtwww/w_4girl-org_aa83ed29/http/admin/include/Delivery/NovaPoshtaApi2.php:866 Stack trace: #0 /home/virtwww/w_4girl-org_aa83ed29/http/admin/include/Delivery/NovaPoshtaApi2.php(928): LisDev\Delivery\NovaPoshtaApi2->checkInternetDocumentRecipient(Array) #1 /home/virtwww/w_4girl-org_aa83ed29/http/admin/include/creat_ttn_np.php(49): LisDev\Delivery\NovaPoshtaApi2->newInternetDocument(Array, Array, Array) #2 {main} thrown in /home/virtwww/w_4girl-org_aa83ed29/http/admin/include/Delivery/NovaPoshtaApi2.php on line 866

Наложенный платёж с отправкой денег на карту

Такое вообще возможно организовать? Не нашёл инфы ни в документации, ни в данной либе. Может через подписание каких-то договоров?
Написал в техподдержку - молчат второй день.
Без возможности автоматически создавать накладные 90% функциональности всего API отмирает.

getCounterparties

Не могу понять, при вызове $senderInfo = $this->np->getCounterparties('Sender', 1, '', '');
в ответ приходит

[
"success" => true
"data" => array:1 [
0 => array:13 [
"Description" => "Приватна особа"
"Ref" => "dadb580b-7c5c-11e8-8b24-00"
"City" => "00000000-0000-0000-0000-0000"
"Counterparty" => null
"FirstName" => "Приватна особа"
"LastName" => ""
"MiddleName" => ""
"CounterpartyFullName" => ""
"OwnershipFormRef" => ""
"OwnershipFormDescription" => ""
"EDRPOU" => ""
"CounterpartyType" => "PrivatePerson"
"CityDescription" => ""
]
]
"errors" => []
"warnings" => []
"info" => array:1 [
"totalCount" => 1
]
"messageCodes" => []
"errorCodes" => []
"warningCodes" => []
"infoCodes" => []
]

Нету даных отправителя. В чем ошибка?

Обратная доставка

'BackwardDeliveryData' => array(
array(
// Кто оплачивает обратную доставку
'PayerType' => 'Recipient',
// Тип доставки
'CargoType' => 'Money',
// Значение обратной доставки
'RedeliveryString' => 4552,
)
)

поля внутри массива полностью игнорируются. можно что угодно засунуть , но главное при правильных полях не создается наложеный платеж

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.