Пятница, 2024-03-29, 2:34 PM

Поиск
Меню
Категории раздела
PHP [40]
Cкриптовый язык программирования общего назначения
MySQL [1]
Cвободная система управления базами данных (СУБД)
jQuery [8]
Библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML
CSS [60]
Cредство описания, оформления внешнего вида веб-страниц
JavaScript [161]
Прототипно-ориентированный скриптовый язык программирования
Веб-дизайн [2]
Проектирование пользовательских веб-интерфейсов для сайтов или веб-приложений
RegExp [1]
Регулярные выражения
SEO [2]
Продвижение и раскрутка сайтов. Заработок в сети.
C/C++ [3]
Компилируемый статически типизированный язык программирования общего назначения
Windows [4]
Программистам под ОС MS Windows
HGE [2]
Игровой движок HGE (Haaf's Game Engine)
Игровой дизайн [8]
Психология дизайна игр
Разработка игр [2]
Общие моменты, относящиеся к геймдеву
wxWidgets [2]
Библиотека инструментов для разработки кроссплатформенных приложений
PureBasic [10]
Кроссплатформенный компилятор и IDE для быстрой разработки
VST [6]
Steinberg's Virtual Studio Technology (VST)
iOS [1]
Mобильная операционная система, разрабатываемая и выпускаемая американской компанией Apple
Пиксельная графика [9]
Pixel art и все, что с ним связано
libGDX [2]
Кроссплатформенный открытый движок на Java, позволяющий создавать 2D и 3D игры под различные платформы, среди которых: Android, HTML5, Windows, Linux, iOS.
Поддержи проект!
Рекомендуем


Блог разработчика

Главная » 2013 » Январь » 16 » Автоматический постинг в ЖЖ (Livejournal)
1:26 AM
Автоматический постинг в ЖЖ (Livejournal)
Для чего вам нужен автоматический постинг в ЖЖ - не мое дело :)
Мое дело - рассказать, как это можно осуществить.

Мне известно два способа постинга в ЖЖ средствами PHP:
1. XML-RPC
2. cURL

Сегодня мы попробуем второй способ. Один из возможных способов реализации поставленной задачи приведен ниже.
function curl_exec_follow(/* resource */ $ch, /* int */ $maxredirect = null) {
 $mr = $maxredirect === null ? 5 : intval($maxredirect);
 if(ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
 curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
 } else {
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

 if($mr > 0) {
 $newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
 $store_url = $newurl;

 $rch = curl_copy_handle($ch);

 curl_setopt($rch, CURLOPT_HEADER, true);
 curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
 curl_setopt($rch, CURLOPT_RETURNTRANSFER, true);

 do {
 curl_setopt($rch, CURLOPT_URL, $newurl);
 $header = curl_exec($rch);
 if(curl_errno($rch)) {
 $code = 0;
 } else {
 $code = curl_getinfo($rch, CURLINFO_HTTP_CODE);

 if($code == 301 || $code == 302) {
 preg_match('/Location:(.*?)\n/', $header, $matches);
 $newurl = trim(array_pop($matches));
 } else {
 $code = 0;
 }
 }
 } while($code && --$mr);

 curl_close($rch);

 if(!$mr) {
 if($maxredirect === null) {
 echo('Too many redirects.');
 } else {
 $maxredirect = 0;
 }
 return false;
 }

 if(!parse_url($newurl, PHP_URL_SCHEME)) {
 $newurl = "http://".parse_url($store_url, PHP_URL_HOST).$newurl;
 }

 curl_setopt($ch, CURLOPT_URL, $newurl);
 }
 }
 return curl_exec($ch);
}

/**
 * Description of JJ
 *
 * @author sam
 */
class JJ {

 static function send($login, $pass, $tags, $capt, $mess, $adult = false) {
 $capt = urlencode($capt);
 $mess = urlencode($mess);
 $tags = urlencode($tags);

 $adult = $adult ? "explicit" : "";

 $postdata = 'lj_form_auth=&chal=&response=123456&timezone=400&user='
.$login
.'&password='
.$pass
.'&usejournal='
.$login
.'&date_diff=1&custom_time=0&date_ymd_mm=&date_ymd_dd=&date_ymd_yyyy=&time=&subject='.$capt
.'&event='
.$mess
.'&switched_rte_on=1&prop_taglist='
.$tags.'&prop_current_moodid=&prop_current_mood='
.'&comment_settings=&prop_current_location=&prop_opt_screening='
.'&prop_current_music=&prop_adult_content='
.$adult
.'&security=public&action:update=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+%D0%B2+'
.$login;

 $h = array("Accept-Language: ru-RU,ru;q=0.9,en;q=0.8, "
."Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7, Accept-Encoding: gzip, deflate");

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://www.livejournal.com/update.bml");
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $h);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
 curl_setopt($ch, CURLOPT_USERAGENT,
 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
 curl_setopt($ch, CURLOPT_TIMEOUT, 20);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_ENCODING, "utf-8");
 curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
 curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
 curl_exec_follow($ch, 5);

 if(curl_error($ch))
 echo curl_error($ch).PHP_EOL;

 curl_close($ch);

 echo "Done.";
 }

}

Обратите внимание на функцию curl_exec_follow(). Если на вашем хостинге нормально работает CURLOPT_FOLLOWLOCATION, то функцию можно смело удалять, заменив curl_exec_follow($ch, 5); на "родную" curl_exec($ch);. Вот и все. Код готов к использованию:
JJ::send("jj_user_login", "jj_user_pass", "юмор,смешно", "Клевый анек", "unrar.rar");

Последний параметр-флаг, $adult предназначен для тех случаев, когда требуется отметить пост как "для взрослых". При желании, класс можно расширить и добавить вкусностей :)
Категория: PHP | Просмотров: 2004 | Добавил: pop | Теги: Php, livejournal, curl, жж | Рейтинг: 0.0/0

Поблагодарить автора



Комментарии