- Модуль: xdimport
- Путь к файлу: ~/bitrix/modules/xdimport/classes/general/lf_scheme_rss.php
- Класс: CXDILFSchemeRSS
- Вызов: CXDILFSchemeRSS::Request
static function Request($server, $page, $port, $params, $uri = false)
{
global $APPLICATION;
if ($uri && $uri <> '')
{
$strURI = $uri;
}
else
{
$strURI = "http://".
$server.
($port <> '' && intval($port) > 0 ? ":".intval($port) : "").
($page <> ''? $page : "/").
($params <> '' ? "?".$params : "");
}
$http = new BitrixMainWebHttpClient(array(
"version" => "1.0",
"socketTimeout" => 30,
"streamTimeout" => 30,
"redirect" => true,
"redirectMax" => 5,
));
$strData = $http->get($strURI);
$errors = $http->getError();
$arRSSResult = array();
if (
!$strData
&& !empty($errors)
)
{
$strError = "";
foreach($errors as $errorCode => $errMes)
{
$strError .= $errorCode.": ".$errMes;
}
CEventLog::Add(array(
"SEVERITY" => "ERROR",
"AUDIT_TYPE_ID" => "XDIMPORT_HTTP",
"MODULE_ID" => "xdimport",
"ITEM_ID" => "RSS_REQUEST",
"DESCRIPTION" => $strError,
));
}
if ($strData)
{
$rss_charset = "windows-1251";
if (preg_match("/<"."?XML[^>]{1,}encoding=["']([^>"']{1,})["'][^>]{0,}?".">/i", $strData, $matches))
{
$rss_charset = Trim($matches[1]);
}
$strData = preg_replace("/<"."\?XML.*?\?".">/i", "", $strData);
$strData = $APPLICATION->ConvertCharset($strData, $rss_charset, SITE_CHARSET);
}
if ($strData <> '')
{
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/xml.php");
$objXML = new CDataXML();
$res = $objXML->LoadString($strData);
if($res !== false)
{
$ar = $objXML->GetArray();
if (
is_array($ar) && isset($ar["rss"])
&& is_array($ar["rss"]) && isset($ar["rss"]["#"])
&& is_array($ar["rss"]["#"]) && isset($ar["rss"]["#"]["channel"])
&& is_array($ar["rss"]["#"]["channel"]) && isset($ar["rss"]["#"]["channel"][0])
&& is_array($ar["rss"]["#"]["channel"][0]) && isset($ar["rss"]["#"]["channel"][0]["#"])
) // RSS 2.0
{
$arRSSResult = $ar["rss"]["#"]["channel"][0]["#"];
}
elseif (
is_array($ar) && isset($ar["feed"])
&& is_array($ar["feed"]) && isset($ar["feed"]["#"])
) // Atom
{
return CXDILFSchemeRSSAtom::GetFeed($ar, $objXML);
}
$arRSSResult["rss_charset"] = mb_strtolower(SITE_CHARSET);
}
}
if (
is_array($arRSSResult)
&& !empty($arRSSResult)
)
{
$arRSSResult = self::FormatArray($arRSSResult);
if (
!empty($arRSSResult)
&& array_key_exists("item", $arRSSResult)
&& is_array($arRSSResult["item"])
&& !empty($arRSSResult["item"])
)
{
$arRSSResult["item"] = array_reverse($arRSSResult["item"]);
}
}
return $arRSSResult;
}