from twitter_ads.resource import resource_property, Resource, Persistence, Analytics from twitter_ads.http import Request class PromotedAccount(Resource, Persistence): PROPERTIES = {} RESOURCE_COLLECTION = "/0/accounts/{account_id}/promoted_accounts" RESOURCE_STATS = "/0/stats/accounts/{account_id}/promoted_accounts" RESOURCE = "/0/accounts/{account_id}/promoted_accounts/{id}" # promoted account properties # read-only resource_property(PromotedAccount, "id", readonly=True) resource_property(PromotedAccount, "approval_status", readonly=True) resource_property(PromotedAccount, "created_at", readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, "updated_at", readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, "deleted", readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(PromotedAccount, "line_item_id") resource_property(PromotedAccount, "user_id") resource_property(PromotedAccount, "paused", transform=TRANSFORM.BOOL) class PromotedTweet(Resource, Persistence, Analytics): PROPERTIES = {} RESOURCE_COLLECTION = "/0/accounts/{account_id}/promoted_tweets"
def __update_audience__(self, location, list_type, operation): params = { 'tailored_audience_id': self.id, 'input_file_path': location, 'list_type': list_type, 'operation': operation } resource = self.RESOURCE_UPDATE.format(account_id=self.account.id) return Request(self.account.client, 'post', resource, params=params).perform() # tailored audience properties # read-only resource_property(TailoredAudience, 'id', readonly=True) resource_property(TailoredAudience, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(TailoredAudience, 'audience_size', readonly=True) resource_property(TailoredAudience, 'audience_type', readonly=True) resource_property(TailoredAudience, 'metadata', readonly=True) resource_property(TailoredAudience, 'partner_source', readonly=True) resource_property(TailoredAudience, 'reasons_not_targetable', readonly=True) resource_property(TailoredAudience, 'targetable', readonly=True) resource_property(TailoredAudience, 'targetable_types', readonly=True) # writable resource_property(TailoredAudience, 'name') resource_property(TailoredAudience, 'list_type')
@classmethod def all(klass, account, line_item_id, **kwargs): """Returns a Cursor instance for a given resource.""" params = {"line_item_id": line_item_id} params.update(kwargs) resource = klass.RESOURCE_COLLECTION.format(account_id=account.id) request = Request(account.client, "get", resource, params=params) return Cursor(klass, request, init_with=[account]) # targeting criteria properties # read-only resource_property(TargetingCriteria, "id", readonly=True) resource_property(TargetingCriteria, "localized_name", readonly=True) resource_property(TargetingCriteria, "created_at", readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, "updated_at", readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, "deleted", readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(TargetingCriteria, "line_item_id") resource_property(TargetingCriteria, "targeting_type") resource_property(TargetingCriteria, "targeting_value") resource_property(TargetingCriteria, "tailored_audience_expansion") resource_property(TargetingCriteria, "tailored_audience_type") class FundingInstrument(Resource, Persistence): PROPERTIES = {}
# Copyright (C) 2015 Twitter, Inc. """Container for all targeting related logic used by the Ads API SDK.""" from twitter_ads.http import Request from twitter_ads.resource import resource_property, Resource, Persistence from twitter_ads import API_VERSION from twitter_ads.utils import FlattenParams import json class AudienceSummary(Resource, Persistence): PROPERTIES = {} RESOURCE = '/' + API_VERSION + '/accounts/{account_id}/audience_summary' @classmethod @FlattenParams def load(klass, account, params): resource = klass.RESOURCE.format(account_id=account.id) headers = {'Content-Type': 'application/json'} response = Request(account.client, 'post', resource, headers=headers, body=json.dumps(params)).perform() return klass(account).from_response(response.body['data']) resource_property(AudienceSummary, 'audience_size')
self._validate_loaded() return TailoredAudiencePermission.all(self.account, self.id, **kwargs) def __create_audience__(self, name): params = {'name': name} resource = self.RESOURCE_COLLECTION.format(account_id=self.account.id) response = Request(self.account.client, 'post', resource, params=params).perform() return self.from_response(response.body['data']) # tailored audience properties # read-only resource_property(TailoredAudience, 'id', readonly=True) resource_property(TailoredAudience, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(TailoredAudience, 'audience_size', readonly=True) resource_property(TailoredAudience, 'audience_type', readonly=True) resource_property(TailoredAudience, 'metadata', readonly=True)
from twitter_ads.enum import TRANSFORM from twitter_ads.http import Request from twitter_ads.resource import resource_property, Resource, Persistence, Analytics class PromotedAccount(Resource, Persistence): PROPERTIES = {} RESOURCE_COLLECTION = '/' + API_VERSION + '/accounts/{account_id}/promoted_accounts' RESOURCE = '/' + API_VERSION + '/accounts/{account_id}/promoted_accounts/{id}' # promoted account properties # read-only resource_property(PromotedAccount, 'approval_status', readonly=True) resource_property(PromotedAccount, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(PromotedAccount, 'entity_status', readonly=True) resource_property(PromotedAccount, 'id', readonly=True) resource_property(PromotedAccount, 'updated_at', readonly=True, transform=TRANSFORM.TIME) # writable resource_property(PromotedAccount, 'line_item_id') resource_property(PromotedAccount, 'user_id') class PromotedTweet(Resource, Persistence, Analytics): PROPERTIES = {} RESOURCE_COLLECTION = '/' + API_VERSION + '/accounts/{account_id}/promoted_tweets'
"""Returns a list of supported TV markets""" resource = klass.RESOURCE_OPTIONS + 'tv_markets' request = Request(account.client, 'get', resource, params=kwargs) return Cursor(None, request) @classmethod def tv_shows(klass, account, **kwargs): """Returns a list of supported TV shows""" resource = klass.RESOURCE_OPTIONS + 'tv_shows' request = Request(account.client, 'get', resource, params=kwargs) return Cursor(None, request) # targeting criteria properties # read-only resource_property(TargetingCriteria, 'id', readonly=True) resource_property(TargetingCriteria, 'name', readonly=True) resource_property(TargetingCriteria, 'localized_name', readonly=True) resource_property(TargetingCriteria, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable
""" return self._load_resource(Video, id, **kwargs) def scoped_timeline(self, *ids, **kwargs): """ Returns the most recent promotable Tweets created by one or more specified Twitter users. """ self._validate_loaded() if isinstance(ids, list): ids = ','.join(map(str, ids)) params = {'user_ids': ids} params.update(kwargs) resource = self.SCOPED_TIMELINE.format(id=self.id) response = Request(self.client, 'get', resource, params=params).perform() return response.body['data'] # account properties resource_property(Account, 'id', readonly=True) resource_property(Account, 'name', readonly=True) resource_property(Account, 'salt', readonly=True) resource_property(Account, 'timezone', readonly=True) resource_property(Account, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(Account, 'timezone_switch_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'updated_at', readonly=True, transform=TRANSFORM.TIME)
# Copyright (C) 2015 Twitter, Inc. """Container for all targeting related logic used by the Ads API SDK.""" from twitter_ads.http import Request from twitter_ads.resource import resource_property, Resource, Persistence from twitter_ads import API_VERSION from twitter_ads.utils import FlattenParams import json class AudienceEstimate(Resource, Persistence): PROPERTIES = {} RESOURCE = '/' + API_VERSION + '/accounts/{account_id}/audience_estimate' @classmethod @FlattenParams def load(klass, account, params): resource = klass.RESOURCE.format(account_id=account.id) headers = {'Content-Type': 'application/json'} response = Request(account.client, 'post', resource, headers=headers, body=json.dumps(params)).perform() return klass(account).from_response(response.body['data']) resource_property(AudienceEstimate, 'audience_size')
from twitter_ads.enum import TRANSFORM from twitter_ads.resource import resource_property, Resource, Persistence, Analytics from twitter_ads.http import Request class PromotedAccount(Resource, Persistence): PROPERTIES = {} RESOURCE_COLLECTION = '/1/accounts/{account_id}/promoted_accounts' RESOURCE = '/1/accounts/{account_id}/promoted_accounts/{id}' # promoted account properties # read-only resource_property(PromotedAccount, 'id', readonly=True) resource_property(PromotedAccount, 'approval_status', readonly=True) resource_property(PromotedAccount, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(PromotedAccount, 'line_item_id') resource_property(PromotedAccount, 'user_id') resource_property(PromotedAccount, 'paused', transform=TRANSFORM.BOOL) class PromotedTweet(Resource, Persistence, Analytics): PROPERTIES = {} RESOURCE_COLLECTION = '/1/accounts/{account_id}/promoted_tweets'
""" Returns a collection of media creatives available to the current account. """ return self._load_resource(MediaCreative, id, **kwargs) def scoped_timeline(self, *id, **kwargs): """ Returns the most recent promotable Tweets created by the specified Twitter user. """ self._validate_loaded() params = {"user_id": id} params.update(kwargs) resource = self.SCOPED_TIMELINE.format(id=self.id) response = Request(self.client, "get", resource, params=params).perform() return response.body["data"] # account properties resource_property(Account, "id", readonly=True) resource_property(Account, "name", readonly=True) resource_property(Account, "salt", readonly=True) resource_property(Account, "timezone", readonly=True) resource_property(Account, "approval_status", readonly=True) resource_property(Account, "deleted", readonly=True, transform=TRANSFORM.BOOL) resource_property(Account, "timezone_switch_at", readonly=True, transform=TRANSFORM.TIME) resource_property(Account, "created_at", readonly=True, transform=TRANSFORM.TIME) resource_property(Account, "updated_at", readonly=True, transform=TRANSFORM.TIME)
""" Returns a collection of permissions for the curent tailored audience. """ self._validate_loaded() return TailoredAudiencePermission.all(self.account, self.id, **kwargs) def __create_audience__(self, name): params = {'name': name} resource = self.RESOURCE_COLLECTION.format(account_id=self.account.id) response = Request(self.account.client, 'post', resource, params=params).perform() return self.from_response(response.body['data']) # tailored audience properties # read-only resource_property(TailoredAudience, 'id', readonly=True) resource_property(TailoredAudience, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(TailoredAudience, 'audience_size', readonly=True) resource_property(TailoredAudience, 'audience_type', readonly=True) resource_property(TailoredAudience, 'metadata', readonly=True) resource_property(TailoredAudience, 'partner_source', readonly=True) resource_property(TailoredAudience, 'reasons_not_targetable', readonly=True) resource_property(TailoredAudience, 'targetable', readonly=True) resource_property(TailoredAudience, 'targetable_types', readonly=True) # writable resource_property(TailoredAudience, 'name') resource_property(TailoredAudience, 'list_type')
"""Returns a list of supported TV markets""" resource = klass.RESOURCE_OPTIONS + 'tv_markets' request = Request(account.client, 'get', resource, params=kwargs) return Cursor(None, request) @classmethod def tv_shows(klass, account, **kwargs): """Returns a list of supported TV shows""" resource = klass.RESOURCE_OPTIONS + 'tv_shows' request = Request(account.client, 'get', resource, params=kwargs) return Cursor(None, request) # targeting criteria properties # read-only resource_property(TargetingCriteria, 'id', readonly=True) resource_property(TargetingCriteria, 'localized_name', readonly=True) resource_property(TargetingCriteria, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(TargetingCriteria, 'line_item_id') resource_property(TargetingCriteria, 'operator_type') resource_property(TargetingCriteria, 'targeting_type') resource_property(TargetingCriteria, 'targeting_value') resource_property(TargetingCriteria, 'tailored_audience_expansion') resource_property(TargetingCriteria, 'tailored_audience_type') # sdk-only resource_property(TargetingCriteria, 'to_delete', transform=TRANSFORM.BOOL)
@classmethod def all(klass, account, line_item_id, **kwargs): """Returns a Cursor instance for a given resource.""" params = {'line_item_id': line_item_id} params.update(kwargs) resource = klass.RESOURCE_COLLECTION.format(account_id=account.id) request = Request(account.client, 'get', resource, params=params) return Cursor(klass, request, init_with=[account]) # targeting criteria properties # read-only resource_property(TargetingCriteria, 'id', readonly=True) resource_property(TargetingCriteria, 'localized_name', readonly=True) resource_property(TargetingCriteria, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(TargetingCriteria, 'line_item_id')
@classmethod def all(klass, account, line_item_id, **kwargs): """Returns a Cursor instance for a given resource.""" params = {'line_item_id': line_item_id} params.update(kwargs) resource = klass.RESOURCE_COLLECTION.format(account_id=account.id) request = Request(account.client, 'get', resource, params=params) return Cursor(klass, request, init_with=[account]) # targeting criteria properties # read-only resource_property(TargetingCriteria, 'id', readonly=True) resource_property(TargetingCriteria, 'localized_name', readonly=True) resource_property(TargetingCriteria, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TargetingCriteria, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(TargetingCriteria, 'line_item_id') resource_property(TargetingCriteria, 'operator_type') resource_property(TargetingCriteria, 'targeting_type') resource_property(TargetingCriteria, 'targeting_value') resource_property(TargetingCriteria, 'tailored_audience_expansion') resource_property(TargetingCriteria, 'tailored_audience_type') # sdk-only resource_property(TargetingCriteria, 'to_delete', transform=TRANSFORM.BOOL)
Returns the most recent promotable Tweets created by the specified Twitter user. """ self._validate_loaded() params = {'user_id': id} params.update(kwargs) resource = self.SCOPED_TIMELINE.format(id=self.id) response = Request(self.client, 'get', resource, params=params).perform() return response.body['data'] # account properties resource_property(Account, 'id', readonly=True) resource_property(Account, 'name', readonly=True) resource_property(Account, 'salt', readonly=True) resource_property(Account, 'timezone', readonly=True) resource_property(Account, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(Account, 'timezone_switch_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'updated_at', readonly=True,
return self._load_resource(VideoWebsiteCard, id, **kwargs) def scoped_timeline(self, *id, **kwargs): """ Returns the most recent promotable Tweets created by the specified Twitter user. """ self._validate_loaded() params = {'user_id': id} params.update(kwargs) resource = self.SCOPED_TIMELINE.format(id=self.id) response = Request(self.client, 'get', resource, params=params).perform() return response.body['data'] # account properties resource_property(Account, 'id', readonly=True) resource_property(Account, 'name', readonly=True) resource_property(Account, 'salt', readonly=True) resource_property(Account, 'timezone', readonly=True) resource_property(Account, 'approval_status', readonly=True) resource_property(Account, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(Account, 'timezone_switch_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'updated_at', readonly=True, transform=TRANSFORM.TIME) # writable resource_property(Account, 'account_name') resource_property(Account, 'industry_type')
def scheduled_promoted_tweets(self, id=None, **kwargs): """ Returns a collection of Scheduled Promoted Tweets available to the current account. """ return self._load_resource(ScheduledPromotedTweet, id, **kwargs) def cards(self, id=None, **kwargs): """ Returns a collection of Cards available to the current account. """ return self._load_resource(Card, id, **kwargs) # account properties resource_property(Account, 'id', readonly=True) resource_property(Account, 'name', readonly=True) resource_property(Account, 'salt', readonly=True) resource_property(Account, 'timezone', readonly=True) resource_property(Account, 'approval_status', readonly=True) resource_property(Account, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(Account, 'timezone_switch_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Account, 'updated_at',
self._validate_loaded() return TailoredAudienceTargeted.all(self.account, self.id, **kwargs) def __create_audience__(self, name): params = {'name': name} resource = self.RESOURCE_COLLECTION.format(account_id=self.account.id) response = Request(self.account.client, 'post', resource, params=params).perform() return self.from_response(response.body['data']) # tailored audience properties # read-only resource_property(TailoredAudience, 'id', readonly=True) resource_property(TailoredAudience, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(TailoredAudience, 'deleted', readonly=True, transform=TRANSFORM.BOOL) resource_property(TailoredAudience, 'audience_size', readonly=True) resource_property(TailoredAudience, 'audience_type', readonly=True) resource_property(TailoredAudience, 'partner_source', readonly=True)
from twitter_ads.enum import TRANSFORM from twitter_ads.resource import resource_property, Resource, Persistence, Analytics from twitter_ads.http import Request class PromotedAccount(Resource, Persistence): PROPERTIES = {} RESOURCE_COLLECTION = '/1/accounts/{account_id}/promoted_accounts' RESOURCE = '/1/accounts/{account_id}/promoted_accounts/{id}' # promoted account properties # read-only resource_property(PromotedAccount, 'id', readonly=True) resource_property(PromotedAccount, 'approval_status', readonly=True) resource_property(PromotedAccount, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, 'updated_at', readonly=True, transform=TRANSFORM.TIME) resource_property(PromotedAccount, 'deleted', readonly=True, transform=TRANSFORM.BOOL) # writable resource_property(PromotedAccount, 'line_item_id')
params = { 'entity': entity, 'start_time': to_time(start_time, None), 'end_time': to_time(end_time, None) } params.update(kwargs) resource = klass.RESOURCE_ACTIVE_ENTITIES.format(account_id=account.id) response = Request(account.client, 'get', resource, params=params).perform() return response.body['data'] # Analytics properties # read-only resource_property(Analytics, 'id', readonly=True) resource_property(Analytics, 'id_str', readonly=True) resource_property(Analytics, 'status', readonly=True) resource_property(Analytics, 'url', readonly=True) resource_property(Analytics, 'created_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Analytics, 'expires_at', readonly=True, transform=TRANSFORM.TIME) resource_property(Analytics, 'updated_at', readonly=True, transform=TRANSFORM.TIME)