grammer 0.1.0.edge
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/grammer/ig_service.rb +18 -0
- data/lib/grammer/macros.rb +44 -0
- data/lib/grammer/node.rb +21 -0
- data/lib/grammer/version.rb +17 -0
- data/lib/grammer.rb +11 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3186086c6b4c56b0aa46f5ea3578324783750d01
|
4
|
+
data.tar.gz: 41e4c66758aa2caad094bba82fa83b4663f20cf0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 518755629c23e64dbe0c5e53559c6d2586fa8303018fce20c77af60cb31b2496bec74e9cd5fdfbf8b23d2a8db8572bacea250c3972e3dc507e2ef7a426b2587a
|
7
|
+
data.tar.gz: 7c8324ef8481fa9c9caa3780dd23defc587d6fc7b64b15a738ec99f3ced38834f172c3a59910e81b7ce60627edfd2f071e07975c94f56f25faf612fdcb0e11ef
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Grammer
|
4
|
+
# Handles Ig Requests
|
5
|
+
class IgService
|
6
|
+
include HTTParty
|
7
|
+
base_uri 'https://www.instagram.com'
|
8
|
+
|
9
|
+
def node(username)
|
10
|
+
page = self.class.get("/#{username}")
|
11
|
+
json = Nokogiri.parse(page)
|
12
|
+
.at('body script')
|
13
|
+
.text.match(/({.*})/)[1]
|
14
|
+
JSON.parse(json)
|
15
|
+
.dig('entry_data', 'ProfilePage', 0, 'graphql', 'user') || {}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Adds class macros to top level module
|
4
|
+
module Grammer
|
5
|
+
def self.included(klass)
|
6
|
+
klass.extend(Macros)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Defines class macros
|
10
|
+
module Macros
|
11
|
+
def get_or_set_const(module_name)
|
12
|
+
const_set(module_name, Module.new) unless const_defined?(module_name)
|
13
|
+
const_get(module_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def grammed_by(method, options = {})
|
17
|
+
mod = get_or_set_const(:"GammerMod#{object_id}")
|
18
|
+
mod.class_eval do
|
19
|
+
target_attribute = options[:on]
|
20
|
+
define_method(target_attribute) do
|
21
|
+
username = send(method)
|
22
|
+
instance_var = "@#{target_attribute}"
|
23
|
+
|
24
|
+
instance_var_value = instance_variable_get(instance_var)
|
25
|
+
unless instance_var_value
|
26
|
+
instance_variable_set(
|
27
|
+
instance_var,
|
28
|
+
Node.new(username, service: options[:service])
|
29
|
+
)
|
30
|
+
end
|
31
|
+
instance_var_value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
prepend mod
|
35
|
+
end
|
36
|
+
|
37
|
+
def grammed_by_class_method(*methods)
|
38
|
+
singleton_class.class_eval do
|
39
|
+
include Grammer
|
40
|
+
grammed_by(*methods)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/grammer/node.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Grammer
|
4
|
+
# Represents Instagram nodes (Users)
|
5
|
+
class Node
|
6
|
+
attr_reader :data, :service
|
7
|
+
|
8
|
+
def initialize(username, attr = {})
|
9
|
+
@service = attr[:service] || IgService.new
|
10
|
+
@data = service.node(username)
|
11
|
+
end
|
12
|
+
|
13
|
+
def biography
|
14
|
+
@data.dig('biography')
|
15
|
+
end
|
16
|
+
|
17
|
+
def followers_count
|
18
|
+
@data.dig('edge_followed_by', 'count')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Grammer
|
4
|
+
# Describes version for gemspec
|
5
|
+
module VERSION
|
6
|
+
MAJOR = 0
|
7
|
+
MINOR = 1
|
8
|
+
PATCH = 0
|
9
|
+
BUILD = 'edge'
|
10
|
+
|
11
|
+
STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
|
12
|
+
|
13
|
+
def self.version
|
14
|
+
STRING
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/grammer.rb
ADDED
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grammer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.edge
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Caio Andrade
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.16'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.16.3
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.16'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.16.3
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: nokogiri
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.8'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.8.2
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.8'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.8.2
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: pry-byebug
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.6'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '3.6'
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: reek
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '4.8'
|
74
|
+
type: :development
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '4.8'
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rspec
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '3.0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '3.0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.62.0
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 0.62.0
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: simplecov
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 0.16.1
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.16.1
|
123
|
+
description: Provides a simple way to connect objects to the info on a Instagram account.
|
124
|
+
email: caioertai@gmail.com
|
125
|
+
executables: []
|
126
|
+
extensions: []
|
127
|
+
extra_rdoc_files: []
|
128
|
+
files:
|
129
|
+
- lib/grammer.rb
|
130
|
+
- lib/grammer/ig_service.rb
|
131
|
+
- lib/grammer/macros.rb
|
132
|
+
- lib/grammer/node.rb
|
133
|
+
- lib/grammer/version.rb
|
134
|
+
homepage: http://rubygems.org/gems/grammer
|
135
|
+
licenses:
|
136
|
+
- MIT
|
137
|
+
metadata: {}
|
138
|
+
post_install_message:
|
139
|
+
rdoc_options: []
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: 1.3.1
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 2.6.14.1
|
155
|
+
signing_key:
|
156
|
+
specification_version: 4
|
157
|
+
summary: Instragram basic info scraping handler.
|
158
|
+
test_files: []
|