| Код | <?php
ini_set("max_execution_time", "300000");
function GetHousesFromDanBolig($p) { $types = array(2); $url = "http://danbolig.dk/SoegBolig/Resultatsider/Soegeresultat.htm?&selectedpropertytypeid="; $houses = array(); $hi = 0; foreach ($types as $key => $v) { $page = $p; $r = new HTTPRequestGET($url.$v."&page=".$page); $text = $r->DownloadToString(); $pattern = "|[^<]*<tr[^>]*>[^<]*<td[^>]*>[^<]*<span[^>]*>([^<]*)</span[^>]*>[^<]*</td[^>]*>[^<]*</tr[^>]*>|isU"; $regions_count = preg_match_all($pattern, $text, $regions); if ($regions_count == 0) break; $poss = array(); for ($i = 0; $i < $regions_count; $i++) $poss[] = strpos($text, $regions[1][$i]); $poss[] = strlen($text);
for ($i = 0; $i < $regions_count; $i++) $regions[0][$i] = substr($text, $poss[$i], $poss[$i + 1] - $poss[$i]); for ($i = 0; $i < $regions_count; $i++) { $pattern = "|<img[^\"]*\"([^\"]*)\"[^\"]*\"m_propertySearchResultRepeater_[^_]*_imgThumb\"[^>]*>"; $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnAddressHyperLink\"[^\"]*\"([^\"]*)\"[^>]*>([^<]*)</a[^>]*>"; $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnM2HyperLink\"[^>]*>([^<]*)</a[^>]*>"; $pattern .= ".*<a[^\"]*\"m_propertySearchResultRepeater_[^_]*_m_columnPriceHyperLink\"[^>]*>([^<]*)</a[^>]*>|isU"; $n = preg_match_all($pattern, $regions[0][$i], $data); $region = explode(",", $regions[1][$i]); $region[0] = trim(str_replace("Region", " ", $region[0])); $zip_city = explode(" ", trim($region[1])); $city = $zip_city[1]; for ($k = 2; $k < count($zip_city); $k++) $city .= " ".$zip_city[$k];
for ($j = 0; $j < $n; $j++) { if (strpos($data[3][$j], ",") !== false) { $street = explode(",", $data[3][$j]); $houses[$hi]['street'] = $street[0]; } else $houses[$hi]['street'] = $data[3][$j]; $houses[$hi]['region'] = mb_convert_encoding($region[0], "ISO-8859-1", "UTF-8"); $houses[$hi]['zip'] = $zip_city[0]; $houses[$hi]['city'] = mb_convert_encoding($city, "ISO-8859-1", "UTF-8"); $houses[$hi]['beds'] = 0; $houses[$hi]['baths'] = 0; $houses[$hi]['sqm'] = $data[4][$j]; $houses[$hi]['price'] = str_replace(".", "", $data[5][$j]); $houses[$hi]['link'] = "http://danbolig.dk".$data[2][$j]; $houses[$hi]['photo'] = $data[1][$j]; $houses[$hi]['provider'] = 'danbolig2';
$houses[$hi]['street'] = mb_convert_encoding($houses[$hi]['street'], "ISO-8859-1", "UTF-8"); $hi++; } } } return $houses; }
class HTTPRequestGET { var $_fp; // HTTP socket var $_url; // full URL var $_host; // HTTP host var $_protocol; // protocol (HTTP/HTTPS) var $_uri; // request URI var $_port; // port
// scan url function _scan_url() { $req = $this->_url;
$pos = strpos($req, '://'); $this->_protocol = strtolower(substr($req, 0, $pos));
$req = substr($req, $pos+3); $pos = strpos($req, '/'); if($pos === false) $pos = strlen($req); $host = substr($req, 0, $pos);
if(strpos($host, ':') !== false) { list($this->_host, $this->_port) = explode(':', $host); } else { $this->_host = $host; $this->_port = ($this->_protocol == 'https') ? 443 : 80; }
$this->_uri = substr($req, $pos); if($this->_uri == '') $this->_uri = '/'; }
// constructor function HTTPRequestGET($url) { $this->_url = $url; $this->_scan_url(); }
// download URL to string function DownloadToString() { $crlf = "\r\n";
// generate request $req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf . 'Host: ' . $this->_host . $crlf . $crlf;
// fetch $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port); fwrite($this->_fp, $req); while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp)) $response .= fread($this->_fp, 1024); fclose($this->_fp);
// split header and body $pos = strpos($response, $crlf . $crlf); if($pos === false) return($response); $header = substr($response, 0, $pos); $body = substr($response, $pos + 2 * strlen($crlf));
// parse headers $headers = array(); $lines = explode($crlf, $header); foreach($lines as $line) if(($pos = strpos($line, ':')) !== false) $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1)); // redirection? if(isset($headers['location'])) { $http = new HTTPRequestGET($headers['location']); return($http->DownloadToString($http)); } else { return($body); } } };
$time = time(); $page = 1; $houses = GetHousesFromDanBolig($page); while (!empty($houses) && $page < 11) { echo "<pre>"; print_r($houses); echo "</pre>"; $page++; $houses = GetHousesFromDanBolig($page); } echo (time() - $time);
?>
|
|