Автоматизация постинга в Wordpress с помощью XML RPC

в разделе Программирование | Метки: XML RPC, Zend Framework

Когда количество блогов превышает 10 штук, а количество контента больше 150 тысяч постов, то возникает вопрос как бы все это запостить с помощью различных программ :)

Написал небольшой класс для постинга в Wordpress с помощью XMLRPC


<?php

class CmsWordpress
{
    public 
$blog_url;

    private 
$blog_username;

    private 
$blog_password;

    private 
$blog_id;

    private 
$client;
    
    public function 
setParams($params)
    {
        
$this->blog_url         $params['url'];
        
$this->blog_username    $params['username'];
        
$this->blog_password    $params['password'];
        
$this->client = new Zend_XmlRpc_Client('http://' $this->blog_url '/xmlrpc.php');
        
$this->client->getHttpClient()->setConfig(
                      array(
                              
'timeout'      => 300
                           
)
                        );
        return 
$this->setBlogID();
    }

    private function 
setBlogID()
    {
        try {
            
$result $this->client->call('wp.getUsersBlogs', array('username' => $this->blog_username,
                                                                    
'password' => $this->blog_password));
        } catch (
Zend_XmlRpc_Client_FaultException $e) {
            
var_dump($e);
        }
       
        if (
count($result)) {
            
$this->blog_id $result[0]['blogid'];
            return 
true;
        }

        return 
false;
    }

    public function 
getCategories()
    {
        
$result $this->client->call('wp.getCategories', array('blog_id'  => $this->blog_id,
                                                                
'username' => $this->blog_username,
                                                                
'password' => $this->blog_password));
        return 
$result;
    }

    public function 
createCategory($name)
    {
        
$result $this->client->call('wp.newCategory', array('blog_id'  => $this->blog_id,
                                                              
'username' => $this->blog_username,
                                                              
'password' => $this->blog_password,
                                                              
'struct'   => array('name' => $name)
                    )
                                                        
            );

        return 
$result;
    }

    public function 
getPage($id)
    {
        
$result $this->client->call('wp.getPage', array('blog_id'  => $this->blog_id,
                                                              
'page_id'  => $id,
                                                              
'username' => $this->blog_username,
                                                              
'password' => $this->blog_password,
                                                              
'struct'   => array('name' => $name)
                    )

            );

        return 
$result;
    }

    public function 
addPost($title$description$more$keywords$categories)
    {
        
$post_data = array('blog_id'     => $this->blog_id,
                           
'username'    => $this->blog_username,
                           
'password'    => $this->blog_password,
                           
'content'     => array('title'                => $title,
                                                  
'description'          => $description,
                                                  
'mt_text_more'         => $more,
                                                  
'mt_allow_comments'    => 0,
                                                  
'mt_allow_pings'       => 0,
                                                  
'mt_keywords'          => $keywords,
                                                  
'categories'           => $categories,
                                            ),

//                                                  'datetime'             => '2009-07-02 15:05',),
                           
'publish'     => 1,
        );

        
$result $this->client->call('metaWeblog.newPost'$post_data);

        return 
$result;
    }

}
?>

Класс не до конца еще написан, но добавлять новые посты, при этом создавая категории и теги уже можно. Вот этот параметр менять не советую, так как были случаи когда блог заполнялся, начал тупить хостинг в итоге вместо 900+ постов добавилось 200 с чем то.

<?php
$this
->client->getHttpClient()->setConfig(
                      array(
                              
'timeout'      => 300
                           
)
                        );
?>

Посты удалить было достаточно просто одним запросом

DELETE FROM wp_posts WHERE id > 254

Кроме тех постов что добавлялись автоматически, до этого посты вбивались руками, поэтому я этим запросом убил только те что были добавлены автоматически.
С категориями пришлось подумать, дело в том что для увеличения количества страниц второго уровня, необходимого для повышения доходности сайта в sape я создавал достаточно много разделов. После удаления всех постов в категориях у меня все равно показывалось количество (теперь уже не существующих записей).
Обнулить количество постов можно таким запросом

UPDATE wp_term_taxonomy SET COUNT = 0 WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM `wp_term_relationships` WHERE object_id > 254)

ps: прежде чем юзать запросы, сделайте бэкап ;-)

Комментарии