Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Repository files navigation

Infinario Python SDK

Travis CI

The infinario.Infinario class provides access to the Infinario Python tracking API, supporting both synchronous and asynchronous modes.

You can install the SDK using pip:

pip install infinario

In order to track events, instantiate the class at least with your project token (can be found in Project Management in your Infinario account), for example:

frominfinarioimportInfinarioclient=Infinario('12345678-90ab-cdef-1234-567890abcdef') # PRODUCTION ENVIRONMENT# client = Infinario('12345678-90ab-cdef-1234-567890abcdef', silent=False) # DEVELOPMENT ENVIRONMENT

We recommend to set the silent parameter to False in a development environment, as it will cause the Infinario API to throw exceptions if something goes wrong. When left to the default value True, all errors will be logged (also see the logger parameter).

To get results of existing analyses stored in your Infinario project, you need to initialize the client with the Infinario project secret (found in the Overview screen) as the secret keyword argument.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')

In case you are tracking your data to an instance other than cloud.infinario.com, you need to specify the API where data should be sent. Please consult our support to find out the exact URI.

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
target='https://api.infinario.com/')

Identifying the customer

When tracking events, you have to specify which customer generated them. This can be either done right when calling the client's constructor.

pythonclient=Infinario('12345678-90ab-cdef-1234-567890abcdef', customer='john123')

or by calling identify.

client.identify('john123')

Tracking events

To track events for the currently selected customer, simply call the track method.

client.track('purchase')

You can also specify a dictionary of event properties to store with the event.

client.track('purchase', {'product': 'bottle', 'amount': 5})

Specify the POSIX timestamp of the event using:

timestamp=time.time()
# .. time passes ..client.track('purchase', timestamp=timestamp)

Updating customer properties

You can also update information that is stored with a customer.

client.update({'first_name': 'John', 'last_name': 'Smith'})

Getting HTML from campaign

client.get_html('Banner left')

will return:

'<img src="/my-awesome-banner-1.png" />'

Analysis export

To export the entire result of an analysis, use the export_analysis client method. It is necessary to authenticate during initialization of the client (see above). First argument is type of analysis (funnel, report, retention, segmentation), second argument is JSON object containing at least the ID of the analysis to export. Optional parameters include format (one of 'native-json' (default), 'table-json', 'csv'),

timezone (according to the IANA time zone database, default 'UTC') and execution_time (UNIX timestamp specifying the upper bound of events to include, default is now).
client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321')
data=client.export_analysis('funnel', {
'analysis_id': '2f86608f-24f5-11e3-9950-c48508494cf5',
'format': 'native-json',
'timezone': 'UTC',
})

The data could contain

{
"success": true,
"name": "Conversion funnel",
"steps": ["First visit", "Registration", "First log in", "Purchase", "Payment"],
"total": {
"counts": [48632, 24120, 20398, 1256, 1250],
"times": [-1, 680, 4502, 45, 540, 300],
"metric": 1987562
},
"drill_down": {
"type": "none",
"series": []
},
"metric": {
"step": 4,
"property": "price"
}
}

Segmentation result

You can also export the result of a segmentation for a specific customer (whom you need to specify either at initialization, or using the identify method). It is necessary to authenticate during initialization of the client (see above).

client=Infinario('12345678-90ab-cdef-1234-567890abcdef',
secret='fedcba09-8765-4321-fedc-ba0987654321',
customer='john123')
segment=client.segment_for('11112222-3333-4444-5555-666677778888',
timezone='UTC', timeout=0.5)

The result is the segmentation name, a string like 'Heavy payer'. In case the customer doesn't belong to any defined segment or their segmentation could not be determined within the given timeout, the method will return None. The timezone and timeout parameters are optional with the defaults as in the example.

Transport types

By default the client uses a simple non-buffered synchronous transport. The three available transport types are: * NullTransport - No requests, useful for disabling tracking in the Infinario constructor. * SynchronousTransport - (default) Most operations are blocking for the time of a request to the Infinario API * AsynchronousTransport - Most operations are non-blocking (see the code for more information),

buffered and using a single worker thread. Infinario client must be closed when no more data is to be tracked. We recommend against using the AsynchronousTransport, as it cannot be guaranteed the data will be sent. Data loss can for example happen in various events of system failure or even due to misuse. If you would like to track data from your code asynchronously, consider creating your own asynchronous workers using a library such as celery and use the SynchronousTransport to send the data from there.

Example of choosing AsynchronousTransport:

frominfinarioimportInfinario, AsynchronousTransportclient=Infinario('12345678-90ab-cdef-1234-567890abcdef',
transport=AsynchronousTransport)
# ...client.close()

Using on the command line

The python client also has a command-line interface that allows to call its essential functions:

TOKEN='12345678-90ab-cdef-1234-567890abcdef'
CUSTOMER='john123'# Track event
./infinario.py track "$TOKEN""$CUSTOMER" purchase --properties product=bottle amount=5
# Update customer properties
./infinario.py update "$TOKEN""$CUSTOMER" first_name=John last_name=Smith
# Get HTML from campaign
./infinario.py get_html "$TOKEN""$CUSTOMER""Banner left"

About

Infinario Python SDK

Resources

Stars

1 star

Watchers

10 watching

Forks

Releases

Packages

Used by

Contributors

Languages