scrapeunblocker 0.3.0 → 0.4.0

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: 4542500ec21bf7ce42e644394bf9302b74399a5447f6f5717e3f6abeaf8e7cb4
4
- data.tar.gz: 92470e75374896eb308d3f7f939f39dcecb210aeaff4fa151aa8b0df8c516a95
3
+ metadata.gz: fbe2fc1ce79fbf6b9293fe17403a6293599bf6cb04fe775d3596537a40fd5acb
4
+ data.tar.gz: 4b9dce4731d710996fe0796766bc67829d1cdd5753e6a812f3fc74796cdf7c48
5
5
  SHA512:
6
- metadata.gz: 672b0d182dc35e5650102171465dadf60f6bd22890a3d000b6e0a82a5e9b137b8857d1fac1231013af24eefd4b782e883db83423fca436b47aec1183af4c6b45
7
- data.tar.gz: 75f9249d01b7d1b6aa6e2ef0c373ec386cee41d5cd7e42fefceff65aa74d4992aaa036067e67f24be0e11e2ee89f705942975a863c8f0dba707cc5bf4f01b1a3
6
+ metadata.gz: bca9218a5cee0b1bff9b9160860cc2d1cdd69e0b115abf3db35d449d005828e1f52099395f9d9ff0072ee4b509155cdc9088690d947a964179a3cb57823fffe2
7
+ data.tar.gz: 14a9b61b2f89d2bd23d2356a7fdc35fe16c075862251173aa29cb2463633705132f19f4f87a8e76e7dd637d7f955f23078151389007c0a6860f8b21bddc6a3a0
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0 (2026-09-16)
4
+
5
+ - Added `southwest.flights(origin:, dest:, depart_date:, ...)` for the new Southwest Airlines plugin (`POST /flights/southwest-quotes`), reached through the new `su.southwest` namespace and mirroring `su.skyscanner`. `origin` and `dest` are IATA airport codes; `depart_date` and the optional `return_date` are `YYYY-MM-DD` (omit `return_date` for a one-way search). Optional `adults` (1-8, default 1), `fare_type` (`"dollars"` default or `"points"`), `proxy_country` (default `"US"`) and `max_attempts` (1-5, default 3). Returns the raw booking / shopping JSON as a Hash.
6
+
7
+ No breaking changes.
8
+
3
9
  ## 0.3.0 (2026-09-08)
4
10
 
5
11
  - Added `tiktok_profile`, `tiktok_video`, `tiktok_hashtag`, `tiktok_search` and `tiktok_comments` for the new TikTok plugin: a creator's exact follower / like / video counts with their newest videos (up to 200), any video or photo post with exact plays, likes, comments, shares, saves and reposts, hashtags, music, play / download URLs, subtitle tracks and an optional transcript, a hashtag's total views and videos with its videos, keyword search in TikTok's own ranking, and the comments of any post. No login.
