Edit: Ya me he comprado una casa, así que no lo mantengo.
Xupopter crawlea las páginas más conocidas de compraventa y alquiler de pisos de España.
Listado de Providers que crawlea:
- Pisos.com
- Habitaclia.com
- Fotocasa.es
- Idealista.com
La usabilidad de algunas de dichas páginas deja mucho que desear. Otras pecan de falta de filtros (Estoy harto de descartar casas en venta con regalo [a.k.a usufructo] incluído).
composer require tetreum/xupopter dev-master
Perfecto, arréglalo y haz PR.
Xupopter exige un mínimo de características (ver más abajo) a crawlear de la casa, como son imágenes y m2. Los resultados que no cumplan con este mínimo, serán descartados.
House object:
- title
- description
- price
- url
- meters
- images
-- Optional parameters:
- hasAirConditioner
- hasElevator
- floor
Un cron diario.
- bootstrap.php:
<?php
// Includes vendor libraries
require "vendor/autoload.php";
use Xupopter\System\App as Xupopter;
define('APP_ROOT', __DIR__ . DIRECTORY_SEPARATOR);
date_default_timezone_set("Europe/Madrid");
// Include configurations and global constants
Xupopter::$config = require "conf.php";
- conf.php
<?php
return [
'tmp' => APP_ROOT . 'tmp/', // in debug mode, html curls will be cached
'mode' => 'production',
'debug' => false,
'test' => false,
'providers' => [
'Habitaclia' => [
"/comprar-vivienda-en-barcelones/provincia_barcelona/listainmuebles.htm?bolIsFiltro=0&tip_op_origen=V&hUserClickFilterButton=&filtro_periodo=0&hMinLat=&hMinLon=&hMaxLat=&hMaxLon=&hUseLatLonFilters=&hNumPointsMapa=&ordenar=pvp_inm_desc&f_con_fotos=0"
],
'Fotocasa' => [
'/comprar/casas/barcelona-capital/listado?crp=1&ts=barcelona%20capital&llm=724,9,8,232,376,8019,0,0,0&f=publicationdate&o=asc&opi=36&ftg=true&pgg=false&odg=false&fav=false&grad=false&fss=false&mode=3&cu=es-es&pbti=2&nhtti=1&craap=1&fs=true&lon=0&lat=0&fav=false'
],
'Pisos' => [
'/venta/pisos-barcelones/desc/'
],
"Idealista" => [
"/venta-viviendas/barcelona-barcelona/?ordenado-por=precio-desc"
]
],
"avoid" => [
'text' => [ // text == title + description
"usufructo",
"beneficiario",
],
"location" => [
"ciutat meridiana",
"trinitat nova",
"trinitat vella",
"carmel",
"roquetes"
]
]
];
- cron.php
<?php
set_time_limit(0);
require 'bootstrap.php';
use Xupopter\System\App;
foreach (App::config('providers') as $pName => $paths)
{
App::runProvider($pName, $paths, function ($house) {
// callback fired for each crawled house
// echo $house->title . " - " . $house->price . "€";
// $mysql->query("INSERT INTO houses...
});
}
- Función para detectar de qué proveedor es una url i mandárselo al mismo.
- Refactorizar la implementación del callback
- Crawlear la fecha de publicación de Idealista
- Añadir más proveedores