首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转储RETS数据源

转储RETS数据源
EN

Stack Overflow用户
提问于 2017-07-12 20:59:14
回答 2查看 1.3K关注 0票数 1

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

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

  • 以用户身份连接到http://RETS url此处/登录?rets-version=rets/1.5
代码语言:javascript
复制
- Connected

  • Property:RE_1
代码语言:javascript
复制
- Query: (LIST\_87=1980-01-01T00:00:00+)  Limit: 1000  Offset: 0
代码语言:javascript
复制
- Total found: 0
代码语言:javascript
复制
- done

  • 断开

我不会在这里包含RETS提要的正确的url,但是它使用的是版本1.5

代码语言:javascript
复制
 <?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找到了一个https://github.com/dangodev/PHRETS-Example/blob/master/lib/phrets.php文件。

这可能是那个文件的坏版本,但我不知道。

如果有人知道如何在RETS提要上执行数据转储,请告诉我。如果有比使用phRETS更好的方法,那么请告诉我。我只需要将RETS提要中的数据转储到csv或其他东西中。谢谢!

编辑:我将我的LIST_87更改为L_UPDATEDATE,它现在正在查找数据,但没有将其写入文件。我也把限制改为200。这是我的终端现在显示的内容。

  • 已连接
代码语言:javascript
复制
- Property:RE\_1
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 0
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 200
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 400
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 600
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 800
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- Query: (L\_UPDATEDATE=1980-01-01T00:00:00+)  Limit: 200  Offset: 1000
代码语言:javascript
复制
- Total found: 1193
代码语言:javascript
复制
- done
代码语言:javascript
复制
- Disconnecting

我创建的csv文件中仍然只有一个空表。

EN

回答 2

Stack Overflow用户

发布于 2017-07-13 03:49:29

  1. 使用官方的PHRETS Github页面:https://github.com/troydavisson/PHRETS。他更新了库,其中包括一个更新的代码分支,它更面向对象。
  2. 检查搜索查询中的字段名是否正确。例如,您有可能不正确的"LIST_87“。使用RETS MD进行验证。
  3. 从这个文档中,偏移量和限制都是字符串。在搜索查询中将它们作为整数。
  4. 如果您只想下载RETS提要作为一个CSV文件,那么这可以很容易地使用:RETS连接器,一个不需要编码的GUI程序。
票数 0
EN

Stack Overflow用户

发布于 2017-12-13 07:22:05

在代码中,需要将$offset的初始值更改为1。

代码语言:javascript
复制
$offset = 1;

由于$offset的值为0,因此以下条件失败,

代码语言:javascript
复制
if ($offset == 1) {
    // print filename headers as first line
    $fields_order = $rets->SearchGetFields($search);
    fputcsv($fh, $fields_order);
}

没有写入CSV的头,$fields_order数组仍然是空的。

然后是while循环,

代码语言:javascript
复制
foreach ($fields_order as $fo) {
    $this_record[] = $record[$fo];
}

$this_record仍然是空的,因为$fields_order数组是空的。

因此,即使存在数据,CSV也会变为空的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45067412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档