постинг в вордпресс через импорт xml

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

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
все знают постилки в вордпресс через xml-rpc но я вот задался целью сделать постилку через импорт xml карты. нарыл старую функцию авторизации на вордпрессе. но дальше тупик. Помогите, не получается нифига.
Авторизуюсь на Для просмотра ссылки Войди или Зарегистрируйся
логин *** пасс ***
Затем иду на Для просмотра ссылки Войди или Зарегистрируйся
отправляю файл а дальше тупик. нид хелп!
PHP:
function blogvis_posting($blog_url, $login, $pass){
    $avtorize_page= $blog_url.'wp-login.php';
	$import_xml_page=$blog_url.'wp-admin/admin.php?import=wordpress';
    $agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7'; 
    $header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" ; 
    $header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"; 
    $header[] = "Accept_encoding: identity"; 
    $header[] = "Accept_language: en-us,en;q=0.5"; 
    $header[] = "Connection: close"; 
    $header[] = "Cache-Control: no-store, no-cache, must-revalidate"; 
    $header[] = "Keep_alive: 300"; 
    $header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT"; 
    //Заходим на страницу авторизации
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $avtorize_page); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
    curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
    curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
    $result = curl_exec($ch); 
    curl_close($ch);  
    //Грабим поля формы
    preg_match_all('&<input.+type=\"hidden\".+>&iU', $result, $inputs);
    $query = array();
    foreach ($inputs[0] as $input) {
        preg_match('&<input.+type=\"hidden\".+name=\"(.+)\".+value=\"(.+)\".+>&iU', $input, $inp);
        if (isset($inp[1]))
            if (isset($inp[2])) $query[$inp[1]]=$inp[2]; else $query[$inp[1]]='';
    }
    $query['log']= $login;
    $query['pwd']= $pass;
    //Авторизируемся
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL,$avtorize_page);  
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 
    curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
    curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $result = curl_exec($ch); 
    curl_close($ch);
    //Идем на страницу импорта
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL,$import_xml_page);  
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
    curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
    curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $result = curl_exec($ch); 
    curl_close($ch);
    //Получаем 	wpnonce необходимую для подстановки в урл
    preg_match('&_wpnonce=(.+)"&siU',$result,$matches);
	$wpnonce=$matches[1];
	$url=$blog_url.'wp-admin/admin.php?import=wordpress&step=1&_wpnonce='.$wpnonce;
	//echo $url;
	$post['import']='@'.$_SERVER['DOCUMENT_ROOT'].'/my.xml';
	$ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL,$url);  
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt ( $ch , CURLOPT_USERAGENT , $agent); 
    curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $result = curl_exec($ch); 
    curl_close($ch);
	preg_match('&id=(.+)"&siU',$result,$matches);
	print_r($result);
    return $result;
}
$blog = 'http://saltshaker232.wordpress.com/';
$login = '***';
$pass = '***';
echo blogvis_posting($blog, $login, $pass);
что-то долго никто не писал) справился сам)
 
Когда закачиваешь xml, то советую увеличить время таймаута, иначе файл не доконца загрузится.

PHP:
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 
djamil, а в чём сложности? Он же его курлом просто отсылает, и не разбирает...
 
Когда закачиваешь xml, то советую увеличить время таймаута, иначе файл не доконца загрузится.

PHP:
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

День добрый, спрошу здесь по поводу импорта вордпресс.

1. Имеем сплог на вордпресс.
2. Сделали экспорт в хмл этого сплога.

Хочу сделать зеркало этого сплога, но с рерайт (синомизированным) контентом и залить в другое место.

Вопрос состоит в том, как можно рерайтить хмл-файл, только посты? Есть ли готовые решения или посоветуйте пож. софт с помощью которого это можно сделать, например какой нить хмл-редактор, который может справиться с поставленной задачей.

Спасибо.
 
Публикация постов в WordPress с помощью XML-RPC Нужна помощь

помогите, сам плохо в пхп ориентируюсь, может кто уже делал такое: задача - необходимо добавить два поля в postform.php логин и пароль для блога, неудобно все время править poster.php а вот собственно сам публикатор
postform.php:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ru-RU">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $title; ?></title>
<style type="text/css">
<!--
body {
    background-color: #39F;
    background-image: url(198797-Sepik.jpg);
    background-repeat: no-repeat;
}
body {
    font-family: Palatino Linotype, Book Antiqua, Palatino, serif;
}
-->
</style></head>
<body>
<div align="center">
  <h1 align="left">
    <?php
