tweettop 0.1.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: 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: []