NAME
WebService::Nestoria::Search - Perl interface to the Nestoria Search public API.
VERSION
version 1.022001
SYNOPSIS
WebService::Nestoria::Search provides a Perl interface to the public API of Nestoria, a vertical search engine for property listings.
WebService::Nestoria::Search is currently written to be used with v1.22 of the Nestoria API.
Functions and documentation are split over WebService::Nestoria::Search, WebService::Nestoria::Search::Request, WebService::Nestoria::Search::Response and WeebService::Nestoria::Search::Result. However you need only ever use WebService::Nestoria::Search, and the others will be used as necessary.
A Request object stores the parameters of the request, a Response object stores the data retrieved from the API (in JSON and Perl hashref formats), and a Result represents an individual listing.
Parameters
The possible parameters and their defaults are as follows:
country (default: 'uk')
warnings (default: 1)
action (default: 'search_listings')
version
encoding (default: 'json')
pretty (default: 0)
number_of_results
page
place_name
south_west
north_east
centre_point
radius
listing_type
property_type
price_max
price_min
bedroom_max
bedroom_min
bathroom_max
bathroom_min
room_max
room_min
size_max
size_min
sort
keywords
keywords_exclude
If parameters are passed to new
they are used as the defaults for all calls to the API. Otherwise they can be passed to the querying functions (eg. query
) as per-search parameters.
You should never have to set the 'action' parameter yourself, it is implied by the method you choose to use to run the query.
Simple Example
use WebService::Nestoria::Search;
my $NS = WebService::Nestoria::Search->new(
place_name => 'soho',
listing_type => 'rent',
property_type => 'flat',
price_max => '500',
number_of_results => '10',
);
my @results = $NS->results(
keywords => 'garden,hot_tub,mews',
keywords_exclude => 'cottage,wood_floor'
);
foreach my $result (@results) {
print $result->get_title, "\n";
}
@listings
is an array of WebService::Nestoria::Search::Result objects.
Using the Request object
my $request = $NS->request;
print "Will fetch: ", $request->url, "\n";
my $response = $request->fetch;
Using the Response object
my $response = $NS->query;
if ($response->status_code == 200) {
print "Success! Got ", $response->count, " results\n";
}
print "Raw JSON\n", $response->get_json, "\n";
while (my $result = $response->next_result) {
print $result->get_thumb_url, "\n";
}
Using a bounding box
my @bound_results = $ns->results('south_west' => '51.473685,-0.148315', 'north_east' => '50.473685,-0.248315');
foreach my $result (@bound_results) {
print $result->get_title, "\n";
}
FUNCTIONS
new
Creates a WebService::Nestoria::Search object. On error sets $@
and returns undef
.
If given 'request' parameters (eg. place_name, listing_type) these become defaults for all calls to the API.
my %args = (warnings => 0, listing_type => 'rent', place_name => 'soho');
my $NS = WebService::Nestoria::Search->new(%args);
request
Creates a WebService::Nestoria::Search::Request object. On error sets $@
and returns undef
my $request = WebService::Nestoria::Search->request(%args);
query
Queries the API and returns a WebService::Nestoria::Search::Response object. On error, sets $@
and returns undef
.
my $response = $NS->query(%args);
This is a shortcut for
my $request = $NS->request(%args);
my $response = $request->fetch;
results
Returns an array of WebService::Nestoria::Search::Result objects. On error, sets $@
and returns undef
.
my @results = $NS->results(%args);
This is a shortcut for
my $request = $NS->request(%args);
my $response = $request->fetch;
my @results = $response->results;
test_connection
Uses the API feature 'action=echo' to test the connection.
Returns 1 if the connection is successful and 0 otherwise.
unless ($NS->test_connection) {
die "Cannot establish connection with Nestoria API\n";
}
keywords
Uses the API feature 'action=keywords' to return a list of valid keywords. A current list of keywords can be found at the below URL, but do not hardcode the list of keywords in your code as it is occasionally subject to change.
my @keywords = $NS->keywords;
Taken from http://www.nestoria.co.uk/help/api-tech.
metadata
Uses the API feature 'action=metadata' to return metadata about the listings. Returns a WebService::Nestoria::Search::MetadataResponse object with average house, flat and property prices aggregated monthly and quarterly.
my $metadata_response = WebService::Nestoria::Search->metadata(%args);
last_request_uri
Returns a URI object representing the URL that was last fetched by WebService::Nestoria::Search::Request.
last_request_url
Returns the URL that was last fetched by WebService::Nestoria::Search::Request.
Warnings
Warnings is true by default, and means that errors are output to STDERR as well as being returned via $@. This can be turned off either on the use
line
use WebService::Nestoria::Search Warnings => 0;
or when calling new
my $NS = WebService::Nestoria::Search->new(Warnings => 0);
Country
Country is an optional parameter which defaults to 'uk'. It affects the URL which is used for fetching results.
Currently the available countries are:
br - Brazil
de - Germany
es - Spain
fr - France
in - India
it - Italy
uk - United Kingdom
Australia (au) supports the metadata requests but not listings requests
Non-OO
It is possible to run WebService::Nestoria::Search functions without creating an object. However, no functions are exported (by default or otherwise) so the full name must be used.
my @results = WebService::Nestoria::Search->results(%args);
Copyright
Copyright (C) 2014 Lokku Ltd.
Author
Alex Balhatchet (alex@lokku.com)
Patches supplied by Yoav Felberbaum, Alistair Francis, Ed Freyfogle
Acknowledgements
A lot of the ideas (and yes, very occasionally entire functions) for these modules were borrowed from Jeffrey Friedl's Yahoo::Search.
This module would not exist without the public API available from Nestoria (http://www.nestoria.co.uk/help/api.)