From 1895ba355f4f108954acccbab4b5edea3926e96d Mon Sep 17 00:00:00 2001 From: Stepbus Date: Fri, 23 Jan 2026 10:02:15 +0200 Subject: [PATCH 1/2] added new features for new endpoint; bump version --- lib/outscraper.rb | 86 +++++++++++++++++++++++++++++++++++++++ lib/outscraper/version.rb | 2 +- 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/lib/outscraper.rb b/lib/outscraper.rb index ca4dae2..8d04a51 100644 --- a/lib/outscraper.rb +++ b/lib/outscraper.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true require "httparty" +require "cgi" +require "json" require_relative "outscraper/version" @@ -391,5 +393,89 @@ def yellowpages_search(query, location: 'New York, NY', limit: 100, region: nil, webhook: webhook }).parsed_response['data'] end + + def postAPIRequest(path, parameters = {}) + payload = parameters || {} + + response = self.class.post( + path, + headers: { 'Content-Type' => 'application/json' }, + body: payload.to_json + ).parsed_response + + response.is_a?(Hash) && response.key?('data') ? response['data'] : response + end + + def businessesSearch( + filters: {}, + limit: 10, + include_total: false, + cursor: nil, + fields: nil, + async_request: false, + ui: false, + webhook: nil + ) + payload = { + filters: (filters || {}), + limit: limit, + include_total: include_total, + cursor: cursor, + fields: fields ? Array(fields) : nil, + async: async_request, + ui: ui, + webhook: webhook + }.compact + + postAPIRequest('/businesses', payload) + end + + def businessesIterSearch(filters: {}, limit: 10, fields: nil, include_total: false) + cursor = nil + all_items = [] + + loop do + page = businessesSearch( + filters: filters, + limit: limit, + include_total: include_total, + cursor: cursor, + fields: fields, + async_request: false + ) + + items = page.is_a?(Hash) ? (page['items'] || []) : [] + break if !items.is_a?(Array) || items.empty? + + all_items.concat(items) + + has_more = !!(page['has_more']) + next_cursor = page['next_cursor'] + break if !has_more || next_cursor.nil? || next_cursor.to_s.strip.empty? + + cursor = next_cursor.to_s + end + + all_items + end + + def businessesGetDetails(business_id, fields: nil, async_request: false, ui: false, webhook: nil) + raise ArgumentError, 'business_id is required' if business_id.nil? || business_id.to_s.strip.empty? + + fields_param = + if fields.is_a?(Array) + fields.map(&:to_s).join(',') + else + fields + end + + response = self.class.get("/businesses/#{CGI.escape(business_id.to_s)}", query: { + fields: fields_param, + async: async_request, + ui: ui, + webhook: webhook + }.compact).parsed_response + response.is_a?(Hash) && response.key?('data') ? response['data'] : response + end end end diff --git a/lib/outscraper/version.rb b/lib/outscraper/version.rb index 339832d..acd2a77 100644 --- a/lib/outscraper/version.rb +++ b/lib/outscraper/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Outscraper - VERSION = "0.3.4" + VERSION = "0.3.5" end From c88b563d79a8be15e50a4d401852746ef5905d18 Mon Sep 17 00:00:00 2001 From: Stepbus Date: Fri, 23 Jan 2026 11:31:55 +0200 Subject: [PATCH 2/2] renamed method --- lib/outscraper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/outscraper.rb b/lib/outscraper.rb index 8d04a51..e08591f 100644 --- a/lib/outscraper.rb +++ b/lib/outscraper.rb @@ -459,7 +459,7 @@ def businessesIterSearch(filters: {}, limit: 10, fields: nil, include_total: fal all_items end - def businessesGetDetails(business_id, fields: nil, async_request: false, ui: false, webhook: nil) + def businessesGet(business_id, fields: nil, async_request: false, ui: false, webhook: nil) raise ArgumentError, 'business_id is required' if business_id.nil? || business_id.to_s.strip.empty? fields_param =