Share
Embed
Twitter Ads API #TechTalk (SFO)
Twitter Ads API on-boarding workshop for the Ruby SDK.
https://dev.twitter.com/ads
http://twitterdev.github.io/twitter-ruby-ads-sdk/
http://bit.ly/ads-api-techtalk-ruby
https://github.com/brandonblack/presentations
Brandon Black
November 13, 2015
Transcript
52 slides
-
A D S A P I # T E C
H TA L K -
PA R T N E R E N G I
N E E R I N G @brandonmblack @emmolam @hwz @jaakkosf -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
W H AT W E D O API DESIGN Implementation
review for all API features. TECHNICAL COMMS Newsletters and all technical communications. COMMUNITY & PARTNER SUPPORT Forums, inquiries and office hours events. DOCS, CODE SAMPLES AND SDKs Guides, tutorials, examples. INTEGRATION On-boarding and consulting. PRODUCT FEEDBACK Internal advocacy and product feedback. -
Help? Join the conversation in the Twitter Community forums Follow
@AdsAPI for platform updates -
G E T T I N G S TA R
T E D -
</> SETUP PRE-REQUISITES $ ruby -v ruby 2.0.0p643 (2015-02-25 revision
49749) [x86_64-darwin14.1.0] RUBY VERSION $ gem install pry jsonpretty twurl INSTALLING TOOLS & DEPENDENCIES Note: Depending on how your Ruby installation is setup, you may need to run the above “gem install” commands with “sudo”. -
AUTHORIZATION The Ads API uses OAuth 1.0a for authorization and
implements the 3-legged OAuth flow. OAUTH 1.0A -
AUTHORIZATION API key and secret are available under the “Keys
and Access Tokens” tab. Your consumer key is a publicly visible identifier for your app. You should never share your consumer secret. CONSUMER KEY & SECRET -
</> SETUP PRE-REQUISITES $ twurl authorize --consumer-key key --consumer-secret secret
AUTHORIZATION $ cat ~/.twurlrc VALIDATE SETUP $ twurl -H ads-api-sandbox.twitter.com "/0/accounts" | jsonpretty TRY IT OUT -
C O N F I D E N T I
A L PER MINS / ENDPOINT 25 REQUESTS READS PER MIN / CATEGORY 100 REQUESTS WRITES D E V E LO P E R R AT E L I M I TS More info at: https://dev.twitter.com/ads/basics/rate-limiting -
WHAT WE’LL LEARN TODAY CREATIVE 1 CAMPAIGN SETUP 2 TARGETING
3 MEASUREMENT 4 -
</> SETUP RUBY SDK $ gem install twitter-ads INSTALLING THE
RUBY SDK $ twitter-ads twitter-ads v0.2.5 >> START AN INTERACTIVE SESSION Note: Depending on how your Ruby installation is setup, you may need to run the above “gem install” commands with “sudo”. -
</> CLIENT RUBY SDK # enable sandbox mode CLIENT.options[:sandbox] =
true # load up the account instance account = CLIENT.accounts.first # enable request tracing (optional, good for troubleshooting) CLIENT.options[:trace] = true http://bit.ly/ads-api-client -
</> CAMPAIGN RUBY SDK # create your campaign campaign =
TwitterAds::Campaign.new(account) campaign.funding_instrument_id = account.funding_instruments.first.id campaign.daily_budget_amount_local_micro = 1_000_000 campaign.name = 'my first campaign' campaign.paused = true campaign.start_time = Time.now.utc campaign.save http://bit.ly/ads-api-campaign -
</> CAMPAIGN RUBY SDK # create your campaign campaign =
TwitterAds::Campaign.new(account) campaign.funding_instrument_id = account.funding_instruments.first.id campaign.daily_budget_amount_local_micro = 1_000_000 campaign.name = 'my first campaign' campaign.paused = true campaign.start_time = Time.now.utc campaign.save http://bit.ly/ads-api-campaign -
</> CAMPAIGN RUBY SDK # create your campaign campaign =
TwitterAds::Campaign.new(account) campaign.funding_instrument_id = account.funding_instruments.first.id campaign.daily_budget_amount_local_micro = 1_000_000 campaign.name = 'my first campaign' campaign.paused = true campaign.start_time = Time.now.utc campaign.save http://bit.ly/ads-api-campaign -
</> CAMPAIGN RUBY SDK # create your campaign campaign =
TwitterAds::Campaign.new(account) campaign.funding_instrument_id = account.funding_instruments.first.id campaign.daily_budget_amount_local_micro = 1_000_000 campaign.name = 'my first campaign' campaign.paused = true campaign.start_time = Time.now.utc campaign.save http://bit.ly/ads-api-campaign -
</> LINE ITEM RUBY SDK # create a line item
for the campaign line_item = TwitterAds::LineItem.new(account) line_item.campaign_id = campaign.id line_item.name = 'my first ad' line_item.product_type = TwitterAds::Product::PROMOTED_TWEETS line_item.placements = [TwitterAds::Placement::ALL_ON_TWITTER] line_item.objective = TwitterAds::Objective::TWEET_ENGAGEMENTS line_item.bid_amount_local_micro = 10_000 line_item.paused = true line_item.save http://bit.ly/ads-api-line-item -
</> LINE ITEM RUBY SDK # create a line item
for the campaign line_item = TwitterAds::LineItem.new(account) line_item.campaign_id = campaign.id line_item.name = 'my first ad' line_item.product_type = TwitterAds::Product::PROMOTED_TWEETS line_item.placements = [TwitterAds::Placement::ALL_ON_TWITTER] line_item.objective = TwitterAds::Objective::TWEET_ENGAGEMENTS line_item.bid_amount_local_micro = 10_000 line_item.paused = true line_item.save http://bit.ly/ads-api-line-item -
</> LINE ITEM RUBY SDK # create a line item
for the campaign line_item = TwitterAds::LineItem.new(account) line_item.campaign_id = campaign.id line_item.name = 'my first ad' line_item.product_type = TwitterAds::Product::PROMOTED_TWEETS line_item.placements = [TwitterAds::Placement::ALL_ON_TWITTER] line_item.objective = TwitterAds::Objective::TWEET_ENGAGEMENTS line_item.bid_amount_local_micro = 10_000 line_item.paused = true line_item.save http://bit.ly/ads-api-line-item -
</> LINE ITEM RUBY SDK # create a line item
for the campaign line_item = TwitterAds::LineItem.new(account) line_item.campaign_id = campaign.id line_item.name = 'my first ad' line_item.product_type = TwitterAds::Product::PROMOTED_TWEETS line_item.placements = [TwitterAds::Placement::ALL_ON_TWITTER] line_item.objective = TwitterAds::Objective::TWEET_ENGAGEMENTS line_item.bid_amount_local_micro = 10_000 line_item.paused = true line_item.save http://bit.ly/ads-api-line-item -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform # promote the tweet using our line item promoted_tweet = TwitterAds::Creative::PromotedTweet.new(account) promoted_tweet.line_item_id = line_item.id promoted_tweet.tweet_id = tweet.body[:data][:id] promoted_tweet.save http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET RUBY SDK # create request for a
simple null-casted tweet resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: ‘Hello @AdsAPI!’ } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet = request.perform # promote the tweet using our line item promoted_tweet = TwitterAds::Creative::PromotedTweet.new(account) promoted_tweet.line_item_id = line_item.id promoted_tweet.tweet_id = tweet.body[:data][:id] promoted_tweet.save http://bit.ly/ads-api-promoted-tweet -
</> PROMOTED TWEET (CARD) RUBY SDK # create a simple
app download card app_card = TwitterAds::Creative::AppDownloadCard.new(account) app_card.name = 'my first card' app_card.app_country_code = 'US' app_card.iphone_app_id = 333903271 app_card.app_cta = 'INSTALL_OPEN' app_card.save # create request for a null-casted tweet with an app download card resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: "Hello @AdsAPI #{app_card.preview_url}" } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet2 = request.perform http://bit.ly/ads-api-promoted-card -
</> PROMOTED TWEET (CARD) RUBY SDK # create a simple
app download card app_card = TwitterAds::Creative::AppDownloadCard.new(account) app_card.name = 'my first card' app_card.app_country_code = 'US' app_card.iphone_app_id = 333903271 app_card.app_cta = 'INSTALL_OPEN' app_card.save # create request for a null-casted tweet with an app download card resource = "/0/accounts/#{account.id}/tweet" tweet_params = { status: "Hello @AdsAPI #{app_card.preview_url}" } request = TwitterAds::Request.new(CLIENT, :post, resource, params: tweet_params) tweet2 = request.perform http://bit.ly/ads-api-promoted-card -
</> PROMOTED TWEET (CARD) RUBY SDK # promote tweet with
app download card promoted_tweet2 = TwitterAds::Creative::PromotedTweet.new(account) promoted_tweet2.line_item_id = line_item.id promoted_tweet2.tweet_id = tweet2.body[:data][:id] promoted_tweet2.save http://bit.ly/ads-api-promoted-card -
</> PROMOTED TWEET (CARD) RUBY SDK # promote tweet with
app download card promoted_tweet2 = TwitterAds::Creative::PromotedTweet.new(account) promoted_tweet2.line_item_id = line_item.id promoted_tweet2.tweet_id = tweet2.body[:data][:id] promoted_tweet2.save http://bit.ly/ads-api-promoted-card -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) # add targeting criteria targeting_criteria = TwitterAds::TargetingCriteria.new(account) targeting_criteria.line_item_id = line_item.id targeting_criteria.targeting_type = 'LOCATION' targeting_criteria.targeting_value = '00a8b25e420adc94' targeting_criteria.save http://bit.ly/ads-api-targeting -
</> TARGETING RUBY SDK # fetching targeting criteria values resource
= '/0/targeting_criteria/locations' params = { location_type: 'COUNTRY', q: 'u' } request = TwitterAds::Request.new(CLIENT, :get, resource, params: params) cursor = TwitterAds::Cursor.new(nil, request) # add targeting criteria targeting_criteria = TwitterAds::TargetingCriteria.new(account) targeting_criteria.line_item_id = line_item.id targeting_criteria.targeting_type = 'LOCATION' targeting_criteria.targeting_value = '00a8b25e420adc94' targeting_criteria.save http://bit.ly/ads-api-targeting -
</> ANALYTICS RUBY SDK # limit request count and grab
the first 10 line items from TwitterAds::Cursor line_items = account.line_items(nil, count: 10)[0..9] # the list of metrics we want to fetch metrics = [:billed_engagements, :billed_follows] # fetching stats on the instance line_items.first.stats(metrics) # fetching stats for multiple line items ids = line_items.map { |line_item| line_item.id } TwitterAds::LineItem.stats(account, ids, metrics) http://bit.ly/ads-api-analytics