tweettop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fb4b7a3dda0c1040734a25bf8f245e31d690ee56375a0f021ac8d27b881eb984
4
+ data.tar.gz: 5f14034ec6d23dbc61c3c5befbc08317a80fade31a714aaa85a1d19147f8fb77
5
+ SHA512:
6
+ metadata.gz: 126cd00bf0ca6035852019607be931802ff536c4291f9ca68cfaf8865a111b3188521144f3c62e3d8b7cc31ff1be9a9ae77f15194fbcb73158f096d0e7792475
7
+ data.tar.gz: 0d8e8b6bf5c259bc49a0cc6d3254fb093188303088e5cc6a0661be4627235acb8cae3b20612ab8fb169e00805d9b53f564c52ab022537ac0f9909ee99b2201a2
data/lib/get_follow.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'json'
2
+ require 'typhoeus'
3
+
4
+ module GetFollow
5
+ def get_followers(user_id, results: 100, info: "description,name,username,url", format: "json")
6
+ '''info parameter options (must be a string with the required options): created_at, description, entities,
7
+ id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld
8
+ default info: description,name,username,url'''
9
+ url = "https://api.twitter.com/2/users/#{user_id}/followers"
10
+
11
+ info = info.gsub(" ", "")
12
+
13
+ params = {
14
+ "max_results" => results,
15
+ "user.fields" => info
16
+ }
17
+
18
+ options = {
19
+ method: 'get',
20
+ headers: {
21
+ "Authorization": "Bearer #{@bearer_token}"
22
+ },
23
+ params: params
24
+ }
25
+
26
+ request = Typhoeus::Request.new(url, options)
27
+ response = request.run
28
+
29
+ if format == "ruby"
30
+ return JSON.parse(response.body.to_s)
31
+ elsif format == "code"
32
+ return response.code
33
+ else
34
+ return JSON.pretty_generate(JSON.parse(response.body))
35
+ end
36
+ end
37
+
38
+ def get_following(user_id, results: 100, info: "description,name,username,url", format: "json")
39
+ '''info parameter options (must be a string with the required options): created_at, description, entities,
40
+ id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld
41
+ default info: description,name,username,url'''
42
+ url = "https://api.twitter.com/2/users/#{user_id}/following"
43
+
44
+ info = info.gsub(" ", "")
45
+
46
+ params = {
47
+ "max_results" => results,
48
+ "user.fields" => info
49
+ }
50
+
51
+ options = {
52
+ method: 'get',
53
+ headers: {
54
+ "Authorization": "Bearer #{@bearer_token}"
55
+ },
56
+ params: params
57
+ }
58
+
59
+ request = Typhoeus::Request.new(url, options)
60
+ response = request.run
61
+
62
+ if format == "ruby"
63
+ return JSON.parse(response.body.to_s)
64
+ elsif format == "code"
65
+ return response.code
66
+ else
67
+ return JSON.pretty_generate(JSON.parse(response.body))
68
+ end
69
+ end
70
+ end
data/lib/get_tweets.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'json'
2
+ require 'typhoeus'
3
+
4
+ module GetTweets
5
+ def get_tweets(tweet_ids, format: "json")#"tweet_ids" must be a string. If more than one ID's are given, they must be comma separated
6
+ url = "https://api.twitter.com/2/tweets"
7
+ tweet_ids = tweet_ids.gsub(" ", "")
8
+ params = {
9
+ "ids" => tweet_ids,
10
+ "tweet.fields" => "conversation_id,created_at,public_metrics,id,referenced_tweets",
11
+ "media.fields" => "url",
12
+ "user.fields" => "description,username,url",
13
+ "expansions" => "author_id"
14
+ }
15
+
16
+ options = {
17
+ method: 'get',
18
+ headers: {
19
+ "Authorization": "Bearer #{@bearer_token}"
20
+ },
21
+ params: params
22
+ }
23
+
24
+ request = Typhoeus::Request.new(url, options)
25
+ response = request.run
26
+
27
+ if format == "ruby"
28
+ return JSON.parse(response.body.to_s)
29
+ elsif format == "code"
30
+ return response.code
31
+ else
32
+ return JSON.pretty_generate(JSON.parse(response.body))
33
+ end
34
+ end
35
+
36
+ def get_conversation(tweet_id, format: "json")#tweet_id must be a single tweet ID
37
+ ids = "#{tweet_id}"
38
+ loop do
39
+ tweet = get_tweets(tweet_id, format: "ruby")
40
+ if is_a_reply(tweet)
41
+ tweet_id = tweet["data"][0]["referenced_tweets"][0]["id"]
42
+ ids += ",#{tweet["data"][0]["referenced_tweets"][0]["id"]}"
43
+ else
44
+ break
45
+ end
46
+ end
47
+ return get_tweets(ids, format: format)
48
+ end
49
+
50
+ private
51
+
52
+ def is_a_reply(tweet)
53
+ if tweet["data"][0]["referenced_tweets"].class == Array
54
+ return true
55
+ else
56
+ return false
57
+ end
58
+ end
59
+ end
data/lib/get_user.rb ADDED
@@ -0,0 +1,96 @@
1
+ require 'oauth'
2
+ require 'json'
3
+ require 'typhoeus'
4
+ require 'oauth/request_proxy/typhoeus_request'
5
+
6
+ module GetUser
7
+ def get_user(usernames, format: "json")
8
+
9
+ url = "https://api.twitter.com/2/users/by"
10
+
11
+ query_params = {
12
+ "usernames": usernames,
13
+ "user.fields": "name,description,created_at"
14
+ }
15
+
16
+ options = {
17
+ :method => :get,
18
+ params: query_params
19
+ }
20
+
21
+ access_token = @credentials
22
+
23
+ oauth_params = {:consumer => @client, :token => access_token}
24
+
25
+ request = Typhoeus::Request.new(url, options)
26
+ oauth_helper = OAuth::Client::Helper.new(request, oauth_params.merge(:request_uri => url))
27
+ request.options[:headers].merge!({"Authorization" => oauth_helper.header})
28
+ response = request.run
29
+
30
+ if format == "ruby"
31
+ return JSON.parse(response.body.to_s)
32
+ elsif format == "code"
33
+ return response.code
34
+ else
35
+ return JSON.pretty_generate(JSON.parse(response.body))
36
+ end
37
+ end
38
+
39
+ def get_user!(usernames, format: "json")
40
+
41
+ url = "https://api.twitter.com/2/users/by"
42
+
43
+ query_params = {
44
+ "usernames": usernames,
45
+ "user.fields": "name,description,created_at"
46
+ }
47
+
48
+ options = {
49
+ method: 'get',
50
+ headers: {
51
+ "Authorization" => "Bearer #{@bearer_token}"
52
+ },
53
+ params: query_params
54
+ }
55
+
56
+ request = Typhoeus::Request.new(url, options)
57
+ response = request.run
58
+
59
+ if format == "ruby"
60
+ return JSON.parse(response.body.to_s)
61
+ elsif format == "code"
62
+ return response.code
63
+ else
64
+ return JSON.pretty_generate(JSON.parse(response.body))
65
+ end
66
+ end
67
+
68
+ def get_user_by_id(user_ids, format: "json")#"user_ids" must be a string. If more than one ID's are given, they must be comma separated
69
+
70
+ url = "https://api.twitter.com/2/users"
71
+
72
+ query_params = {
73
+ "ids": user_ids,
74
+ "user.fields": "name,description,created_at"
75
+ }
76
+
77
+ options = {
78
+ method: 'get',
79
+ headers: {
80
+ "Authorization" => "Bearer #{@bearer_token}"
81
+ },
82
+ params: query_params
83
+ }
84
+
85
+ request = Typhoeus::Request.new(url, options)
86
+ response = request.run
87
+
88
+ if format == "ruby"
89
+ return JSON.parse(response.body.to_s)
90
+ elsif format == "code"
91
+ return response.code
92
+ else
93
+ return JSON.pretty_generate(JSON.parse(response.body))
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,35 @@
1
+ require 'json'
2
+ require 'typhoeus'
3
+
4
+ module GetUserTimeline
5
+ def get_user_timeline(user_id, results = 5, format: "json") #results: minimum 5, maximum 200
6
+
7
+ url = "https://api.twitter.com/2/users/#{user_id}/tweets"
8
+
9
+ query_params = {
10
+ "max_results" => results,
11
+ "tweet.fields" => "conversation_id,created_at,public_metrics,id,referenced_tweets",
12
+ "user.fields" => "description,username,url",
13
+ "media.fields" => "url"
14
+ }
15
+
16
+ options = {
17
+ method: 'get',
18
+ headers: {
19
+ "Authorization" => "Bearer #{@bearer_token}"
20
+ },
21
+ params: query_params
22
+ }
23
+
24
+ request = Typhoeus::Request.new(url, options)
25
+ response = request.run
26
+
27
+ if format == "ruby"
28
+ return JSON.parse(response.body.to_s)
29
+ elsif format == "code"
30
+ return response.code
31
+ else
32
+ return JSON.pretty_generate(JSON.parse(response.body))
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,55 @@
1
+ require 'oauth'
2
+ require 'json'
3
+ require 'typhoeus'
4
+ require 'oauth/request_proxy/typhoeus_request'
5
+
6
+ module PostDeleteTweets
7
+ def post_tweet(text)
8
+
9
+ url = "https://api.twitter.com/2/tweets"
10
+
11
+ @json_payload = {"text": text}
12
+
13
+ options = {
14
+ :method => :post,
15
+ headers: {
16
+ "content-type": "application/json"
17
+ },
18
+ body: JSON.dump(@json_payload)
19
+ }
20
+
21
+ access_token = @credentials
22
+
23
+ oauth_params = {:consumer => @client, :token => access_token}
24
+
25
+ request = Typhoeus::Request.new(url, options)
26
+ oauth_helper = OAuth::Client::Helper.new(request, oauth_params.merge(:request_uri => url))
27
+ request.options[:headers].merge!({"Authorization" => oauth_helper.header})
28
+ response = request.run
29
+
30
+ return response.code, JSON.pretty_generate(JSON.parse(response.body))
31
+ end
32
+
33
+ def delete_tweet(tweet_id)
34
+
35
+ url = "https://api.twitter.com/2/tweets/#{tweet_id}"
36
+
37
+ options = {
38
+ :method => :delete,
39
+ headers: {
40
+ "content-type": "application/json"
41
+ }
42
+ }
43
+
44
+ access_token = @credentials
45
+
46
+ oauth_params = {:consumer => @client, :token => access_token}
47
+
48
+ request = Typhoeus::Request.new(url, options)
49
+ oauth_helper = OAuth::Client::Helper.new(request, oauth_params.merge(:request_uri => url))
50
+ request.options[:headers].merge!({"Authorization" => oauth_helper.header})
51
+ response = request.run
52
+
53
+ return response.code
54
+ end
55
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tweettop
4
+ VERSION = "0.1.0"
5
+ end
data/lib/tweettop.rb ADDED
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+ require_relative "tweettop/version"
3
+ require_relative "user.rb"
data/lib/user.rb ADDED
@@ -0,0 +1,30 @@
1
+ require "typhoeus"
2
+ require "json"
3
+ require "oauth"
4
+ require_relative "get_user_timeline.rb"
5
+ require_relative "get_tweets.rb"
6
+ require_relative "get_user.rb"
7
+ require_relative "get_follow.rb"
8
+ require_relative "post_delete_tweets.rb"
9
+
10
+ module TweetTop
11
+ class User
12
+ include GetUserTimeline
13
+ include GetTweets
14
+ include GetUser
15
+ include GetFollow
16
+ include PostDeleteTweets
17
+
18
+ def initialize(api_key, api_key_secret, access_token, access_token_secret, bearer_token)
19
+ @api_key = api_key
20
+ @api_key_secret = api_key_secret
21
+ @access_token = access_token
22
+ @access_token_secret = access_token_secret
23
+ @bearer_token = bearer_token
24
+ @client = OAuth::Consumer.new(@api_key, @api_key_secret, :site => 'https://api.twitter.com',
25
+ :authorize_path => '/oauth/authenticate',
26
+ :debug_output => false)
27
+ @credentials = OAuth::AccessToken.new(@client, @access_token, @access_token_secret)
28
+ end
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tweettop
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nicolás Cané
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-05-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oauth
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.10
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.10
27
+ - !ruby/object:Gem::Dependency
28
+ name: typhoeus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.4.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.4.0
41
+ description:
42
+ email:
43
+ - ''
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/get_follow.rb
49
+ - lib/get_tweets.rb
50
+ - lib/get_user.rb
51
+ - lib/get_user_timeline.rb
52
+ - lib/post_delete_tweets.rb
53
+ - lib/tweettop.rb
54
+ - lib/tweettop/version.rb
55
+ - lib/user.rb
56
+ homepage: https://github.com/CaneNicolas/tweettop
57
+ licenses: []
58
+ metadata:
59
+ allowed_push_host: https://rubygems.org
60
+ homepage_uri: https://github.com/CaneNicolas/tweettop
61
+ source_code_uri: https://github.com/CaneNicolas/tweettop
62
+ changelog_uri: https://github.com/CaneNicolas/tweettop
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 2.6.0
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubygems_version: 3.3.7
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: A simple API wrapper for Twitter API requests.
82
+ test_files: []