我在网上找到了这段代码,它将连接到rets feed并创建mysql表。
<?php
/* Raw example on how to use phrets to generate the necessary sql code
for mysql tables generation from rets.
Works for me*/
require ('phrets0.6.1.php');
$rets = new phRETS;
$Host = 'http://demo.crt.realtors.org:6103/rets/login';
$Account = 'Joe';
$Password = 'Schmoe';
$User_Agent = 'RETS_class/1.0';
$Rets_Version = 'RETS/1.5' ;
$rets->AddHeader("Accept", "*/*");
$rets->AddHeader("RETS-Version", "$Rets_Version");
$rets->AddHeader("User-Agent", "$User_Agent");
$rets->SetParam("cookie_file", "phrets_cookies.txt");
//$rets->SetParam("debug_mode", TRUE); // ends up in rets_debug.txt
$rets->Connect($Host,$Account,$Password);
$ResourcesInfo1 = $rets->GetMetadataInfo();
$MetadataInfo1 = $rets->GetMetadataTypes();
/*testing4GetTables*/
function GetTables($ResourcesInfo, $MetadataInfo) {
/* Put toghether all the rets info needed for database tables creation
in an array. */
foreach ($MetadataInfo as $key => $value){
$Resource = $value['Resource'];
foreach ($value['Data'] as $key){
$tables[$key['Description']] = array(
'ResourceID' => $Resource,
'Description' => $key['Description'],
'ClassName' => $key['ClassName'] ,
'KeyField' => $ResourcesInfo[$Resource]['KeyField'],
'ClassCount' => $ResourcesInfo[$Resource]['ClassCount']
);
}
}
return $tables;
}
function CreateMysqlTables ($ResourcesInfo, $MetadataInfo, $class){
/*function providing the mysql code needed to create mysqltables.
to be run as the script on the commande line for nicer output*/
$table = GetTables($ResourcesInfo, $MetadataInfo);
foreach ($table as $key => $value){
$TablesAndFields[$value['Description']] = $class-
>GetMetadata($value['ResourceID'],$value['ClassName']);
}
foreach ($TablesAndFields as $key => $value){
$find = array ('/ /', '/-/');
$TableName = preg_replace($find, "_", $key);
echo "\n\r CREATE TABLE IF NOT EXISTS $TableName (\n\r";
foreach ( $value as $key2 => $value2){
echo "`$value2[SystemName]` ";
ConvertTypeToMysql($value2[DataType], $value2[MaximumLength]);
}
echo "`MyNewTablesTimeStamp` timestamp NOT NULL default
CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,\n\r";
echo " PRIMARY KEY (".$table[$key]['KeyField']."));\n\r";
}
}
function ConvertTypeToMysql($datatype, $datalenght){
/* This function to convert mls datatype and datalenght to mysql.
Change to fit your needs works for me: db2 to mysql (flexmls)*/
switch ($datatype){
case "Character":
if ($datalenght >= 255){
echo "text collate utf8_unicode_ci default NULL, \n\r";
}
elseif (!$datalenght){
echo "$datatype(25) collate utf8_unicode_ci default NULL, \n\r";
}
else {
echo "$datatype($datalenght) collate utf8_unicode_ci default NULL,
\n\r";
}
break;
case "Decimal":
echo "$datatype($datalenght,0) default NULL, \n\r";
break;
case "Int":
echo "$datatype($datalenght) default NULL, \n\r";
break;
case "Long":
/* note:if I put this case after case ("Date" or "Boolean"): it won't
work, Why? is Long a Boolean?'*/
echo "LONGTEXT collate utf8_unicode_ci default NULL, \n\r";
break;
case ("Date" or "Boolean"):
echo "$datatype default NULL, \n\r";
break;
}
}
CreateMysqlTables ($ResourcesInfo1, $MetadataInfo1, $rets);
$rets->Disconnect();
?>
抱歉,很长一段代码。
我已经使用我的IDE通过FTP建立了到Wordpress站点的连接,并在其中加载了PHrets文件。
我的最终目标是在rets feed中用所有清单填充mysql数据库,然后在数据库经常更新时检查我的网站,以检查更新清单还是新清单。
如果有人能指出正确的方向,我将不胜感激。
最佳答案
好的,在我提供一些指导之前,这里是您要根据IDX规则进行操作的简单方法(即,这不适用于VOW)。忘记RETS并获取自己的数据源。也许使用IDX提供程序是获取数据的更好方法。看一下这两个:IDX Broker http://www.idxbroker.com/mls/florida-keys-mls-flkmls或http://www.diversesolutions.com/idx-coverage/floridakeysmls-410。我不确定这是否是您的MLS,并且还有更多的IDX提供程序。您应该能够获得与您的MLS交谈的完整列表,因为IDX提供程序必须在每个MLS中进行注册。
如果您想要或需要自己的RETS提要和数据库,这里有一些提示
几年前,我曾经使用PHRETS-从那时起,我就建立了自己的客户。我尚未了解PHRETS,但您似乎正在使用非常老的客户端phrets0.6.1.php
。您应该看看https://github.com/troydavisson/PHRETS和版本2。
查看其Wiki页面以获取更多信息https://github.com/troydavisson/PHRETS/wiki
如果您想了解更多关于RETS的信息,请在http://www.reso.org/specifications处找到RESO(房地产标准组织)及其规范。用您的MLS检查他们正在使用什么RETS版本。
尽管RETS作为标准应该可以帮助您获取数据(因为它是传输协议),但是它并未定义如何使用Feed格式化实际数据。 RESO正在RESO词典上工作了十多年,该词典应该对所有MLS的数据进行规范化,但这仍在进行中,我们永远不会知道所有900多个MLS采用此标准将花费多长时间。
关于php - PHrets-使用PHP从Rets创建mysql表-脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30290682/