Иногда хочется динамически подгрузить контент с чужого домена в асинхронном режиме. Сразу скажу, что сделать это только силами JavaScript не получится. Все это потому, что JavaScript не разрешен доступ к другим доменам. Если не верите — можете попробовать, если получится - будет интересно послушать как.
Но все-таки, хочется же сделать невозможное возможным. Тут можно вспомнить, что серверные сценарии вполне могут лазить на соседние домены и брать оттуда что угодно. Можно обращаться к своему скрипту, который будет грабить контент с чужого сайта, и отдавать его Ajax-движку. За чем же дело стало?
Тут все просто. Есть html, есть Ajax-движок. Больше ничего не нужно. Единственное, что нужно отметить — при запросе к серверу, нужно указывать домен, и адрес странцы, которую мы хотим себе захапать. Остальное — дело серверного скрипта.
У меня получилась такая вот клиентская часть:
<html>
<head>
<title>Асинхронный запрос к чужому домену</title>
</head>
<body>
<a href="#" onclick="getData('server_side.php', 'http://rmcreative.ru/'); return false;">
Запрос к сайту rmcreative.ru</a>
<br/>
<a href="javascript: alert($('#result').html())">Показать</a>
<div id="result"></div>
<script language="javascript" rel="javascript" type="text/javascript" src="jquery-1.2.1.js">
</script>
<script language="javascript" rel="javascript" type="text/javascript">
function getData(server_side, adr, param) {
var res = $('#result');
res.append('Загрузка...');
res.load(server_side, {site:adr});
}
</script>
</body>
</html>
Видим две ссылки. Одна выводит содержимое контейнера result, другая — загружает контент с сайта rmcreative.ru.
Здесь все еще проще. Напишем ее на всеми любимом php.
<?
header('Cache-control: no-cache'); #чтобы выдача не кэшировалась
#получаем данные
$file = file_get_contents($_POST['site']);
#выводим
print $file;
?>
Если мы будем вот так включать полученную страницу в свою, то мы получим полный хаос и порушим DOM-модель нашего документа. Поэтому, неплохо обрабатывать получаемые данные на сервере, при получении. Как минимум, мы можем обрезать все, что выше <body> и ниже </body>, включая сами <body>.
$file = preg_replace("/.*?<body.*?>/is", "", $file);
$file = preg_replace("/<\/body>.*?/is", "", $file);
Таким образом можно включать в свою страницу RSS-ленты, полученные с чужих сайтов. Как распарсить RSS, я уже рассказывал на примере RSS gismeteo.ru.
При грабе контента с чужого домена, могут возникнуть проблемы с кодировками. Но тут на помощь приходит iconv. Опять же, нужно обработать контент на сервере.
Если вы хотите новый информер на свой сайт, или заполнить новый сайт свежим контентом - обращайтесь! Я напишу для вас граббер и парсер сайта.