threads-api 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bc7d9996e4a119f65407f455788ff761710855ceb5e8d01eae7853a0d5c8022
4
- data.tar.gz: d13d7280d9f19a53cc3acca6d58bb7871e5f1faa5e93767adfb4e3a2f8a9a83c
3
+ metadata.gz: 422f4c1e70e0a2d5402d70646e6afd8fc095ff070b65e59f0acbf0afe4e66127
4
+ data.tar.gz: 421de26fc580b70c9bb76b4ef08adf040c97f94e92a7666acde6c42cbf9b1098
5
5
  SHA512:
6
- metadata.gz: a51396bdc11e60e5a853a1a04bbce0cf35ba3b4a1685ce81da34a8e230c1b5f647dd4f27dc2bf0985e835d6ff75db9c68c926c73d46c197feef55096b1555672
7
- data.tar.gz: 580e44a8a236e33b4489e55db83b58d04d5a2450639bda7960c24ee55ef9db5fdfdab1f60352af504b215cae499c688cdb80e45c6dfc829b8c83a073ed8df7fa
6
+ metadata.gz: 56d8bc23aa227e36406e1446159b13ea22317ea763dadb22aa25e07b17d7ae40eed568b16c614544035d33be72bb747af512a9ede63ad7fe4a03955fe7aab894
7
+ data.tar.gz: 6d1350e527061f18955d7cf4744a97e27ca5fcf65b3fc9515bdce8d7a18fe65e59f400a950e1023f251b295c8d2e68d986b6193e257a235e89d960c01c8316c9
data/README.md CHANGED
@@ -76,7 +76,7 @@ thread = client.get_thread("18050206876707110", user_id: "7770386109746442")
76
76
  `Threads::API::Client#list_threads` accepts the following options:
77
77
 
78
78
  * `user_id` - The ID of the user whose threads you want to read. Defaults to `"me"`, the authenticated user.
79
- * `fields` - An Array (or comma-separated String) of fields to include in the response. By default, only `id` is requested. See the [Threads API documentation](https://developers.facebook.com/docs/threads/threads-media#fields) for a list of available fields.
79
+ * `fields` - An Array (or comma-separated String) of fields to include in the response. By default, all documented fields are requested. See the [Threads API documentation](https://developers.facebook.com/docs/threads/threads-media#fields) for a list of available fields.
80
80
  * `since` - An ISO 8601 date string. Only threads published after this date will be returned.
81
81
  * `until` - An ISO 8601 date string. Only threads published before this date will be returned.
82
82
  * `before` - A cursor string returned by a previous request for pagination.
@@ -85,6 +85,16 @@ thread = client.get_thread("18050206876707110", user_id: "7770386109746442")
85
85
 
86
86
  `Threads::API::Client#get_thread` accepts only the `user_id` and `fields` options.
87
87
 
88
+ ## Reading profiles
89
+
90
+ To get a user's profile:
91
+
92
+ ```ruby
93
+ profile = client.get_profile("7770386109746442")
94
+ ```
95
+
96
+ `Threads::API::Client#get_profile` accepts a `fields` option, which is an Array (or comma-separated String) of fields to include in the response. By default, all documented fields are requested. See the [Threads API documentation](https://developers.facebook.com/docs/threads/threads-profiles#fields) for a list of available fields.
97
+
88
98
  ## Posting to Threads
89
99
 
90
100
  Posting to Threads is, at the very least, a two-step process. Threads requires that you first create a container for the media you want to post, then explicitly publishing that container as a thread. However, more steps are involved if you want to post multiple media items in a single thread.
@@ -1,17 +1,49 @@
1
+ require_relative "profile"
1
2
  require_relative "thread"
2
3
 
3
4
  module Threads
4
5
  module API
5
6
  class Client
7
+ PROFILE_FIELDS = %w[id username threads_profile_picture_url threads_biography]
8
+ POST_FIELDS = %w[
9
+ id
10
+ media_product_type
11
+ media_type
12
+ media_url
13
+ permalink
14
+ owner
15
+ username
16
+ text
17
+ timestamp
18
+ shortcode
19
+ thumbnail_url
20
+ children
21
+ is_quote_post
22
+ ]
23
+
6
24
  def initialize(access_token)
7
25
  @access_token = access_token
8
26
  end
9
27
 
28
+ def get_profile(user_id = "me", fields: PROFILE_FIELDS)
29
+ params = {access_token: @access_token}
30
+ params[:fields] = Array(fields).join(",") if fields
31
+
32
+ response = connection.get(user_id, params)
33
+
34
+ Threads::API::Profile.new(response.body)
35
+ end
36
+
10
37
  def list_threads(user_id: "me", **options)
11
38
  params = options.slice(:since, :until, :before, :after, :limit).compact
12
39
  params[:access_token] = @access_token
13
40
 
14
- fields = Array(options[:fields]).join(",")
41
+ fields = if options.key?(:fields)
42
+ Array(options[:fields]).join(",")
43
+ else
44
+ POST_FIELDS.join(",")
45
+ end
46
+
15
47
  params[:fields] = fields unless fields.empty?
16
48
 
17
49
  response = connection.get("#{user_id}/threads", params)
@@ -19,7 +51,7 @@ module Threads
19
51
  Threads::API::Thread::List.new(response.body)
20
52
  end
21
53
 
22
- def get_thread(thread_id, fields: nil)
54
+ def get_thread(thread_id, fields: POST_FIELDS)
23
55
  params = {access_token: @access_token}
24
56
  params[:fields] = Array(fields).join(",") if fields
25
57
 
@@ -75,9 +107,11 @@ module Threads
75
107
  Threads::API::UnpublishedThread.new(response.body)
76
108
  end
77
109
 
78
- def create_carousel_thread(children:, text: nil)
110
+ def create_carousel_thread(children:, text: nil, reply_to_id: nil, reply_control: nil)
79
111
  params = {access_token: @access_token, media_type: "CAROUSEL", text: text}
80
112
  params[:children] = Array(children).join(",")
113
+ params[:reply_to_id] = reply_to_id if reply_to_id
114
+ params[:reply_control] = reply_control if reply_control
81
115
 
82
116
  raise ArgumentError, "At least one item must be present in the `:children` option" if params[:children].empty?
83
117
 
@@ -0,0 +1,18 @@
1
+ require "time"
2
+
3
+ module Threads
4
+ module API
5
+ class Profile
6
+ attr_reader :id, :username, :profile_picture_url, :biography
7
+
8
+ def initialize(json)
9
+ @id = json["id"]
10
+ @username = json["username"]
11
+ @profile_picture_url = json["profile_picture_url"]
12
+ @biography = json["biography"]
13
+ end
14
+
15
+ alias_method :bio, :biography
16
+ end
17
+ end
18
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Threads
4
4
  module API
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: threads-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Celis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-19 00:00:00.000000000 Z
11
+ date: 2024-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -39,6 +39,7 @@ files:
39
39
  - lib/threads/api.rb
40
40
  - lib/threads/api/client.rb
41
41
  - lib/threads/api/oauth2/client.rb
42
+ - lib/threads/api/profile.rb
42
43
  - lib/threads/api/thread.rb
43
44
  - lib/threads/api/version.rb
44
45
  homepage: https://github.com/davidcelis/threads-api