tune-reporting-python
TUNE Reporting API client library.
Badges
docs |
|
|---|---|
info |
|
tests |
|
package |
|
other |
Install
pip install tune_reporting
Requirements
- Prerequisites:
Python 3.0
- API Key:
To use SDK, it requires you to Generate API Key
Run Examples
make run-examples tmc_api_key=[TMC API KEY]
Run Tests
make test tmc_api_key=[TMC API KEY]
Classes
There are multiple TUNE API Classes available:
TuneV2Advertisers
TuneV2AdvertiserSites
TuneV2AdvertiserStatsActuals
TuneV2SessionAuthenticate
TuneV3LogsAdvertisersClicks
TuneV3LogsAdvertisersImpressions
class TuneV2Advertisers
Get ``ADVERTISER ID`` for this account based upon provided ``TMC_API_KEY``.
Code
tune_v2_advertisers = TuneV2Advertisers(
logger_level=logging.INFO,
logger_format=LoggingFormat.JSON,
logger_output=LoggingOutput.STDOUT_COLOR
)
try:
tune_v2_advertisers.tmc_auth(tmc_api_key=tmc_api_key)
if tune_v2_advertisers.get_advertiser_id(
auth_value=tmc_api_key,
auth_type=TuneV2AuthenticationTypes.API_KEY,
request_retry=None
):
advertiser_id = tune_v2_advertisers.advertiser_id
pprint(advertiser_id)
except TuneRequestBaseError as tmc_req_ex:
print_traceback(tmc_req_ex)
pprint(tmc_req_ex.to_dict())
print(str(tmc_req_ex))
except TuneReportingError as tmc_rep_ex:
pprint(tmc_rep_ex.to_dict())
print(str(tmc_rep_ex))
except Exception as ex:
print_traceback(ex)
print(get_exception_message(ex))
Example
$ cd examples
$ make example_tune_v2_advertisers tmc_api_key=[ ... TMC API-Key ...]
{"asctime": "2017-11-29 08:58:30 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC Authentication: Start"}
{"asctime": "2017-11-29 08:58:31 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC Authentication: Finished", "request_time_msecs": 635}
{"asctime": "2017-11-29 08:58:31 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Advertisers: Advertiser ID"}
{"asctime": "2017-11-29 08:58:31 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC v2 Advertisers: Finished", "request_time_msecs": 260}
{"asctime": "2017-11-29 08:58:31 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Advertisers: Advertiser ID: [ADVERTISER ID]"}
[ADVERTISER ID]
class TuneV2SessionAuthenticate
Get time-limited ``SESSION TOKEN`` after authenticating provided ``TMC_API_KEY``.
Code
tune_v2_session_authenticate = \
TuneV2SessionAuthenticate(
logger_level=logging.INFO
)
try:
if tune_v2_session_authenticate.get_session_token(
tmc_api_key=tmc_api_key,
request_retry=None
):
session_token = tune_v2_session_authenticate.session_token
print(session_token)
except TuneRequestBaseError as tmc_req_ex:
print_traceback(tmc_req_ex)
pprint(tmc_req_ex.to_dict())
print(str(tmc_req_ex))
except TuneReportingError as tmc_rep_ex:
pprint(tmc_rep_ex.to_dict())
print(str(tmc_rep_ex))
except Exception as ex:
print_traceback(ex)
print(get_exception_message(ex))
Example
$ cd examples
$ make example_tune_v2_session_authenticate tmc_api_key=[ ... TMC API-Key ...]
{"asctime": "2017-11-29 09:11:09 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Session Authenticate: Get Token"}
{"asctime": "2017-11-29 09:11:11 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC v2 Session Authenticate: Finished", "request_time_msecs": 1550}
{"asctime": "2017-11-29 09:11:11 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Session Authenticate", "session_token": "[SESSION TOKEN]"}
{"asctime": "2017-11-29 09:11:11 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Session Authenticate: Finished"}
[SESSION TOKEN]
class TuneV2AdvertiserSites
Get listing of Advertiser’s Mobile Apps (aka Sites) for this account based upon provided ``TMC_API_KEY``.
Code
tune_advertiser_sites = TuneV2AdvertiserSites(
logger_level=logging.INFO
)
try:
tune_advertiser_sites.tmc_auth(tmc_api_key=tmc_api_key)
for collect_data_item, collect_error in tune_advertiser_sites.collect(
auth_value=tmc_api_key,
auth_type=TuneV2AuthenticationTypes.API_KEY,
auth_type_use=TuneV2AuthenticationTypes.API_KEY,
request_params={'limit': 5}
):
pprint(collect_data_item)
except TuneRequestBaseError as tmc_req_ex:
print_traceback(tmc_req_ex)
pprint(tmc_req_ex.to_dict())
print(str(tmc_req_ex))
except TuneReportingError as tmc_rep_ex:
print_traceback(tmc_rep_ex)
pprint(tmc_rep_ex.to_dict())
print(str(tmc_rep_ex))
except Exception as ex:
print_traceback(ex)
print(get_exception_message(ex))
Example
$ cd examples
$ make example_tune_v2_advertiser_sites tmc_api_key=[ ... TMC API-Key ...]
{"asctime": "2017-11-29 09:04:25 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC Authentication: Start"}
{"asctime": "2017-11-29 09:04:25 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC Authentication: Finished", "request_time_msecs": 593}
{"asctime": "2017-11-29 09:04:25 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "Start Advertiser Sites find"}
{"asctime": "2017-11-29 09:04:26 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TuneV2AdvertiserSites.collect: Finished", "request_time_msecs": 263}
[JSON RESPONSE]
{
'id': 533,
'name': 'TEST UP TIME - DONT DELETE',
'package_name': 'unknown',
'status': 'active',
'url': 'http://website.com',
}
...
class TuneV2AdvertiserStatsActuals
Logs of Advertiser’s Actuals Stats for this account based upon provided ``TMC_API_KEY``.
Code
tune_v2_advertiser_stats_actuals = \
TuneV2AdvertiserStatsActuals(
logger_level=logging.INFO,
logger_format=LoggingFormat.JSON,
logger_output=LoggingOutput.STDOUT_COLOR
)
tz = pytz.timezone("America/New_York")
yesterday = datetime.now(tz).date() - timedelta(days=1)
str_yesterday = str(yesterday)
try:
auth_response = tune_v2_advertiser_stats_actuals.tmc_auth(tmc_api_key=tmc_api_key)
assert auth_response
tune_v2_advertiser_stats_actuals.collect(
auth_value=tmc_api_key,
auth_type=TuneV2AuthenticationTypes.API_KEY,
auth_type_use=TuneV2AuthenticationTypes.API_KEY,
start_date=str_yesterday,
end_date=str_yesterday,
request_params={
'timezone': 'America/Los_Angeles',
'format': TuneV2AdvertiserStatsFormats.CSV,
'fields': (
"ad_clicks,"
"ad_clicks_unique,"
"ad_impressions,"
"ad_impressions_unique,"
"ad_network_id,"
"advertiser_id,"
"country.code,"
"date_hour,"
"events,"
"installs,"
"is_reengagement,"
"payouts,"
"publisher_id,"
"publisher_sub_ad.ref,"
"publisher_sub_adgroup.ref,"
"publisher_sub_campaign.ref,"
"publisher_sub_publisher.ref,"
"publisher_sub_site.ref,"
"site_id"
),
'group': (
"country_id,"
"is_reengagement,"
"publisher_id,"
"publisher_sub_ad_id,"
"publisher_sub_adgroup_id,"
"publisher_sub_campaign_id,"
"publisher_sub_publisher_id,"
"publisher_sub_site_id,"
"site_id"
),
'timezone': "America/Los_Angeles",
'limit': 5
},
request_action=TuneV2AdvertiserStatsActions.EXPORT,
request_retry={'delay': 15,
'timeout': 30,
'tries': 10}
)
except TuneRequestBaseError as tmc_req_ex:
print_traceback(tmc_req_ex)
pprint(tmc_req_ex.to_dict())
print(str(tmc_req_ex))
except TuneReportingError as tmc_rep_ex:
pprint(tmc_rep_ex.to_dict())
print(str(tmc_rep_ex))
except Exception as ex:
print_traceback(ex)
print(get_exception_message(ex))
for row in list(tune_v2_advertiser_stats_actuals.generator):
pprint(row)
Example
$ cd examples
$ make example_tune_v2_advertiser_stats_actuals_export_download tmc_api_key=[ ... TMC API-Key ...]
{"asctime": "2017-11-29 09:17:21 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC Authentication: Start"}
{"asctime": "2017-11-29 09:17:22 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC Authentication: Finished", "request_time_msecs": 516}
{"asctime": "2017-11-29 09:17:22 -0800", "levelname": "INFO", "name": "tune_reporting", "version": "2.3.1",
"message": "TMC v2 Advertiser Stats: Collect: export"}
{"asctime": "2017-11-29 09:17:23 -0800", "levelname": "INFO", "name": "requests_mv_integrations", "version": "00.06.01",
"message": "TMC v2 Advertiser Stats Find: Finished", "request_time_msecs": 1490}
[ADVERTISER ACTUALS STATS]
{
'ad_clicks': '48',
'ad_clicks_unique': '0',
'ad_impressions': '0',
'ad_impressions_unique': '0',
'ad_network_id': 0,
'advertiser_id': 877,
'conversions': '0',
'country': {'code': 'NL', 'name': 'Netherlands'},
'country_id': 528,
'currency_code': 'USD',
'date_hour': '2017-11-28 19:00:00',
'events': '0',
'installs': '0',
'is_reengagement': '0',
'payouts': '0.00000',
'publisher': {'name': 'PINGDOM DO_NOT_DELETE'},
'publisher_id': 142476,
'publisher_sub_ad': {'ref': ''},
'publisher_sub_ad_id': '0',
'publisher_sub_adgroup': {'ref': ''},
'publisher_sub_adgroup_id': '0',
'publisher_sub_campaign': {'ref': ''},
'publisher_sub_campaign_id': '0',
'publisher_sub_publisher': {'ref': ''},
'publisher_sub_publisher_id': '0',
'publisher_sub_site': {'ref': ''},
'publisher_sub_site_id': '0',
'purchase_validation_status': '0',
'site': {
'mobile_app_type': 'iOS',
'package_name': 'unknown',
'store_app_id': None,
},
'site_id': 533,
}
...
License
Release History
2.7.3 (2018-02-16)
migrate to github/TuneLab
2.7.2 (2018-02-07)
Updated requirements.txt
2.7.0 (2018-01-28)
Upgraded to use pyhttpstatus-utils 0.2.2.
Upgraded to use requests-mv-integrations 0.7.5.
2.6.1 (2018-01-25)
migrate to github/tuneinc
2.6.0 (2017-12-10)
readthedocs.org
2.4.0 (2017-11-29)
README
Travis CI
Tests
Examples
2.2.3 (2017-11-19)
Tests
2.2.1 (2017-10-27)
Support logging-mv-integrations refactor
2.2.0 (2017-03-26)
Replace ‘json’ with ‘ujson’
2.1.8 (2017-03-12)
Switch to using safe-cast package
2.1.7 (2017-02-27)
Requirements
2.1.6 (2017-02-07)
Requirements
2.1.5 (2017-02-03)
Python 3.6 Upgrade
2.1.2 (2017-01-27)
Cleanup
Requirements
2.1.0 (2017-01-14)
README.rst
HISTORY.rst
setup.py
2.0.0 (2016-11-20)
TUNE Reporting API v3
1.1.1 (2016-01-25)
TUNE Reporting API v2
Changes in Handling Exports and Logs
1.0.0 (2015-04-01)
TUNE Reporting API v2
Initial PyPi release
0.0.1 (2014-10-15)
First Commit
Metadata
Release files for tune_reporting 2.7.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tune-reporting-2.7.5.tar.gz | 34.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tune_reporting-2.7.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 87.7 kB
Release files / tune-reporting-2.7.5.tar.gz
| Download URL | tune-reporting-2.7.5.tar.gz |
|---|---|
| Size | 34.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b09b83fbfae67da5884f64fc78af16a7499f4eb18851f951a7589bc07214950b
|
|
BLAKE2b-256 checksum How to use checksums |
64f028f8843c16179c1f71213c8a0b45b0b0e10f74433630118f40b9e0615c9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / tune_reporting-2.7.5-py3-none-any.whl
| Download URL | tune_reporting-2.7.5-py3-none-any.whl |
|---|---|
| Size | 53.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ce890bf4c8f743eb0701878849249d31759d45f154448cfcd116fc60dddbff8d
|
|
BLAKE2b-256 checksum How to use checksums |
7f4d59141c887a87d74ecf97de55dc29b24dd8f942c1993f73b11fa75142979d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for tune_reporting 2.7.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.