使用phprets从rets feed下载图像

时间:2013-07-20 16:58:01

标签: php rets

我正在尝试使用PHPRETS下载RETS FEED数据和图像,我成功地将数据下载为CSV但是,尽管图像在图像文件夹中正确创建,但每个图像的大小为零。我附上我在这里使用的代码,请帮助我,以便我可以正确下载图像。

    <?php

    $rets_login_url = "http://retsgw.flexmls.com:80/rets2_0/Login";
    $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("B");

   // 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("lib/phrets.php");

   // start rets connection
   $rets = new phRETS;

   // only enable this if you know the server supports the optional RETS feature called 'Offset'
    $rets->SetParam("offset_support", true);

    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+") or die("Can't open file");

    $fields_order = array();

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

    // run RETS search
    echo "   + Resource: Property   Class: {$class}   Query: {$query}<br>\n";
    $search = $rets->SearchQuery("Property", $class, $query, array('Limit' => 1000));
    $get_id = $_REQUEST['LIST_1'];
    if ($rets->NumRows($search) > 0) {

            // 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)  {

    if ($fo == 'LIST_1') {

        $photos = $rets->GetObject("Property", "Photo", $record[$fo], "*", 1);

        foreach ($photos as $photo) {

            if ($photo['Success'] == true) {

                 file_put_contents("photos/{$photo['Content-ID']}-{$photo['Object-ID']}.jpg", $photo['Data']);   

            }   
        }
    }
  $this_record[] = $record[$fo];
}                           
    fputcsv($fh, $this_record);    
            }

    }

    echo "    + Total found: {$rets->TotalRecordsFound($search)}<br>\n";

    $rets->FreeResult($search);

    fclose($fh);

    echo "  - done<br>\n";

    }

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

1 个答案:

答案 0 :(得分:6)

你有这条线。它返回图像URL,而不是二进制图像数据。

$photos = $rets->GetObject("Property", "Photo", $record[$fo], "*", 1);

第五个参数应为0。

$photos = $rets->GetObject("Property", "Photo", $record[$fo], "*", 0);

根据PHRETS文档,1返回图像URL,0返回二进制图像数据。

https://github.com/troydavisson/PHRETS/wiki/GetObject