zorki 0.1.7 → 0.1.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 469ec1ebba03ba1d24f78b28bbd6f1b939b94db49b1e61e6e47647e129ed64c1
4
- data.tar.gz: 96655c2182ac16467e581be7965f5588d59f4ea0c181085d5a5c1f7575882b02
3
+ metadata.gz: 1eadd7ea03af064623b2e0a3deebc32bfa424ac60aab4713b61e3db94c10ee66
4
+ data.tar.gz: c4cd5d7bb8148eb23fb7d5b80f08f9118a9b39f717ca395a38b1abca34a7ce70
5
5
  SHA512:
6
- metadata.gz: ec36d4c67c01d9a1198d3916b28f5b4fbc87f4f084ee732a15d268027d6ad164540ea87686ecd0548145d0a85cb3d0028f74e6ddd1d228d291cae78609b655f4
7
- data.tar.gz: cf1662ba6bef2b0d3cf5eeb2d879efb5f69efa265268ccf4b6b6156b1b6f440a29a4cbaf2c7dd3f76a4b25a3c1f89d1b9fd384c953cea345169ed0061afbfd54
6
+ metadata.gz: dcfc9a4129cf62063c34461cfb1ee119ee702a64ed892b10909ddacb4cae544e7875eed7a53355db60c67f590292be951cd515d516b75456aae281a29ea3cbc5
7
+ data.tar.gz: feb1ca4d372217487c02311241ae9c4379eacc82336cc91e48c7f80ba68bef3538a14b0f17fb77e254d68203c77d4dcba9559b832c6dd9eda4879426a0e19c83
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zorki (0.1.6)
4
+ zorki (0.1.8)
5
5
  apparition
6
6
  capybara
7
7
  oj
@@ -59,6 +59,9 @@ GEM
59
59
  connection_pool (2.4.1)
60
60
  crass (1.0.6)
61
61
  curb (1.0.5)
62
+ debug (1.8.0)
63
+ irb (>= 1.5.0)
64
+ reline (>= 0.3.1)
62
65
  dotenv (2.7.6)
63
66
  drb (2.1.1)
64
67
  ruby2_keywords
@@ -162,9 +165,9 @@ GEM
162
165
  ruby-progressbar (1.13.0)
163
166
  ruby2_keywords (0.0.5)
164
167
  rubyzip (2.3.2)
165
- selenium-devtools (0.119.0)
168
+ selenium-devtools (0.120.0)
166
169
  selenium-webdriver (~> 4.2)
167
- selenium-webdriver (4.15.0)
170
+ selenium-webdriver (4.16.0)
168
171
  rexml (~> 3.2, >= 3.2.5)
169
172
  rubyzip (>= 1.2.2, < 3.0)
170
173
  websocket (~> 1.0)
@@ -189,6 +192,7 @@ PLATFORMS
189
192
 
190
193
  DEPENDENCIES
191
194
  curb (~> 1.0, >= 1.0.5)
195
+ debug
192
196
  dotenv (~> 2.7.6)
193
197
  minitest (~> 5.0)
194
198
  rack (= 3.0.8)
@@ -97,7 +97,6 @@ module Zorki
97
97
 
98
98
  # This has to run last since it switches pages
99
99
  user = User.lookup([username]).first
100
- page.quit
101
100
 
