Парсим сайты на php

Так повелось, что rss стал отходить в сторону. Новости и анонсы стали помещать в twitter. А некоторые вообще не утруждают себя такой вещью, хочешь новостей зайди на сайт.

Потребовалось мне собирать новости по всем провайдерам нашего города. Провайдеров много, конкуренция большая, провайдеры борются за клиента кто как может. Сейчас с почти самой низкой ценой в РФ, провайдеры стали предлагать дополнительные услуги.. в общем новостей полно и в ручную ходить по сайтам и собирать новости сплошные мучения.

И так у нас есть: лень, еще немного лени, знание php, выделенный сервер, немного рабочего/домашнего времени что бы все автоматизировать и пореже прикасаться к этому.

Берем для примера Росстелеком, а конкретно Воронежское отделение http://www.voronezh.center.rt.ru/press/news/

Для начала, чем разбирать… я предпочел simplehtmldom, ибо прост, документирован, удобен и регулярные выражения ломают мне мозг.

Для генерации RSS воспользуемся готовым классом, написанный англоговорящим индусом. Прост, но нуждается в небольшой правке.

В файле FeedWriter.php 298 строку надо привести к виду

$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent :htmlentities($tagContent, ENT_QUOTES, 'UTF-8');

иначе у нас будут кракозяблы.

И так простенькая функция для получения данных curl, ибо ограничения на сервере.

function getUrlFromCurl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$urlhtml = curl_exec($ch);
curl_close($ch);
$html = str_get_html($urlhtml);
return $html;
}

$url = "http://www.voronezh.center.rt.ru/press/news/";
$url2 = "http://www.voronezh.center.rt.ru";

$html = getUrlFromCurl($url);

$Feed = new FeedWriter(RSS2);

$Feed->setTitle('Росстелеком');
$Feed->setLink($url);
$Feed->setDescription('Ростелеком - Воронежская область - Пресс-центр');

$dom = $html->find(".newsblock");
  • Заносим url в переменную.
  • Хватает curl страницу.
  • Создаем новый объект Feed
  • У нового объекта устанавливаем заголовок, url, и описание.

Значит нам нужны все div с классом newsblock. Соответственно хватаем нужно с помощью

$dom = $html->find(".newsblock");

Далее разберем массив

foreach ($dom as $value) {
$zagNews = $value->find(".zagNews",0);
$title = $zagNews->find('a',0)->plaintext;
$link = $zagNews->find('a',0)->href;

$html2 = getUrlFromCurl($url2.$link);

$news = $html2->find(".news-item",0);
$date = $news->find("h4",0)->plaintext;
}
  • Хватаем вложенный div с классом zagNews, и он у нас 0 элемент
  • Ищем в нем тег a и хватаем из него текст, это будет заголовком
  • От туда же хватаем ссылку, по которой мы потом перейдем и скачаем всю новость.
  • Скачиваем новость целиком curl
  • Полностью запись оформлена в div с классом news-item
  • Оттуда же хватаем дату новости, она зачем то оформлена заголовком h4 и берем ее как plaintext.

Осталось оформить это в фид и получится код

<?php
include_once 'simple_html_dom.php';
include_once 'FeedWriter.php';
header("Content-Type: text/html; charset=utf-8");

$Feed = new FeedWriter(RSS2);
$url = "http://www.voronezh.center.rt.ru/press/news/";
$url2 = "http://www.voronezh.center.rt.ru";
$html = getUrlFromCurl($url);

$Feed = new FeedWriter(RSS2);
$Feed->setTitle('Росстелеком');
$Feed->setLink($url);
$Feed->setDescription('Ростелеком - Воронежская область - Пресс-центр');</code>

$dom = $html->find(".newsblock");

foreach ($dom as $value) {
$zagNews = $value->find(".zagNews",0);
$title = $zagNews->find('a',0)->plaintext;
$link = $zagNews->find('a',0)->href;

$html2 = getUrlFromCurl($url2.$link);

$news = $html2->find(".news-item",0);
$date = $news->find("h4",0)->plaintext;

$Item = $Feed->createNewItem();

$Item->setTitle($title);
$Item->setLink($url2.$link);
$Item->setDate($date);
$Item->setDescription($news);

$Feed->addItem($Item);
}

$Feed->genarateFeed();

function getUrlFromCurl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$urlhtml = curl_exec($ch);
curl_close($ch);
$html = str_get_html($urlhtml);
return $html;
}
?>

Недостатки:

  • Слишком долго парсится, т.к. не мультипоточный и тянет каждый раз все записи (для больше надо пользоваться curl_multi)
  • Писать в БД было бы разумнее
  • Это получился фид для себя любимого, который рассчитан на 1 проверку в час. Если будет много пользователей — начнутся проблемы
  • simplehtmldom не лучшая по скорости библиотека, хоть и проста
  • simplehtmldom ломается на не валидной или кривой разметке

Внедрение Linux в госучреждениях Мюнхена позволило сэкономить 10 млн евро

Исследование экономической эффективности перехода государственных учреждений Мюнхена на Linux и свободное программное обеспечение показало, что данная инициатива позволила сэкономить городу от 8 до 12.8 млн евро бюджетных средств. Результаты сравнительного расчёта бюджета, показавшие столь большую экономию средств, были оглашены независимой группой Free Voters на состоявшемся несколько дней назад заседании городского комитета по информационным технологиям.

Новость целиком

Довольно интересные данные. Причем, скорее всего, сокращение расходов связано не только с отсутствием потребности покупать лицензии. Когда какое либо внедрение\реорганизация вызывает потрясение, люди пытаются разгрузить себя заодно под шумок. Конечно, может более часты ситуации, когда люди просто пытаются саботировать новшество, но когда они понимают, что это бесполезно, а кто будет мешаться — просто выкинут с дороги, начинает думать и пытаться получить из этого максимально пользу.

работа номер кажется 3

Уже больше полгода работаю в аутсорсинговой компании Р-Терминал, а заодно немного в дочерней компании ЦКП123. До работы идти 15 минут. Маленькая динамичная уютненькая компания. Работать в которой приятно, кроме мелких моментов.

Потихоньку двигаюсь вверх. Недавно взяли 2 человек, которых возглавляю я. Это мне непривычно и тяжело. Я не смотрю слишком локально, и не всегда получается посмотреть глобально, охватить взглядом полный спектр проблем и задач. В плане развития чуть похуже — нет более опытных коллег в области web, которые бы работали над этим, под началом которых возможно было бы поработать. А так хочется, что бы хоть немного подсветили дорогу в сторону изучения ООП, php frameworks, javascript.

Самое сложно это работа с людьми и представителями двуногих. Абсолютно 2 разных биологических вида человека. С первыми возможно работать — иногда да же приятно, иногда трудно, но всегда возможно. Эти люди всегда идут на контакт.

Другой вид двуногих прямо ходящих не разумных  в основном обитает на разных должностях в государственных конторах. Работать практически не возможно, только отбиваться, что бы не съели. Часто визжит в истерики «сделать срочно», «срочно почините», «ничего не работает»… постоянно стоит раком.  Никаких долгосрочных планов, планов развития. Бюджет или есть и его надо быстро израсходовать и распилить (почти обязательно распил, не важна заслуга заслуга этих индивидов в работе или в проекте — пилить бюджет хотят все.) или нет, тогда включается логика нищеброда и начинаются принимать решения самые дешевые, даже если потом они нанесут убытки. Так же эти животины глупы, но хитры, абсолютно безвольные, идут голосовать за ЕР и Пу по первому писку.

Но не все так плохо. Все просто хренов в гос. секторе 🙂 Но хорошо, что не только гос. конторы есть. В большинстве случаев с частными фирмами приятно работать. Хоть идиоты находятся и там (они есть везде, главное их соотношение к нормальным), но всегда можно обратится напрямую к руководству и на тебя не будут смотреть как на смертного смевшего побеспокоить богов.

Если вы думаете, что 21 век, век технологий и мобильности, а админы, курьеры и бухгалтера не нужны  — вас подставили. Передовые технологии почти не заметны. Облака, телефония, мобильные офисы, сплошной аутсорсинг… все это в начальном состоянии и в мечтах прогрессивного руководства.  Для многих является огромным шагом в перед это использование выделенного сервера с proxy, собственной почтой, терминалами и резервным копированием. Многие руководители хотят видеть сотрудника в офисе, сервер в серверной или комнате, а ip телефония это офисная АТС только дорого.

Так же удивляет безналичный расчет — деньги то безналичные, а вот счет вполне бумажный, и скорее всего в 2 экземплярах и с актом. и это дело каждый месяц надо распечатать, проштамповать, подписать и развести клиенту. А это занятие для 2 человек на 1-2 дня и так каждый месяц.

Ооо… а налоги у бухгалтерский учет. Это головная боль для всех. Ты бы и рад заплатить, но только бы не заморачиваться, но не можешь. Тебе всегда будут иметь за свои деньги и за твое желание «спать спокойно».  Лучше с этим государством не иметь ничего общего и держаться подальше.

Немного советов по сборке ПК

За некоторое время выработал для себя схему. Почти что рациональный подход.

  • Не обращать на технологические фишкиплюшки особого внимания, если они не важны в работе. Т.к. большинство раскручено маркетологами и не имеют особой ценности, а переплачивать приходится нам.
  • Почти все ломается. Пусть 1%, но нет гарантии что этот 1% не придется на тебя. Поэтому выигрывает при выборе тот у кого больше гарантия.
  • Не какого фанатизма. Intel VS AMD, NVIDIA VS ATI. Выбираем под бюджет то что производительней. И по срачам на форуме, а по тестам. Вот для процессоров, а вот для видеокарт. Можно, любые другие — не в этом суть.
  • Если ПК закупаются массово для фирм, то лучше узнать заранее условия в фирме. Если ничего особенного, то электронная таблица (Excel, Calc и т.д.) в руки и считать по тем же тестам — при каком варианте единица производительности стоит меньше. Обычно получаются среднячки. Старые железяки почти в этот список не попадают.
  • Не ищите себе проблем. Некоторые железяки проблемные (легко находятся такие по отзывам). не брать их. Потом же ведь это все придется поддерживать. За качество и стабильность иногда можно чуть чуть и переплатить.
  • Жесткие диски одно из слабых мест. Чем больше на них гарантия тем лучше. WD на некоторые модели дает гарантию 5 лет. И всеравно, лучше их объединить в raid0 и желательно софтверный.
  • ОЗУ — чем больше ее тем лучше. Ибо быдлокод шагает по миру. И да не экономьте на ECC. Оно того стоит.

Не имеющий аналогов в мире…

Вот лежал я с высокой температурой от отравления и думал о чем попало. А тут еще и будубывшему перзиденту презентовали «планшетный компьютер не имеющий аналогов в мире без кремния». И хоть это всего лишь прототип продукта компании Plastic Logic, а по 1 как всегда наноебалово (кстати электронная книжка не так уж плоха, она e-ink, почти формата A4 и без хрупкой стеклянной подложки). Да пофиг на политиков. Почему это все обезьянство? Почему у нас 3 сильные отрасли + 4 в подарок (дураки). Почему офисный планкон пожирая за барной стойкой (успешный офисный планктон) соревнуется в игру — я ничего не делаю и мне платят N тыч. рублей?
А теперь мы вспомним как нас готовили к «Взрослому миру»:
1. Школа. Первый класс. Радость. А потом разочарование. А почему? Да потому что скучно и уныло. Эта система провоцирует на тупое копирование. Сочинение на тему «Образ Евгения Онегина». Многие ли писали это сами? Да кажется все или забивали или копировали из сборников готовых сочинений, сейчас интернета. Было 1-3 кто сам мог написать это. Так же и по всем остальным предметам. Индивидуальные задания ученикам? Да о чем вы?!
2. Техникум — первые курсы уныние и тупое копирование. Записывание под диктовку лекций. Отклонения от общей программы почти не возможны. Убивает скукой насмерть. Складывается ощущение, что это чтение вслух для не умеющих читать. Я сам могу это прочитать и скорее всего разобраться. Скажите где смотреть и к какому сроку сделать?
3. Середина обучения в техникуме… 80% тупого копирования и зазубривания. Но, появляются специальные предметы. Которые могут вызвать интерес у студентов. Но если преподаватель ничто, то этот интерес зарубит на корню.
4. Техникум, завершение обучения. Почти все специальные предметы. 50% копирования. Но при желании эта величина может стремится к 100% и да же ее достигать, и вы то же закончите техникум, и возможно да же на отлично. На дипломную вам скорее всего выдадут кучу готовых тем и кучу готовых дипломов. Которые можно переделать и сдать, а можно и не переделывать, главное титульник и даты изменить.
Индивидуальные работы очень редко стимулируются. Имеют поддержку, но не особо энергичную со стороны преподавателей. Выбираешь не стандартные инструменты, остаешься наедине с ними за бортом сам. Будут помогать только в оформлении работы. Поощрения почти никакого.
5. Институт не имеет смысла описывать, ибо та же фигня. Причем поощряется симуляция изобретения велосипедов. Вас плохо оценят если вы разберетесь готовом проекте и дополните его.

