【问题标题】:Dumping a RETS Data Feed转储 RETS 数据馈送
【发布时间】:2017-07-12 20:59:14
【问题描述】:

所以我有一个来自 Paragon 的 RETS 数据馈送,我正在尝试使用 phRETS 库将所有​​这些数据转储到 CSV 中。我尝试了许多不同的方法来通过 dmql 或 libRETS 从这个 RETS 提要中转储数据,但它们都不起作用。这是我使用 phRETS 尝试转储数据馈送的 php 代码。

现在它只生成一个空的 csv。这是终端中显示的内容。

  • 以用户身份连接到http://RETS url here/login?rets-version=rets/1.5
    • 已连接
  • 属性:RE_1
    • 查询:(LIST_87=1980-01-01T00:00:00+) 限制:1000 偏移量:0
    • 找到的总数:0
    • 完成
  • 断开连接

我不会在此处包含 RETS 提要的正确 URL,但它使用的是 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");

我没有这个文件,所以我用谷歌搜索它并从https://github.com/dangodev/PHRETS-Example/blob/master/lib/phrets.php找到了一个 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 文件中仍然只有一个空表。

【问题讨论】:

    标签: php rets phrets


    【解决方案1】:
    1. 使用官方 PHRETS Github 页面:https://github.com/troydavisson/PHRETS。他更新了库,其中包含一个更新的代码分支,更加面向对象。

    2. 检查搜索查询中的字段名称是否正确。例如,您有可能不正确的“LIST_87”。使用RETS MD进行验证。

    3. 从此documentation 中,Offset 和 Limit 都是字符串。您在搜索查询中将它们作为整数。

    4. 如果您只想将 RETS 提要下载为 CSV 文件,则可以使用以下方式轻松完成:RETS Connector,这是一个无需编码的 GUI 程序。

    【讨论】:

    • 好的,所以我使用了 RETS 连接器,你能告诉我一个如何转储数据的例子吗?我能够检索一些数据,但想将整个提要转储到文档中。我真正想要的只是将 RETS 提要下载为 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 也会变为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2016-04-12
      • 1970-01-01
      相关资源
      最近更新 更多