Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - traderinteractive/tol-api-php: A PHP client for the TraderOnline REST APIs. · GitHub
Skip to content

Repository files navigation

tol-api-php

Build StatusScrutinizer Code QualityCoverage Status

Latest Stable VersionLatest Unstable VersionLicense

Total DownloadsDaily DownloadsMonthly Downloads

This is a PHP client for REST APIs like the TraderOnline APIs.

Requirements

This api client requires PHP 7.3 or newer and uses composer to install further PHP dependencies. See the composer specification for more details.

When contributing, access to a working mongo database for testing is needed. See the Contribution Guidelines for more details.

Installation

tol-api-php can be installed for use in your project using composer.

The recommended way of using this library in your project is to add a composer.json file to your project. The following contents would add tol-api-php as a dependency:

composer require traderinteractive/tol-api

Basic Usage

The basic guzzle client, without caching or automated pagination handling is mostly easy to work with.

To instantiate a client, you need the guzzle adapter, client id, client secret, and API url. This client should work with apis like the TOL APIs.

useTraderInteractive\Api;
$apiAdapter = newApi\GuzzleAdapter();
$auth = Api\Authentication::createClientCredentials(
'clientId',
'clientSecret'
)
$apiClient = newApi\Client(
$apiAdapter,
$auth,
'https://baseApiUrl/v1'
);

Then you can make index requests like below, although it is recommended to take a look at the Collection section below so that you can take advantage of automatic pagination handling. Here's an example of how to fetch a single page of items.

<li>
<?php$response = $apiClient->index(
'resourceName',
array('aFilter' => '5')
);
if ($response->getStatusCode() !== 200) {
thrownewException('Non successful index call');
}
$body = json_decode($response->getBody(), true);
$total = $body['pagination']['total'];
// Loop over the first page of itemsforeach ($body['result'] as$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

For getting just a single item back from the api, you can use the get method:

// Get item 1234$response = $apiClient->get('resourceName', '1234');
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
$item = json_decode($response->getBody(), true);
echo"Fetched item {$item['foo']}\n";

For creating a new item, you can use the post method:

$response = $apiClient->post(
'resourceName',
array(
'foo' => array(
'bar' => 'boo',
'bing' => '5',
),
)
);
if ($response->getStatusCode() !== 201) {
thrownewException('Failed to create item foo');
}
$item = json_decode($response->getBody(), true);
echo$item['result']['foo'];

For updating an item, you can use the put method:

// Set item 1234's foo to bar.$response = $apiClient->put(
'resourceName',
'1234',
array('bing' => array('foo' => 'bar'))
);
if ($response->getStatusCode() !== 200) {
thrownewException('Failed to update item 1234');
}

For deleting an item, you can use the delete method:

// Delete item 1234.$response = $apiClient->delete('resourceName', '1234');
if ($response->getStatusCode() !== 204) {
thrownewException('Failed to delete item 1234');
}

For making asynchronous requests use the start*() and end() methods:

$handleOne = $apiClient->startGet('resourceName', '1234');
$handleTwo = $apiClient->startGet('resourceName', '5678');
$responseOne = $apiClient->end($handleOne);
$responseTwo = $apiClient->end($handleTwo);
if ($responseOne->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 1234');
}
if ($responseTwo->getStatusCode() !== 200) {
thrownewException('Failed to fetch item 5678');
}
$itemOne = json_decode($responseOne->getBody(), true);
$itemTwo = json_decode($responseTwo->getBody(), true);
echo"Fetched item {$itemOne['foo']}\n";
echo"Fetched item {$itemTwo['foo']}\n";

Cache

The library allows for a PSR-16 SimpleCache implementation.

Collection

This is the preferred way to make index requests so that you don't have to handle (or forget to handle!) pagination yourself. Using this iterator is simple with the API Client. As an example, here is a snippet of code that will create a dropdown list of items. WARNING Updates should not be performed to the items in the collection while interating as this may change the pagination.

<ul>
<?php$items = new \TraderInteractive\Api\Collection(
$apiClient,
'resourceName',
array('aFilter' => '5')
);
foreach ($itemsas$item) {
echo"<li>{$item['foo']}</li>\n";
}
?>
</ul>

Contributing

If you would like to contribute, please use our build process for any changes and after the build passes, send us a pull request on github!

There is also a docker-based fig configuration that will standup docker containers for the databases, execute the build inside a docker container, and then terminate everything. This is an easy way to build the application:

fig run build

About

A PHP client for the TraderOnline REST APIs.

Resources

Contributing

Stars

5 stars

Watchers

66 watching

Forks

Releases

Packages

Used by

Contributors

Languages