И так, нас 16 лет учат копировать, копировать и копировать. Создавать, дополнять учатся те, кому повезло или просто вопреки системе. Какие инновации? Да кто эти инновации будет делать?

Так что же все так плохо? Да возможно, а может и нет. Почему бы в школе не выяснить вкусы ребенка и давать ему задания в той области, которые ему нравятся. Зачем эти дурацкие сочинения на образы…да не понимают дети в этом возрасте классической литературы. Пусть читают то, что нравится и могут это описать, сами описать. Зачем эти чтения и записывания лекции в институтах? Есть книги. М.б. лучше практикой заняться?

truecrypt на страже паранойи

В очередной раз мама попросила сделать «ксерокопию паспорта». Каждый раз делать копию мне надоело, а хранить на ЖД как то было не по себе. Некоторые важные документы были уже на ЖД, но очень мало и те, которые важны только мне. Про TrueCrypt знал давно, пробовал тыкать, но как то не нужно было. Решил поставить (естественно все под Debian linux).
Как скачать и установить ничего трудного нету.
Что нужно знать:
1. Алгоритмы шифрования лучше комбинированные (допустим AES+Twofish)
2. В указание размера контейнера без фанатизма (сколько укажешь столько и будет размер в не зависимости от наполнения).
3. Ключи и пароли должны быть большими и страшными (иначе какой смысл этих телодвижений)
4. Создавать файл контейнер лучше в FAT (примонтировать можно везде)
5. Что бы не парится с монтированием от root или через sudo в /etc/sudoers добавляем строчку username ALL=(root) NOPASSWD:/usr/bin/truecrypt И все теперь страшная но прекрасная консоль вам не потребуется. Монтировать в папку контейнер можно будет от обычного вашего пользователя и писать можно будет от него… вообще Это просто работает 🙂

Воруй, наглей, радуйся жизни.

Одна из предыдущих записей была о том, что приходил тип хотел заключить договор на «обслуживание газа», однако мы ничего не подписали.
Но сегодня пришла очень интересная квитанция:

Небольшой фокус и мы теперь оказывается «получаем услугу», которой не получали и не хотим получать. Это такая модная тенденция заданная нашей монополией «Большой тройкой»?
Будем разбираться, платить за не известно что не собираюсь.

p.s. Выяснил. «Техническое обслуживание» является обязательной услугой для получения газа. Однако, получать вы можете у любой компании или лица имеющие соответствующую сертификацию. Межригионгаз считает лишней уведомлять своих клиентов и предоставлять им информацию и выбор. Договор заключает сам без вашего участия.

Студенческая практика Часть 1

Все началось с того, что один из преподавателей предложил пройти оплачиваемую практику. Надо было на предприятии, занимающейся железобетонными изделиями, замещать начальника IT (или просто админа) ушедшего в отпуск.  Я согласился, деньги и опыт не бывают лишними.

Приехав большей частью группы на предприятие (пришлось немного порыскать), нашли нужного нам человека — Алексея, он позвонил преподавателю. Спросил меня по фамилии, типа меня рекомендовали. Сказал что можешь взять еще 1 человека, а остальные свободны. Я выбрал одногрупника Антона, хотя просто и выбирать не из кого было. Познакомились с главбухом который пугал, что если сеть упадет и сервер остановится то предприятию капец, договорились об оплате.  С Алексеем договорились встретится в определенный день, что бы ознакомится с обстановкой, техникой, людьми, посмотреть территории, обменялись телефонами на том и распрощались.

