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

Исходная информация

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

KeyField

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]=> ...

0

Решение

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

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

'Accept' => '*/*',
1

Другие решения

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

0

По вопросам рекламы [email protected]