Сброс потока данных RETS

Итак, у меня есть поток данных RETS от Paragon. Я пытаюсь сбросить все эти данные в CSV с помощью библиотеки phRETS. Я пробовал много разных способов выгрузки данных из этого канала RETS через dmql или libRETS, и ни один из них не работает. Вот мой php-код, использующий phRETS для создания дампа данных.

Прямо сейчас он просто генерирует пустой CSV. Это то, что отображается в терминале.

  • Подключение к http: // RETS url здесь /login? Rets-version=rets/1.5 как пользователь
    • Связано
  • Недвижимость:RE_1
    • Запрос: (LIST_87=1980-01-01T00:00:00+) Лимит: 1000 Смещение: 0
    • Всего найдено: 0
    • сделанный
  • Отсоединение

Я не буду включать правильный URL в канал RETS здесь, но он использует версию 1.5

 <?php

    $rets_login_url = "http://Insert RETS feed link /login?rets-version=rets/1.5";
$rets_username = "**************";
$rets_password = "**********";

// use http://retsmd.com to help determine the SystemName of the DateTime field which
// designates when a record was last modified
$rets_modtimestamp_field = "LIST_87";

// 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.
$property_classes = array("RE_1");

// DateTime which is used to determine how far back to retrieve records.
// using a really old date so we can get everything
$previous_start_time = "1980-01-01T00:00:00";

//////////////////////////////

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 = 0;
        $limit = 1000;
        $fields_order = array();

        while ($maxrows) {

                $query = "({$rets_modtimestamp_field}={$previous_start_time}+)";

                // 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-DECODED', '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";

}

echo "+ Disconnecting<br>\n";
$rets->Disconnect();

Частично проблема заключалась в том, что я получал ошибку для этой строки кода

require_once("phrets.php");

У меня не было этого файла, поэтому я нашел его в Google и нашел файл phrets.php по https://github.com/dangodev/PHRETS-Example/blob/master/lib/phrets.php

Это может быть плохая версия этого файла, но я не знаю.

Если кто-нибудь знает, как выполнить дамп данных на фиде RETS, пожалуйста, дайте мне знать. Если есть лучший способ, чем использовать phRETS, дайте мне знать. Мне действительно нужно просто сбросить данные из моего канала RETS в CSV или что-то в этом роде. Спасибо!

РЕДАКТИРОВАТЬ: я изменил свой LIST_87 на L_UPDATEDATE, и теперь он находит данные, но не записывает их в файл. Я также изменил предел на 200. Вот что сейчас отображает мой терминал.

  • Связано
    • Недвижимость:RE_1
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 0
    • Всего найдено: 1193
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 200
    • Всего найдено: 1193
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 400
    • Всего найдено: 1193
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 600
    • Всего найдено: 1193
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 800
    • Всего найдено: 1193
    • Запрос: (L_UPDATEDATE=1980-01-01T00:00:00+) Лимит: 200 Смещение: 1000
    • Всего найдено: 1193
    • сделанный
    • Отсоединение

мой созданный CSV-файл все еще содержит пустую таблицу.

2 ответа

В вашем коде вам нужно изменить начальное значение $ offset на 1.

$offset = 1;

Поскольку значение $ offset равно 0, следующее условие не выполняется,

if ($offset == 1) {
    // print filename headers as first line
    $fields_order = $rets->SearchGetFields($search);
    fputcsv($fh, $fields_order);
}

заголовок CSV не записан, а массив $fields_order все еще пуст.

Затем следует цикл while,

foreach ($fields_order as $fo) {
    $this_record[] = $record[$fo];
}

$ this_record остается пустым, так как массив $fields_order пуст.

Таким образом, ваш CSV становится пустым, даже если данные присутствуют.

  1. Используйте официальную страницу PHRETS Github: https://github.com/troydavisson/PHRETS. Он обновил библиотеку, которая включает в себя обновленную ветвь кода, которая является более объектно-ориентированной.

  2. Проверьте правильность имен полей в поисковом запросе. Например, у вас есть "LIST_87", который может быть неправильным. Используйте RETS MD для проверки.

  3. Из этой документации, Offset и Limit являются строками. Вы имеете их как целые числа в вашем поисковом запросе.

  4. Если вы просто хотите загрузить ленту RETS в виде файла CSV, то это легко сделать с помощью: RETS Connector, программы с графическим интерфейсом, не требующей кодирования.

Другие вопросы по тегам