Постим без капчи: бэклинки через 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>

 

Вот и все . Всем удачного трэкинга и пингига :)

© http://seorepa.com/show.php?id=991

Парсинг Google - несколько секретов мастерства

Приведу несколько примеров не очень распространенных запросов к Google, которые зачастую значительно помогают наиболее полно распарсить Google по интересующему вас запросу.

Итак, поехали…

Пример №1

Где-то с квартал назад Google изменил подход к тегу daterange, теперь запросы с тегом daterange помогают парсить выдачу по дате (диапазон дат задается согласно Юлианскому календарю).

Так например, по запросу daterange:2454496-2454496 Google выдает страницы от 30 января 2007.

Примеры запросов:

  • "guestbook" daterange:2454496-2454496
  • "guestbook" daterange:2454495-2454495
  • "guestbook" daterange:2454494-2454494

 

Пример №2

Использую следующие два типа запросов можно разделить выдачу Google на половинки, т.е. на сайты с www и без www

  • "some words" inurl:"www." только домены с префиксом www
  • "some words" -inurl:"www." только домены без префикса www

 

Пример №3

Теперь немного на примере самой популярной зоны com (приненимо и для всех других известных вам доменных зон) рассмотрим ряд специфических запросов, которые позволяют разбить выдачу на более мелкие кусочки

  • site:com только домены зарегистрированные в зоне com

  • site:*com только домены зарегистрированные в зоне com и без дефиса в имени домена
  • site:com -site:*com только домены зарегистрированные в зоне com и с одним или более дефисами в имени домена

  • site:*-*com только домены с одним дефисом в имени домена
  • site:*-*-*com только домены с двумя дефисами в имени домена
  • site:*-*…-*com только домены с N кол-вом дефисов в имени домена
  • site:com -site:*com -site:*-*com -site:*-*-*com только домены с двумя дефисами подряд или с тремя и более дефисами в имени домена

  • site:*.*com только домены с одной точкой в имени домена (сабдомены)
  • site:*.*.*com только домены с двумя точками в имени домена
  • site:*.*…*.*com только домены с N кол-вом точек в имени домена

  • site:com/* в адресе одна и более поддиректорий
  • site:com/*/* в адресе есть 2 поддиреторий
  • site:com/*/*/* в адресе есть 3 поддиреторий
  • site:com/*/*…/* в адресе есть n поддиреторий

Важно: подстановка дирректорий возможна совместно с точками и дефисами!

——————- 

kak-tak.com

Умный показ баннеров на фиде

Если у вас разнонишевый траф и вы сливаете его на PPC-партнерки, но такой вот кусочек кода поможет вам показывать на фиде баннеры, релевантные поисковому запросу. Спасибо за код Toxic Dream’у.

Вначале создаем массив с группами , в группах кейворды, потом в группе задаем URL и IMG.

<?php

//declare banner groups
$banners[’drugs’] = array(’viagra’, ‘huyagra’, ‘megastoyak’);
$banners[’casino’] = array(’poker’, ‘fold’, ‘rise’);
$q = @$_REQUEST[’q'];

$groups[’default’] = array(); //default group
$groups[’drugs’] = array(’url’=>’http://kalichnaya.dom’, ‘img’=>’http://feed/kalichnaya.gif’);

$bangrp = ‘default’;

foreach ($banners as $grp=>$kw){
   foreach($kw as $k){
         if (!(false === (strpos($k, $q))) ){
              $bangrp = $grp;
              break 2;
         }
   }
}

echo ‘<a href="’.$groups[$bangrp][’url’].’" target="_blank"><img src="’.$groups[$bangrp][’img’].’" border="0"></a>’;

?>

Джентльменский набор профессионального робоблогера (ДНПР)

February 11, 2008
  1. Unlimited Domain Hosting + $2.99 .INFO Domains at GoDaddy.com
  2. WordPress + WP Themes
  3. Technorati + Google Blog Search
  4. Google Hot Trends
  5. Flickr RSS + YouTube RSS
  6. Yahoo Pipes
  7. WP-o-Matic (Feedwordpress, WP-Autoblog)
  8. CyberSEO (см. Simple-Syn) + Google Language Tools
  9. Similar Posts + Popularity Contest
  10. Ping-o-Matic + Blog Directories