PHRets: использование PHP для загрузки фотографий недвижимости

Я пытаюсь создать скрипт PHP (PHrets), который загружает всю информацию о листинге недвижимости из определенной области и сохраняет все данные данных (CSV-файл и фотографии) на моем веб-сервере.

Примечание. В одном листинге может быть до 20 фотографий.

Я использую PHrets для получения данных листинга MLS, и он отлично работает для создания CSV-данных. Тем не менее, я хотел бы изменить этот код, чтобы просмотреть фотографии каждого листинга и загрузить их на свой веб-сервер со следующим названием: MLSID-PHOTOID.

Нижеприведенная ошибка исходит из цикла GetObject в конце кода: Сообщение ERROR: Ошибка HTTP 500 (Внутренняя ошибка сервера): неожиданное условие возникло, когда сервер пытался выполнить запрос.

Заранее спасибо!

<?php $rets_login_url = "http://maxebrdi.rets.fnismls.com/Rets/FNISRETS.aspx/MAXEBRDI/login?&rets-version=rets/1.5"; $rets_username = "MyUser"; $rets_password = "MyPass"; // use http://retsmd.com to help determine the SystemName of the DateTime field which // designates when a record was last modified $rets_status_field = "L_StatusCatID"; $rets_city_field = "L_City"; // use http://retsmd.com to help determine the names of the classes you want to pull. // these might be something like RE_1, RES, RESI, 1, etc. //"RE_1" $property_classes = array("LR_5"); // DateTime which is used to determine how far back to retrieve records. // using a really old date so we can get everything $listing_status = 1; $listing_city = "OAKLAND"; ////////////////////////////// require_once("phrets.php"); // start rets connection $rets = new phRETS; echo "+ Connecting to {$rets_login_url} as {$rets_username}<br>\n"; $connect = $rets->Connect($rets_login_url, $rets_username, $rets_password); if ($connect) { echo " + Connected<br>\n"; } else { echo " + Not connected:<br>\n"; print_r($rets->Error()); exit; } foreach ($property_classes as $class) { echo "+ Property:{$class}<br>\n"; $file_name = strtolower("property_{$class}.csv"); $fh = fopen($file_name, "w+"); $maxrows = true; $offset = 1; $limit = 1000; $fields_order = array(); while ($maxrows) { $query = "({$rets_status_field}={$listing_status}),({$rets_city_field}={$listing_city})"; // run RETS search echo " + Query: {$query} Limit: {$limit} Offset: {$offset}<br>\n"; $search = $rets->SearchQuery("Property", $class, $query, array("Limit" => $limit, "Offset" => $offset, "Format" => "COMPACT", "Select" => "L_ListingID,L_Class,L_Type_,L_Status,L_AskingPrice,L_Keyword2,L_Keyword3,L_Keyword4,L_SquareFeet,L_Remarks,L_Address,L_City,L_State,LO1_OrganizationName,LA1_AgentLicenseID,LA1_UserFirstName,LA1_UserLastName,L_PictureCount", "Count" => 1)); if ($rets->NumRows() > 0) { if ($offset == 1) { // print filename headers as first line $fields_order = $rets->SearchGetFields($search); fputcsv($fh, $fields_order); } // process results while ($record = $rets->FetchRow($search)) { $this_record = array(); foreach ($fields_order as $fo) { $this_record[] = $record[$fo]; } fputcsv($fh, $this_record); } $offset = ($offset + $rets->NumRows()); } $maxrows = $rets->IsMaxrowsReached(); echo " + Total found: {$rets->TotalRecordsFound()}<br>\n"; $rets->FreeResult($search); } fclose($fh); echo " - done<br>\n"; } /* //This code needs to be fixed. Not sure how to include the listing array correctly. $photos = $rets->GetObject("Property", "Photo", $record[ListingID], "*", 1); foreach ($photos as $photo) { $listing = $photo['Content-ID']; $number = $photo['Object-ID']; if ($photo['Success'] == true) { echo "{$listing}'s #{$number} photo is at {$photo['Location']}\n"; file_put_contents("photos/{$photo['Content-ID']}-{$photo['Object-ID']}.jpg", $photo['Data']); } else { echo "Error ({$photo['Content-ID']}-{$photo['Object-ID']} } } //ERROR Message: HTTP Error 500 (Internal Server Error): An unexpected condition was //encountered while the server was attempting to fulfill the request. */ echo "+ Disconnecting<br>\n"; $rets->Disconnect(); 

    Я изменил цикл while, который обрабатывает каждую запись, чтобы также получить фотографии для этой записи. Я также тестировал это на сервере RETS.

     while ($record = $rets->FetchRow($search)) { $this_record = array(); foreach ($fields_order as $fo) { if ($fo == 'L_ListingID') { $photos = $rets->GetObject("Property", "Photo", $record[$fo], "*", 1); foreach ($photos as $photo) { if ($photo['Success'] == true) { file_put_contents("photos/{$photo['Content-ID']}-{$photo['Object-ID']}.jpg", $photo['Data']); } } } $this_record[] = $record[$fo]; } fputcsv($fh, $this_record); } 

    Одна вещь, которую я нашел, – это листинг в этой строке:

     $photos = $rets->GetObject("Property", "Photo", $record[ListingID], "*", 1); 

    Но тогда в вашем поисковом запросе вы ссылаетесь на листинг ID как на L_ListingID. Возможно, указанная выше строка должна иметь L_ListingID.

     $search = $rets->SearchQuery("Property", $class, $query, array("Limit" => $limit, "Offset" => $offset, "Format" => "COMPACT", "Select" => "L_ListingID,L_Class,L_Type_,L_Status,L_AskingPrice,L_Keyword2,L_Keyword3,L_Keyword4,L_SquareFeet,L_Remarks,L_Address,L_City,L_State,LO1_OrganizationName,LA1_AgentLicenseID,LA1_UserFirstName,LA1_UserLastName,L_PictureCount", "Count" => 1)); 

    Что, если последний параметр GetObject равен «0»:

    $ photos = $ rets-> GetObject («Свойство», «Фото», $ record [$ fo], «*», 1);

    в этом случае «1» – для возврата местоположения. некоторые серверы отключены и возвращают фактическое изображение, которое, как мне кажется, потребует другого метода.