#!/usr/local/bin/php
require('/your/path/here/');
// A1 is used in the response
$A1 = md5($username . ':' . $mlsid . ':' . $password);
// Not sure yet what this does or is used for. I believe it is the request method and location
// (method:digest-uri-value)
$A2 = md5('GET:' . $login_uri);
// Response to the server. The A1 and A2 have already been md5'd before this.
// md5(md5(A1):nonce:md5(A2))
$resp = md5($A1 . ':' . $nonce . ':' . $A2);
// Request connection
$out = $login_area . "\r\n";
$out .= 'RETS-Version: ' . $rets_version . "\r\n";
$out .= 'Authorization: Digest username="' . $username . '", realm="' . $mlsid . '", nonce="' . $nonce . '", opaque="' . $opaque . '", uri="' . $login_uri . '", response="' . $resp . '"' . " \r\n";
$out .= 'Host: ' . $server . ':' . $port . "\r\n";
$out .= "Accept: */*\r\n";
$out .= 'User-Agent: ' . $user_agent . "\r\n";
$response_initial = RETS_CONNECT($server, $port, $out, $show_comments, $response, $i);
// Parse initial server response and get nonce and opaque from it.
$nonce = PARSE_RESPONSE($response_initial, 'nonce=');
$opaque = PARSE_RESPONSE($response_initial, 'opaque=');
$cnonce = md5($user_agent . ':::' . $nonce);
$resp = md5($A1 . ':' . $nonce . ':' . $nc . ':' . $cnonce . ':' . $qop . ':' . $A2);
// Auth and get session id
$out = '';
$out = $login_area . "\r\n";
$out .= 'RETS-Version: ' . $rets_version . "\r\n";
$out .= 'Authorization: Digest username="' . $username . '", realm="' . $mlsid . '", nonce="' . $nonce . '", uri="' . $login_uri . '", cnonce="' . $cnonce . '", nc=' . $nc . ', qop="' . $qop . '", response="' . $resp . '", opaque="' . $opaque . '"' . " \r\n";
$out .= 'Host: ' . $server . ':' . $port . "\r\n";
$out .= "Accept: */*\r\n";
$out .= 'User-Agent: ' . $user_agent . "\r\n";
$response_authed = RETS_CONNECT($server, $port, $out, $show_comments, $response, $i);
$session_id = PARSE_RESPONSE($response_authed, 'RETS-Session-ID'); // LEAVE THE = OUT
if ($show_comments == "on") { echo '
switch to search
';}
// Switch to search and request auth
$out = '';
$out = "GET /RETS/Search HTTP/1.1\r\n";
$out .= 'RETS-Version: ' . $rets_version . "\r\n";
$out .= 'Host: ' . $server . ':' . $port . "\r\n";
$out .= 'Cookie: RETS-Session-ID=' . $session_id . "\r\n";
$out .= "Accept: */*\r\n";
$out .= 'User-Agent: ' . $user_agent . "\r\n";
$response_initial = RETS_CONNECT($server, $port, $out, $show_comments, $response, $i);
$nonce = PARSE_RESPONSE($response_initial, 'nonce=');
$opaque = PARSE_RESPONSE($response_initial, 'opaque=');
$A2 = md5('GET:/RETS/Search'); // (method:digest-uri-value)
$resp = md5($A1 . ':' . $nonce . ':' . $A2);
$cnonce = md5($user_agent . ':::' . $nonce);
$resp = md5($A1 . ':' . $nonce . ':' . $nc . ':' . $cnonce . ':' . $qop . ':' . $A2);
// authenicate in search and submit residential query
//(TMODIFIED=' . $year . ')
$query = ('?SearchType=PROPERTY&Class=RES&Select=' . $list_data . '&Query=(AgentList=' . $agent_list . '),(LISTSTATUS=' . $list_status . ')&Format=COMPACT-DECODED&Limit=NONE');
/* $query = rawurlencode('?SearchType=PROPERTY&Class=RES&Select=*&Query=(OfficeList=02105)&Format=COMPACT-DECODED&Limit=25'); */
$out = 'GET /RETS/Search' . $query . " HTTP/1.1\r\n";
$out .= 'RETS-Version: ' . $rets_version . "\r\n";
$out .= 'Authorization: Digest username="' . $username . '", realm="' . $mlsid . '", nonce="' . $nonce . '", uri="/RETS/Search", cnonce="' . $cnonce . '", nc=' . $nc . ', qop="' . $qop . '", response="' . $resp . '", opaque="' . $opaque . '"' . " \r\n";
$out .= 'Host: ' . $server . ':' . $port . "\r\n";
$out .= 'Cookie: RETS-Session-ID=' . $session_id . "\r\n";
$out .= "Accept: */*\r\n";
$out .= 'User-Agent: ' . $user_agent . "\r\n";
$response = RETS_CONNECT($server, $port, $out, $show_comments, $response, $i);
$prop_return = explode("\n", $response);
$i = 14;
$start = 1;
while($prop_return[$i]) {
$start = 1;
$prop_array = explode("\t", $prop_return[$i]);
if ($prop_array[0] == "") {
if ($show_comments == "on") { echo 'Got the data...
';}
$MLSNUM = $prop_array[$start++];
$PROPSUBTYPE = $prop_array[$start++];
$STREETNUM = $prop_array[$start++];
$UNITNUM = $prop_array[$start++];
$STREETDIR = $prop_array[$start++];
$STREETNAME = $prop_array[$start++];
$CITY = $prop_array[$start++];
$ZIPCODE = $prop_array[$start++];
$LISTPRICE = $prop_array[$start++];
$LISTSTATUS = $prop_array[$start++];
$REMARKS = $prop_array[$start++];
$PHOTOCOUNT = $prop_array[$start++];
$AGENTLIST = $prop_array[$start++];
$OFFICELIST = $prop_array[$start++];
$SQFTAVAIL = $prop_array[$start++];
$YEARBUILT = $prop_array[$start++];
$SCHOOLDISTRICT = $prop_array[$start++];
$SUBDIVISION = $prop_array[$start++];
$STYLE = $prop_array[$start++];
$BEDS = $prop_array[$start++];
$BATHSFULL = $prop_array[$start++];
$BATHSHALF = $prop_array[$start++];
echo "$prop_array[0] MLS# " . $MLSNUM .
"
\n" . $STREETNUM . " " . $UNITNUM . " " . $STREETDIR . " " . $STREETNAME . ", " . $CITY . ", " . $ZIPCODE .
"
\nBEDS: " . $BEDS . " , BATHS: " . $BATHSFULL . "/" . $BATHSHALF .
"
\nPRICE $" . $LISTPRICE .
"
\nSQFT: " . $SQFTAVAIL. "
YEAR BUILT: " . $YEARBUILT . "
SCHOOLDISTRICT: " . $SCHOOLDISTRICT .
"
\nSUBDIVISION: " . $SUBDIVISION . "
STYLE: " . $STYLE . "
\n";
}
$i++;
}
$date = date("Y-m-d G:i:s");
?>