• DONATE to NULLED!
    Вы можете помочь Форуму и команде, поддержать финансово.
    starwanderer - модератор этого раздела будет Вам благодарен!

Помощь Как постить в WPMU через XML-RPC на PHP?

Статус
В этой теме нельзя размещать новые ответы.

roddik

Колбаска
Регистрация
26 Янв 2007
Сообщения
346
Реакции
292
Привет! В общем сабж... Спасибо:) WPMU 1.3.5
 
Постинг с помощью class-IXR.php который можно взять в сборке самого WP.

PHP:
<?php

require('class-IXR.php');

$domain = 'http://test.my'; //домен
$login = 'LOGIN';
$pass =  'PASS';

$title = 'TITLE';
$category = 'CATEGORY';

$client = new IXR_Client($domain.'/xmlrpc.php');
$content_struct['title'] = $title;

//Если надо сделать выдержку:
//$excerpt = 'EXCERPT';
//$after_excerpt = 'POST AFTER EXCERTP';
//$content_struct['description'] = $excerpt;
//$content_struct['mt_text_more'] = $after_excerpt;

//К черту выдержку(автоматом не будет формировать):
$content = 'CONTENT';
$content_struct['description'] = $content;

$content_struct['categories'] = array($category);

$client->query("metaWeblog.newPost", '0', $login, $pass, $content_struct, '1');

?>
C WPMU не знаком, возможно надо _где-то_ подкоректировать.
 
Ну так.... 302 это у нас что? "Moved Temporarily" либо "Found"
А в чем проблема? ;)

На чем пишеш авторегалку?
1. curl
2. sockets
3. fopen :smmne:

В курле "следования по локациям" решит проблему.

п.с. Готового нет, но помочь могу... советами. ;)
 
Сохранение URL-а сообщения WP

Вопрос, можно ли при постинге в WP предложенными выше скриптами, либо вот таким образом (проверил, тоже работает)


Не просто постить, но сохранять URL размещённого сообщения в текстовый файл. Чтобы потом проспамить, например.

Просмотрел массу вариантов, но пока ни одного рабочего не попалось.

:bc:
 
Помогите подправить код xmlrpc

Поковырялся - вот что соорудил, но осталась загвоздка.
Один раз данные отправляет, а дальше по циклу уже не хочет.

Вернее даже так - отправляет на сервер один и тот-же xmlrpc-запрос, т.е. если задать цикл из 3-х проходов, то он 3 раза отправит первые данные, а не будет брать вторые и третьи.

Не могу понять, в чём тут проблема.

Может где-то после отправки запроса надо кэш чистить, или обнулять что-то ?

Или ещё какое-то действие выполнить?

PHP:
<?php

//requires xmlrpc.inc from http://phpxmlrpc.sourceforge.net/
require_once('xmlrpc.inc');

$i = 0; // счетчик кеев

$accounts = file('accounts.txt'); //аки в формате логин:пароль:урл блога
$keywords = file('keywords.txt'); //кейворды, по 1 на строку

