Class: InstagramConnect::Client
- Inherits:
-
Object
- Object
- InstagramConnect::Client
- Defined in:
- lib/instagram_connect/client.rb
Overview
Thin wrapper over the Meta Graph API, bound to one account's access token. Every call returns a Result — API-level failures never raise, callers branch on success?. The Graph host + version come from the configured auth strategy.
Constant Summary collapse
- TIMEOUT =
30
Instance Method Summary collapse
- #container_status(container_id:) ⇒ Object
-
#create_media_container(ig_user_id: @ig_user_id, **params) ⇒ Object
--- Publishing ------------------------------------------------------.
- #delete_comment(comment_id:) ⇒ Object
- #fetch_media_binary(url:) ⇒ Object
- #hide_comment(comment_id:, hidden: true) ⇒ Object
-
#initialize(access_token:, config: InstagramConnect.configuration, ig_user_id: nil) ⇒ Client
constructor
A new instance of Client.
- #list_comments(media_id:, limit: 50) ⇒ Object
-
#list_media(ig_user_id: @ig_user_id, limit: 25) ⇒ Object
--- Reads -----------------------------------------------------------.
-
#list_pages ⇒ Object
FB-Login only: the Pages this user administers, with their linked IG business account — used to resolve the account identity after OAuth.
- #media_insights(media_id:, metrics: %w[reach likes comments])) ⇒ Object
-
#private_reply(comment_id:, text:) ⇒ Object
One-time private reply to a comment (comment -> DM), valid 7 days.
- #profile(igsid:, fields: %w[name username profile_pic])) ⇒ Object
- #publish_media(creation_id:, ig_user_id: @ig_user_id) ⇒ Object
- #publishing_limit(ig_user_id: @ig_user_id) ⇒ Object
-
#reply_comment(comment_id:, text:) ⇒ Object
--- Comments --------------------------------------------------------.
- #send_media(recipient_id:, url:, type: "image", tag: nil) ⇒ Object
- #send_reaction(recipient_id:, message_id:, reaction: "love") ⇒ Object
-
#send_text(recipient_id:, text:, tag: nil) ⇒ Object
--- Direct messages -------------------------------------------------.
Constructor Details
#initialize(access_token:, config: InstagramConnect.configuration, ig_user_id: nil) ⇒ Client
Returns a new instance of Client.
10 11 12 13 14 15 |
# File 'lib/instagram_connect/client.rb', line 10 def initialize(access_token:, config: InstagramConnect.configuration, ig_user_id: nil) @access_token = access_token @config = config @ig_user_id = ig_user_id @strategy = Auth.for(config) end |
Instance Method Details
#container_status(container_id:) ⇒ Object
69 70 71 |
# File 'lib/instagram_connect/client.rb', line 69 def container_status(container_id:) get("/#{container_id}", { fields: "status_code,status" }) end |
#create_media_container(ig_user_id: @ig_user_id, **params) ⇒ Object
--- Publishing ------------------------------------------------------
61 62 63 |
# File 'lib/instagram_connect/client.rb', line 61 def create_media_container(ig_user_id: @ig_user_id, **params) post("/#{require_ig_user_id(ig_user_id)}/media", params) end |
#delete_comment(comment_id:) ⇒ Object
51 52 53 |
# File 'lib/instagram_connect/client.rb', line 51 def delete_comment(comment_id:) delete("/#{comment_id}") end |
#fetch_media_binary(url:) ⇒ Object
98 99 100 101 102 103 104 105 |
# File 'lib/instagram_connect/client.rb', line 98 def fetch_media_binary(url:) response = HTTParty.get(url, headers: bearer, timeout: TIMEOUT, follow_redirects: true) unless response.success? return Result.error("media fetch failed: HTTP #{response.code}", error_code: response.code) end body = response.body.to_s Result.ok(data: { body: body, mime: response.headers["content-type"], size: body.bytesize }) end |
#hide_comment(comment_id:, hidden: true) ⇒ Object
47 48 49 |
# File 'lib/instagram_connect/client.rb', line 47 def hide_comment(comment_id:, hidden: true) post("/#{comment_id}", { hide: hidden }) end |
#list_comments(media_id:, limit: 50) ⇒ Object
55 56 57 |
# File 'lib/instagram_connect/client.rb', line 55 def list_comments(media_id:, limit: 50) get("/#{media_id}/comments", { fields: "id,text,username,timestamp,parent_id", limit: limit }) end |
#list_media(ig_user_id: @ig_user_id, limit: 25) ⇒ Object
--- Reads -----------------------------------------------------------
79 80 81 82 |
# File 'lib/instagram_connect/client.rb', line 79 def list_media(ig_user_id: @ig_user_id, limit: 25) get("/#{require_ig_user_id(ig_user_id)}/media", { fields: "id,caption,media_type,media_url,permalink,timestamp", limit: limit }) end |
#list_pages ⇒ Object
FB-Login only: the Pages this user administers, with their linked IG business account — used to resolve the account identity after OAuth.
94 95 96 |
# File 'lib/instagram_connect/client.rb', line 94 def list_pages get("/me/accounts", { fields: "id,name,access_token,instagram_business_account" }) end |
#media_insights(media_id:, metrics: %w[reach likes comments])) ⇒ Object
84 85 86 |
# File 'lib/instagram_connect/client.rb', line 84 def media_insights(media_id:, metrics: %w[reach likes comments]) get("/#{media_id}/insights", { metric: Array(metrics).join(",") }) end |
#private_reply(comment_id:, text:) ⇒ Object
One-time private reply to a comment (comment -> DM), valid 7 days.
37 38 39 |
# File 'lib/instagram_connect/client.rb', line 37 def private_reply(comment_id:, text:) post("/me/messages", { recipient: { comment_id: comment_id }, message: { text: text } }) end |
#profile(igsid:, fields: %w[name username profile_pic])) ⇒ Object
88 89 90 |
# File 'lib/instagram_connect/client.rb', line 88 def profile(igsid:, fields: %w[name username profile_pic]) get("/#{igsid}", { fields: Array(fields).join(",") }) end |
#publish_media(creation_id:, ig_user_id: @ig_user_id) ⇒ Object
65 66 67 |
# File 'lib/instagram_connect/client.rb', line 65 def publish_media(creation_id:, ig_user_id: @ig_user_id) post("/#{require_ig_user_id(ig_user_id)}/media_publish", { creation_id: creation_id }) end |
#publishing_limit(ig_user_id: @ig_user_id) ⇒ Object
73 74 75 |
# File 'lib/instagram_connect/client.rb', line 73 def publishing_limit(ig_user_id: @ig_user_id) get("/#{require_ig_user_id(ig_user_id)}/content_publishing_limit", { fields: "quota_usage,config" }) end |
#reply_comment(comment_id:, text:) ⇒ Object
--- Comments --------------------------------------------------------
43 44 45 |
# File 'lib/instagram_connect/client.rb', line 43 def reply_comment(comment_id:, text:) post("/#{comment_id}/replies", { message: text }) end |
#send_media(recipient_id:, url:, type: "image", tag: nil) ⇒ Object
23 24 25 26 |
# File 'lib/instagram_connect/client.rb', line 23 def send_media(recipient_id:, url:, type: "image", tag: nil) = { type: type, payload: { url: url } } (recipient: { id: recipient_id }, message: { attachment: }, tag: tag) end |
#send_reaction(recipient_id:, message_id:, reaction: "love") ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/instagram_connect/client.rb', line 28 def send_reaction(recipient_id:, message_id:, reaction: "love") post("/me/messages", { recipient: { id: recipient_id }, sender_action: "react", payload: { message_id: , reaction: reaction } }) end |
#send_text(recipient_id:, text:, tag: nil) ⇒ Object
--- Direct messages -------------------------------------------------
19 20 21 |
# File 'lib/instagram_connect/client.rb', line 19 def send_text(recipient_id:, text:, tag: nil) (recipient: { id: recipient_id }, message: { text: text }, tag: tag) end |