data/README.md CHANGED
@@ -223,6 +223,25 @@ hotels = su.skyscanner.hotels(destination: "Madrid", checkin: "2026-09-01", chec
223
223
  cars = su.skyscanner.carhire(pickup: "Madrid", pickup_datetime: "2026-09-01T10:00", dropoff_datetime: "2026-09-03T10:00")
224
224
  ```
225
225
 
226
+ ## Southwest plugin
227
+
228
+ Southwest Airlines flight quotes as JSON. `origin` and `dest` are IATA airport codes; omit `return_date` for a one-way search.
229
+
230
+ ```ruby
231
+ flights = su.southwest.flights(
232
+ origin: "DAL", dest: "HOU",
233
+ depart_date: "2026-10-20", return_date: "2026-10-27"
234
+ )
235
+
236
+ # One-way, priced in Rapid Rewards points
237
+ oneway = su.southwest.flights(
238
+ origin: "DAL", dest: "HOU",
239
+ depart_date: "2026-10-20", adults: 2, fare_type: "points"
240
+ )
241
+ ```
242
+
243
+ `adults` is 1-8 (default 1), `fare_type` is `"dollars"` (default) or `"points"`, `proxy_country` defaults to `"US"` and `max_attempts` is 1-5 (default 3). The call returns the raw booking / shopping JSON.
244
+
226
245
  ## Error handling
227
246
 
228
247
  Non-2xx responses raise typed errors, all subclasses of `ScrapeUnblocker::Error`.
@@ -7,6 +7,7 @@ require "json"
7
7
  require_relative "errors"
8
8
  require_relative "parsed_page"
9
9
  require_relative "skyscanner"
10
+ require_relative "southwest"
10
11
  require_relative "version"
11
12
 
12
13
  module ScrapeUnblocker
@@ -22,6 +23,9 @@ module ScrapeUnblocker
22
23
  # @return [Skyscanner] the Skyscanner plugin endpoints
23
24
  attr_reader :skyscanner
24
25
 
26
+ # @return [Southwest] the Southwest Airlines plugin endpoints
27
+ attr_reader :southwest
28
+
25
29
  def initialize(api_key: nil, base_url: DEFAULT_BASE_URL, timeout: 180, max_retries: 2, transport: nil)
26
30
  @api_key = api_key || ENV["SCRAPEUNBLOCKER_KEY"]
27
31
  if @api_key.nil? || @api_key.empty?
@@ -34,6 +38,7 @@ module ScrapeUnblocker
34
38
  @max_retries = max_retries
35
39
  @transport = transport || method(:net_http_transport)
36
40
  @skyscanner = Skyscanner.new(self)
41
+ @southwest = Southwest.new(self)
37
42
  end
38
43
 
39
44
  # Fetch a URL and return the fully rendered HTML.
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ScrapeUnblocker
4
+ # Southwest Airlines plugin endpoints (flights).
5
+ class Southwest
6
+ # @api private
7
+ def initialize(client)
8
+ @client = client
9
+ end
10
+
11
+ # Fetch Southwest Airlines flight quotes and return the raw booking JSON.
12
+ #
13
+ # +origin+ and +dest+ are IATA airport codes (e.g. "DAL", "HOU").
14
+ # +depart_date+ (and the optional +return_date+) are "YYYY-MM-DD"; omit
15
+ # +return_date+ for a one-way search. +adults+ is 1-8. +fare_type+ is
16
+ # "dollars" (default) or "points". +proxy_country+ pins the exit (default
17
+ # "US"). +max_attempts+ is 1-5.
18
+ def flights(origin:, dest:, depart_date:, return_date: nil, adults: 1,
19
+ fare_type: "dollars", proxy_country: "US", max_attempts: 3)
20
+ @client.post_json("/flights/southwest-quotes",
21
+ origin: origin, dest: dest, depart_date: depart_date,
22
+ return_date: return_date, adults: adults,
23
+ fare_type: fare_type, proxy_country: proxy_country,
24
+ max_attempts: max_attempts)
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ScrapeUnblocker
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
@@ -4,6 +4,7 @@ require_relative "scrapeunblocker/version"
4
4
  require_relative "scrapeunblocker/errors"
5
5
  require_relative "scrapeunblocker/parsed_page"
6
6
  require_relative "scrapeunblocker/skyscanner"
7
+ require_relative "scrapeunblocker/southwest"
7
8
  require_relative "scrapeunblocker/client"
8
9
 
9
10
  # Official Ruby client for the ScrapeUnblocker web scraping API.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scrapeunblocker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ScrapeUnblocker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-08 00:00:00.000000000 Z
11
+ date: 2026-09-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: JS-rendered pages that bypass Cloudflare, DataDome, PerimeterX and Akamai,
14
14
  plus Google SERP and Skyscanner flights/hotels/car-hire scraping as JSON.
@@ -26,6 +26,7 @@ files:
26
26
  - lib/scrapeunblocker/errors.rb
27
27
  - lib/scrapeunblocker/parsed_page.rb
28
28
  - lib/scrapeunblocker/skyscanner.rb
29
+ - lib/scrapeunblocker/southwest.rb
29
30
  - lib/scrapeunblocker/version.rb
30
31
  homepage: https://scrapeunblocker.com?utm_source=rubygems&utm_medium=integration&utm_campaign=ruby-sdk
31
32
  licenses: