Автоматично обновяване на Facebook статус

mobilio

Well-Known Member
От известно време ме тормози идеята за автоматично обновяване (autopost) на статуса във Facebook и други социални мрежи без други системи и приложения. Затова взех задачата присърце, седнах и преправих един прост скрипт който да свърши черната работа.

Facebook status.png

Код:
<?PHP
/*******************************
*	Facebook Status Updater version 0.1
*	Peter Nikolow
*	http://peter.nikolow.me
*	March 22, 2013
*******************************/

  function random_string( )
  {
    $character_set_array = array( );
    $character_set_array[ ] = array( 'count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz' );
    $character_set_array[ ] = array( 'count' => 1, 'characters' => '0123456789' );
    $temp_array = array( );
    foreach ( $character_set_array as $character_set )
    {
      for ( $i = 0; $i < $character_set[ 'count' ]; $i++ )
      {
        $temp_array[ ] = $character_set[ 'characters' ][ rand( 0, strlen( $character_set[ 'characters' ] ) - 1 ) ];
      }
    }
    shuffle( $temp_array );
    return implode( '', $temp_array );
  }

$status = random_string(10);
$login_email = 'type-here-your-mail';
$login_pass = 'type-here-your-pass';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://m.facebook.com/login.php?refsrc=http%3A%2F%2Fwww.facebook.com%2Flogin.php&amp;refid=9');
curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)");
$loginpage = curl_exec($ch);

curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php');
$page = curl_exec($ch);

curl_setopt($ch, CURLOPT_POST, 1);
preg_match("/input type=\"hidden\" name=\"fb_dtsg\" value=\"(.*?)\"/", $page, $form_id);
preg_match("/form method=\"post\" id=\"composer_form\" action=\"(.*?)\"/", $page, $form_num);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'fb_dtsg=' . $form_id[1] . '&privacy=&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84&target=&status=' . urlencode($status) . '&update=' . urlencode("Share"));

curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com' . $form_num[1]);
$page2 = curl_exec($ch);

curl_close($ch);
?>

Скрипта е сравнително глупав, но ще ви го обясня накратко:
  • Генерира се случаен стринг от 10 символа който ще бъде нашия нов статус. Това е много важно защото FB блокира показването на еднакви статуси и ми коства няколко часа докато го проумея. С това се избягва блокирането на статуса и е винаги уникален.
  • До първия curl_exec се изпълнява логване във Facebook с указаното потребителско име и парола. За да се избегне тежкия desktop ajax се представяме като много прост мобилен браузър. Така избягваме получаването на iOS/Android ajax версия която също е по-тежка за обработка. Кукитата се запазват във външен файл с цел последващо използване.
  • Със втория curl_exec се насочваме към основната страница на Facebook където ще обновим статуса на потребителя.
  • До третия curl_exec се изпълнява основната функция на обновяването. Проблема е че FB използва динамични форми и първо трябва да обработим втория резултат като вземем изключително важните параметри fb_dtsg - уникално id за формата и composer_form - сочещ към url-a който трябва да бъде извикан с третата заявка. Така композираме третата заявка която обновява статуса с няколко фиксирани параметъра.
  • Последния ред затваряме curl и задачата е приключена. Можем да изтрием файла с cookies защото вече не е необходим.

С което задачата е изпълнена с няколко особенности:
  1. Скрипта има проблеми с кирилицата! За момента не може да се публикува статус без да се счупи кирилицата. Тук проблема е по-тежък защото самия FB кара браузъра със специфично HTML поле "charset_test" да върне какво поддържа като езици и подозирам че нещо и оттам обърква кирилицата.
  2. Скрипта се представя за мобилен агент което води до показването на "from mobile" под поста.
  3. За момента показването на линкове не е много ефективно.
  4. Не могат да се качват снимки във timeline.
  5. Липсва проверка дали предходните операции са се случили безпроблемно. Например ако потребителското име/паролата са грешни не се спира изпълнението както и не се проверява дали обновяването на статуса минава безпроблемно.
  6. Не може да се контролира видимоста на поста (Public/Friends/Me). Мисля че се използва настройката на потребителя.
  7. Публикуването е фиксирано от името на човека и не може да се публикува от страница. Засега...
Надявам се със следващите версии да подобря част от недъзите на съществуващия скрипт. Системата е много гъвкава и на тази база може сравнително лесно да се направи подобен скрипт за публикуване във Twitter, Linkedin, Sharetronix, StatusNet и други подобни системи. Малко по-сложно ще е публикуването в Google+, но принципа е същия както в горните системи и не виждам причина да не бъде налична и тази социална мрежа.
С горния скрипт може да се направят много неща - примерно може да се настрои сървър да отчита параметрите си в интернет, може да се настрои автоматично постване през час от база данни, може да се извърши постване от името на потребител за вирална реклама и т.н. Общо взето възможностите са неограничени с тънкия момент, че не е много по правилата на Facebook. Ако трябва да бъде по правилата трябва да бъде приложение което потребителя с OAuth да упълномощи да извърши няколко дейности включително промяна на статуса.
За моя радост използвам скрипта САМО за лично ползване и то не и под основния ми акаунт. Ако имате въпроси ще бъда радостен да ви отговоря.
 

Justt StaNn

New Member
От: Автоматично обновяване на Facebook статус

а може ли помощ,понеже съм нов в тези неща.значи яко е,но как да го активираме този скрипт,ще съм ти много благодарен.
 

mobilio

Well-Known Member
От: Автоматично обновяване на Facebook статус

Ами 1-во скрипта е полу-готов т.е. частта която обновява статуса показва случайна буквено-цифрена комбинация от 10 символа.

За подкарването - лесна работа:
1. копираш всичко от заграденото в клипборда
2. отваряш нов текстов редактор и го поставяш вътре
3. на мястото където се пише мейла и паролата записваш реална комбинация
4. записваш файла като fbupdate.php
5. стартираш файла и това е!
 

Justt StaNn

New Member
От: Автоматично обновяване на Facebook статус

така,до 4. съм готов,но няма програма с която да се отвори.освен това какви статуси ще качва ?
 

mobilio

Well-Known Member
От: Автоматично обновяване на Facebook статус

Ясно сега имаш 2 начина:
а) качаваш файла на хостинга ти и отиваш с любимия ти браузър тук: http://бла-бла.цом/fbupdate.php
б) ако на локалната ти машина имаш инсталирано PHP, можеш да отвориш терминал, да отидеш в папката където е файла и да напишеш следното "php fbupdate.php". Това ще стартира PHP и ще го инструктира да изпълни горепосочения файл.

et voila!

Относно статусите... както по-горе описах качва се случайна буквено-цифрена комбинация. В момента го пуснах и статуса ми е "tmrnb4if". Това е направено за да се избегне блокировката при повторено съобщение.
 

bashmotion

New Member
От: Автоматично обновяване на Facebook статус

Мога да коригирам изцяло кода и да го направя.. в малка система за ползване... имам предвид, че да има и логин форма.. която потребители да ползват... и там да избират в колко часа да се публикува.. избрания текст който въведат :)

Като цяло добре си се справил ;)
 

Горе