Для чего вам нужен автоматический постинг в ЖЖ - не мое дело :)
Мое дело - рассказать, как это можно осуществить.
Мне известно два способа постинга в ЖЖ средствами 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 предназначен для тех случаев, когда требуется отметить пост как "для взрослых". При желании, класс можно расширить и добавить вкусностей :)
|