filmweb_api 0.1.1.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 985dfe043d8a07a2afe3e09fbe4de3eba74645859c31b23c4254734fd9bad13a
4
+ data.tar.gz: f816c8312caedfe67f52d1a59d02c1a7796f23a8b53daf011717336dfc107bee
5
+ SHA512:
6
+ metadata.gz: a4974cb74ff4e5868d5010910b260b442b83bf14a62f138a9fa6a8f65b398829325e2dab481ea3acebc507d0f71c403eedc758a28d7a80d250ad05ecdf87dfaa
7
+ data.tar.gz: 7b65f5c5d9c8741a2eecfd74a28eaf653e585fa5de587f02f7a1e01db695a6688bf5772aed3aa5e7d67c5ddb0a9903681d26099f9734710ca16d9afa79f5d083
@@ -0,0 +1,32 @@
1
+ require 'csv'
2
+ require 'active_support/all'
3
+ require 'filmweb_api/method_handlers/get_film_info_full_handler'
4
+
5
+ class FilmwebApi
6
+ attr_reader :method, :attributes
7
+
8
+ def initialize(method:, **attributes)
9
+ @method = method
10
+ @attributes = attributes
11
+ end
12
+
13
+ def get
14
+ raise ArgumentError.new("Passed method not supported") unless method_defined?
15
+ raise ArgumentError.new("You need to pass all required attributes for that method") unless correct_attributes_for_method?
16
+ method_handler.new(attributes.slice(*method_handler::REQUEST_ATTRIBUTES)).call
17
+ end
18
+
19
+ private
20
+
21
+ def method_defined?
22
+ defined?(method_handler) == "method"
23
+ end
24
+
25
+ def correct_attributes_for_method?
26
+ method_handler::REQUEST_ATTRIBUTES.all? { |sym| attributes.key?(sym) }
27
+ end
28
+
29
+ def method_handler
30
+ "#{method.slice(0,1).capitalize + method.slice(1..-1)}Handler".constantize
31
+ end
32
+ end
@@ -0,0 +1,54 @@
1
+ require 'filmweb_api/services/make_filmweb_request'
2
+
3
+ class GetFilmInfoFullHandler
4
+ REQUEST_ATTRIBUTES = [
5
+ :movie_id
6
+ ].freeze
7
+
8
+ RESPONSE_KEYS = [
9
+ :title,
10
+ :originalTitle,
11
+ :avgRate,
12
+ :votesCount,
13
+ :genres,
14
+ :year,
15
+ :duration,
16
+ :commentsCount,
17
+ :forumUrl,
18
+ :hasReview,
19
+ :hasDescription,
20
+ :imagePath,
21
+ :video,
22
+ :premiereWorld,
23
+ :premiereCountry,
24
+ :filmType,
25
+ :seasonsCount,
26
+ :episodesCount,
27
+ :countriesString,
28
+ :desciption
29
+ ].freeze
30
+
31
+ private_constant :RESPONSE_KEYS
32
+
33
+ attr_reader :attributes, :movie_id
34
+
35
+ def initialize(**attributes)
36
+ @attributes = attributes
37
+ @movie_id = attributes[:movie_id]
38
+ end
39
+
40
+ def call
41
+ raise ArgumentError.new("You need to pass all required attributes for that method") unless all_required_attributes?
42
+ Hash[RESPONSE_KEYS.zip(filmweb_response)]
43
+ end
44
+
45
+ private
46
+
47
+ def all_required_attributes?
48
+ REQUEST_ATTRIBUTES.all? { |sym| attributes.key?(sym) }
49
+ end
50
+
51
+ def filmweb_response
52
+ @filmweb_response ||= MakeFilmwebRequest.new(method: "getFilmInfoFull", movie_id: movie_id).call
53
+ end
54
+ end
@@ -0,0 +1,57 @@
1
+ require 'digest/md5'
2
+ require 'json'
3
+ require 'rest-client'
4
+
5
+ class MakeFilmwebRequest
6
+ HEADERS = {
7
+ content_type: 'application/json',
8
+ accept: 'application/json',
9
+ user_agent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
10
+ }.freeze
11
+ API_VERSION = "1.0".freeze
12
+ API_URL = "https://ssl.filmweb.pl/api?".freeze
13
+ API_KEY = "qjcGhW2JnvGT9dfCt3uT_jozR3s".freeze
14
+ APP_PLATFORM = "android".freeze
15
+
16
+ private_constant :HEADERS, :API_VERSION, :API_KEY, :API_URL, :APP_PLATFORM
17
+
18
+ attr_reader :method, :attribute_values
19
+
20
+ def initialize(method:, **attributes)
21
+ @method = method
22
+ @attribute_values = attributes.values.join(", ")
23
+ end
24
+
25
+ def call
26
+ cleaned_response_body
27
+ end
28
+
29
+ private
30
+
31
+ def request_params
32
+ {
33
+ version: API_VERSION,
34
+ appId: APP_PLATFORM,
35
+ methods: "#{method} [#{attribute_values}]\\n",
36
+ signature: generate_signature
37
+ }
38
+ end
39
+
40
+ def cleaned_response_body
41
+ @cleaned_response_body = brackets_data_from_response.parse_csv
42
+ end
43
+
44
+ def brackets_data_from_response
45
+ raise ActionController::RoutingError, 'Not Found' unless api_response_body[/\[.*?\]/].present?
46
+ api_response_body[/\[.*?\]/].gsub!('[', '').gsub!(']', '').gsub!("null", "")
47
+ end
48
+
49
+ def generate_signature
50
+ action_request = method + " [#{attribute_values}]" + "\\n" + APP_PLATFORM + API_KEY
51
+ API_VERSION + "," + Digest::MD5.hexdigest(action_request)
52
+ end
53
+
54
+ def api_response_body
55
+ @api_response_body ||= RestClient.get(API_URL, params: request_params, headers: HEADERS).body
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filmweb_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Damian Domzalski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.2'
55
+ description: Simple way to get data from filmweb
56
+ email: contact@damiandomzalski.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/filmweb_api.rb
62
+ - lib/filmweb_api/method_handlers/get_film_info_full_handler.rb
63
+ - lib/filmweb_api/services/make_filmweb_request.rb
64
+ homepage: https://github.com/damiandomzalski/filmweb_api_rails
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubygems_version: 3.0.2
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Unofficial Filmweb api client
87
+ test_files: []