troydavisson / phrets
PHP 的 RETS 库
Requires
- php: >=5.5.0
- guzzlehttp/guzzle: >=6.0
- illuminate/container: >=4.2.0
- illuminate/support: >=4.2.0
- league/csv: >=6.0
Requires (Dev)
- gsaulmon/guzzlerecorder: 2.*
- monolog/monolog: 1.10.*
- phpunit/phpunit: 5.*
- psr/log: 1.*
- dev-master
- 2.x-dev
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6
- 2.5
- 2.4
- 2.3.x-dev
- 2.3
- 2.2
- 2.1
- 2.0
- 1.x-dev
- 1.3.x-dev
- 1.0.2
- 1.0.1
- 1.0.0
- dev-php8
- dev-more-php7-builds
- dev-header-caps
- dev-nice-pagination
- dev-trim-space
- dev-cookie-files
- dev-iterator
- dev-vcr
- dev-psr-3
- dev-stream
- dev-proxy
- dev-unescaped
- dev-tarasoft
- dev-parsehuge
This package is auto-updated.
Last update: 2024-09-11 19:00:09 UTC
README
注意:如果您在寻找版本 1,请查看 "1.x" 分支。否则,强烈建议您使用版本 2+。
PHRETS
PHP 客户端库,用于与 RETS 服务器交互,以拉取 MLS 系统提供的房地产列表、照片和其他数据
<?php date_default_timezone_set('America/New_York'); require_once("vendor/autoload.php"); $config = new \PHRETS\Configuration; $config->setLoginUrl('rets login url here') ->setUsername('rets username here') ->setPassword('rets password here') ->setRetsVersion('1.7.2'); $rets = new \PHRETS\Session($config); // If you're using Monolog already for logging, you can pass that logging instance to PHRETS for some additional // insight into what PHRETS is doing. // // $log = new \Monolog\Logger('PHRETS'); // $log->pushHandler(new \Monolog\Handler\StreamHandler('php://stdout', \Monolog\Logger::DEBUG)); // $rets->setLogger($log); $connect = $rets->Login(); $system = $rets->GetSystemMetadata(); var_dump($system); $resources = $system->getResources(); $classes = $resources->first()->getClasses(); var_dump($classes); $classes = $rets->GetClassesMetadata('Property'); var_dump($classes->first()); $objects = $rets->GetObject('Property', 'Photo', '00-1669', '*', 1); var_dump($objects); $fields = $rets->GetTableMetadata('Property', 'A'); var_dump($fields[0]); $results = $rets->Search('Property', 'A', '*', ['Limit' => 3, 'Select' => 'LIST_1,LIST_105,LIST_15,LIST_22,LIST_87,LIST_133,LIST_134']); foreach ($results as $r) { var_dump($r); }
简介
PHRETS 为 PHP 开发者提供了一种直接在现有或新代码中集成 RETS 功能的方法,以下方面为您处理:
- 响应解析(XML、HTTP 多部分等)
- 以简单变量、数组和对象的形式返回给开发者
- RETS 通信(通过 HTTP)
- HTTP 头管理
- 认证
- 会话/cookie 管理
- 支持 PHP 5.6、7.0、7.1 和 7.2
安装
开始使用最简单的方法是使用 Composer 安装 troydavisson/phrets
{ "require": { "troydavisson/phrets": "2.*" } }
获取帮助
寻求帮助的最佳地点是我们的 Slack 频道 或我们的 Google 群组。请将 GitHub 的问题跟踪器留作库的bug报告。
免责声明
在许多情况下,此库提供的功能取决于您访问的 RETS 服务器是否正确实现了这些功能。RETS 规范定义了客户端和服务器之间的通信方式,如果服务器执行了意外的操作,则可能需要调整一些选项才能使此库正常工作。
文档
配置
连接到 RETS 服务器的第一步是配置连接。
$config = new \PHRETS\Configuration; $config->setLoginUrl($rets_login_url); $config->setUsername($rets_username); $config->setPassword($rets_password); // optional. value shown below are the defaults used when not overridden $config->setRetsVersion('1.7.2'); // see constants from \PHRETS\Versions\RETSVersion $config->setUserAgent('PHRETS/2.0'); $config->setUserAgentPassword($rets_user_agent_password); // string password, if given $config->setHttpAuthenticationMethod('digest'); // or 'basic' if required $config->setOption('use_post_method', false); // boolean $config->setOption('disable_follow_location', false); // boolean
可用选项包括:
use_post_method
- 总是使用 HTTP POST 而不是 HTTP GET。默认值为false
(使用 GET)disable_follow_location
- 禁用自动处理服务器发送的重定向的能力。默认值为false
(跟随重定向)
作为替代,您还可以从数组加载配置选项
$config = Configuration::load([ 'login_url' => 'http://loginurlhere', 'username' => 'rets_username', 'password' => 'rets_password', 'user_agent' => 'UserAgent/1.0', 'user_agent_password' => 'user_agent_password_here', 'rets_version' => '1.8', 'http_authentication' => 'basic', ]);
连接
配置设置完成后,可以启动 RETS 会话
$config = Configuration::load([ see above for what to give here ]); $rets = new \PHRETS\Session($config);
登录
$bulletin = $rets->Login();
这将向 RETS 服务器发出第一个请求。除了一般认证外,此步骤还需要最终确定会话的配置。在登录响应中,RETS 服务器提供所有其他请求所需的信息,因此必须先执行此操作。
获取记录
注意:为了从 RETS 服务器获取记录,您需要首先知道您可以获取和查看的信息类型。这些信息通过 RETS 服务器支持的元数据调用提供,但使用如 RETSMD.com 这样的 RETS 元数据查看器服务可以使此过程更快,除非您有解析可解析元数据的特定需求。
已知 RETS 资源、类和 DMQL 查询后,您可以发出请求以获取记录
$results = $rets->Search($resource, $class, $query); // or with the additional options (with defaults shown) $results = $rets->Search( $resource, $class, $query, [ 'QueryType' => 'DMQL2', 'Count' => 1, // count and records 'Format' => 'COMPACT-DECODED', 'Limit' => 99999999, 'StandardNames' => 0, // give system names ] );
处理结果
对 $rets->Search()
请求的结果将返回一个 \PHRETS\Models\Search\Results
对象,该对象可以像常规数组一样以多种方式使用。该数组中的每个项目都是一个 \PHRETS\Models\Search\Record
对象,代表返回的单个记录。
$results = $rets->Search( see above for what to give here ); foreach ($results as $record) { echo $record['Address'] . "\n"; // is the same as: echo $record->get('Address') . "\n"; }
$results 可以像上面一样在 foreach 循环中使用,但还有一些额外的辅助方法存在
// return an array of the field names to expect with each record $results->getHeaders(); // return the total number of results found (reported by the RETS server) $results->getTotalResultsCount(); // return the count of results actually retrieved by PHRETS $results->getReturnedResultsCount(); // same as: count($results) // make a RETS GetMetadata call for the metadata for this RETS Resource and Class $results->getMetadata(); // return whether or not the RETS server has more results to give $results->isMaxRowsReached(); // return the string of characters to expect as the value of a field the RETS server blocked $results->getRestrictedIndicator(); // return the first record in the set $results->first(); // return the last record in the set $results->last(); // returns an array representing the collected values from the identified field $all_ids = $results->lists('ListingID'); // export the results in CSV format $results->toCSV(); // export the results in JSON format $results->toJSON(); // export the results in a simple array format $results->toArray();
因为每个 $record 都是一个对象,所以存在一些辅助方法
$record->isRestricted('Address'); // determine if the RETS server blocked this value $record->getFields(); // return an array of the field names associated with this record $record->toArray(); // returns a true PHP array of the given record $record->toJson(); // returns a JSON encoded string representing the record $record->getResource(); // returns the RETS Resource responsible for this record $record->getClass(); // returns the RETS Class responsible for this record
下载媒体(照片、图像、文档等)
从 $rets->GetObject()
调用返回的值是一个 \Illuminate\Support\Collection
对象,它允许许多常见的数组类似特性以及一些辅助方法。
$objects = $rets->GetObject($rets_resource, $object_type, $object_keys); // grab the first object of the set $objects->first(); // grab the last object of the set $objects->last(); // throw out everything but the first 10 objects $objects = $objects->slice(0, 10);
该集合中的每个对象都是一个 \PHRETS\Models\BaseObject
对象,具有自己的辅助方法集。
$objects = $rets->GetObject( see above documentation ); foreach ($objects as $object) { // does this represent some kind of error $object->isError(); $object->getError(); // returns a \PHRETS\Models\RETSError // get the record ID associated with this object $object->getContentId(); // get the sequence number of this object relative to the others with the same ContentId $object->getObjectId(); // get the object's Content-Type value $object->getContentType(); // get the description of the object $object->getContentDescription(); // get the sub-description of the object $object->getContentSubDescription(); // get the object's binary data $object->getContent(); // get the size of the object's data $object->getSize(); // does this object represent the primary object in the set $object->isPreferred(); // when requesting URLs, access the URL given back $object->getLocation(); // use the given URL and make it look like the RETS server gave the object directly $object->setContent(file_get_contents($object->getLocation())); }