if (isset($mes)) {
    echo '<p>'.$mes.'</p>';
}
?>
    <span onmouseover="_tipon(this)" onmouseout="_tipoff()">Magik Door to The BLOG$$$ !!!</span> </h1>
</div>
 <form method="post" action="<?php echo site_url("poster/sendpost"); ?>">
<p>
<label for="blogurl"> URL</label>
<input name="blogurl" id="blogurl" type="text" size="40" />
(http:// no slesh in the end)
</p>
<p>
<label for="posttitle">Title</label>
<input name="posttitle" id="posttitle" type="text" size="40" />
</p>
<p>
<label for="posttags">Tags</label>
<input name="posttags" id="posttags" type="text" size="40" />
(separate by comma)
</p>
<p>
  <label for="posttext">Text</label>
  <textarea name="posttext" cols="40" rows="10" id="posttext"></textarea>
  </p>
<p>
<input type="submit" name="sbmbtn" id="sbmbtn" value="   Send you Post  " />
</p>
</form>
</body>
</html>
poster.php:
PHP:
<?php
class Poster extends Controller {
    function Poster()
    {
        parent::Controller();
    }
    function index()
    {
        $pageData['title'] = "Отправка постов в WordPress";
        $this->load->view('postform', $pageData);
    }
    function sendpost() {
        $this->load->library('xmlrpc');    
        $pageData['title'] = "Отправка постов в WordPress";
        $blogUrl = $this->input->post('blogurl');
        $postTitle = $this->input->post('posttitle');
        $postTags = $this->input->post('posttags');
        $postText = $this->input->post('posttext');
        if (!$blogUrl || !$postTitle || !$postTags || !$postText) {
            $pageData['mes'] = 'Нужно заполнить форму';
        }
        else {
            $this->xmlrpc->server($blogUrl.'/xmlrpc.php', 80);
            $this->xmlrpc->method('metaWeblog.newPost');
            $request = array(
                           array(0, 'int'), //blog id
                           array('admin', 'string'), //username
                           array('your_pass', 'string'), //password
                           array(
                               array(
                                   'title'=>array($postTitle, 'string'),
                                   'description'=>array($postText, 'string'),
                                   'mt_keywords'=>array(split(',\s*', $postTags), 'array'),
                                   'mt_allow_comments'=>array(1, 'int'),
                                   'mt_allow_pings'=>array(0, 'int'),
                              ),
                              'struct'
                            ), //content
                           array(TRUE, 'boolean') //publish
                        );
            $this->xmlrpc->request($request);
          //  $this->xmlrpc->set_debug(TRUE);
            if ( ($res = $this->xmlrpc->send_request()) === FALSE) {
                $pageData['mes'] = $this->xmlrpc->display_error();
            }
            else {
                $pageData['mes'] = 'Пост опубликован';
            }
        }
        $this->load->view('postform', $pageData);
    }
}
?>
 
А зачем тут знать ПХП, сделай просто по аналогии:
//postform.php
PHP:
<input name="wplogin" id="wplogin" type="text" size="40" /> 
<input name="wppasswd" id="wppasswd" type="text" size="40" />

//poster.php
PHP:
array($this->input->post('wplogin'), 'string'), //username
array($this->input->post('wppasswd'), 'string'), //pass
 
Ктонибудь знает, как настроить эту штуку, что бы постить в нужную категорию. Либо выбрать из существующих, либо создать и в нее запостить? вроде как то так должно быть, но почему то не пашет
PHP:
array(
    'title'=>array($postTitle, 'string'),
    'description'=>array($postText, 'string'),
    'mt_keywords'=>array(split(',\s*', $postTags), 'array'),
    'mt_allow_comments'=>array(1, 'int'),
    'mt_allow_pings'=>array(0, 'int'),
    'categories'=>array('new', 'string'),
    ),
  'struct'
), //content
array(TRUE, 'boolean') //publish
 
вроде как то так должно быть, но почему то не пашет

попробуйте явно указать ид категории, вы сейчас пытаетесь запостить в категорию new
 
пробовал, категория "new" специально создана, но не хочет он постить в нее, пробовал на разных блогхостах, пост идет в Uncategorized, может дело в библиотеке, использую CodeIgniter.
 
А там случаем не айди категории должен быть?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху