Feed on
Posts
Comments

Не буду объяснять что такое 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. Так что снова всю грязную работу сделали за нас:

  1. function discover_pingback_server_uri($url, $timeout_bytes = 2048) {
  2. global $wp_version;
  3. $byte_count = 0;
  4. $contents = ;
  5. $headers = ;
  6. $pingback_str_dquote = rel="pingback";
  7. $pingback_str_squote = rel=pingback;
  8. $x_pingback_str = x-pingback: ;
  9. $pingback_href_original_pos = 27;
  10. if (!isset($host)) {
  11. // Not an URL. This should never happen.
  12. return false;
  13. }
  14. $path = (!isset($path)) ? / : $path;
  15. $path .= (isset($query)) ? ?.$query : ;
  16. $port = (isset($port)) ? $port : 80;
  17. // Try to connect to the server at $host
  18. $fp = @fsockopen($host, $port, $errno, $errstr, 2);
  19. if (!$fp) {
  20. // Couldnt open a connection to $host;
  21. return false;
  22. }
  23. // Send the GET request
  24. $request = "GET $path HTTP/1.1 Host: $host User-Agent: WordPress/$wp_version ";
  25. // ob_end_flush();
  26. fputs($fp, $request);
  27. // Lets check for an X-Pingback header first
  28. while (!feof($fp)) {
  29. $line = fgets($fp, 512);
  30. if (trim($line) == ) {
  31. break;
  32. }
  33. $headers .= trim($line)." ";
  34. $x_pingback_header_offset = strpos(strtolower($headers), $x_pingback_str);
  35. if ($x_pingback_header_offset) {
  36. // We got it!
  37. preg_match(#x-pingback: (.+)#is, $headers, $matches);
  38. $pingback_server_url = trim($matches[1]);
  39. return $pingback_server_url;
  40. }
  41. if(strpos(strtolower($headers), content-type: )) {
  42. preg_match(#content-type: (.+)#is, $headers, $matches);
  43. $content_type = trim($matches[1]);
  44. }
  45. }
  46. if (preg_match(#(image|audio|video|model)/#is, $content_type)) {
  47. // Not an (x)html, sgml, or xml page, no use going further
  48. return false;
  49. }
  50. while (!feof($fp)) {
  51. $line = fgets($fp, 1024);
  52. $contents .= trim($line);
  53. $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);
  54. $pingback_link_offset_squote = strpos($contents, $pingback_str_squote);
  55. if ($pingback_link_offset_dquote || $pingback_link_offset_squote) {
  56. $quote = ($pingback_link_offset_dquote) ? " : ;
  57. $pingback_link_offset = ($quote==") ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
  58. $pingback_href_pos = @strpos($contents, href=, $pingback_link_offset);
  59. $pingback_href_start = $pingback_href_pos+6;
  60. $pingback_href_end = @strpos($contents, $quote, $pingback_href_start);
  61. $pingback_server_url_len = $pingback_href_end - $pingback_href_start;
  62. $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);
  63. // We may find rel="pingback" but an incomplete pingback URI
  64. if ($pingback_server_url_len >
  65.  0) {
  66. // We got it!
  67. return $pingback_server_url;
  68. }
  69. }
  70. $byte_count += strlen($line);
  71. if ($byte_count >
  72.  $timeout_bytes) {
  73. // Its no use going further, there probably isnt any pingback
  74. // server to find in this file. (Prevents loading large files.)
  75. return false;
  76. }
  77. }
  78. // We didnt find anything.
  79. return false;
  80. }

Получаем линк:

  1. $pagelinkedfrom = "http://yabadan.net/?p=40";
  2. $pagelinkedto = "http://ruskii10k.com/2007/03/13/i-love-404-not-found-2/";
  3. $pingback_server_url = discover_pingback_server_uri($pagelinkedto,2048);

И постим:

  1. $client = new IXR_Client($pingback_server_url);
  2. $client->
  3. timeout = 3;
  4. $client->
  5. useragent .= — WordPress/ . $wp_version;
  6. $client->
  7. debug = false;
  8. $client->
  9. 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

One Response to “Постим без капчи: бэклинки через Trackback и Pingback”

  1. […] Чтобы послать трэк на чужой блог нужно сначала специальный линк, на который он посылается. Этот линк можно получить загрузив страницу со статьей. Блок, в котором прописана ссылка выглядит так Дальше […]

Trackback URI | Comments RSS

Leave a Reply

Stocking Club’s Blog © 2008 | MistyLook made free by Reef Sandals