meta_threads 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e793d2d4079de3e3eefdb8db3e759b816a896eb8bdc75247573ee7c46e109eba
4
+ data.tar.gz: f40460cf619d53355c8b4f55a3d14d46eba6b8d346e02a38589722990a1cacad
5
+ SHA512:
6
+ metadata.gz: 1524ee51de6f4759d013d3334871b348aaf28749939c099016db3e9d0685a2b5c0b22997070625544ef8465c4623f59e7f39798068638ee68e7e334ccb5f5c58
7
+ data.tar.gz: 65bc7f8b9a4e810048e586d88d7146b98528cfa073cbdd63d8af28bd6edc6fc5b8eb6d1de320a69f872e212fdc095924ef97bf388807c0d94b5ef2809f498bc6
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/https'
4
+ require 'json'
5
+ require 'net/http'
6
+
7
+ module ThreadsApi
8
+ # The `RequestHandler` class provides methods for sending HTTP GET and POST requests.
9
+ class RequestHandler
10
+ # It is a class method that sends an HTTP GET request to the specified URL and returns the response body.
11
+ def self.send_get_request(url)
12
+ uri = URI(url)
13
+ http = Net::HTTP.new(uri.host, uri.port)
14
+ http.use_ssl = true
15
+
16
+ request = Net::HTTP::Get.new(uri)
17
+ response = http.request(request)
18
+ response.body
19
+ end
20
+
21
+ # It is a class method that sends an HTTP POST request to the specified URL with the provided headers and data.
22
+ def self.send_request(url:, headers:, data:)
23
+ uri = URI(url)
24
+ http = Net::HTTP.new(uri.host, uri.port)
25
+ http.use_ssl = true
26
+
27
+ request = Net::HTTP::Post.new(uri.path, headers)
28
+ request.set_form_data(data)
29
+
30
+ http.request(request)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'threads/request_handler'
4
+ require 'json'
5
+
6
+ module Threads
7
+ # Provides methods for making API requests to the Threads API and retrieving user information and threads.
8
+ class ApiClient
9
+ BASE_URL = 'https://www.threads.net'
10
+ API_URL = "#{BASE_URL}/api/graphql"
11
+
12
+ def initialize
13
+ @token = token
14
+ @headers = {
15
+ 'Content-Type' => 'application/x-www-form-urlencoded',
16
+ 'X-IG-App-ID' => '238260118697367',
17
+ 'X-FB-LSD' => @token,
18
+ 'Sec-Fetch-Site' => 'same-origin'
19
+ }
20
+ end
21
+
22
+ def get_user_id_from_username(username)
23
+ response = Threads::RequestHandler.send_get_request("#{BASE_URL}/@#{username}")
24
+ text = response.gsub("\n", '')
25
+
26
+ user_id = text.match(/"props":{"user_id":"(\d+)"},/)
27
+ user_id ? user_id[1] : nil
28
+ end
29
+
30
+ def get_user(username)
31
+ id = get_user_id_from_username(username)
32
+ response = Threads::RequestHandler.send_request(
33
+ url: API_URL, headers: @headers,
34
+ data: {
35
+ 'lsd' => @token,
36
+ 'variables' => { 'userID' => id }.to_json,
37
+ 'doc_id' => '23996318473300828'
38
+ }
39
+ )
40
+
41
+ JSON.parse(response.body)
42
+ end
43
+
44
+ def get_user_threads(username)
45
+ id = get_user_id_from_username(username)
46
+ response = Threads::RequestHandler.send_request(
47
+ url: API_URL, headers: @headers,
48
+ data: {
49
+ 'lsd' => @token,
50
+ 'variables' => { 'userID' => id }.to_json,
51
+ 'doc_id' => '6232751443445612'
52
+ }
53
+ )
54
+
55
+ JSON.parse(response.body)
56
+ end
57
+
58
+ def get_post(post_id)
59
+ response = Threads::RequestHandler.send_request(
60
+ url: API_URL, headers: @headers,
61
+ data: {
62
+ 'lsd' => @token,
63
+ 'variables' => { 'postID' => post_id }.to_json,
64
+ 'doc_id' => '5587632691339264'
65
+ }
66
+ )
67
+
68
+ JSON.parse(response.body)
69
+ end
70
+
71
+ def get_user_replies(username)
72
+ id = get_user_id_from_username(username)
73
+ response = Threads::RequestHandler.send_request(
74
+ url: API_URL, headers: @headers,
75
+ data: {
76
+ 'lsd' => @token,
77
+ 'variables' => { 'userID' => id }.to_json,
78
+ 'doc_id' => '6307072669391286'
79
+ }
80
+ )
81
+
82
+ JSON.parse(response.body)
83
+ end
84
+
85
+ private
86
+
87
+ def token
88
+ response = Threads::RequestHandler.send_get_request("#{BASE_URL}/@instagram")
89
+ token_key_position = response&.index('token')
90
+ response&.slice(token_key_position + 9, 22)
91
+ end
92
+ end
93
+ end
data/lib/threads.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'threads_api/request_handler'
2
+ require 'threads_api/api_client'
3
+
4
+ # Threads (threads.net) API wrapper implementation.
5
+ module Threads
6
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: meta_threads
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Nirav Kanani
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-http
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A Ruby gem that provides convenient methods for interacting with the
42
+ Meta's Threads.
43
+ email:
44
+ - kananinirav0@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/request_handler.rb
50
+ - lib/threads.rb
51
+ - lib/threads/api_client.rb
52
+ homepage: https://github.com/kananinirav/threads-api
53
+ licenses:
54
+ - MIT
55
+ metadata:
56
+ source_code_uri: https://github.com/kananinirav/threads-api
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '2.7'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.2.3
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: A Ruby gem for interacting with the Meta's Threads.
76
+ test_files: []