102
101
  {
103
102
  images: images,
@@ -114,27 +114,32 @@ module Zorki
114
114
  # e.attributes.has_key?("type") && e.attributes["type"].value == "application/ld+json"
115
115
  # end
116
116
 
117
- elements = doc.search("script").map do |element|
118
- element_json = nil
117
+ elements = doc.search("script").filter_map do |element|
118
+ parsed_element_json = nil
119
119
  begin
120
- element_json = JSON.parse(element)
120
+ element_json = JSON.parse(element.text)
121
121
 
122
- element_json = element_json["require"].first.last.first["__bbox"]["require"].first.last.last["__bbox"]["result"]["data"]["xdt_api__v1__media__shortcode__web_info"]
123
- rescue StandardError => e
122
+ parsed_element_json = element_json["require"].first.last.first["__bbox"]["require"].first.last.last["__bbox"]["result"]["data"]["xdt_api__v1__media__shortcode__web_info"]
123
+ rescue StandardError
124
124
  next
125
125
  end
126
126
 
127
- element_json
128
- end.compact
127
+ parsed_element_json
128
+ end
129
129
 
130
130
  if elements&.empty?
131
- raise ContentUnavailableError
131
+ raise ContentUnavailableError.new("Cannot find anything", additional_data: { page_source: page.driver.browser.page_source, elements: elements })
132
132
  end
133
+
133
134
  return elements
134
135
  end
135
136
 
136
- raise ContentUnavailableError if response_body.nil?
137
+ raise ContentUnavailableError.new("Response body nil") if response_body.nil?
137
138
  Oj.load(response_body)
139
+ ensure
140
+ page.quit
141
+ # TRY THIS TO MAKE SURE CHROME GETS CLOSED?
142
+ # We may also want to not do this and make sure the same browser is reused instead for cookie purposes
138
143
  end
139
144
 
140
145
  private
@@ -167,7 +172,7 @@ module Zorki
167
172
 
168
173
  def login
169
174
  # Reset the sessions so that there's nothing laying around
170
- page.quit
175
+ # page.driver.browser.close
171
176
 
172
177
  # Check if we're on a Instagram page already, if not visit it.
173
178
  unless page.driver.browser.current_url.include? "instagram.com"
@@ -242,6 +247,15 @@ module Zorki
242
247
  # Multiply everything and insure we get an integer back
243
248
  (number * multiplier).to_i
244
249
  end
250
+
251
+ # def reset_window
252
+ # old_handle = page.driver.browser.window_handle
253
+ # page.driver.browser.switch_to.new_window(:window)
254
+ # new_handle = page.driver.browser.window_handle
255
+ # page.driver.browser.switch_to.window(old_handle)
256
+ # page.driver.browser.close
257
+ # page.driver.browser.switch_to.window(new_handle)
258
+ # end
245
259
  end
246
260
  end
247
261
 
@@ -21,6 +21,10 @@ module Zorki
21
21
  graphql_script = get_content_of_subpage_from_url("https://instagram.com/#{username}/", "?username=")
22
22
  graphql_script = graphql_script.first if graphql_script.class == Array
23
23
 
24
+ if graphql_script.nil?
25
+ graphql_script = get_content_of_subpage_from_url("https://instagram.com/#{username}/", "web_profile_info")
26
+ end
27
+
24
28
  if graphql_script.has_key?("author") && !graphql_script["author"].nil?
25
29
  user = graphql_script["author"]
26
30
 
data/lib/zorki/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Zorki
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.9"
5
5
  end
data/lib/zorki.rb CHANGED
@@ -20,8 +20,15 @@ module Zorki
20
20
  end
21
21
 
22
22
  class ContentUnavailableError < Error
23
- def initialize(msg = "Zorki could not find content requested")
24
- super
23
+ attr_reader :additional_data
24
+
25
+ def initialize(msg = "Zorki could not find content requested", additional_data: {})
26
+ super(msg)
27
+ @additional_data = additional_data
28
+ end
29
+
30
+ def to_honeybadger_context
31
+ additional_data
25
32
  end
26
33
  end
27
34
 
data/zorki.gemspec CHANGED
@@ -29,8 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- # Uncomment to register a new dependency of your gem
33
- # spec.add_dependency "example-gem", "~> 1.0"
34
32
  spec.add_dependency "capybara" # For scraping and running browsers
35
33
  spec.add_dependency "apparition" # A Chrome driver for Capybara
36
34
  spec.add_dependency "typhoeus" # For making API requests
@@ -38,6 +36,8 @@ Gem::Specification.new do |spec|
38
36
  spec.add_dependency "selenium-webdriver" # Webdriver selenium
39
37
  spec.add_dependency "selenium-devtools" # Allow us to intercept requests
40
38
 
39
+ spec.add_development_dependency "debug"
40
+
41
41
  # For more information and examples about making a new gem, checkout our
42
42
  # guide at: https://bundler.io/guides/creating_gem.html
43
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zorki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Guess
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-05 00:00:00.000000000 Z
11
+ date: 2024-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: debug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description:
98
112
  email:
99
113
  - cguess@gmail.com