Скачать медиа-объект в PHPRETS

Справочная информация

  • Я хочу загрузить фотографии определенного объекта с помощью PHPRETS.
  • Моя конфигурация PHPRETS успешно работает для загрузки данных свойств. Проблема только с загрузкой медиафайлов.
  • Я могу загрузить фотографии собственности с помощью RETS Connector, приложения для Windows, что означает, что изображения существуют.
  • Значение, которое я передаю в качестве ключа объекта (N3273704), — это значение, которое я получил из KeyField (ml_num)

Ключевое поле

ml_num

Код, который я запускаю

$photos = $rets->GetObject("Property", "Photo", "N3273704", "*", 0);

var_dump($photos);

foreach ($photos as $photo) {
    $listing = $photo['Content-ID'];
    $number = $photo['Object-ID'];

    if ($photo['Success'] == true) {
        file_put_contents("image-{$listing}-{$number}.jpg", $photo['Data']);
    } else {
         echo "({$listing}-{$number}): {$photo['ReplyCode']} = {$photo['ReplyText']}\n";
    }
}

Необработанный заголовок и ответ

[2015-07-29 13:16:09] PHRETS.DEBUG: Sending HTTP Request for http://rets.torontomls.net:6103/rets-treb3pv/server/getobject (GetObject) {"query":{"Resource":"Property","Type":"Photo","ID":"N3273704:*","Location":0},"headers":{"User-Agent":"PHRETS/2.0","RETS-Version":"RETS/1.5","Accept-Encoding":"gzip"},"cookies": ..."]} []
[2015-07-29 13:16:09] PHRETS.DEBUG: Response: HTTP 200 [] []

Вывод на экран (результат var_dump)

array(20) {
[0]=>
object(PHRETS\Models\Object)#32 (10) {
  ["content_type":protected]=>
  string(8) "text/xml"
  ["content_id":protected]=>
  string(4) "null"
  ["object_id":protected]=>
  string(4) "null"
  ["mime_version":protected]=>
  NULL
  ["location":protected]=>
  NULL
  ["content_description":protected]=>
  NULL
  ["content_sub_description":protected]=>
  NULL
  ["content":protected]=>
  string(192) "<?xml version="1.0" standalone="no"?>
<!DOCTYPE RETS SYSTEM "RETS-20041001.dtd">
<RETS ReplyCode="20403" ReplyText="No Object Found: No matching object was found to satisfy the request."/>"
  ["preferred":protected]=>
  NULL
  ["error":protected]=>
  object(PHRETS\Models\RETSError)#45 (2) {
    ["code":protected]=>
    int(20403)
    ["message":protected]=>
    string(69) "No Object Found: No matching object was found to satisfy the request."
  }
}
[1]=> ...

person user2364656    schedule 29.07.2015    source источник
comment
Лучшее, что вы можете сделать, это поговорить со своим MLS. Они должны быть в состоянии сказать вам, что именно не так с вашим запросом. Сам ответ действителен, и все с точки зрения PHPETS и RETS, я думаю, работает. Без дальнейшего знания специфики Toronto MLS будет невозможно сказать, что здесь не так.   -  person Adrian World    schedule 01.08.2015
comment
Как вы определяете, является ли N3273704 допустимым типом объекта для Фото? Есть несколько способов поиска/получения идентификаторов объектов.   -  person dj_goku    schedule 04.08.2015
comment
@dj_goku, N3273704 — идентификатор объекта. Как указано в документации (github.com/troydavisson/PHRETS), тип объекта — это второй параметр (фото) и объект id — третий параметр.   -  person user2364656    schedule 05.08.2015
comment
Вы знаете, как работают rets? я хочу работать над этим   -  person Nishit Manjarawala    schedule 20.03.2017


Ответы (2)


Мне удалось разобраться в проблеме, и я пишу это в надежде, что это сэкономит чье-то время.

После мониторинга HTTP-трафика и сравнения необработанных заголовков, отправленных с соединителя PHRETS и RETS, приложения Windows, выяснилось, что некоторые серверы RETS (в данном случае Совет по недвижимости Торонто) требуют наличия поля «Принять» в заголовке. Итак, проблема решается добавлением в конструктор класса Session следующей строки:

'Accept' => '*/*',
person user2364656    schedule 06.08.2015
comment
Вы уверены, что это была проблема? Я использую сервер TREB, и у меня та же проблема, но в классе Session это уже есть. Я могу получить все свойства, но при запуске $rets->GetObject("Property", "Photo", "N3273704", "*", 0); получаю объект ошибки. - person Michael Lynch; 06.09.2016

Я хотел внести одно замечание... У TREB неправильно настроено поле KeyField. Они используют версию DBName идентифицирующего поля свойства (ml_num), тогда как KeyField должен быть версией SystemName этого поля (Ml_num)... просто вопрос разницы в случае, но достаточно, чтобы быть критическим изменением для клиентов RETS, которые автоматически получают поле KeyField из метаданных RETS.

person TheDigitalOrchard    schedule 09.10.2015