Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions lib/outscraper.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# frozen_string_literal: true

require "httparty"
require "cgi"
require "json"

require_relative "outscraper/version"

Expand Down Expand Up @@ -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 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 =
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
2 changes: 1 addition & 1 deletion lib/outscraper/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module Outscraper
VERSION = "0.3.4"
VERSION = "0.3.5"
end