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 +7 -0
- data/lib/get_follow.rb +70 -0
- data/lib/get_tweets.rb +59 -0
- data/lib/get_user.rb +96 -0
- data/lib/get_user_timeline.rb +35 -0
- data/lib/post_delete_tweets.rb +55 -0
- data/lib/tweettop/version.rb +5 -0
- data/lib/tweettop.rb +3 -0
- data/lib/user.rb +30 -0
- metadata +82 -0
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
|
data/lib/tweettop.rb
ADDED
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: []
|