freefeed 0.1.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +2 -4
- data/bin/purge_samples +47 -0
- data/freefeed.gemspec +4 -3
- data/lib/freefeed/authenticated_request.rb +13 -0
- data/lib/freefeed/client.rb +8 -3
- data/lib/freefeed/constants.rb +2 -0
- data/lib/freefeed/request.rb +1 -10
- data/lib/freefeed/utils.rb +5 -8
- data/lib/freefeed/v1/attachments.rb +10 -2
- data/lib/freefeed/v1/comments.rb +21 -0
- data/lib/freefeed/v1/posts.rb +55 -0
- data/lib/freefeed/v2/posts.rb +19 -0
- data/lib/freefeed/v2/timelines.rb +23 -0
- data/lib/freefeed/v2/users.rb +21 -1
- data/lib/freefeed/version.rb +1 -1
- metadata +24 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9457203e8f03e0ca98ef13de587bf1e59d479870379ccfe4a37aeadfb11ba81a
|
4
|
+
data.tar.gz: 183c2c1ec58354221199334845008b8dcda208e3e8dd3d14863d78c9a7b67af7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f6a82928de9fb559a30f7abf35e61538e0f3f7fb3ea7146cd257cff3cbf58372ecb5595bc176cf5a55b76105ff189fcbf6ab6451f518043a0070dff8bfd7f72
|
7
|
+
data.tar.gz: 197f108c5496124e4cb005cafe3560adfdf4719d68f60d413fc38c70d4aeaa4bcadb196a99a39d2a5b75b8bde248ffa1ac1ccd5ff3a82958f4a5d61ce7490125
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# Freefeed
|
1
|
+
# Freefeed::Client
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
[Freefeed](https://freefeed.net) API wrapper extracted from the [Feeder](https://frf.im) project.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
data/bin/purge_samples
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "pry"
|
5
|
+
|
6
|
+
PATH = File.join(File.expand_path("..", __dir__), "spec/fixtures/files")
|
7
|
+
|
8
|
+
# Object fields to replace with generic values:
|
9
|
+
#
|
10
|
+
# users
|
11
|
+
# username
|
12
|
+
# screenName
|
13
|
+
# description
|
14
|
+
#
|
15
|
+
# posts
|
16
|
+
# body
|
17
|
+
#
|
18
|
+
# comments
|
19
|
+
# body
|
20
|
+
|
21
|
+
|
22
|
+
def purge_user(data, index)
|
23
|
+
data["username"] = "user#{index}"
|
24
|
+
data["screenName"] = "User ##{index}"
|
25
|
+
data["description"] = "Sample description"
|
26
|
+
end
|
27
|
+
|
28
|
+
def purge_content(data)
|
29
|
+
data["body"] = "Sample content"
|
30
|
+
end
|
31
|
+
|
32
|
+
Dir.glob("#{PATH}/**/*.json").each do |file_name|
|
33
|
+
backup_copy = "#{file_name}.bak"
|
34
|
+
FileUtils.rm_rf(backup_copy)
|
35
|
+
FileUtils.mv(file_name, backup_copy)
|
36
|
+
|
37
|
+
data = JSON.parse(File.read(backup_copy))
|
38
|
+
next unless data.is_a?(Hash)
|
39
|
+
|
40
|
+
(data["users"] || []).each_with_index { |user, index| purge_user(user, index) }
|
41
|
+
(data["admins"] || []).each_with_index { |user, index| purge_user(user, index) }
|
42
|
+
|
43
|
+
(data["posts"] || []).each_with_index { |entity| purge_content(entity) }
|
44
|
+
(data["comments"] || []).each_with_index { |entity| purge_content(entity) }
|
45
|
+
|
46
|
+
File.open(file_name, "wt").write(JSON.pretty_generate(data))
|
47
|
+
end
|
data/freefeed.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ["alex.musayev@gmail.com"].freeze
|
12
12
|
|
13
13
|
spec.summary = "Freefeed API wrapper"
|
14
|
-
spec.description =
|
14
|
+
spec.description = spec.summary
|
15
15
|
spec.homepage = "https://github.com/dreikanter/freefeed"
|
16
16
|
spec.license = "MIT"
|
17
17
|
|
@@ -35,8 +35,9 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
36
36
|
spec.require_paths = ["lib"]
|
37
37
|
|
38
|
-
spec.add_dependency "dry-initializer", "
|
39
|
-
spec.add_dependency "http", "
|
38
|
+
spec.add_dependency "dry-initializer", "~> 3.0.2"
|
39
|
+
spec.add_dependency "http", "~> 4.2.0"
|
40
|
+
spec.add_dependency "mimemagic", "~> 0.3.3"
|
40
41
|
|
41
42
|
spec.add_development_dependency "bundler", "~> 2.0"
|
42
43
|
spec.add_development_dependency "pry", "~> 0.12.2"
|
data/lib/freefeed/client.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "logger"
|
4
3
|
require "dry-initializer"
|
5
4
|
require "freefeed/constants"
|
6
5
|
require "freefeed/v1/attachments"
|
7
|
-
require "freefeed/
|
6
|
+
require "freefeed/v1/comments"
|
7
|
+
require "freefeed/v1/posts"
|
8
|
+
require "freefeed/v2/posts"
|
8
9
|
require "freefeed/v2/timelines"
|
10
|
+
require "freefeed/v2/users"
|
9
11
|
require "freefeed/version"
|
10
12
|
|
11
13
|
module Freefeed
|
@@ -13,8 +15,11 @@ module Freefeed
|
|
13
15
|
extend Dry::Initializer
|
14
16
|
|
15
17
|
include Freefeed::V1::Attachments
|
16
|
-
include Freefeed::
|
18
|
+
include Freefeed::V1::Comments
|
19
|
+
include Freefeed::V1::Posts
|
20
|
+
include Freefeed::V2::Posts
|
17
21
|
include Freefeed::V2::Timelines
|
22
|
+
include Freefeed::V2::Users
|
18
23
|
|
19
24
|
option :token
|
20
25
|
option :logger, default: -> { Freefeed::LOGGER }
|
data/lib/freefeed/constants.rb
CHANGED
data/lib/freefeed/request.rb
CHANGED
@@ -30,25 +30,16 @@ module Freefeed
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def request_params
|
33
|
-
options
|
33
|
+
options.slice(:json, :form, :params, :body)
|
34
34
|
end
|
35
35
|
|
36
36
|
def headers
|
37
|
-
return common_headers unless authenticate?
|
38
|
-
common_headers.merge(authorization: "Bearer #{client.token}")
|
39
|
-
end
|
40
|
-
|
41
|
-
def common_headers
|
42
37
|
{
|
43
38
|
accept: "*/*",
|
44
39
|
user_agent: "#{Freefeed::Client.name}/#{Freefeed::VERSION}"
|
45
40
|
}
|
46
41
|
end
|
47
42
|
|
48
|
-
def authenticate?
|
49
|
-
!!(options[:auth] && client.token)
|
50
|
-
end
|
51
|
-
|
52
43
|
def user_agent
|
53
44
|
"#{Freefeed::Client.name}/#{Freefeed::VERSION}"
|
54
45
|
end
|
data/lib/freefeed/utils.rb
CHANGED
@@ -1,19 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "freefeed/request"
|
4
|
+
require "freefeed/authenticated_request"
|
5
|
+
|
3
6
|
module Freefeed
|
4
7
|
module Utils
|
5
8
|
def authenticated_request(request_method, path, params = {})
|
6
|
-
|
9
|
+
AuthenticatedRequest.new(self, request_method, path, params).call
|
7
10
|
end
|
8
11
|
|
9
12
|
def request(request_method, path, params = {})
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def perform_request(request_method, path, options)
|
16
|
-
Freefeed::Request.new(self, request_method, path, options).call
|
13
|
+
Request.new(self, request_method, path, params).call
|
17
14
|
end
|
18
15
|
end
|
19
16
|
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "freefeed/
|
3
|
+
require "freefeed/utils"
|
4
|
+
require "mimemagic"
|
4
5
|
|
5
6
|
module Freefeed
|
6
7
|
module V1
|
7
8
|
module Attachments
|
9
|
+
# @param [String, Pathname, IO] source could by a file path
|
10
|
+
# or an IO object
|
8
11
|
def create_attachment(source)
|
9
12
|
options = { form: { file: file(source) } }
|
10
13
|
authenticated_request(:post, "/v1/attachments", options)
|
@@ -13,7 +16,12 @@ module Freefeed
|
|
13
16
|
private
|
14
17
|
|
15
18
|
def file(source)
|
16
|
-
HTTP::FormData::File.new(source, content_type:
|
19
|
+
HTTP::FormData::File.new(source, content_type: content_type(source))
|
20
|
+
end
|
21
|
+
|
22
|
+
def content_type(source)
|
23
|
+
return MimeMagic.by_magic(source) if source.is_a?(IO)
|
24
|
+
MimeMagic.by_path(source.to_s)
|
17
25
|
end
|
18
26
|
end
|
19
27
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "freefeed/utils"
|
4
|
+
|
5
|
+
module Freefeed
|
6
|
+
module V1
|
7
|
+
module Comments
|
8
|
+
def create_comment(comment)
|
9
|
+
authenticated_request(:post, "/v1/comments", json: comment)
|
10
|
+
end
|
11
|
+
|
12
|
+
def update_comment(id, comment)
|
13
|
+
authenticated_request(:put, "/v1/comments/#{id}", json: comment)
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete_comment(id)
|
17
|
+
authenticated_request(:delete, "/v1/comments/#{id}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "freefeed/utils"
|
4
|
+
|
5
|
+
module Freefeed
|
6
|
+
module V1
|
7
|
+
module Posts
|
8
|
+
include Freefeed::Utils
|
9
|
+
|
10
|
+
def create_post(post)
|
11
|
+
authenticated_request(:post, "/v1/posts", json: post)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update_post(id, post)
|
15
|
+
authenticated_request(:put, "/v1/posts/#{id}", json: post)
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete_post(id)
|
19
|
+
authenticated_request(:delete, "/v1/posts/#{id}")
|
20
|
+
end
|
21
|
+
|
22
|
+
def like(id)
|
23
|
+
authenticated_request(:post, "/v1/posts/#{id}/like")
|
24
|
+
end
|
25
|
+
|
26
|
+
def unlike(id)
|
27
|
+
authenticated_request(:post, "/v1/posts/#{id}/unlike")
|
28
|
+
end
|
29
|
+
|
30
|
+
def hide(id)
|
31
|
+
authenticated_request(:post, "/v1/posts/#{id}/hide")
|
32
|
+
end
|
33
|
+
|
34
|
+
def unhide(id)
|
35
|
+
authenticated_request(:post, "/v1/posts/#{id}/unhide")
|
36
|
+
end
|
37
|
+
|
38
|
+
def save(id)
|
39
|
+
authenticated_request(:post, "/v1/posts/#{id}/save")
|
40
|
+
end
|
41
|
+
|
42
|
+
def unsave(id)
|
43
|
+
authenticated_request(:delete, "/v1/posts/#{id}/save")
|
44
|
+
end
|
45
|
+
|
46
|
+
def disable_comments(id)
|
47
|
+
authenticated_request(:post, "/v1/posts/#{id}/disableComments")
|
48
|
+
end
|
49
|
+
|
50
|
+
def enable_comments(id)
|
51
|
+
authenticated_request(:post, "/v1/posts/#{id}/enableComments")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "freefeed/utils"
|
4
|
+
|
5
|
+
module Freefeed
|
6
|
+
module V2
|
7
|
+
module Posts
|
8
|
+
include Freefeed::Utils
|
9
|
+
|
10
|
+
def post(id)
|
11
|
+
authenticated_request(:get, "/v2/posts/#{id}")
|
12
|
+
end
|
13
|
+
|
14
|
+
def post_open_graph(id)
|
15
|
+
authenticated_request(:get, "/v2/posts-opengraph/#{id}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -14,6 +14,29 @@ module Freefeed
|
|
14
14
|
def everything
|
15
15
|
request(:get, "/v2/everything")
|
16
16
|
end
|
17
|
+
|
18
|
+
def own_timeline(filter: nil, offset: 0)
|
19
|
+
request_timeline(filter ? "filter/#{filter}" : "home", offset)
|
20
|
+
end
|
21
|
+
|
22
|
+
def timeline(username, offset: 0)
|
23
|
+
request_timeline(username, offset)
|
24
|
+
end
|
25
|
+
|
26
|
+
def comments_timeline(username, offset: 0)
|
27
|
+
request_timeline("#{username}/comments", offset)
|
28
|
+
end
|
29
|
+
|
30
|
+
def likes_timeline(username, offset: 0)
|
31
|
+
request_timeline("#{username}/likes", offset)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def request_timeline(path, offset)
|
37
|
+
params = offset.positive? ? { json: { offset: offset } } : {}
|
38
|
+
authenticated_request(:get, "/v2/timelines/#{path}", params)
|
39
|
+
end
|
17
40
|
end
|
18
41
|
end
|
19
42
|
end
|
data/lib/freefeed/v2/users.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "freefeed/
|
3
|
+
require "freefeed/utils"
|
4
4
|
|
5
5
|
module Freefeed
|
6
6
|
module V2
|
@@ -8,6 +8,26 @@ module Freefeed
|
|
8
8
|
def whoami
|
9
9
|
authenticated_request(:get, "/v2/users/whoami")
|
10
10
|
end
|
11
|
+
|
12
|
+
def blocked_by_me
|
13
|
+
authenticated_request(:get, "/v2/users/blockedByMe")
|
14
|
+
end
|
15
|
+
|
16
|
+
def unread_directs_number
|
17
|
+
authenticated_request(:get, "/v2/users/getUnreadDirectsNumber")
|
18
|
+
end
|
19
|
+
|
20
|
+
def unread_notifications_number
|
21
|
+
authenticated_request(:get, "/v2/users/getUnreadNotificationsNumber")
|
22
|
+
end
|
23
|
+
|
24
|
+
def mark_all_directs_as_read
|
25
|
+
authenticated_request(:get, "/v2/users/markAllDirectsAsRead")
|
26
|
+
end
|
27
|
+
|
28
|
+
def mark_all_notifications_as_read
|
29
|
+
authenticated_request(:post, "/v2/users/markAllNotificationsAsRead")
|
30
|
+
end
|
11
31
|
end
|
12
32
|
end
|
13
33
|
end
|
data/lib/freefeed/version.rb
CHANGED
metadata
CHANGED
@@ -1,55 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freefeed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Musayev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-initializer
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.0.2
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '4'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.0.2
|
30
|
-
- - "<"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '4'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: http
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - "~>"
|
38
32
|
- !ruby/object:Gem::Version
|
39
33
|
version: 4.2.0
|
40
|
-
- - "<"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '5'
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
|
-
- - "
|
38
|
+
- - "~>"
|
48
39
|
- !ruby/object:Gem::Version
|
49
40
|
version: 4.2.0
|
50
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mimemagic
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
51
53
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
54
|
+
version: 0.3.3
|
53
55
|
- !ruby/object:Gem::Dependency
|
54
56
|
name: bundler
|
55
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,15 +170,20 @@ files:
|
|
168
170
|
- README.md
|
169
171
|
- Rakefile
|
170
172
|
- bin/console
|
173
|
+
- bin/purge_samples
|
171
174
|
- bin/setup
|
172
175
|
- freefeed.gemspec
|
173
176
|
- lib/freefeed.rb
|
177
|
+
- lib/freefeed/authenticated_request.rb
|
174
178
|
- lib/freefeed/client.rb
|
175
179
|
- lib/freefeed/constants.rb
|
176
180
|
- lib/freefeed/error.rb
|
177
181
|
- lib/freefeed/request.rb
|
178
182
|
- lib/freefeed/utils.rb
|
179
183
|
- lib/freefeed/v1/attachments.rb
|
184
|
+
- lib/freefeed/v1/comments.rb
|
185
|
+
- lib/freefeed/v1/posts.rb
|
186
|
+
- lib/freefeed/v2/posts.rb
|
180
187
|
- lib/freefeed/v2/timelines.rb
|
181
188
|
- lib/freefeed/v2/users.rb
|
182
189
|
- lib/freefeed/version.rb
|