2017-07-12 38 views
1

所以我有一个来自Paragon的RETS数据源我试图使用phRETS库将所有这些数据转储为CSV。我已经尝试了许多不同的方法,通过dmql或libRETS从这个RETS源中转储数据,并且它们都不起作用。这里是我的php代码使用phRETS来尝试转储数据馈送。转储一个RETS数据源

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

  • 连接到http://RETS URL HERE /登录可再生能源技术的版本=可再生能源技术/ 1.5为用户
    • 连接
  • 物业:RE_1
    • 查询:(LIST_87 = 1980-01-01T00:00:00+)限制:1000抵消:0
    • 总共找到:0

  • 断开

我不会纳入正确的网址到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文件这可能是该文件的一个坏的版本,但我不知道。

如果有人知道如何在RETS Feed上执行数据转储,请让我知道。如果有比使用phRETS更好的方法,请告诉我。我真的只需要将我的RETS feed中的数据转储到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文件中仍然只有一个空表。

回答

0
  1. 使用官方PHRETS Github上页:https://github.com/troydavisson/PHRETS。他更新了包含更多面向对象代码的更新分支的库。

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

  3. 从这个documentation,偏移和限制都是字符串。您的搜索查询中包含它们作为整数。

  4. 如果您只是想要以CSV文件的形式下载RETS订阅源,那么可以使用:RETS Connector(一个不需要编码的GUI程序)轻松完成。

+0

好吧所以我用RETS连接器可以告诉我一个如何转储数据的例子吗?我能够检索一些数据,但想要将整个Feed转储到文档中。我真正想要的是以csv的形式下载RETS feed。 – hinsonan

0

在你的代码,你需要改变的$偏移1

$offset = 1; 

自$偏移值为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也会变空。