foreach($accounts as $string)
{
$urls = file('links.txt');      //урлы для линковки
$y = rand(0, count($urls));      //рандомный линк
$linka = $urls[$y];
$linka = str_replace("
", "", $linka);

$acc = explode(":", $string);    

$domain1 = $acc[2]; //домен
$domain = str_replace("
", "", $domain1);               // убираем переход на новую строку
$domain = $domain."/"; //добавляем в конец URL`а слэш, т.к. не все URLы идут с обратным слэшем на конце
$domain = str_replace("//", "/", $domain); // если в конце URLа получилось 2 слэша - меняем на 1.
$login = $acc[0];
$pass =  $acc[1];

$category = 'Uncategorized';

$keywords[$i] = str_replace("
", "", $keywords[$i]);  // убираем переход на новую строку

$keytitle = ucwords($keywords[$i]); // ключевое слово для заголовков

echo $keytitle;
echo "<br>";
$keyurl = str_replace(" ", "-", $keywords[$i]); //ключевое слово с разделителем "-" для URL`а RSS.

$posttext =  'Text';
$xmlrpcurl = "http://".$domain."xmlrpc.php";
 
$client = new xmlrpc_client($xmlrpcurl);

$params[] = new xmlrpcval("n/a");
$params[] = new xmlrpcval("n/a");
$params[] = new xmlrpcval($login);            //your wordpress login
$params[] = new xmlrpcval($pass);        //your wordpress password
$params[] = new xmlrpcval(
"<title>".$keytitle."</title>".            //the title of your post
"$category".    //the category
$posttext);                                 //the body
$params[] = new xmlrpcval("true");          //publish now = true
 
$msg = new xmlrpcmsg("blogger.newPost",$params);

$response = $client->send($msg);
$i++;	

echo "<br><br>Цикл $i выполнен<br><br>";
}

?>

Сохранения ссылок пока не касаюсь - хотя бы постинг отладить.

По 1 - прекрасно постит.
В цикле foreach не хочет.
 
Поковырялся - вот что соорудил, но осталась загвоздка.
Один раз данные отправляет, а дальше по циклу уже не хочет.

Вернее даже так - отправляет на сервер один и тот-же xmlrpc-запрос, т.е. если задать цикл из 3-х проходов, то он 3 раза отправит первые данные, а не будет брать вторые и третьи.

Не могу понять, в чём тут проблема.

Может где-то после отправки запроса надо кэш чистить, или обнулять что-то ?

Или ещё какое-то действие выполнить?

PHP:
<?php

//requires xmlrpc.inc from http://phpxmlrpc.sourceforge.net/
require_once('xmlrpc.inc');

$i = 0; // счетчик кеев

$accounts = file('accounts.txt'); //аки в формате логин:пароль:урл блога
$keywords = file('keywords.txt'); //кейворды, по 1 на строку

foreach($accounts as $string)
{
$urls = file('links.txt');      //урлы для линковки
$y = rand(0, count($urls));      //рандомный линк
$linka = $urls[$y];
$linka = str_replace("
", "", $linka);

$acc = explode(":", $string);    

$domain1 = $acc[2]; //домен
$domain = str_replace("
", "", $domain1);               // убираем переход на новую строку
$domain = $domain."/"; //добавляем в конец URL`а слэш, т.к. не все URLы идут с обратным слэшем на конце
$domain = str_replace("//", "/", $domain); // если в конце URLа получилось 2 слэша - меняем на 1.
$login = $acc[0];
$pass =  $acc[1];

$category = 'Uncategorized';

$keywords[$i] = str_replace("
", "", $keywords[$i]);  // убираем переход на новую строку

$keytitle = ucwords($keywords[$i]); // ключевое слово для заголовков

echo $keytitle;
echo "<br>";
$keyurl = str_replace(" ", "-", $keywords[$i]); //ключевое слово с разделителем "-" для URL`а RSS.

$posttext =  'Text';
$xmlrpcurl = "http://".$domain."xmlrpc.php";
 
$client = new xmlrpc_client($xmlrpcurl);

$params[] = new xmlrpcval("n/a");
$params[] = new xmlrpcval("n/a");
$params[] = new xmlrpcval($login);            //your wordpress login
$params[] = new xmlrpcval($pass);        //your wordpress password
$params[] = new xmlrpcval(
"<title>".$keytitle."</title>".            //the title of your post
"$category".    //the category
$posttext);                                 //the body
$params[] = new xmlrpcval("true");          //publish now = true
 
$msg = new xmlrpcmsg("blogger.newPost",$params);

$response = $client->send($msg);
$i++;	

echo "<br><br>Цикл $i выполнен<br><br>";
}

?>

Сохранения ссылок пока не касаюсь - хотя бы постинг отладить.

По 1 - прекрасно постит.
В цикле foreach не хочет.

попробуй так
Код:
$msg = new xmlrpcmsg("blogger.newPost",$params);

$response = $client->send($msg);
$i++;    
unset($params);
unset($client);
 
Подтверждение отправки сообщения

Получить подтверждение, что сообщение на блог успешно отправлено по XMLRPC теретически можно, добавив в скрипт такой код:


PHP:
...
$response = $client->send($msg);

if (!$response)
{
echo "Постинг прошёл неудачно<br>";	
}
else
{
echo "Постинг прошёл удачно<br>";	
}
...

Но у меня, почему-то независимо от того, прошло сообщение или нет выдаёт успешное.

Может я путаю успешный постинг и успешное соединение с сервером?

Но попытка использовать вот такую конструкцию:
PHP:
if (!$result) {
    print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
    print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
        $result->faultString();
}

Не удалась.
Ругается на faultCode(:(
Fatal error: Call to a member function faultCode() on a non-object

Кто сталкивался, в чём тут загвоздка?
 
А
$result->faultCode
точно метод? ;)

Нашел в исходнике:
Код:
        // Is the message a fault?
        if ($this->message->messageType == 'fault') {
            $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString);
            return false;
        }

так что этот метод тебе не поможет - он для внутреннего использования и при постинге проверять надо true/false.

Я успешно в своей спамилке использую конструкцию:
Код:
    if($client->query("metaWeblog.newPost", '0', $login, $pass, $content_struct, '1'))
     {
       echo " --> Ok!\n";
     }
    else
     {
      echo " --> ERROR!\n";
     }

Но проблема не в спамилке.
Я ее написал больше полугода назад и успешно пользовал, но в последнее время в блогах выхлоп фонарь. :(
Надо на социалки лезть... Какие идеи по спамилке в социалки? ;)
 
при постинге проверять надо true/false.

Ок. Понял. Попробкю предложенный вариант.

На счет социалок.
Они что, также поддерживают xml-rpc?

Или тут надо уже использовать cURL?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху