Поиск по блогу

среда, 30 сентября 2009 г.

Мысли об RSSAdder-е и свободнораспространяемом ПО вообще

В этот крайний день первого месяца осени решила подвести кое-какие итоги относительно RSSAdder-а. Программа выложена на потеху публике уже почти полтора месяца. За это время ее скачали около двухсот человек. Ini-файл (тот, который со списком из 45 агрегаторов вместо изначальных 20) скачали всего 70 раз, почти в 3 раза меньше, чем саму программу. Что, в общем-то, говорит о многом ;D. В частности о том, что большинство людей, скачивая программу, за обновлениями не следят. Чего я добилась? Не знаю, я и не рассчитывала на что-либо, это был своего рода эксперимент: почувствовать себя в роли техподдержки свободнораспространяемого ПО. Спасибо людям, оставляющим свои отзывы о программе. Мне очень приятно знать, что она оказалась полезной еще кому-то кроме меня :)

Хотя вынуждена констатировать факт: надежды на то, что некоторый процент пользователей поддержит мою инициативу и добавит в конфиг новые RSS-агрегаторы самостоятельно, да еще и пришлет эти настройки мне, чтобы я смогла все собрать и выложить в общий доступ, не оправдались. Присылали только списки агрегаторов, добавлять приходилось самой (неудивительно, почему мне все это так быстро надоело, да :)) ) Может, сама виновата, не исключаю (непонятная инструкция? непонятные цели? все непонятное?). Очень подробный отзыв о программе можно прочитать на блоге Профессора. Там тоже отмечается, что не хватает справочной системы. Но не знаю, доберуться ли руки (сейчас я с головой совсем в других делах).

Спасибо автору блога ochonline.ru и "соратнице по IT-цеху" Лорел за информационную поддержку :) Добавлены:

46 http://news.nofollow.ru/?page=addrss
47 http://catalog.gpmv.ru/add/1
48 http://www.rss-lenta.ru/rss/add
49 http://rssbiz.ru/add_src/
50 http://rssmonster.ru/index.php?module=rss&action=rss_submit
51 http://ay2.ru/index.php?module=rss&action=rss_submit


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

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


Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

вторник, 22 сентября 2009 г.

Примеры применения CURL. Парсинг ключевых слов (буржунет)

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

Сначала о том, что парсить. А будем парсить ключевики. Но не с гугля, нет. Поищем в интернете какой-нибудь сторонний сервис. Первое, что я нашла, это http://freekeywords.wordtracker.com/. Изучаем страницу. На ней форма. Заполняем, отправляем.


Экспериментируем с adult-фильтром.


Данные передаются GET-запросом, то есть вообще никаких премудростей — просто используем функцию получения контента из предыдущего поста, а потом регуляркой добываем нужные нам данные. Шаблон GET-запроса получаем, введя данные непосредственно в форму на сайте, установив нужное нам значение adult-фильтра и нажав на кнопку. У меня получился следующий шаблон (значение фильтра — по умолчанию):

$url = 'http://freekeywords.wordtracker.com/?seed='.$keyword.'&adult_filter=remove_offensive&suggest=Hit+Me';


(Вместо $keyword будем подставлять ключевик.)

Следует обратить внимание, что если в анализируемом нами ключевике несколько слов, разделенных пробелом, то пробел заменяется на "+".

Вот такой у нас получится скрипт (в результате все 100 ключевиков я просто выведу на экран, но можно их записать в файл и т.д.):

<?php
function get_web_page( $url )
{
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}

// ключевое слово
$keyword = 'finance';
// избавляемся от пробелов, если они есть
$keyword = strtr($keyword, ' ', '+');

$url = 'http://freekeywords.wordtracker.com/?seed='.$keyword.'&adult_filter=remove_offensive&suggest=Hit+Me';

$result = get_web_page( $url );
$err = 0;
if ( $result['errno'] != 0 )
{ //... ошибка: неправильный url, таймаут, зацикливание ... обработать по желанию
$err = 1;
}

if ( $result['http_code'] != 200 )
{ //... ошибка: нет страницы, нет прав ... обработать по желанию
$err = 1;
}

$page = $result['content'];

$a_pattern = '#<a\shref="(\?seed.*?)">(.*?)</a>#sm';
if (preg_match_all($a_pattern, $page,$a_matches, PREG_SET_ORDER))
{
foreach ($a_matches as $a)
echo $a[2].'<br>';
}
else echo 'Ничего не найдено!';
?>


Результат работы скрипта:


Если нам ключевиков надо не сто, а в разы больше, то придется модифицировать алгоритм для рекурсивного прохода по списку ключевиков, полученных на ранних этапах.