Спокойствие нарушила какая то «активная личность» из института, решившая нас ознакомить с местом проведения практики. Я послушав с утра ее речи по телефону, что то промычал в ответ, выключил телефон и продолжил дальше спать.

Пришли в оговоренное время на предприятие. Встретили с админом и началась экскурсия по предприятию. Около 30 компов по всему предприятию, огромнейшие территории, запутанная локалка, куча разношерстных принтеров и непонятная обязанность сдать отчетность в пенсионный фонд и кажись налоговую, через программу «Автрал-Отчет». Задавал вопросы, попросил составить бумажку с логинами/паролями.

О территории стоит написать отдельно. Они огромны! От админской до самого удаленного компа находящегося на территории надо было шагать минут 10-12. Расслабляться во время этого похождения нельзя  — ездят машины, краны, краны по рельсам, всякие тележки, кучи арматуры и оборудования. Эмо просто растеряется в выборе, как покончить с собой. Отдельный ужас это формовочный и арматурный цех — все движется, летят искры, куча арматуры и оборудования. При нарезки арматуры летели снопы искр и отрезанный кусок летел с диким грохотом в стальной лист и падал отскочив в ящик. Другие цеха не особо наводили ужас, но всеравно тебя просто могли переехать или придавить плитой, если зазеваешься. Так же 2 здания управления, 2 проходные.

Первый день. Он был ужасен. Вставать рано. Хорошо, что с одногрупником ездили на его машине. Жара была ужасная. Кондиционера в нашей админской не было предусмотрено, с нами была еще бухгалтерша по зарплате 🙂

Бухгалтер

Посмотрели на рабочее место, ужаснулись и стали наводить порядок. Вычищали, вымывали, складировали бумажки, коробки и т.д. в одну кучу. Потратили все дообеденное время на это. Работы так таковой не было вообще, поэтому мы решили ходить вместе, иначе со скуки помрешь. Антон свалил после обеда по своим делам после обеда, правда вернулся забрать меня потом. После обеда делать было особо нечего. Пару раз вызвали помочь с экселем и вызвал ревизор, не нравилось как печатает принтер. Проблемы были решены быстро. И я сидел на своем рабочем месте и страдал фигней. Плевать в потолок было бесполезно, он слишком высоко. Венда XP была так же загажена как и рабочее место :
Снимок пуска в венде

От бухгалтера Светланы узнал, что админ перед нами еще убирался 🙂

Вот фотографии рабочего места после нашей уборки:
что-то
Стопка бумаг на столе
Общий план

Как то вот так и первый день закончился.

Сектанты газообслуживания

Сегодня постучался некий человек представился, что предоставляет услуги газобслуживания, предложил заключить договор, довольно любопытный.

 



 
Что интересно, обладают они старыми данными о квартире (хотели увидеть старого владельца квартиры), прейскурант скромненький. Услуги, за которую я бы сам хотел бы заплатить, типа «техническое обслуживание и ремонт газового и сопутствующего оборудования по запросу клиента». Идите лесом с такими договорами 😉

Про патч sched_autogroup для linux

В месте с общей волной решил попробовать «killer feature» патч, про который  прочитал тут. С новым ядром 2.6.36 возникли проблемы — ядро собралось и загрузилось, но установить nvidia драйвера не удалось.  Однако, нашел на http://pavlinux.ru/ патч переделанный под ядро 2.6.35.8 http://pavlinux.ru/krnl/sched_autogroup-2.6.35.8.patch.bz2  Поставил. Все работает. Драйвера nvidia ставятся и работают.

Впечатления не однозначные. Переключение между окнами стало моментальное. Особенно стало комфортно работать с виртуальной машиной — переключение между виртуальной машиной и программами происходит быстро. Но, те же виртуальные машины стали чуть дольше запускаться. Так же запускаются медленнее программы из-за того, что отсутствие BFS  патч.

Вообщем, тем кто работает с виртуальными машинами, компилирует в 64 патока и работает с тяжелыми приложениями  и надо часто переключатся между этими приложениями на клиент мгновенных сообщений или браузер — этот патч для вас.