БлогNot. PHP: как быстро извлечь нужные данные с чужого сайта и показать у себя

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

PHP: как быстро извлечь нужные данные с чужого сайта и показать у себя

Собственно, точно так же, как в этой заметке, со времени её написания ничего не изменилось :)

Для примера воспользуемся официальным рейтингом шахматистов от ФИДЕ, поскольку речь сегодня шла именно о нём.

Логично сделать следующие 5 шагов:

  1. Определить URL нужной страницы и получить её, проще всего целиком через функцию file_get_contents;
  2. Изучить формат полученной страницы, найдя фрагменты разметки, "от которого" и "до которого" нужно копировать. Альтернатива - более интеллектуальный подход, связанный с разбором DOM документа средствами Javascript или специализированных PHP-библиотек;
  3. Отрезать нужную часть страницы и отделить её (см. в коде функцию process, не изменившуюся с процитированной заметки);
  4. Сделать в выдранном фрагменте замены по некоему элементарно устроенному списку $replacements (что => на_что), например, относительные ссылки на абсолютные, английские названия столбцов таблицы на русские и т.д.;
  5. Показать обработанный фрагмент, поместив его в отдельный тег <iframe> или просто встроив код в "движок" в нужном месте.

Вот полный код скрипта, реализующего данный подход, проверен на локалхосте, где сработал на момент написания заметки. Возможно, в будущем придётся поменять настройки $start и $end в начале кода.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <meta content="text/html; charset=utf-8" http-equiv="content-type">
 <title>FIDE rating</title>
</head>
<body>

<?php
 //Настройки
 $url = 'http://ratings.fide.com/top.phtml?list=men'; //URL для извлечения данных
 $start = '<div id="main-col">'; //С чего начать
 $end = '<span class="article_separator">'; //Чем закончить
 $replacements = array ( //Что на что заменять перед показом
  '/top_files.phtml' => 'http://ratings.fide.com/top_files.phtml',
  '<b>Rank</b>' => '<b>Место</b>',
  '<b>Name</b>' => '<b>Имя</b>',
  '<b>Title</b>' => '<b>Титул</b>',
  '<b>Country</b>' => '<b>Страна</b>',
  '<b>Rating</b>' => '<b>Рейтинг</b>',
  '<b>Games</b>' => '<b>Игры</b>',
  '<b>B-Year</b>' => '<b>Возраст</b>'
 );
 //Код
 function process($s,$start,$end,$include) { 
  $s1=strpos ($s,$start);
  $s2=strpos ($s,$end);
  if (!is_integer($s1)) { return "Не найден начальный сегмент: ".htmlspecialchars($start); }
  if (!is_integer($s2)) { return "Не найден конечный сегмент: ".htmlspecialchars($end); }
  if ($s1>$s2) { return "Конечный сегмент предшествует начальному"; }
  if ($include) { //Включать начало и конец
   return substr ($s,$s1,$s2-$s1+strlen($end));
  }
  else { //Исключить начало и конец
   $s1+=strlen($start);
   return substr ($s,$s1,$s2-$s1);
  }
 }
 $string = process (file_get_contents($url),$start,$end,false);
 echo str_replace (array_keys($replacements),array_values($replacements),$string);
?>
</body></html>

Размещать скрипт следуют в Юниколе (UTF-8). Вот в работе.


теги: php шахматы вебдезигн

комментарии (0)

30.08.2015, 21:03; рейтинг: 4553

  в началопоиск по блогунаписать авторустатистика

Наверх Яндекс.Метрика
© PerS
вход