Зачем нам нужны эти ключевики? Применение можно найти. Об одном из способов применения расскажу в ближайшем посте.

Если вам понравилась статья, проголосуйте, пожалуйста, за нее на Sloger.net

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Установка CURL на Denwer

CURLРаз уж решила здесь писать про CURL, то напишу и про установку. А конкретно — про установку на Denwer. В базовый пакет PHP, поставляемый с Denwer-ом, она не включена. Но это недоразумение легко устранить.

1) Cкачиваете пакет расширения "PHP5: дополнительные модули": http://www.denwer.ru/packages/php5.html
2) Устанавливаете его
3) Открываете в редакторе файл usr/local/php5/php.ini и снимаете комментарий со строчки:

;extension=php_curl.dll


4) Denwer Restart Servers

Вот и все. Чтобы убедиться, что все установилось нормально, можете проверить данные, сгенерированные функцией phpinfo(). Там должно быть cURL support enabled.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

понедельник, 14 сентября 2009 г.

CURL. First steps

Как правило, изучение нового инструмента всегда откладывается: "Потом. Еще успеется. Надо собраться с мыслями и все такое". Именно так у меня когда-то откладывалось начало работы с библиотекой CURL (Client URL). Эта статья будет для новичков. Главная ее цель — показать, что ничего страшного здесь нет. И можно получить базовые представления за те 10 минут, которые уйдут на чтение статьи. Более того — вы сразу можете опробовать новые навыки в деле, используя листинги простейших функций, которые я буду приводить по мере раскрытия темы.

Прикинув приблизительный объем материала, я поняла, что в одну статью все не влезет, так что продолжение будет следовать :)

Для того, чтобы начать работать с библиотекой CURL, ее надо установить. Инструкций установки CURL в сети найти можно много, поэтому останавливаться на этом не буду.

Перейдем сразу к работе. Разберем простой пример использования библиотеки CURL для получения кода страницы. Этот пример вы можете часто встретить в листингах скриптов (я взяла его с какого-то форума).

function get_web_page( $url )
{
$uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

$ch = curl_init( $url );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}


В эту функцию в качестве параметра передается URL, а возвращается ассоциативный массив, состоящий из заголовка и содержимого страницы. Функции CURL автоматически управляют редиректами, кукисами, декомпрессией файлов.

(Как хорошо, что в блоггере появилась простая возможность скрывать часть поста под кат! Сейчас, наконец, на главной не будет простыней листингов. А читателям, я думаю, будет не сложно один лишний раз кликнуть на "Читать далее")

четверг, 3 сентября 2009 г.

Работа с формами в TWebBrowser

Эта статья — своеобразное логическое продолжение статьи об OleObject в TWebBrowser, переведенная мной. В ней содержится информация о том, как получить доступ к данным о формах, расположенных на странице в TWebBrowser, и к элементам этих форм.

Основные вопросы, которые будут освещены:

Получение количества форм на странице
Обращение к форме по порядковому номеру
Получение имени формы
Получение доступа к форме по имени
Получение списка имен всех элементов формы
Получение value элемента формы (по name элемента)
Установка value элемента формы (по name элемента)
Сабмит формы


В листинге примеров, приведенных в этой статье, компонент TWebBrowser, в который загружаются страницы, на форме называется WebBrowser. Для работы с интерфейсами, приведенными в листингах, подключите библиотеку MSHTML.

среда, 2 сентября 2009 г.

Add to RSSAdder

Пост для тех, кто пользуется RSSAdder-ом.
В нашем полку прибыло. Встречайте еще 15 RSS-агрегаторов, включенных в список.
31 http://demohost.net/rssdirectory3/addfeed.html?catid=
32 http://www.leighrss.com/rss-add.html
33 http://www.2rss.com/
34 http://www.icerocket.com/c?p=addblog
35 http://www.aspin.com/func/addres/rss-support
36 http://www.weblogalot.com/Ping/
37 http://www.feedplex.com/add-url.php?email=
38 http://www.goldenfeed.com/AddFeed.aspx
39 http://www.jordomedia.com/RSS/l_op=Addrss.html
40 http://www.anse.de/rdfticker/addchannel.php
41 http://rss.ukrnews.net/reg.php
42 http://www.rssmicro.com/feedsubmit.web
43 http://www.readablog.com/AddFeed.aspx
44 http://www.redtram.com/pages/addsource/
45 http://www.realty-feeds.net/submitrss.php


Новый ini-файл можно скачать тут (как и в прошлый раз — замените данные о моем блоге на свои).
___

Для тех, кто RSSAdder-ом не пользуется, новостей пока нет, так как нахожусь в творческих метаниях :)

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Поделиться