-->

Бесплатный информер Евро 2012

Кот программиста
С этим Евро 2012 творится такая чехарда, что просто диву даёшься, как кто-то в этом что-то понимает. Впрочем, не буду портить праздник поклонникам спорта, а особенно тем, кто на этом активно наживается. Собственно я для того и решил опубликовать данный пост, что на данный момент тема актуальная. Надо успеть воспользоваться. Создать хотя бы временный трафик. А лучше всего привлечь постоянных читателей! Благо интересного материала у меня с избытком. Так что поверьте, мне есть, что вам рассказать.


И так, сейчас многие пытаются нажиться на Евро 2012. Сайты публикуют новости, ставят различные информеры и т.д. Вот только найти нормальный и бесплатный информер Евро 2012 проблематично. Ну, действительно, кто же вам нашару будет выдавать такую информацию. Нашару не дату, но кто их спрашивает?

Лично я нашёл только один простенький и более-менее интересный информер обратного отсчёта до начала трансляций футбольных баталий Евро 2012 на портале UA-Traveling.ua. И то он полностью JavaScript и на английском. Если всё же интересно, получить его HTML-код можно на этой странице. Вот как могут выглядеть такие информеры:


Ну да ладно. Всё это детский лепет. Куда как интересней разместить на своём сайте более подробную информацию о баталиях Евро 2012. Не так ди? Я решил не мелочиться и посмотреть, откуда эту информацию берёт Яндекс для своего проекта Чемпионат Европы по футболу 2012. Там к слову явные глюки с распознанием региона. У меня почему-то на белорусскую версию перекинуло. Или так и задумывалось? Ну да не суть важно.

Главное, что информацию они берут на сайте Sports.ru. Это один из источников. Я зашёл на этот сайт и заметил, что информер «Статистика» с таблицей, результатами и календарём у них подгружает динамически. Жаль, что не в виде XML или json, но тем не менее. Главное, что нужную информацию вы можете полeчить по адресу:
sports.ru/stat/gadget/rexona/{tournament_id}.html?sport_id={sport_id}&is_full=0
Значения {sport_id} и {tournament_id} вы найдёте в соответствующих списках. Я же остановлюсь на таком виде спорта как футбол и статистике Евро-2012. Этот информер имеет следующий URL адрес:
sports.ru/stat/gadget/rexona/544.html?sport_id=208&is_full=0
Как вы можете убедиться, нам возвращается HTML фрагмент. Понятно, я не стал заниматься детальным разбором этих данных, просто вырезал <table> таблиц, результатов и календаря. В них я убрал все ссылки и теги <noindex>. В результате получилось три бесплатных информера Евро 2012.

PHP парсер информера Евро 2012

Первое, что нам понадобится, это конечно функция считывания упомянутых данных под прикрытием обращения браузера. Другими словами, для этих целей я использовал cURL. А вот и сама функция:

function get_curl_contents($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_TIMEOUT, 15);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100416 Mandriva Linux/1.9.2.3-0.2mdv2010.0 (2010.0) Firefox/3.6.3');
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  return curl_exec($ch);
}


Ну а теперь функция парсера информера Евро 2012.

function get_free_euro_2012_informers() {
  $url = 'http://www.sports.ru/stat/gadget/rexona/544.html?sport_id=208&is_full=0';
  $informers = array();
  $contents_informers = get_curl_contents($url);
  if ( preg_match_all("#<table class=\"stat-table(.*)?\" cellpadding=\"\d\" cellspacing=\"\d\">(.*)<\/table>#isUm", $contents_informers, $m) ) { // Таблица
    $informers = $m[0];
    foreach ( $informers as $k=>$v ) {
      $v = preg_replace("/<a[^>]*>(.*)<\/a>/iU","$1", $v); // убираем тег <a>
      $v = preg_replace("/<[\/\!]*?noindex[^>]*>/iU","", $v); // убираем тег <noindex>
      $informers[$k] = $v;
    }
  }
  return $informers;
}


