facebook_ads 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +23 -0
  4. data/.travis.yml +1 -1
  5. data/Gemfile +4 -5
  6. data/Gemfile.lock +34 -82
  7. data/{README.markdown → README.md} +43 -10
  8. data/Rakefile +6 -0
  9. data/bin/console +15 -1
  10. data/facebook_ads.gemspec +11 -13
  11. data/lib/facebook_ads.rb +11 -7
  12. data/lib/facebook_ads/ad.rb +6 -8
  13. data/lib/facebook_ads/ad_account.rb +65 -54
  14. data/lib/facebook_ads/ad_audience.rb +22 -0
  15. data/lib/facebook_ads/ad_campaign.rb +21 -17
  16. data/lib/facebook_ads/ad_creative.rb +7 -9
  17. data/lib/facebook_ads/ad_image.rb +3 -5
  18. data/lib/facebook_ads/ad_insight.rb +4 -5
  19. data/lib/facebook_ads/ad_product.rb +6 -0
  20. data/lib/facebook_ads/ad_product_catalog.rb +60 -0
  21. data/lib/facebook_ads/ad_product_feed.rb +6 -0
  22. data/lib/facebook_ads/ad_product_set.rb +6 -0
  23. data/lib/facebook_ads/ad_set.rb +9 -11
  24. data/lib/facebook_ads/ad_targeting.rb +19 -21
  25. data/lib/facebook_ads/base.rb +107 -62
  26. data/test/ad_account_test.rb +27 -0
  27. data/test/ad_campaign_test.rb +32 -0
  28. data/test/ad_creative_test.rb +7 -0
  29. data/test/ad_image_test.rb +27 -0
  30. data/test/ad_insight_test.rb +7 -0
  31. data/test/ad_product_catalog_test.rb +28 -0
  32. data/test/ad_product_feed_test.rb +7 -0
  33. data/test/ad_product_set_test.rb +7 -0
  34. data/test/ad_product_test.rb +22 -0
  35. data/test/ad_set_test.rb +7 -0
  36. data/test/ad_targeting_test.rb +7 -0
  37. data/test/ad_test.rb +7 -0
  38. data/test/facebook_ads_test.rb +8 -0
  39. data/test/test_helper.rb +64 -0
  40. data/test/vcr_cassettes/AdAccountTest-test_all.yml +70 -0
  41. data/test/vcr_cassettes/AdAccountTest-test_applications.yml +130 -0
  42. data/test/vcr_cassettes/AdAccountTest-test_find_by.yml +71 -0
  43. data/test/vcr_cassettes/AdCampaignTest-test_create.yml +295 -0
  44. data/test/vcr_cassettes/AdCampaignTest-test_list.yml +133 -0
  45. data/test/vcr_cassettes/AdImageTest-test_create.yml +2963 -0
  46. data/test/vcr_cassettes/AdImageTest-test_list.yml +137 -0
  47. data/test/vcr_cassettes/AdProductCatalogTest-test_all.yml +60 -0
  48. data/test/vcr_cassettes/AdProductCatalogTest-test_create.yml +256 -0
  49. data/test/vcr_cassettes/AdProductTest-test_list.yml +130 -0
  50. metadata +44 -49
  51. data/spec/ad_account_spec.rb +0 -78
  52. data/spec/ad_campaign_spec.rb +0 -13
  53. data/spec/ad_creative_spec.rb +0 -14
  54. data/spec/ad_image_spec.rb +0 -11
  55. data/spec/ad_insight_spec.rb +0 -11
  56. data/spec/ad_set_spec.rb +0 -13
  57. data/spec/ad_spec.rb +0 -13
  58. data/spec/ad_targeting_spec.rb +0 -4
  59. data/spec/spec_helper.rb +0 -15
  60. data/spec/support/fixtures.sh +0 -17
  61. data/spec/support/fixtures/6057330925170.json +0 -1
  62. data/spec/support/fixtures/6057810634370.json +0 -1
  63. data/spec/support/fixtures/6057810946970.json +0 -1
  64. data/spec/support/fixtures/6057824295570.json +0 -1
  65. data/spec/support/fixtures/act_861827983860489.json +0 -1
  66. data/spec/support/fixtures/act_861827983860489/adcreatives.json +0 -1
  67. data/spec/support/fixtures/act_861827983860489/adimages.json +0 -1
  68. data/spec/support/fixtures/act_861827983860489/ads.json +0 -1
  69. data/spec/support/fixtures/act_861827983860489/adsets.json +0 -1
  70. data/spec/support/fixtures/act_861827983860489/campaigns.json +0 -1
  71. data/spec/support/fixtures/me/adaccounts.json +0 -1
  72. data/spec/support/rack_facebook.rb +0 -22
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_account_test.rb
4
+ class AdAccountTest < BaseTest
5
+ def test_all
6
+ vcr do
7
+ accounts = FacebookAds::AdAccount.all
8
+ assert_equal 10, accounts.length
9
+ end
10
+ end
11
+
12
+ def test_find_by
13
+ vcr do
14
+ account = FacebookAds::AdAccount.find_by(name: 'ReFuel4')
15
+ assert_equal 'ReFuel4', account.name
16
+ end
17
+ end
18
+
19
+ def test_applications
20
+ vcr do
21
+ account = FacebookAds::AdAccount.find_by(name: 'ReFuel4')
22
+ apps = account.applications
23
+ assert !apps['data'].find { |app| app['name'] == 'Tophatter' }.nil?
24
+ assert !apps['data'].find { |app| app['name'] == 'Ruby - Jewelry Shopping Deals' }.nil?
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_campaign_test.rb
4
+ class AdCampaignTest < BaseTest
5
+ def test_list
6
+ vcr do
7
+ account = FacebookAds::AdAccount.find_by(name: 'Ruby')
8
+ ad_campaigns = account.ad_campaigns
9
+ ad_campaign = ad_campaigns.first
10
+ assert_equal '23842540417890562', ad_campaign.id
11
+ assert_equal '1115226431853975', ad_campaign.account_id
12
+ assert_equal 'AUCTION', ad_campaign.buying_type
13
+ assert_equal true, ad_campaign.can_use_spend_cap
14
+ assert_equal 'ACTIVE', ad_campaign.configured_status
15
+ assert_equal 'ACTIVE', ad_campaign.effective_status
16
+ assert_equal 'iOS App installs', ad_campaign.name
17
+ assert_equal 'MOBILE_APP_INSTALLS', ad_campaign.objective
18
+ end
19
+ end
20
+
21
+ def test_create
22
+ vcr do
23
+ account = FacebookAds::AdAccount.find_by(name: 'ReFuel4')
24
+ ad_campaign = account.create_ad_campaign(name: 'Test', objective: 'MOBILE_APP_INSTALLS')
25
+ assert_equal 'Test', ad_campaign.name
26
+ assert_equal 'MOBILE_APP_INSTALLS', ad_campaign.objective
27
+ assert_equal true, ad_campaign.destroy
28
+ ad_campaign = FacebookAds::AdCampaign.find(ad_campaign.id)
29
+ assert_equal 'DELETED', ad_campaign.effective_status
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_creative_test.rb
4
+ class AdCreativeTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_image_test.rb
4
+ class AdImageTest < BaseTest
5
+ def test_list
6
+ vcr do
7
+ account = FacebookAds::AdAccount.find_by(name: 'ReFuel4')
8
+ ad_images = account.ad_images(hashes: %w(a9e27630331b8ca2ebac1bb8619c98eb 037b8f4f2383f45f35b110cf72c46f0b))
9
+ assert_equal 2, ad_images.length
10
+ end
11
+ end
12
+
13
+ def test_create
14
+ vcr do
15
+ account = FacebookAds::AdAccount.find_by(name: 'ReFuel4')
16
+ ad_images = account.create_ad_images(['https://img0.etsystatic.com/108/1/13006112/il_570xN.1047856494_l2gp.jpg'])
17
+ ad_image = ad_images.first
18
+ assert_equal '1132789356764349:287ecd37223004c301f5df4e4d02bbe2', ad_image.id
19
+ assert_equal '287ecd37223004c301f5df4e4d02bbe2', ad_image.hash
20
+ assert_equal '1132789356764349', ad_image.account_id
21
+ assert_equal '13006112.jpg', ad_image.name
22
+ assert ad_image.permalink_url.include?('https://www.facebook.com/ads/image/?d=')
23
+ assert_equal 570, ad_image.original_width
24
+ assert_equal 707, ad_image.original_height
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_account_test.rb
4
+ class AdInsightTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_product_catalog_test.rb
4
+ class AdProductCatalogTest < BaseTest
5
+ def test_all
6
+ vcr do
7
+ catalog = FacebookAds::AdProductCatalog.all.first
8
+ assert_equal '197871307315718', catalog.id
9
+ assert_equal 'Test', catalog.name
10
+ assert_equal 'commerce', catalog.vertical
11
+ assert_equal 1, catalog.product_count
12
+ assert_equal 1, catalog.feed_count
13
+ end
14
+ end
15
+
16
+ def test_create
17
+ vcr do
18
+ catalog = FacebookAds::AdProductCatalog.create(name: 'Foo Bar')
19
+ assert_equal 'Foo Bar', catalog.name
20
+ assert_equal 'commerce', catalog.vertical
21
+ assert_equal 0, catalog.product_count
22
+ assert_equal 0, catalog.feed_count
23
+ catalog = FacebookAds::AdProductCatalog.find(catalog.id)
24
+ assert_equal true, catalog.destroy
25
+ assert_nil FacebookAds::AdProductCatalog.find_by(name: 'Foo Bar')
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_product_feed_test.rb
4
+ class AdProductFeedTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_product_set_test.rb
4
+ class AdProductSetTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_product_test.rb
4
+ class AdProductTest < BaseTest
5
+ def test_list
6
+ vcr do
7
+ catalog = FacebookAds::AdProductCatalog.find_by(name: 'Test')
8
+ products = catalog.ad_products
9
+ product = products.first
10
+ assert_equal '1489112071104048', product.id
11
+ assert_equal 'retro-ruby-earrings', product.retailer_id
12
+ assert_equal 'Precious Retro .925 Sterling Silver Artificial Ruby Earrings', product.name
13
+ assert_equal '$5 shipping - at your doorstep within 25-27 business days.', product.description
14
+ assert_equal 'Adoration-Precious', product.brand
15
+ assert_equal 'Jewelry | Earrings', product.category
16
+ assert_equal 'USD', product.currency
17
+ assert_equal '$156.00', product.price
18
+ assert_equal 'https://external.xx.fbcdn.net/safe_image.php?d=AQALnOfu1mhkpb4T&url=https%3A%2F%2Fd38eepresuu519.cloudfront.net%2F12c85243d743ac3cb21b71c34192b252%2Flarge.jpg&cfs=1&_nc_hash=AQBlxlDCq59tO6sE', product.image_url
19
+ assert_equal 'https://tophatter.com/lots/23275728', product.url
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_set_test.rb
4
+ class AdSetTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_targeting_test.rb
4
+ class AdTargetingTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
data/test/ad_test.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/ad_test.rb
4
+ class AdTest < BaseTest
5
+ def test_foo
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ # rake test TEST=test/base_test.rb
4
+ class FacebookAdsTest < BaseTest
5
+ def test_version
6
+ assert FacebookAds.base_uri.include?('2.8')
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require 'coveralls'
4
+ Coveralls.wear!('rails')
5
+
6
+ # https://github.com/colszowka/simplecov
7
+ require 'simplecov'
8
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
9
+ SimpleCov.start do
10
+ add_filter 'bin/console'
11
+ end
12
+
13
+ require 'facebook_ads'
14
+ require 'minitest/autorun'
15
+ require 'vcr'
16
+ require 'awesome_print'
17
+
18
+ VCR.configure do |config|
19
+ config.cassette_library_dir = 'test/vcr_cassettes'
20
+ config.hook_into :webmock
21
+ config.filter_sensitive_data('TEST_ACCESS_TOKEN') do
22
+ begin
23
+ File.read('test_access_token').chop
24
+ rescue Errno::ENOENT
25
+ 'TEST_ACCESS_TOKEN'
26
+ end
27
+ end
28
+ config.filter_sensitive_data('TEST_BUSINESS_ID') do
29
+ begin
30
+ File.read('test_business_id').chop
31
+ rescue Errno::ENOENT
32
+ 'TEST_BUSINESS_ID'
33
+ end
34
+ end
35
+ end
36
+
37
+ class BaseTest < Minitest::Test
38
+ protected
39
+
40
+ def setup
41
+ FacebookAds.access_token = begin
42
+ File.read('test_access_token').chop
43
+ rescue Errno::ENOENT
44
+ 'TEST_ACCESS_TOKEN'
45
+ end
46
+
47
+ FacebookAds.business_id = begin
48
+ File.read('test_business_id').chop
49
+ rescue Errno::ENOENT
50
+ 'TEST_BUSINESS_ID'
51
+ end
52
+
53
+ # FacebookAds.logger = Logger.new(STDOUT)
54
+ # FacebookAds.logger.level = Logger::Severity::DEBUG
55
+ end
56
+
57
+ def vcr
58
+ calling_method = caller[0][/`.*'/][1..-2]
59
+
60
+ VCR.use_cassette("#{self.class.name}-#{calling_method}", match_requests_on: [:host, :path]) do
61
+ yield
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,70 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://graph.facebook.com/v2.8/me/adaccounts?access_token=TEST_ACCESS_TOKEN&fields=id,account_id,account_status,age,created_time,currency,name
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Access-Control-Allow-Origin:
22
+ - "*"
23
+ Etag:
24
+ - '"8727ddc19027cf41ac64d844a2955c4c30bbfdcb"'
25
+ Pragma:
26
+ - no-cache
27
+ Cache-Control:
28
+ - private, no-cache, no-store, must-revalidate
29
+ Facebook-Api-Version:
30
+ - v2.8
31
+ Expires:
32
+ - Sat, 01 Jan 2000 00:00:00 GMT
33
+ Content-Type:
34
+ - application/json; charset=UTF-8
35
+ X-Fb-Trace-Id:
36
+ - CtmthPguZnS
37
+ X-Fb-Rev:
38
+ - '2761076'
39
+ Vary:
40
+ - Accept-Encoding
41
+ Content-Encoding:
42
+ - gzip
43
+ X-Fb-Debug:
44
+ - M17xwZAHmQJsxtPYHQ6V++j2xNTzdmADQ1enDSidz6U/Bx330r4820WEjDSwdAxS8Vw5qMKNxrQhTP/L036adA==
45
+ Date:
46
+ - Sun, 01 Jan 2017 02:33:35 GMT
47
+ Connection:
48
+ - keep-alive
49
+ Content-Length:
50
+ - '630'
51
+ body:
52
+ encoding: ASCII-8BIT
53
+ string: !binary |-
54
+ H4sIAAAAAAAAA4WUT2+bQBDFv0rE2aCZ2Z39d4vqVvLBjppQVUpVRQQTB7e1
55
+ K4yVWpG/ewfUQwPesOKAdoblx+PNe03WRVsk4dtrUq+TkBRl+4BEismzQiBl
56
+ jE5msl3uj7v2oe95p35oi/Z4SALK1qZKApmMiNkDWVlulpRNVbTV+qGtf0k5
57
+ IUCTIqVAOUJguWwKDkCOLI9NU+3Kk3R9uZvLxq7oH5m/1Jvn9mqxSM6z/6HR
58
+ OwVMDgjJshlBx+tDaK0z0pY99ZeKQGOKkKPqofUU9G3VFs2mauvdZojtlOiJ
59
+ Gq3IaWGMHa0PsY3OvHfeeA9Wg41gQ0q215oD+1ROnNZ6SKzIOq/YWKOV9mPi
60
+ aH1IjGgz77RW5CyoCDG4VGGOHFAHUlPEt9WnY/VTD5GRiYQGHStveYwcrY+Q
61
+ NWZIBv+tKHLnDRvIBj0p8u3x8fSWV0ZLhgZESRGHaYgbL4+crDBzGhVrNMZc
62
+ FJh7S5gcvKgbOvj3afPqcMHFwOiVE7OikwmzI4Hj9VFiaJN5Yzx4S7IiAuuU
63
+ XCewogB2Cvlr9TjElf+tFFt5jzgP1Jg33jAEVoyZRJvXposMcwlY9xrrXBys
64
+ XFA4BfzhuakPVx8PbVPV5fNbdmdEQitZ5gxoN5q+eHkUF+QycMrKl8aimTuh
65
+ wedoJOICuynu69262QvGG2AZKOfYjkgv7I+84Nhl4l62sXwAmS7JBO7yAXSf
66
+ aO8HcX1zl5y/z5LfxaZzcXjtOg/75tDdPlZP+6brWm6XejVf4HL7489q/oVW
67
+ +fVpmZf33UHFU1s10rPaXr8stwu4mS9Pq3zDq8/3c2k4n89/AXYRrTZUBwAA
68
+ http_version:
69
+ recorded_at: Sun, 01 Jan 2017 02:33:35 GMT
70
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,130 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://graph.facebook.com/v2.8/me/adaccounts?access_token=TEST_ACCESS_TOKEN&fields=id,account_id,account_status,age,created_time,currency,name
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Access-Control-Allow-Origin:
22
+ - "*"
23
+ Etag:
24
+ - '"8727ddc19027cf41ac64d844a2955c4c30bbfdcb"'
25
+ Pragma:
26
+ - no-cache
27
+ Cache-Control:
28
+ - private, no-cache, no-store, must-revalidate
29
+ Facebook-Api-Version:
30
+ - v2.8
31
+ Expires:
32
+ - Sat, 01 Jan 2000 00:00:00 GMT
33
+ Content-Type:
34
+ - application/json; charset=UTF-8
35
+ X-Fb-Trace-Id:
36
+ - DS1qjlOMSaj
37
+ X-Fb-Rev:
38
+ - '2761076'
39
+ Vary:
40
+ - Accept-Encoding
41
+ Content-Encoding:
42
+ - gzip
43
+ X-Fb-Debug:
44
+ - 6+4AZVGdeDWLOC6AgJ93KwzhtilTnUjW1Y/UuERgFQGbzhN4eDm0F2sBIIl6uoViKGCirMP2vbZfYK7fg5y0oA==
45
+ Date:
46
+ - Sun, 01 Jan 2017 02:33:35 GMT
47
+ Connection:
48
+ - keep-alive
49
+ Content-Length:
50
+ - '630'
51
+ body:
52
+ encoding: ASCII-8BIT
53
+ string: !binary |-
54
+ H4sIAAAAAAAAA4WUT2+bQBDFv0rE2aCZ2Z39d4vqVvLBjppQVUpVRQQTB7e1
55
+ K4yVWpG/ewfUQwPesOKAdoblx+PNe03WRVsk4dtrUq+TkBRl+4BEismzQiBl
56
+ jE5msl3uj7v2oe95p35oi/Z4SALK1qZKApmMiNkDWVlulpRNVbTV+qGtf0k5
57
+ IUCTIqVAOUJguWwKDkCOLI9NU+3Kk3R9uZvLxq7oH5m/1Jvn9mqxSM6z/6HR
58
+ OwVMDgjJshlBx+tDaK0z0pY99ZeKQGOKkKPqofUU9G3VFs2mauvdZojtlOiJ
59
+ Gq3IaWGMHa0PsY3OvHfeeA9Wg41gQ0q215oD+1ROnNZ6SKzIOq/YWKOV9mPi
60
+ aH1IjGgz77RW5CyoCDG4VGGOHFAHUlPEt9WnY/VTD5GRiYQGHStveYwcrY+Q
61
+ NWZIBv+tKHLnDRvIBj0p8u3x8fSWV0ZLhgZESRGHaYgbL4+crDBzGhVrNMZc
62
+ FJh7S5gcvKgbOvj3afPqcMHFwOiVE7OikwmzI4Hj9VFiaJN5Yzx4S7IiAuuU
63
+ XCewogB2Cvlr9TjElf+tFFt5jzgP1Jg33jAEVoyZRJvXposMcwlY9xrrXBys
64
+ XFA4BfzhuakPVx8PbVPV5fNbdmdEQitZ5gxoN5q+eHkUF+QycMrKl8aimTuh
65
+ wedoJOICuynu69262QvGG2AZKOfYjkgv7I+84Nhl4l62sXwAmS7JBO7yAXSf
66
+ aO8HcX1zl5y/z5LfxaZzcXjtOg/75tDdPlZP+6brWm6XejVf4HL7489q/oVW
67
+ +fVpmZf33UHFU1s10rPaXr8stwu4mS9Pq3zDq8/3c2k4n89/AXYRrTZUBwAA
68
+ http_version:
69
+ recorded_at: Sun, 01 Jan 2017 02:33:35 GMT
70
+ - request:
71
+ method: get
72
+ uri: https://graph.facebook.com/v2.8/act_1132789356764349/advertisable_applications?access_token=TEST_ACCESS_TOKEN
73
+ body:
74
+ encoding: US-ASCII
75
+ string: ''
76
+ headers:
77
+ Accept:
78
+ - "*/*; q=0.5, application/xml"
79
+ Accept-Encoding:
80
+ - gzip, deflate
81
+ User-Agent:
82
+ - Ruby
83
+ response:
84
+ status:
85
+ code: 200
86
+ message: OK
87
+ headers:
88
+ Access-Control-Allow-Origin:
89
+ - "*"
90
+ Etag:
91
+ - '"ed5a3a3762d401f540d4f52b8a1a581c369b29c4"'
92
+ Pragma:
93
+ - no-cache
94
+ Cache-Control:
95
+ - private, no-cache, no-store, must-revalidate
96
+ Facebook-Api-Version:
97
+ - v2.8
98
+ Expires:
99
+ - Sat, 01 Jan 2000 00:00:00 GMT
100
+ Content-Type:
101
+ - application/json; charset=UTF-8
102
+ X-Fb-Trace-Id:
103
+ - FLOZqWyoOYj
104
+ X-Fb-Rev:
105
+ - '2761076'
106
+ Vary:
107
+ - Accept-Encoding
108
+ Content-Encoding:
109
+ - gzip
110
+ X-Fb-Debug:
111
+ - osSdSrQ/aBSnR2FqPJQgAMmD/lnFd5XwjzuDSuxRMjcrM56dPBHP41osYJLrHiBNRH5aBUq/Ru9qq5U+blWJHA==
112
+ Date:
113
+ - Sun, 01 Jan 2017 02:33:35 GMT
114
+ Connection:
115
+ - keep-alive
116
+ Content-Length:
117
+ - '302'
118
+ body:
119
+ encoding: ASCII-8BIT
120
+ string: !binary |-
121
+ H4sIAAAAAAAAA5WRXU+DMBSG/wrp9QYtSD+WGBOzK+OV807M0kEHzTra0G6E
122
+ LPvvlujALWj0tuf0PM95zwkU3HGweDuBnDtR6qYDC/Ast8K6TgkwA0rWO/9U
123
+ OWfsIouyqDlsutBpU3HnRBPmep9Fvq/me+H7Xnw1mAdPohWq6YJVpY2RdRks
124
+ BVf2q80anve9w5B5P9MXZeFfUcooIhBBgnCMcQLOsyu5x4OVtbB2yq1t23Dr
125
+ h2+03n2alT0vix64MWtZ3CNMMWZJmnoKogkbxVdCqUDXwetFavC5/XLj82tY
126
+ NzlZWdbrgxmp32mT0VwsYpZSGBMfSkzxHfyjxNTBCnGcONhSHMeFE9KzCPOL
127
+ Qxz/h/UjZlj0mkUoQZ4FCWOQ0hSc388fjb/W/JMCAAA=
128
+ http_version:
129
+ recorded_at: Sun, 01 Jan 2017 02:33:35 GMT
130
+ recorded_with: VCR 3.0.3