Страница 1 из 1
RSS и user agent
Добавлено: Пн май 12, 2014 7:58 am
kd0t
Добрый день. Вопрос, наверное больше к Сергею: каким образом происходит загрузка rss лент в MD и есть ли возможность сменить user agent при загрузке. Добавляя ленты, столкнулся с проблемой: curl из консоли с родным UA загружает 404-ю, при смене UA, получаю страницу, которая дальше может быть распарсена. Собственные слабые познания в PHP подсказывают, что ответ может быть в modules/rss_channels/rss_channels.class.php в
, но что делать дальше не пойму. Спасибо.
Re: RSS и user agent
Добавлено: Пн май 12, 2014 3:51 pm
kd0t
Вобщем, после правки файла modules/rss_channels/rss_channels.class.php
Было:
Код: Выделить всё
function updateChannel($id) {
$ch=SQLSelectOne("SELECT * FROM rss_channels WHERE ID='".(int)$id."'");
$ch['LAST_UPDATE']=date('Y-m-d H:i:s');
$ch['NEXT_UPDATE']=date('Y-m-d H:i:s', time()+$ch['UPDATE_EVERY']*60);
SQLUpdate('rss_channels', $ch);
$data = simplexml_load_file($ch['URL']);
Стало:
Код: Выделить всё
function updateChannel($id) {
$ch=SQLSelectOne("SELECT * FROM rss_channels WHERE ID='".(int)$id."'");
$ch['LAST_UPDATE']=date('Y-m-d H:i:s');
$ch['NEXT_UPDATE']=date('Y-m-d H:i:s', time()+$ch['UPDATE_EVERY']*60);
SQLUpdate('rss_channels', $ch);
$cch =curl_init();
curl_setopt($cch, CURLOPT_URL, $ch['URL']);
curl_setopt($cch, CURLOPT_HTTPHEADER, array("User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"));
curl_setopt($cch, CURLOPT_RETURNTRANSFER, true);
$rssdata = curl_exec($cch);
curl_close($cch);
$data = simplexml_load_string($rssdata);
После этого лента нормально загрузилась и отобразилась. Просьба к Сергею рассмотреть этот вопрос и в обновлениях предусмотреть user agent при загрузке rss вместо этого костыля.
Параллельный вопрос: приведенная
ссылка на rss ленту форума, новости в MD у меня не добавляет, и в лог апача не дает ошибки.
Re: RSS и user agent
Добавлено: Пн май 12, 2014 4:47 pm
LutsenkoDenis
я бы еще добавил проверку $id, например так:
Код: Выделить всё
function updateChannel($id)
{
if (is_numeric($id) === false) // $id содержит что-то, что не является числом. Можно записать в лог или забить.
return; // ничего дальше не делаем и выходим из функции
$ch = SQLSelectOne("SELECT * FROM rss_channels WHERE ID = " . (int)$id); // одинарные кавычки '' нам не нужны т.к. вставляем число.