Как вы видите, ничего сложного здесь нет. Вытаскиваем таблицы, обрабатываем и получаем массив из информеров. Как этим пользоваться? Ещё проще, чем написать сам парсер. Приведу следующий пример вывода информеров на экран.

$informers = get_free_euro_2012_informers();
echo '<h1>Футбол Евро-2012</h1>';
echo '<p><b>Таблица</b></p>' . $informers[0];
echo '<p><b>Результаты</b></p>' . $informers[1];
echo '<p><b>Календарь</b></p>' . $informers[2];


Отмечу, что данные получаются в кодировке UTF-8. Если надо преобразуйте их в нужную вам кодировку. Также рекомендую кэшировать эти данные, дабы не создавать лишних подозрений и не нарваться на блокировку по тому же IP. Я же говорил, что мне есть, что вам рассказать. Подписывайтесь! Продолжим.

Оформляем информер Евро 2012

В полученном HTML коде я оставил все CSS классы. Сделано это для того, чтобы вы могли оформить свой информер надлежащим образом. Я не буду вдаваться в детали. Коротко остановлюсь лишь на такой штуке как флаги. В коде они представлены, к примеру, так:

<i class="flag-s flag-1285" title="Россия" alt="Россия"></i>

Как вы видите, в данном примере, тег <i> содержит CSS классы flag-s и flag-1285. Лично я рекомендую сразу скачать готовый CSS файл с сайта Sports.ru. Доступен он по адресу:
s5o.ru/common/css/flags.css
Нет, я ничего не напутал, это их домен и нужный CSS файл находится именно по этому адресу. В нём вам нужна исправить всего лишь первую строчку, прописав надлежащий путь к картинке с флагами (выделено жирным).

.flag-s {
  background-image: url(i/flags-sprite.png);
  background-repeat:no-repeat;
  display:inline-block;
  width: 16px;
  height: 12px;
}


Сама же картинка с флагами доступна по адресу:
s5o.ru/common/css/i/flags-sprite.png
По крайней мере, на момент написания поста всё так и было, вполне себе хорошо работало и т.д.

Послесловие

Напоследок хочу вас предупредить, что этот парсер представлен только в виде примера. Я не несу ответственности за последствия его использования. Вы делаете всё на свой страх и риск. Более того, я не обязуюсь кого-то консультировать по вопросам связанным с этим парсером, что-то править и исправлять. Нет, конечно, в комментариях я отвечу, просто для расстановки всех точек над «ё» упомянул. В общем, вы предупреждены. Удачи!

Бесплатно скачать информер Евро 2012 в качестве примера для личного ознакомления вы можете по этой ссылке.

Twitter Facebook ВКонтакте Одноклассники Google+

8 комментариев:

Дмитрий
Привет!
Константин, поражаюсь твоему трудолюбию. Ведь каждый день авторская статья, а то и две. Причем ведь у тебя еще проекты есть. Ты тайм - менеджементом пользуешься?
wmascat
Дмитрий, если тема по моему тайм-менеджменту интересна, могу написать пост. Просто это будет одна из вариаций и не более. Опять же тема очень обобщенной получится. Продвинуть её в поисковиках будет сложно. Потому выжидаю, но если есть интерес у читателей конечно напишу. Так как?
Дмитрий
Мне было бы интересно почитать твое мнение. Про тайм-менеджмент слышал что то краем уха, не более. Слышал звон, да не знаю, где он. Ну у Голубицкого пару статей читал на эту тему.
wmascat
Напишу. Вся проблема в том, что тайм-менеджмент, на мой взгляд, зачастую индивидуален, но не суть важно. У меня очень простой подход, подойдёт если и не каждому то большинству.
Дмитрий
Ура, дискус поставил :-) А старые комменты как?
Константин
Пока импортируются, жду. Сейчас потихоньку настраиваю и пишу пост. Вот тебе, к слову, и немного из того как я организую своё время :-)
Анонимный
Помогите, как кешировать данные?
wmascat
Подпишитесь на RSS-блога, можно по e-mail, я буду об этом писать ;)
Отправить комментарий