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

Тема в разделе "PHP", создана пользователем phillip, 11 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    все знают постилки в вордпресс через xml-rpc но я вот задался целью сделать постилку через импорт xml карты. нарыл старую функцию авторизации на вордпрессе. но дальше тупик. Помогите, не получается нифига.
    Авторизуюсь на http://cinema777.wordpress.com/wp-login.php
    логин *** пасс ***
    Затем иду на http://cinema777.wordpress.com/admin.php?import=wordpress
    отправляю файл а дальше тупик. нид хелп!
    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($chCURLOPT_URL$avtorize_page); 
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt($chCURLOPT_TIMEOUT10); 
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    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($chCURLOPT_URL,$avtorize_page);  
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt($chCURLOPT_TIMEOUT30); 
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    curl_setopt($chCURLOPT_POST1); 
        
    curl_setopt($chCURLOPT_POSTFIELDS$query); 
        
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
        
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); 
        
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); 
        
    $result curl_exec($ch); 
        
    curl_close($ch);
        
    //Идем на страницу импорта
        
    $ch curl_init();  
        
    curl_setopt($chCURLOPT_URL,$import_xml_page);  
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
        
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); 
        
    curl_setopt($chCURLOPT_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($chCURLOPT_URL,$url);  
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt($chCURLOPT_TIMEOUT30); 
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    curl_setopt($chCURLOPT_POST1); 
        
    curl_setopt($chCURLOPT_POSTFIELDS$post); 
        
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
        
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); 
        
    curl_setopt($chCURLOPT_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);
    что-то долго никто не писал) справился сам)
     
  2. djamil

    djamil Постоялец

    Регистр.:
    25 авг 2008
    Сообщения:
    74
    Симпатии:
    16
    Когда закачиваешь xml, то советую увеличить время таймаута, иначе файл не доконца загрузится.

    PHP:
    curl_setopt($chCURLOPT_TIMEOUT30);
     
  3. komyak

    komyak

    Регистр.:
    4 фев 2009
    Сообщения:
    484
    Симпатии:
    185
    djamil, а в чём сложности? Он же его курлом просто отсылает, и не разбирает...
     
  4. despro

    despro Постоялец

    Регистр.:
    30 июл 2006
    Сообщения:
    91
    Симпатии:
    2
    День добрый, спрошу здесь по поводу импорта вордпресс.

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

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

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

    Спасибо.
     
  5. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    Публикация постов в 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);
        }
    }
    ?>
     
  6. Kewin

    Kewin Постоялец

    Регистр.:
    15 сен 2010
    Сообщения:
    73
    Симпатии:
    8
    А зачем тут знать ПХП, сделай просто по аналогии:
    //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
     
    guru85 нравится это.
  7. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    Ктонибудь знает, как настроить эту штуку, что бы постить в нужную категорию. Либо выбрать из существующих, либо создать и в нее запостить? вроде как то так должно быть, но почему то не пашет
    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
     
  8. t3s

    t3s

    Регистр.:
    16 фев 2008
    Сообщения:
    719
    Симпатии:
    290
    попробуйте явно указать ид категории, вы сейчас пытаетесь запостить в категорию new
     
  9. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    пробовал, категория "new" специально создана, но не хочет он постить в нее, пробовал на разных блогхостах, пост идет в Uncategorized, может дело в библиотеке, использую CodeIgniter.
     
  10. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А там случаем не айди категории должен быть?
     
Статус темы:
Закрыта.