Поддержка Проблемы и решения ошибка parser curl + xmlrpc

  • ► два файла один curl другой с rpc клиентом как их связать чтобы можно было бы отправить wordpress инфу на добавление поста
    вот код curl ниже вывод его

    require_once('wp-includes/newsmusic.php');
    function get_web_page( $url )
    {
      $uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
    
      $ch = curl_init( $url );
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
      curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
      curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
      curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
      curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
    
      $content = curl_exec( $ch );
      $err     = curl_errno( $ch );
      $errmsg  = curl_error( $ch );
      $header  = curl_getinfo( $ch );
      curl_close( $ch );
    
      $header['errno']   = $err;
      $header['errmsg']  = $errmsg;
      $header['content'] = $content;
      return $header;
    }
    
    // ключевое слово
      $keyword = 'finance';
    // избавляемся от пробелов, если они есть
      $keyword = strtr($keyword, ' ', '+');
    
      $url = 'http://www.newsmusic.ru/index_2.htm';
    
      $result = get_web_page( $url );
      $err = 0;
      if ( $result['errno'] != 0 )
        { //... ошибка: неправильный url, таймаут, зацикливание ... обработать по желанию
     $err = 1;
     }
    
      if ( $result['http_code'] != 200 )
        { //... ошибка: нет страницы, нет прав ... обработать по желанию
     $err = 1;
     }
    
      $page = newsmusic($result['content']);
      var_dump ($page);

    вот результат полученный курлом,тут у меня все что надо но как их отправить дальше

    array(5) { [0]=> string(106) «Арефьева сняла клип на пресню «Есть ли тебе, что сказать» » [1]=> string(12) «01. 11. 2012» [2]=> string(174) «» [3]=> string(220) «Ольга Арефьева и «Ковчег» выпустили новый клип «Есть ли тебе, что сказать» на песню с только что вышедшего альбома «Хвоин».» [4]=> string(995) » Ольга Арефьева и «Ковчег» выпустили новый клип «Есть ли тебе, что сказать» на песню с только что вышедшего альбома «Хвоин». Клип затрагивает болезненные индивидуальные и планетарные проблемы, при этом с очень личной точки зрения. Свободный выбор каждого на сложных моральных развилках никто не оспаривает, но иногда и из нарисованных глаз текут слезы. Случайно или неслучайно, клип вышел 1 ноября, в Международный день вегана. «Есть ли тебе, что сказать коровам, ведомым на бойню?» Арефьева, спевшая «На хрена нам война», повзрослела. » }

    функция newsmusic() самопис ищет в контенте нужный материал и вырезает из него текст и прочее

    вот код клиента которому я присваиваю значения полученные из парсинга newsmusic, но у меня выходит ошибка говорящая что надо использовать метод POST, тогда получается мне надо curl скачивать страницу, поясните что потом делать с данными и как их посылать методом POST

    $wp = new xmlrpc_client(‘/xmlrpc.php’,’galaxy.ru’,80);
    //кодировка клиента
    $wp->request_charset_encoding = ‘UTF-8’;
    //чтоб возвращал в виде php-переменных
    $wp->return_type = ‘phpvals’;

    $struct = array();
    for($i=2;$i<6;$i++){
    $newsmusic=newsmusic("http://www.newsmusic.ru/index_$i.htm");
    foreach($newsmusic as $value){
    
    $struct['post_type'] = new xmlrpcval('post', 'string');
    $struct['title'] = new xmlrpcval($newsmusic[0], 'string');
    $struct['description'] = new xmlrpcval($newsmusic[4], 'string');
    $struct['mt_excerpt'] = new xmlrpcval($newsmusic[3], 'string');
    $struct['mt_keywords'] = new xmlrpcval(array( new xmlrpcval("Знаменитости в новости $newsmusic[0]", 'string'), new xmlrpcval("Новости шоу-бизнеса $newsmusic[3]", 'string')), 'array');
    $struct['mt_allow_comments'] = new xmlrpcval(0, 'int');
    $struct['mt_allow_pings'] = new xmlrpcval(1, 'int');
    $struct['dateCreated'] = new xmlrpcval($newsmusic[1], 'dateTime.iso8601');
    $struct['post_status'] = new xmlrpcval('publish', 'string');
    $struct['categories'] = new xmlrpcval(array(new xmlrpcval('Uncategorized',
    'string')), 'array');
    $params = array( new xmlrpcval(0, 'int'), new xmlrpcval($u_name, 'string'),
    new xmlrpcval($u_pass, 'string'), new xmlrpcval($struct, 'struct'),new xmlrpcval(true, 'boolean'));
    var_dump($params);
    $r = $wp->send(new xmlrpcmsg('metaWeblog.newPost', $params));
        if ($r->faultCode()) {
            die('Ошибка постинга:' . $r->faultString());
        }
    $p = $r->value();
    echo 'Запостили пост успешно. Его идентификатор '.
    'имеет номер ' . $p .'. Прочитать статью можно'.
    ' <a href="http://galaxymusic.ru/?p=' . $p .     '">здесь</a> ';
    }
    }

    Добавлено через 28 минут
    вот ошибка сервера XML-RPC server accepts POST requests only

Просмотр 1 ответа (всего 1)
  • В WordPress есть специальные классы для работы с HTTP запросами и XML-RPC. Смотрите файлы wp-includes/class-http.php и wp-includes/class-wp-xmlrpc-server.php.

    Еще, собственные файлы (newsmusic.php) не стоит добавлять в директорию wp-includes, эта директория только для библиотек ядра. Вам нужно писать всё в виде плагина.

Просмотр 1 ответа (всего 1)
  • Тема «ошибка parser curl + xmlrpc» закрыта для новых ответов.