Инструменты сплогера
June 9, 2008Сплогом называют автонаполняемый блог, т.е посты тянуться с других блогов. Существует достаточно большое кол-во всевозможных скриптов главная или дополнительная функция которых парсинг RSS-лент, есть также плагины к популярным CMS. Я использую(как и большинство) WordPress+SmartRSS(feedwordpress\wp-o-matic). Плагины хорошо справляются со своей задачей, а про удобство и функциональность wordpress думаю рассказывать не надо. Что нужно для создания сплога? Во-первых сам wordpress.Качаем тут или тут. Во-вторых темы оформления, используйте для каждого нового сплога новую тему. Во многих темах футер закодирован, чтобы нельзя было убрать копирайты. Но нам нужно уменьшить кол-во внешних ссылок путем закрытия их тегами и noffolow или просто удалив их. Это делается довольно просто. Открываете исходный код страницы, удаляете закодированный код, обновляете страницу, снова открываем исходный код, сравниваем что не хватает и вставляем в исходный код футера. Можно просто удалить и поставить на место копирайтов <a href="<?php bloginfo(’siteurl’);?>/" title="<?php bloginfo(’name’);?>"><?php bloginfo(’name’);?></a>. Это уже зависит от совести. И плагины:
Anti-XSS attack - Защита/предупреждение XSS-атак.
Akismet - комментарии для сплога очень важны, это уникальный контент. А вот спам-комменты пользы не принесут. Для активации плагина нужно получить API-key на http://wordpress.com/api-keys/
Google sitemap generator -для быстрой индексации сплога. После написания поста этот плагин добавляет урл поста в XML-файл и скармливает этот файл гуглу. В sidebar.php вставляем ссылку <a href="http:///вашсайт/sitemap.xml" title="Карта сайта">Карта сайта</a>
WP-PageNavi -навигатор страниц. Кроме ссылок «следующей» и «предыдущей» плагин выводит ссылки на «начальную» и «конечную» страницы, а также на определенное кол-во страниц в виде цифр, что способствует быстрой индексации и увеличивает кол-во страниц 2-го уровня. После активации плагина, в разделе Настройки заходим на PageNavi, в Number Of Many Pages To Show? ставим например 10. В footer.php ставим <?php if(function_exists(’wp_pagenavi’)) { wp_pagenavi(); } ?>
Related Posts - выводит список релевантных записей. Этот плагин очень важен т.к. обеспечивает отличную внутреннюю перелинковку. После активации в разделе Плагины появиться раздел Related Posts Options. В графе How many related posts would you like to show ставим 7, опыт показал что 7 ссылок на релевантные записи дают наибольший эффект. В Before / After (Post Title) согласимся с рекомендациями и ставим <li> и </li>. После этого сохраняем настройки и жмем на ссылку this script которая находиться внизу страницы. Вполне вероятно, что скрипт выдаст ошибку “Sorry, you must be at least a level 8 user”. Чтобы этого не было нужно закомментирвоать 20-ю и 21-ю строки плагина.
//if ($user_level <
//die ("Sorry, you must be at least a level 8 user.");
// Make sure that user has sufficient priveleges В шаблоне "Одна страница" перед <?php comments_template(); ?> добавляем <?php related_posts(); ?>.
Это основные плагины. Я не упомянул плагины для создания облака тегов, кросспостинга, синонимайзеры и др потому что они обеспечивают дополнительный функционал сплога, про эти плагины отдельным постом. Помимо вышеописанных плагинов я использую Advanced-Admin-Menus, котрый делает меню в админки выпадающим, что существенно ускоряет работу.
C курением покончено
May 2, 2008 
Бросил после 5-6и лет курения, чему очень рад. Без сигарет намного лучше 
Тем кто мучается и не может бросить могу посоветовать Аудиокнигу: Аллен Карр - Легкий способ бросить курить
DepositFiles (Часть №1)
DepositFiles (Часть №2)
Зеркало (Часть №1)
Зеркало (Часть №2)
Качество: 192 kbps 44100 Hz Mono
Продолжительность:6 часов
Размер: 187 МБ
Хотя про нее наверное каждый слышал, но как всегда некогда… Оч удобо слушать в плеере. Способ оказался действительно легким - просто взять и перестать курить
Хотя я прослушал ее не полностью, а только до 17й главы, но курить бросил и начинать не собираюсь.
Заметил, что не только запах сигарет стал вызывать отвращение, но иногда и стоящий рядом источающий сигретные ароматы курильщик.
Создаем автонаполняемый блог
Статья о построении автонаполняемого блога на базе движка Wordpress.
Русская локализация – http://mywordpress.ru). Установку движка, минимальную настройку, установку шаблонов и т.п. я пропущу, т.к. эти операции весьма просты и с ними справится даже ребенок Скажу только вкратце о системных требованиях. На вашем сервере должен быть установлен php четвертой или пятой версии + mysql, кроме того, ваши скрипты должны обладать правом делать исходящие запросы, стало быть бесплатный хостинг не пойдет. Ну и еще, очень не помешает возможность использовать Cron.
Автонаполнение происходит за счет наглого воровства чужого контента путем грабинга RSS-лент других сайтов. Использовать для этого будем плагин для Wordpress под названием Smart RSS (www.devplug.net). Скачать его можно по ссылке http://www.devplug.net/download/smartrss.zip В архиве находятся два файла – smart_rss.php и wp_smartrss.php. Первый файл мы загружаем в папку /wp-content/plugins/, А второй в корень сайта. Теперь активируем плагин в админке и, собственно, практически все.
Теперь можно перейти к настройкам плагина и добавить первую rss-ленту (можно указывать в какую рубрику будут падать новости). RSS-ленты удобно искать в каталоге этих самых лент, который находится по адресу http://kanban.ru Теперь, если пройти по адресу http://your-site.ru/wp_smartrss.php мы активируем плагин и новости успешно перекочуют из удаленной rss-ленты на наш сайт. Осталось добавить crontab-задание для скрипта wp_smartrss.php и всё, теперь без нашего участия сайт будет регулярно обновляться.
Иногда возникают проблемы с кодировками (импортируются или кракозябры или совсем ничего). Я эту проблему решил примерно так. В файле wp_smartrss.php нужно код
if($content = file($filename))$data = @implode("", $content);
Заменить на
if($content = file($filename)){$data = @implode("", $content);
if (strstr($data,’encoding="windows-1251"’))
$data = mb_convert_encoding($data, ‘UTF-8′, ‘WINDOWS-1251′);
}
Многоязычный переводчик
April 30, 2008<?php
function translate($text,$lg) {
$lg = urlencode($lg);
$text = urlencode($text);
$link =
file_get_contents("http://google.com/translate_t?langpair=
$lg&text=$text");
preg_match(’/<div id=result_box dir=\"ltr\">(.*?)<\/div>/’,
$link, $out);
return $out[1];
}// Пример:
// echo translate("hello")// Пример c другим языком(С Английского на Немецкий):
// echo translate("hello", "en|de")
?>
Как можно получать ссылки на свои зарубежные блоги
April 24, 2008? Расскажу, как он работает. Если на каком-либо блоге он установлен, то когда вы комментируете какую-то из его записей вам предлагается поставить галочку рядом с текстом: “Enable CommentLuv which will try and get your last blog post, please be patient while it finds it for you”, это означает то, что вконце вашего комментария будет стоять ссылка на последний ваш пост.
Уловили ход моих мыслей? Итак, у вас есть блог на англ.яз (у русских блогеров я даже не искал, не очень интересует) например той же сеошной тематики.
Идем в гугл и ищем по запросу: Ключевик “Enable CommentLuv which will try and get your last blog post, please be patient while it finds it for you”, а для нас интересно Seo “Enable CommentLuv which will try and get your last blog post, please be patient while it finds it for you” и видим что в выдаче больше 90к сайтов/блогов. Но понятное дело из них процентов 10 подойдут, что уже будет хорошо…
————–
Типа уникальный контент, легкий способ
March 18, 2008Гугл любит уникальный контент, поэтому не получится просто гнать посты на свой сайт с rss фидов, пользуясь каким либо сервисом и наслаждаться жизнью.
Один из самых простых способов получить "типа уникальный контент" используя трубы это делать перевод текста, благо специальный модуль для этого в трубах есть.
Можно тупо переводить в инглиш статьи с русского или еще какого, либо сделать хитрый финт ушами и перевести текст с инглиша на суахили например, а потом обратно с суахили на инглиш.
Трубопровод для такой фишки выглядит следующим образом:

В результате конечно не получим чистого текста который было бы приятно читать, но это в любом случае лучше простого набора слов.
Для более читаемого текста можно использовать другие фишки но о них в следующий раз, пока как пример исходный текст сообщения с фида новостей apple и полученный переводом результат.
Исходный текст:
APPLE today presented the thinnest book of the world: Air De MacBook.
It measures 0.16 inch without precedent at its meaner point while its
maximum height of 0.76 inch is less than the meanest point on the
books of competition. In more than one 13.3-inch astounding Carry
out-against enlightened widescreen posting, offers of air of MacBook
normal and the keyboard against enlightened, a visual camera of iSight
integrated for the visual communication, and a roomy trackpad with
multi-touch the support of gesture, leaving the pinching of users,
turn and strike it with any flight. The new book is actuated a
processor of duet by 1.6 gigahertz or 1.8 of core 2 of gigahertz INTEL
with the hiding-place of 4MB L2, and it includes as standard devices
2GB of memory, a hard ordering of 80GB 1.8-inch, and late technology
and Bluetooth 2.1 of 802.11n Wi-Fi. Starting just to $1.799, the air
of MacBook starts to embark in two weeks.
И то что получилось в результате
Apple today introduced the world’s thinnest notebook: MacBook Air. It measures an unprecedented 0.16 inches at its thinnest point while its maximum height of 0.76 inches is less than the thinnest point on competing notebooks. In addition to a stunning 13.3-inch LED-backlit widescreen display, MacBook Air offers a full-size and backlit keyboard, a built-in iSight video camera for video conferencing, and a spacious trackpad with multi-touch gesture support, letting users pinch, rotate and swipe. The new notebook is powered by a 1.6 GHz or 1.8 GHz Intel Core 2 Duo processor with 4MB L2 cache, and it includes as standard features 2GB of memory, an 80GB 1.8-inch hard drive, and the latest 802.11n Wi-Fi technology and Bluetooth 2.1. Starting at just $1,799, MacBook Air begins shipping in two weeks.
Не фонтан, но для определенных целей сойдет.
Кроме встроенного в трубы модуля перевода можно использовать и внешние сайты переводчики, у них и качества перевода может быть лучше.
———–
Простой парсер google trends
March 14, 2008Вот кусочек из моего php скрипта, который парсит гугл трендс
//Trends Parsing
$trends_url = ‘http://www.google.com/trends/hottrends/atom/hourly’;
$trends = file_get_contents($trends_url);
$trends = html_entity_decode(htmlentities($trends, ENT_COMPAT, ‘UTF-8′));
preg_match_all("/<a href=\"[^>]*>(.*?)<\/a>/is", $trends, $kw, PREG_PATTERN_ORDER);
На выходе получаем массив $kw, с которым уже можно что-нить химичить. У меня, например эти тренды идут дальше на парсинг контента по соответствующим кейвордам из google blog search, technorati, сниппеты google и msn и из них потом формируется пост в блог.
Например, парсим сниппеты гугла таким образом:
//Google Serps Parsing
$google_request = ‘http://www.google.com/ie?hl=en&num=’.$count.’&
start=0&lr=&q=’.urlencode(trim($kw[$j]));
$google_pattern = ‘/<a title="(.*)" href=(.*)>(.*)<\/a>/isU’;
$google_result = file_get_contents($google_request);
$google_result = html_entity_decode(htmlentities($google_result, ENT_QUOTES, ‘UTF-8′));
$google_result = str_replace("’", "’", $google_result);
$google_result = str_replace(" …", ".", $google_result);
$google_result = str_replace("…", ".", $google_result);
$google_result = str_replace(" | ", ", ", $google_result);
$google_result = str_replace("’", "’", $google_result);
$google_result = str_replace("#39;", "’", $google_result);
$google_result = str_replace("·", "", $google_result);
$google_result = str_replace("&", "and", $google_result);
$google_result = str_replace("amp;", "", $google_result);
$google_result = str_replace("middot;", "", $google_result);
$google_result = str_replace(""", "’", $google_result);
preg_match_all ($google_pattern, $google_result, $google_data);
$google_header = implode(". ", $google_data[3]);
$google_snippet = implode(" ", $google_data[1]);
Сниппеты Live/MSN вот так
//MSN Serps Parsing
$msn_url = ‘http://search.msn.com/results.aspx?format=rss&count=’.$count.’&
q=’.urlencode(trim($kw[$j]));
$msn_request = file_get_contents($msn_url);
$msn_request = html_entity_decode(htmlentities($msn_request, ENT_QUOTES, ‘UTF-8′));
$msn_request = str_replace(" …", " ", $msn_request);
$msn_request = str_replace("Live Search: ", "", $msn_request);
$msn_request = str_replace("#39;", "’", $msn_request);
$msn_request = str_replace("·", "", $msn_request);
$msn_request = str_replace("&", "and", $msn_request);
$msn_request = str_replace("amp;", "", $msn_request);
$msn_request = str_replace("middot;", "", $msn_request);
$msn_request = str_replace(""", "’", $msn_request);
preg_match_all("/<title[^>]*>(.*?)<\/title>/is", $msn_request, $msn_title, PREG_PATTERN_ORDER);
preg_match_all("/<description[^>]*>(.*?)<\/description>/is", $msn_request, $msn_desc, PREG_PATTERN_ORDER);
$msn_header = implode(". ", $msn_title[1]);
$msn_snippet = implode("
", $msn_desc[1]);
В итоге получим тексты сниппетов гугла/мсн и заголовки из выдачи, немного очищенные от мусора. Реализация возможно не фонтан, но все же рабочая.
Посидев с php учебником день-два можно наваять неплохой сборщик контента по трендсам
Если очень лениво, пишите в каменты может выложу готовый скрипт.
Бесплатный DNS-server
March 13, 2008Как получить бесплатный DNS
1. Зарегистрироваться http://freedns.afraid.org/signup/. Потом залогиниться, зайти сюда http://freedns.afraid.org/domain/, прописать домен (ы). На NS-ах можно прописать неограниченное количество доменов, все бесплатно. Если хотите собственные ns’ы вида ns1.вашдомен.com, ns2.вашдомен.com итд, то необходимо купить премиум аккаунт.
2. Идем на http://freedns.afraid.org/ (аккаунт на afraid уже должен быть зарегистрирван как описано выше), далее идем по ссылке Domains в верхнем левом углу.
3. После чего попадаем на страницу, на которой перечислены все ваши домены (пока эта страница пустая, поскольку домены еще не прописывали), нажимаем ссылку "Add A Domain"
4. Попадаем на страницу "Domain manager"
5. В поле Domain прописываем свой домен и жмем submit
6. Далее идем в панель управления своим доменом (который прописали на afraid). В поле для днс’ов, указываем днсы afraid, на которых мы прописали наш будущий домен: NS1.AFRAID.ORG (67.19.238.254) NS2.AFRAID.ORG (69.94.133.163)NS3.AFRAID.ORG (69.94.134.20)NS4.AFRAID.ORG (70.87.151.119)8) И нажимаем добавить домен
7. ждем пока инфа с afraid ns’ов разойдется по другим нс серверам (от часа до 2-ух суток) и пытаемся пробиться по адресу: доменкоторыйзарегистрировали.com. Если увидете приблизительно такое сообщение:"This hostname (доменкоторыйзарегистрировали.com) is not-available using the lightweight free shared domain system at freedns.afraid.org.", то все ок.
Постим без капчи: бэклинки через Trackback и Pingback
February 22, 2008Не буду объяснять что такое trackback и pingback, об этом можно почитать здесь и здесь.
Как видите в обоих случаях результат выполнения функций это ссылки в заголовке коммента, причем track можно посылать с кейвордом сразу, а пинг самостоятельно выдирает кейворд из титла страницы, с которой его посылают.
Как это использовать в своих целях, Вы, наверняка уже догадались. Осталось автоматизировать этот процесс. Нам же дорого наше время?
Что самое интересное писать почти ничего не нужно. За нас это уже сделали Умы и гуру инета и супер CMS WordPress
, итак:
Как послать трэк?
Чтобы послать трэк на чужой блог нужно сначала специальный линк, на который он посылается. Этот линк можно получить загрузив страницу со статьей. Блок, в котором прописана ссылка выглядит так:
вот под словом
trackback
как раз и есть ссылка для посылки трэка. Поиск и выдергивание ссылки из текста HTML оставляю на Ваших плечах.
Выглядит эта ссылка примерно так:
http://ruskii10k.com/wp-trackback.php?p=15
или так
http://www.quietlyscheming.com/blog/2006/03/06/flex-and-ajax/trackback/
.
или так
http://eightbar.co.uk/2006/09/29/google-sketchup-second-life-export/trackback/
.
Теперь осталось дело за мылым: Чтобы наш трэк опубликовался нужно его просто послать блогу товарища
. Для этого составляем обычный POST запрос в теле которого следующие параметры:
title=My Super Blog&url=http://mysuperblog.com&blog_name=Super Ankor&excerpt=Description
Расшифрую:
title – Заголовок коммента, будет писаться в тэге <strong> гугл это любит, так что можно писать какой-нить кейворд
url – Урл, на который хотим поставить трэк.
blog_name – используем как Анкор к ссылке – будет светится вместо имени.
excerpt – Сам коммент. Ну тут уж думайте сами , хотя многие здесь благодарят автора за пост , хвалят его. Некоторые , умные парни, даже научились цитировать часть сообщения, чтобы обойти Akismet
Вот и все, после посылки POST’а Вам придет XML-ответ:
<?xml version=”1.0″ encoding=”utf-8″ ?>
<response>
<error>0</error>
</response>
Здесь циферка 0 между <error> обозначает, что все прошло гладко и ваш трэк понравился блогу.
Как послать пинг ?
Тут методика чутка усложняется, но также остается на уровне “начинающего пхп-кодера”. Для работы с этим делом нам понадобится библиотека для работы с интерфесом XML-RPC. Библиотека эта распространяется бесплатно и скачать ее можно
здесь
или выдрать опять же из WordPress’a (файл с именем class-IXR.php).
Для посылки пинга нам нужны три вещи:
1. Линк на статью в нашем блоге, от которой мы посылаем пинг.
2. Линк на статью в чужом блоге, в коменты которой мы посылаем пинг.
3. Линк на XML-RPC сервер блога, в который постим и который принимает пинги.
С первыми двумя пунктами все ясно. Сосредоточимся на третьем:
Если блог принимает пинги, то по спецификации
pingback
он обязан передавать ссылку на pingback url в HTTP-заголовке ответа на каждый запрос параметр X-Pingback, например:
X-Pingback:
http://ruskii10k.com/pingback/xmlrpc
либо в заголовке HTML документа, пример:
<link rel=”pingback” href=”http://ruskii10k.com/pingback/xmlrpc”>
В моем полюбившемся движке блога есть функция, которая находит и возвращает pingback url. Так что снова всю грязную работу сделали за нас:
PHP
function discover_pingback_server_uri($url, $timeout_bytes = 2048) {
global $wp_version;
$byte_count = 0;
$contents = ;
$headers = ;
$pingback_str_dquote = rel="pingback";
$pingback_str_squote = rel=pingback;
$x_pingback_str = x-pingback: ;
$pingback_href_original_pos = 27;
extract(parse_url($url));
if (!isset($host)) {
// Not an URL. This should never happen.
return false;
}
$path = (!isset($path)) ? / : $path;
$path .= (isset($query)) ? ?.$query : ;
$port = (isset($port)) ? $port : 80;
// Try to connect to the server at $host
$fp = @fsockopen($host, $port, $errno, $errstr, 2);
if (!$fp) {
// Couldnt open a connection to $host;
return false;
}
// Send the GET request
$request = "GET $path HTTP/1.1 Host: $host User-Agent: WordPress/$wp_version ";
// ob_end_flush();
fputs($fp, $request);
// Lets check for an X-Pingback header first
while (!feof($fp)) {
$line = fgets($fp, 512);
if (trim($line) == ) {
break;
}
$headers .= trim($line)." ";
$x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str);
if ($x_pingback_header_offset) {
// We got it!
preg_match(#x-pingback: (.+)#is, $headers, $matches);
$pingback_server_url = trim($matches[1]);
return $pingback_server_url;
}
if(strpos(strtolower($headers), content-type: )) {
preg_match(#content-type: (.+)#is, $headers, $matches);
$content_type = trim($matches[1]);
}
}
if (preg_match(#(image|audio|video|model)/#is, $content_type)) {
// Not an (x)html, sgml, or xml page, no use going further
return false;
}
while (!feof($fp)) {
$line = fgets($fp, 1024);
$contents .= trim($line);
$pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);
$pingback_link_offset_squote = strpos($contents, $pingback_str_squote);
if ($pingback_link_offset_dquote || $pingback_link_offset_squote) {
$quote = ($pingback_link_offset_dquote) ? " : ;
$pingback_link_offset = ($quote==") ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
$pingback_href_pos = @strpos($contents, href=, $pingback_link_offset);
$pingback_href_start = $pingback_href_pos+6;
$pingback_href_end = @strpos($contents, $quote, $pingback_href_start);
$pingback_server_url_len = $pingback_href_end - $pingback_href_start;
$pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);
// We may find rel="pingback" but an incomplete pingback URI
if ($pingback_server_url_len >
0) {
// We got it!
return $pingback_server_url;
}
}
$byte_count += strlen($line);
if ($byte_count >
$timeout_bytes) {
// Its no use going further, there probably isnt any pingback
// server to find in this file. (Prevents loading large files.)
return false;
}
}
// We didnt find anything.
return false;
}
Получаем линк:
PHP
$pagelinkedfrom = "http://yabadan.net/?p=40";
$pagelinkedto = "http://ruskii10k.com/2007/03/13/i-love-404-not-found-2/";
$pingback_server_url = discover_pingback_server_uri($pagelinkedto,2048);
И постим:
PHP
Есть один нюанс$client = new IXR_Client($pingback_server_url);
$client->
timeout = 3;
$client->
useragent .= — WordPress/ . $wp_version;
$client->
debug = false;
$client->
query(pingback.ping, $pagelinkedfrom, $pagelinkedto );
, чтобы все
прошло антиспам
прошло гладко нужно сначала в свой пост, от имени которого посылается пинг, добавить ссылку на адресата пинга (т.е. урл в которой мы пингуем). А после того как пинг успешно завершен можно
оставить
:D удалить ненужные внешние ссылки.
Пример XML переговоров на уровне XML-RPC-сервера:
Посылаем запрос пинга:
POST /xmlrpc.php HTTP/1.0
Host: ruskii10k.com
Content-Type: text/xml
User-Agent: Incutio XML-RPC — WordPress/
Content-length: 286 <?xml version=”1.0″?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>
http://yabadan.net/?p=40</string></value></param>
<param><value><string>
http://ruskii10k.com/2007/03/13/i-love-404-not-found-2/</string></value></param>
</params></methodCall>
Получаем ответ:
<?xml version=”1.0″?>
<methodResponse>
<params>
<param>
<value>
<string>Pingback from http://yabadan.net/?p=40 to http://ruskii10k.com/2007/03/13/i-love-404-not-found-2/ registered. Keep the web talking! </string>
</value>
</param>
</params>
</methodResponse>
Вот и все . Всем удачного трэкинга и пингига

