followers_number 0.0.1

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: 73d7619b12e30e16394c86dd9844092c8f677360f9d39e85796241dd31dcf36d
4
+ data.tar.gz: fce06805d58f83f19a0d9b4f3a8c75e022b67cf93220ce2375969c704032e827
5
+ SHA512:
6
+ metadata.gz: d05b513038c3a3f58fa445cb0c2439b45ba01af7199204c04faa0196f89d6c54aa8c739380b29f5d659693a1c6980398ec048b204a487e3472d8eb8a5cec5760
7
+ data.tar.gz: bd65b81adf091b3ff3c41ce32b365d241a64d3f2f91545f4fd81676c3a0f5ff17c75d74b734600e116778dde60cd6b03243ecfb7befa299dc588510875ed4aba
@@ -0,0 +1,14 @@
1
+ module FollowersNumber
2
+ class Parser
3
+ MAPPING = {
4
+ 'twitter.com' => FollowersNumber::Parsers::Twitter
5
+ }
6
+
7
+ def self.call(profile_url, response)
8
+ html = ::Nokogiri::HTML(response.body)
9
+ mapper = MAPPING[URI.parse(profile_url).host]
10
+
11
+ mapper.parse(html)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module FollowersNumber
2
+ module Parsers
3
+ class Twitter
4
+ def self.parse(html)
5
+ node = html.at("li.ProfileNav-item--followers span.ProfileNav-value")
6
+ node.nil? ? 0 : node["data-count"].to_i
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module FollowersNumber
2
+ class Request
3
+ def self.get(profile_url)
4
+ ::RestClient.get(profile_url)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ module FollowersNumber
2
+ class Validator
3
+ class InvalidProfileURL < StandardError; end
4
+
5
+ NETWORKS = %w[twitter.com]
6
+
7
+ def self.validate!(profile_url)
8
+ unless NETWORKS.include?(URI.parse(profile_url.to_s.downcase).host)
9
+ raise InvalidProfileURL, profile_url
10
+ end
11
+
12
+ true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module FollowersNumber
2
+ module Version
3
+ module_function
4
+
5
+ # Gem current version
6
+ #
7
+ # @return [String]
8
+ def to_s
9
+ "0.0.1"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'followers_number/parsers/twitter'
2
+ require_relative 'followers_number/request'
3
+ require_relative 'followers_number/validator'
4
+ require_relative 'followers_number/parser'
5
+
6
+ require 'rest-client'
7
+ require 'nokogiri'
8
+
9
+ module FollowersNumber
10
+ class << self
11
+ def for(profile_url)
12
+ ::FollowersNumber::Validator.validate!(profile_url)
13
+
14
+ response = ::FollowersNumber::Request.get(profile_url)
15
+ ::FollowersNumber::Parser.call(profile_url, response)
16
+ end
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: followers_number
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Paweł Dąbrowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-08 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.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.7.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.7.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rest-client
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: nokogiri
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ description: Get the followers number for the given social media profile
62
+ email: dziamber@gmail.com
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - lib/followers_number.rb
68
+ - lib/followers_number/parser.rb
69
+ - lib/followers_number/parsers/twitter.rb
70
+ - lib/followers_number/request.rb
71
+ - lib/followers_number/validator.rb
72
+ - lib/followers_number/version.rb
73
+ homepage:
74
+ licenses: []
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.7.6
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Get the followers number for the given social media profile
96
+ test_files: []