Class: PostProxy::Resources::Profiles

Inherits:
Object
  • Object
show all
Defined in:
lib/postproxy/resources/profiles.rb

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Profiles

Returns a new instance of Profiles.



4
5
6
# File 'lib/postproxy/resources/profiles.rb', line 4

def initialize(client)
  @client = client
end

Instance Method Details

#assign_placement_to_group(id, placement_id:, target_profile_group_id:, profile_group_id: nil, idempotency_key: nil) ⇒ Object

Moves a placement (e.g. a Facebook Page or Telegram channel) to another profile group. placement_id is the placement's external ID as returned by #placements.



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/postproxy/resources/profiles.rb', line 42

def assign_placement_to_group(id, placement_id:, target_profile_group_id:, profile_group_id: nil,
  idempotency_key: nil)
  result = @client.request(:patch, "/profiles/#{id}/assign_placement_to_group",
    json: {
      placement_id: placement_id,
      target_profile_group_id: target_profile_group_id
    },
    profile_group_id: profile_group_id,
    idempotency_key: idempotency_key
  )
  Placement.new(**result)
end

#backfill_posts(id, from:, profile_group_id: nil, idempotency_key: nil) ⇒ Object

Imports older posts from the platform. Walks the profile's feed backwards from the newest post until it reaches from or the platform stops returning posts. Runs in the background — poll #post_sync with the returned id for progress. Only one backfill runs per profile; starting a second raises ConflictError carrying the running one's profile_sync_id.



61
62
63
64
65
66
67
68
# File 'lib/postproxy/resources/profiles.rb', line 61

def backfill_posts(id, from:, profile_group_id: nil, idempotency_key: nil)
  result = @client.request(:post, "/profiles/#{id}/backfill_posts",
    json: { from: from },
    profile_group_id: profile_group_id,
    idempotency_key: idempotency_key
  )
  PostSync.new(**result)
end

#delete(id, profile_group_id: nil, idempotency_key: nil) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/postproxy/resources/profiles.rb', line 125

def delete(id, profile_group_id: nil, idempotency_key: nil)
  result = @client.request(:delete, "/profiles/#{id}",
    profile_group_id: profile_group_id,
    idempotency_key: idempotency_key
  )
  SuccessResponse.new(**result)
end

#delete_ice_breakers(id, profile_group_id: nil, idempotency_key: nil) ⇒ Object



117
118
119
120
121
122
123
# File 'lib/postproxy/resources/profiles.rb', line 117

def delete_ice_breakers(id, profile_group_id: nil, idempotency_key: nil)
  result = @client.request(:delete, "/profiles/#{id}/ice_breakers",
    profile_group_id: profile_group_id,
    idempotency_key: idempotency_key
  )
  SuccessResponse.new(**result)
end

#get(id, profile_group_id: nil) ⇒ Object



14
15
16
17
# File 'lib/postproxy/resources/profiles.rb', line 14

def get(id, profile_group_id: nil)
  result = @client.request(:get, "/profiles/#{id}", profile_group_id: profile_group_id)
  Profile.new(**result)
end

#get_profile_stats(id, placement_id: nil, from: nil, to: nil, profile_group_id: nil) ⇒ Object

placement_id is required for facebook, linkedin, and telegram profiles.



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/postproxy/resources/profiles.rb', line 26

def get_profile_stats(id, placement_id: nil, from: nil, to: nil, profile_group_id: nil)
  params = {}
  params[:placement_id] = placement_id if placement_id
  params[:from] = from if from
  params[:to] = to if to

  result = @client.request(:get, "/profiles/#{id}/stats",
    params: params.empty? ? nil : params,
    profile_group_id: profile_group_id
  )
  ProfileStatsResponse.new(data: result[:data])
end

#ice_breakers(id, profile_group_id: nil) ⇒ Object

Lists DM ice breakers. Supported for Instagram profiles only.



101
102
103
104
# File 'lib/postproxy/resources/profiles.rb', line 101

def ice_breakers(id, profile_group_id: nil)
  result = @client.request(:get, "/profiles/#{id}/ice_breakers", profile_group_id: profile_group_id)
  IceBreakersResponse.new(**result)
end

#list(profile_group_id: nil) ⇒ Object



8
9
10
11
12
# File 'lib/postproxy/resources/profiles.rb', line 8

def list(profile_group_id: nil)
  result = @client.request(:get, "/profiles", profile_group_id: profile_group_id)
  profiles = (result[:data] || []).map { |p| Profile.new(**p) }
  ListResponse.new(data: profiles)
end

#placements(id, profile_group_id: nil) ⇒ Object



19
20
21
22
23
# File 'lib/postproxy/resources/profiles.rb', line 19

def placements(id, profile_group_id: nil)
  result = @client.request(:get, "/profiles/#{id}/placements", profile_group_id: profile_group_id)
  items = (result[:data] || []).map { |p| Placement.new(**p) }
  ListResponse.new(data: items)
end

#post_sync(id, post_sync_id, profile_group_id: nil) ⇒ Object

Fetches a single run. Poll this to follow a backfill to completion — the run is finished when status is "completed" or "failed".



93
94
95
96
97
98
# File 'lib/postproxy/resources/profiles.rb', line 93

def post_sync(id, post_sync_id, profile_group_id: nil)
  result = @client.request(:get, "/profiles/#{id}/post_syncs/#{post_sync_id}",
    profile_group_id: profile_group_id
  )
  PostSync.new(**result)
end

#post_syncs(id, trigger: nil, status: nil, page: nil, per_page: nil, profile_group_id: nil) ⇒ Object

Lists post sync runs, newest first. Runs are kept for 30 days.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/postproxy/resources/profiles.rb', line 71

def post_syncs(id, trigger: nil, status: nil, page: nil, per_page: nil, profile_group_id: nil)
  params = {}
  params[:trigger] = trigger if trigger
  params[:status] = status if status
  params[:page] = page if page
  params[:per_page] = per_page if per_page

  result = @client.request(:get, "/profiles/#{id}/post_syncs",
    params: params.empty? ? nil : params,
    profile_group_id: profile_group_id
  )
  syncs = (result[:data] || []).map { |s| PostSync.new(**s) }
  PaginatedResponse.new(
    data: syncs,
    total: result[:total],
    page: result[:page],
    per_page: result[:per_page]
  )
end

#set_ice_breakers(id, ice_breakers, profile_group_id: nil, idempotency_key: nil) ⇒ Object

Replaces the DM ice breakers for a profile (1-4 items).



107
108
109
110
111
112
113
114
115
# File 'lib/postproxy/resources/profiles.rb', line 107

def set_ice_breakers(id, ice_breakers, profile_group_id: nil, idempotency_key: nil)
  items = ice_breakers.map { |ib| ib.is_a?(IceBreaker) ? ib.to_h : ib }
  result = @client.request(:post, "/profiles/#{id}/ice_breakers",
    json: { ice_breakers: items },
    profile_group_id: profile_group_id,
    idempotency_key: idempotency_key
  )
  SuccessResponse.new(**result)
end