zuck 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.markdown +4 -0
- data/README.markdown +35 -0
- data/VERSION +1 -1
- data/lib/zuck/facebook/ad_account.rb +8 -5
- data/lib/zuck/facebook/ad_campaign.rb +0 -1
- data/lib/zuck/facebook/ad_creative.rb +11 -10
- data/lib/zuck/facebook/ad_group.rb +5 -7
- data/lib/zuck/fb_object/hash_delegator.rb +5 -1
- data/lib/zuck/fb_object/helpers.rb +1 -1
- data/lib/zuck/fb_object/read.rb +0 -35
- data/spec/fixtures/a_single_account.yml +32 -57
- data/spec/fixtures/a_single_campaign.yml +12 -12
- data/spec/fixtures/a_single_group.yml +48 -0
- data/spec/fixtures/ad_keyword_search_disney.yml +12 -12
- data/spec/fixtures/{ad_keyword_search_steve_carell.yml → ad_keyword_search_moviepilot.yml} +8 -9
- data/spec/fixtures/ad_keyword_search_nonexistant.yml +5 -5
- data/spec/fixtures/create_ad_campaign.yml +12 -15
- data/spec/fixtures/create_ad_group.yml +15 -14
- data/spec/fixtures/delete_ad_group.yml +11 -15
- data/spec/fixtures/find_a_single_group_and_update_it.yml +224 -0
- data/spec/fixtures/list_of_ad_accounts.yml +26 -23
- data/spec/fixtures/list_of_ad_campaigns.yml +23 -24
- data/spec/fixtures/list_of_ad_creatives.yml +13 -15
- data/spec/fixtures/list_of_ad_groups.yml +62 -31
- data/spec/fixtures/list_of_all_ad_creatives_of_account.yml +41 -34
- data/spec/fixtures/reach_for_invalid_keyword.yml +9 -56
- data/spec/fixtures/reach_for_valid_keywords.yml +11 -56
- data/spec/fixtures/reach_for_valid_keywords_male_young.yml +11 -56
- data/spec/lib/zuck/facebook/ad_keyword_spec.rb +3 -3
- data/spec/lib/zuck/facebook/targeting_spec_spec.rb +4 -4
- data/spec/lib/zuck/fb_object/helpers_spec.rb +3 -2
- data/spec/lib/zuck_spec.rb +17 -24
- data/spec/spec_helper.rb +3 -0
- data/zuck.gemspec +5 -4
- metadata +6 -5
- data/spec/fixtures/find_a_single_campaign_and_update_it.yml +0 -247
data/CHANGELOG.markdown
CHANGED
data/README.markdown
CHANGED
@@ -88,6 +88,41 @@ group.ad_status
|
|
88
88
|
=> 3
|
89
89
|
```
|
90
90
|
|
91
|
+
AdKeyword convenience methods
|
92
|
+
--------
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
graph = Zuck.graph
|
96
|
+
|
97
|
+
# Search for keywords (to auto complete, for example) (yes, facebook sometimes returns ids as string and sometimes as numbers)
|
98
|
+
Zuck::AdKeyword.search(graph, "Auto")
|
99
|
+
=> [
|
100
|
+
{:keyword=>"Auto", :id=>"6003156165433", :audience=>nil},
|
101
|
+
{:keyword=>"#Automobile", :id=>6003176678152, :audience=>97900000},
|
102
|
+
{:keyword=>"#Auto racing", :id=>6003146718552, :audience=>21800000},
|
103
|
+
{:keyword=>"#Auto mechanic", :id=>6003109384433, :audience=>14600000}
|
104
|
+
]
|
105
|
+
|
106
|
+
# Quickly check if a keyword is valid
|
107
|
+
Zuck::AdKeyword.validate(graph, '#Eminem')
|
108
|
+
=> {"#Eminem" => true}
|
109
|
+
|
110
|
+
# Quickly check a couple of keywords
|
111
|
+
Zuck::AdKeyword.validate(graph, ['#Eminem', 'Wil Ferel', 'Bronson'])
|
112
|
+
=> {"#Eminem"=>true, "Bronson"=>true, "Wil Ferel"=>false}
|
113
|
+
|
114
|
+
# Make a best guess on how a keyword is called on Facebook
|
115
|
+
Zuck::AdKeyword.best_guess(graph, 'Disney')
|
116
|
+
=> {:keyword=>"#The Walt Disney Company", :id=>6003270522085, :audience=>72500000}
|
117
|
+
|
118
|
+
# Sometimes a best guess does not return a keyword with a # prefix, and that
|
119
|
+
# means that we don't know the audience of that keyword:
|
120
|
+
Zuck::AdKeyword.best_guess(graph, 'Moviepilot')
|
121
|
+
=> {:keyword=>"Moviepilot", :id=>6003327847780, :audience=>nil}
|
122
|
+
|
123
|
+
```
|
124
|
+
|
125
|
+
|
91
126
|
Supported objects
|
92
127
|
-----------------
|
93
128
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -4,28 +4,31 @@ module Zuck
|
|
4
4
|
# The [fb docs](https://developers.facebook.com/docs/reference/ads-api/adaccount/)
|
5
5
|
# were incomplete, so I added here what the graph explorer
|
6
6
|
# actually returned.
|
7
|
-
known_keys :
|
7
|
+
known_keys :account_groups,
|
8
|
+
:account_id,
|
8
9
|
:account_status,
|
10
|
+
:age,
|
11
|
+
:agency_client_declaration,
|
12
|
+
:amount_spent,
|
9
13
|
:balance,
|
10
14
|
:business_city,
|
11
15
|
:business_country_code,
|
12
16
|
:business_name,
|
13
17
|
:business_state,
|
14
|
-
:business_street,
|
15
18
|
:business_street2,
|
19
|
+
:business_street,
|
16
20
|
:business_zip,
|
17
21
|
:capabilities,
|
18
22
|
:currency,
|
19
23
|
:daily_spend_limit,
|
20
24
|
:id,
|
21
25
|
:is_personal,
|
22
|
-
:moo_default_bid,
|
23
|
-
:moo_default_conversion_bid,
|
24
26
|
:name,
|
25
|
-
:
|
27
|
+
:spend_cap,
|
26
28
|
:timezone_id,
|
27
29
|
:timezone_name,
|
28
30
|
:timezone_offset_hours_utc,
|
31
|
+
:tos_accepted,
|
29
32
|
:users,
|
30
33
|
:vat_status
|
31
34
|
|
@@ -7,21 +7,22 @@ module Zuck
|
|
7
7
|
# The [fb docs](https://developers.facebook.com/docs/reference/ads-api/adaccount/)
|
8
8
|
# were incomplete, so I added here what the graph explorer
|
9
9
|
# actually returned.
|
10
|
-
known_keys :
|
10
|
+
known_keys :name,
|
11
|
+
:type,
|
12
|
+
:object_id,
|
11
13
|
:body,
|
12
|
-
:count_current_adgroups,
|
13
|
-
:creative_id,
|
14
|
-
:id,
|
15
14
|
:image_hash,
|
16
15
|
:image_url,
|
16
|
+
:id,
|
17
|
+
:title,
|
17
18
|
:link_url,
|
18
|
-
:
|
19
|
-
:object_id,
|
19
|
+
:url_tags,
|
20
20
|
:preview_url,
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
21
|
+
:related_fan_page,
|
22
|
+
:follow_redirect,
|
23
|
+
:auto_update,
|
24
|
+
:story_id,
|
25
|
+
:action_spec
|
25
26
|
|
26
27
|
parent_object :ad_group
|
27
28
|
list_path :adcreatives
|
@@ -7,9 +7,6 @@ module Zuck
|
|
7
7
|
# were incomplete, so I added here what the graph explorer
|
8
8
|
# actually returned.
|
9
9
|
known_keys :account_id,
|
10
|
-
:ad_id,
|
11
|
-
:ad_status,
|
12
|
-
:adgroup_id,
|
13
10
|
:adgroup_status,
|
14
11
|
:bid_info,
|
15
12
|
:bid_type,
|
@@ -17,13 +14,14 @@ module Zuck
|
|
17
14
|
:conversion_specs,
|
18
15
|
:created_time,
|
19
16
|
:creative_ids,
|
20
|
-
:end_time,
|
21
17
|
:id,
|
22
|
-
:
|
18
|
+
:disapprove_reason_descriptions,
|
19
|
+
:last_updated_by_app_id,
|
23
20
|
:name,
|
24
|
-
:start_time,
|
25
21
|
:targeting,
|
26
|
-
:
|
22
|
+
:tracking_specs,
|
23
|
+
:updated_time,
|
24
|
+
:view_tags
|
27
25
|
|
28
26
|
parent_object :ad_campaign
|
29
27
|
list_path :adgroups
|
@@ -50,6 +50,11 @@ module Zuck
|
|
50
50
|
def known_keys(*args)
|
51
51
|
args.each do |key|
|
52
52
|
|
53
|
+
# Define list of known keys
|
54
|
+
self.send(:define_method, :known_keys) do
|
55
|
+
args || []
|
56
|
+
end
|
57
|
+
|
53
58
|
# Define getter
|
54
59
|
self.send(:define_method, key) do
|
55
60
|
init_hash
|
@@ -106,6 +111,5 @@ module Zuck
|
|
106
111
|
def init_hash
|
107
112
|
@hash_delegator_hash ||= {}
|
108
113
|
end
|
109
|
-
|
110
114
|
end
|
111
115
|
end
|
data/lib/zuck/fb_object/read.rb
CHANGED
@@ -24,7 +24,6 @@ module Zuck
|
|
24
24
|
# Refetches the data from façeboko
|
25
25
|
def reload
|
26
26
|
data = get(graph, path)
|
27
|
-
validate_data(data)
|
28
27
|
set_data(data)
|
29
28
|
self
|
30
29
|
end
|
@@ -41,40 +40,6 @@ module Zuck
|
|
41
40
|
@parent_object = parent
|
42
41
|
end
|
43
42
|
|
44
|
-
# Makes sure that the data passed comes from a facebook
|
45
|
-
# object of the same type. We check this by comparing
|
46
|
-
# the 'group_id' value or the 'ad_group_id' value
|
47
|
-
# with the 'id' value, when this
|
48
|
-
# is called on a {Zuck::AdGroup} for example.
|
49
|
-
#
|
50
|
-
# Facebook omits the "ad" prefix sometimes, so we check
|
51
|
-
# for both.
|
52
|
-
def validate_data(data)
|
53
|
-
singular_list_path = self.class.list_path.to_s.singularize
|
54
|
-
|
55
|
-
# This is a special case for ad accounts (they have weird ids
|
56
|
-
# that begin with act: "act_12345" instead of "12345"
|
57
|
-
return if data['account_id'] and "act_#{data['account_id']}" == data['id'].to_s
|
58
|
-
|
59
|
-
# This is the case for all other objects
|
60
|
-
long_id_key = "#{singular_list_path}_id"
|
61
|
-
short_id_key = "#{singular_list_path[2..-1]}_id"
|
62
|
-
return if data[long_id_key] and data[long_id_key].to_s == data["id"].to_s
|
63
|
-
return if data[short_id_key] and data[short_id_key].to_s == data["id"].to_s
|
64
|
-
|
65
|
-
# Something went wrong. Either the data provided by the user is
|
66
|
-
# not consistent, or a wrong object type was belongs to this id on facebook
|
67
|
-
# (an ad group instead of an ad campaign, for example).
|
68
|
-
#
|
69
|
-
# Maybe we can make somebody's life easier by raising a verbose exception.
|
70
|
-
error = "Invalid type.\n\nExpected data['id']=#{data['id'].inspect} to be equal to one of these:\n"
|
71
|
-
error += " * data['account_id']=#{data['account_id'].inspect}\n"
|
72
|
-
error += " * data['#{short_id_key}']=#{data[short_id_key].inspect}\n"
|
73
|
-
error += " * data['#{long_id_key}']=#{data[long_id_key].inspect}\n"
|
74
|
-
|
75
|
-
raise error
|
76
|
-
end
|
77
|
-
|
78
43
|
module ClassMethods
|
79
44
|
|
80
45
|
# Finds by object id and checks type
|
@@ -2,74 +2,49 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://graph.facebook.com/act_10150585630710217?access_token=
|
5
|
+
uri: https://graph.facebook.com/act_10150585630710217?access_token=CAAEvJ5vzhl8BAH8aCPOx0Ft9uNB147TF8weJ8hK0g7YVDRWU4eEih7tEKdJgmfk0vABZClZACJbEzyhSMbiShL6RpsfkZASfX1C9nv1AlFvjJajflqkyYZAlpE2edT0FJHjdh4NFg0ZCt0sBgq0kZABtKsjuU18aMURLE7rjKHR4X8NkXBUafg1T4uZARRNqboZD&fields=account_groups,account_id,account_status,age,agency_client_declaration,amount_spent,balance,business_city,business_country_code,business_name,business_state,business_street2,business_street,business_zip,capabilities,currency,daily_spend_limit,id,is_personal,name,spend_cap,timezone_id,timezone_name,timezone_offset_hours_utc,tos_accepted,users,vat_status
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.8.7
|
10
12
|
Accept-Encoding:
|
11
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
14
|
Accept:
|
13
15
|
- ! '*/*'
|
14
|
-
User-Agent:
|
15
|
-
- Ruby
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
19
|
-
message:
|
20
|
-
T0s=
|
19
|
+
message: OK
|
21
20
|
headers:
|
22
|
-
|
23
|
-
- !
|
24
|
-
|
25
|
-
|
26
|
-
-
|
27
|
-
|
28
|
-
|
29
|
-
- !
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
-
|
42
|
-
|
43
|
-
|
44
|
-
- !binary |-
|
45
|
-
Z3ppcA==
|
46
|
-
!binary "WC1GYi1EZWJ1Zw==":
|
47
|
-
- !binary |-
|
48
|
-
L3l3UTJxVWc2L0toZVhhTnFXY21lVFFsSW0vVkFEV09tUFIvQVkzVWsxTT0=
|
49
|
-
!binary "RGF0ZQ==":
|
50
|
-
- !binary |-
|
51
|
-
VHVlLCAyMSBBdWcgMjAxMiAxNDo1MjoyNCBHTVQ=
|
52
|
-
!binary "Q29ubmVjdGlvbg==":
|
53
|
-
- !binary |-
|
54
|
-
a2VlcC1hbGl2ZQ==
|
55
|
-
!binary "Q29udGVudC1MZW5ndGg=":
|
56
|
-
- !binary |-
|
57
|
-
NTA1
|
21
|
+
Access-Control-Allow-Origin:
|
22
|
+
- ! '*'
|
23
|
+
Cache-Control:
|
24
|
+
- private, no-cache, no-store, must-revalidate
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=UTF-8
|
27
|
+
Etag:
|
28
|
+
- ! '"3974cd2e1bd6adde467a920e740351a73e2d5889"'
|
29
|
+
Expires:
|
30
|
+
- Sat, 01 Jan 2000 00:00:00 GMT
|
31
|
+
Pragma:
|
32
|
+
- no-cache
|
33
|
+
X-Fb-Rev:
|
34
|
+
- '934677'
|
35
|
+
X-Fb-Debug:
|
36
|
+
- X2mEeMJUPl6v6oa677ct5KWrnQJIEqYykFRDw7P1OOE=
|
37
|
+
Date:
|
38
|
+
- Thu, 12 Sep 2013 13:21:40 GMT
|
39
|
+
Connection:
|
40
|
+
- keep-alive
|
41
|
+
Content-Length:
|
42
|
+
- '697'
|
58
43
|
body:
|
59
|
-
encoding: ASCII
|
60
|
-
string: !
|
61
|
-
|
62
|
-
|
63
|
-
cRGtCYwcND7NpD7IED2pOSUqOqeNOqLg4fcdagIM+sUafcm32c6I1zz30dlR
|
64
|
-
P3671a4HM4+wXed1EAcbnRcxKFLnlIAXo3beGtmTmlHSRA9Gey9e093CPvsF
|
65
|
-
Tzr73jvYH0L28CP7cpBdiGbvG+3VwT1GxvTGPIWvWG2K98FpHdD3JzPkmOLn
|
66
|
-
tcReO9Na12mX/dHQ66zi84oKQprT1PjMigxpxB9fXmBMW8lztltkShtzR6Fs
|
67
|
-
m+Lu7vHxWQbxtpiCklZCfxR+1KYVPQyAneYlYzjB6HGepP57IjHtqGR8W+At
|
68
|
-
VJTgoAfwHqxJ75zmtKAbWtLtP0qc7bEUZ4yfERkboAMlA2oFLi0ATpvUJzJl
|
69
|
-
SwDV7PLFwDNNEP/mEGd3hZTgb8WuomKV3SxDyyWslnC3gHzpgs9d5DOP7y6Q
|
70
|
-
nUQL9uL4zSuqVrwiO3ldxE6W39litTqyK9WRXVRHvFI97XjWfPUBzpvfrZa/
|
71
|
-
WWHPuBolR9lADwF0uo8c76CRvTQKDwPvarBWtLqTsQ94mOYZryxdR5OOLF3C
|
72
|
-
+T90T7SjiQQAAA==
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: ! '{"account_id":"10150585630710217","account_status":1,"age":590.89847222222,"amount_spent":4093,"balance":0,"business_city":"Berlin","business_country_code":"DE","business_name":"Big
|
46
|
+
Mike Alright UG (haftungsbeschr\u00e4nkt)","business_state":"Berlin","business_street2":"J\u00e4gerndorfer
|
47
|
+
Zeile 61","business_street":"Big Mike Alright UG (haftungsbeschr\u00e4nkt)","business_zip":"12209","capabilities":[2,6,15,11,16],"currency":"USD","daily_spend_limit":150000,"id":"act_10150585630710217","is_personal":0,"name":"","spend_cap":5000,"timezone_id":47,"timezone_name":"Europe\/Berlin","timezone_offset_hours_utc":2,"users":[{"uid":501730216,"permissions":[1,2,3,4,5,7],"role":1001}],"vat_status":3}'
|
73
48
|
http_version:
|
74
|
-
recorded_at:
|
75
|
-
recorded_with: VCR 2.
|
49
|
+
recorded_at: Thu, 12 Sep 2013 13:21:40 GMT
|
50
|
+
recorded_with: VCR 2.3.0
|
@@ -2,17 +2,17 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://graph.facebook.com/6005950787751?access_token=
|
5
|
+
uri: https://graph.facebook.com/6005950787751?access_token=CAAEvJ5vzhl8BAH8aCPOx0Ft9uNB147TF8weJ8hK0g7YVDRWU4eEih7tEKdJgmfk0vABZClZACJbEzyhSMbiShL6RpsfkZASfX1C9nv1AlFvjJajflqkyYZAlpE2edT0FJHjdh4NFg0ZCt0sBgq0kZABtKsjuU18aMURLE7rjKHR4X8NkXBUafg1T4uZARRNqboZD&fields=account_id,campaign_status,created_time,daily_imps,end_time,id,lifetime_budget,name,start_time,updated_time
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.8.7
|
10
12
|
Accept-Encoding:
|
11
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
14
|
Accept:
|
13
15
|
- ! '*/*'
|
14
|
-
User-Agent:
|
15
|
-
- Ruby
|
16
16
|
response:
|
17
17
|
status:
|
18
18
|
code: 200
|
@@ -23,26 +23,26 @@ http_interactions:
|
|
23
23
|
Cache-Control:
|
24
24
|
- private, no-cache, no-store, must-revalidate
|
25
25
|
Content-Type:
|
26
|
-
-
|
26
|
+
- application/json; charset=UTF-8
|
27
27
|
Etag:
|
28
|
-
- ! '"
|
28
|
+
- ! '"e86bfdbd29a6618779f20e958e1dfe705bb806de"'
|
29
29
|
Expires:
|
30
30
|
- Sat, 01 Jan 2000 00:00:00 GMT
|
31
31
|
Pragma:
|
32
32
|
- no-cache
|
33
33
|
X-Fb-Rev:
|
34
|
-
- '
|
34
|
+
- '934677'
|
35
35
|
X-Fb-Debug:
|
36
|
-
-
|
36
|
+
- i6CJnwde2dK30oFKSKB+yrtbjQtBwOx7j7wbo7jQdwQ=
|
37
37
|
Date:
|
38
|
-
-
|
38
|
+
- Thu, 12 Sep 2013 13:21:40 GMT
|
39
39
|
Connection:
|
40
40
|
- keep-alive
|
41
41
|
Content-Length:
|
42
|
-
- '
|
42
|
+
- '230'
|
43
43
|
body:
|
44
44
|
encoding: US-ASCII
|
45
|
-
string: ! '{"account_id":"10150585630710217","
|
45
|
+
string: ! '{"account_id":"10150585630710217","campaign_status":3,"created_time":"2012-08-21T16:04:13+0200","daily_imps":0,"id":"6005950787751","name":"bloody","start_time":"2012-08-21T16:04:13+0200","updated_time":"2013-03-25T12:40:29+0100"}'
|
46
46
|
http_version:
|
47
|
-
recorded_at:
|
48
|
-
recorded_with: VCR 2.
|
47
|
+
recorded_at: Thu, 12 Sep 2013 13:21:40 GMT
|
48
|
+
recorded_with: VCR 2.3.0
|
@@ -0,0 +1,48 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://graph.facebook.com/6010889111951?access_token=CAAEvJ5vzhl8BAH8aCPOx0Ft9uNB147TF8weJ8hK0g7YVDRWU4eEih7tEKdJgmfk0vABZClZACJbEzyhSMbiShL6RpsfkZASfX1C9nv1AlFvjJajflqkyYZAlpE2edT0FJHjdh4NFg0ZCt0sBgq0kZABtKsjuU18aMURLE7rjKHR4X8NkXBUafg1T4uZARRNqboZD&fields=account_id,adgroup_status,bid_info,bid_type,campaign_id,conversion_specs,created_time,creative_ids,id,disapprove_reason_descriptions,last_updated_by_app_id,name,targeting,tracking_specs,updated_time,view_tags
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.8.7
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- ! '*/*'
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 400
|
19
|
+
message: Bad Request
|
20
|
+
headers:
|
21
|
+
Access-Control-Allow-Origin:
|
22
|
+
- ! '*'
|
23
|
+
Cache-Control:
|
24
|
+
- no-store
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=UTF-8
|
27
|
+
Expires:
|
28
|
+
- Sat, 01 Jan 2000 00:00:00 GMT
|
29
|
+
Pragma:
|
30
|
+
- no-cache
|
31
|
+
Www-Authenticate:
|
32
|
+
- ! 'OAuth "Facebook Platform" "invalid_request" "(#100) Unknown fields: adgroup_status,bid_info,bid_type,conversion_specs,creative_ids,disapprove_reason_descriptions,last_updated_by_app_id,targeting,tracking_specs,view_tags."'
|
33
|
+
X-Fb-Rev:
|
34
|
+
- '934677'
|
35
|
+
X-Fb-Debug:
|
36
|
+
- Gks1Vwa18J2bq9/Zxb9ya6ywWnVPynwEDSmFjSxKc9k=
|
37
|
+
Date:
|
38
|
+
- Thu, 12 Sep 2013 13:21:40 GMT
|
39
|
+
Connection:
|
40
|
+
- keep-alive
|
41
|
+
Content-Length:
|
42
|
+
- '234'
|
43
|
+
body:
|
44
|
+
encoding: US-ASCII
|
45
|
+
string: ! '{"error":{"message":"(#100) Unknown fields: adgroup_status,bid_info,bid_type,conversion_specs,creative_ids,disapprove_reason_descriptions,last_updated_by_app_id,targeting,tracking_specs,view_tags.","type":"OAuthException","code":100}}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Thu, 12 Sep 2013 13:21:41 GMT
|
48
|
+
recorded_with: VCR 2.3.0
|