XM\curl\Wordpress
13.04.2015, 22:41. Показов 622. Ответов 0
Доброго времени суток
Прошу сильно не пинать ногами за нубские вопросы. Но упёрся лбом и никак не могу решить проблему.
И гуглил и форумы читал и пробовал по разному - всё равно косяки(
Суть проблемы. Пытаюсь написать постер в Wordpress по xmlrpc. Собственно говоря в инете примеров масса, но большинство или устаревшие и ругаются на не пойми что, или же имеют ту же проблему с кодировкой что и у меня.
У меня есть два варианта кода. Я пытаюсь настроить работу первым, но почему то при использовании кириллицы всё сыпется и в блог пишется какая то абракадабра. т.е. сам код рабочий, а вот почему сбивается кодировка я не могу понять.
PHP | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| //подключаем библиотеку
include_once 'IXR_Library.php';
function wpPostXMLRPC ($title, $body, $rpcurl, $username, $password, $category, $keywords='',$encoding='UTF-8'){
$title = htmlentities($title,ENT_NOQUOTES,$encoding);
$keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);
$body = htmlentities($body,ENT_NOQUOTES,$encoding);
$category = htmlentities($category,ENT_NOQUOTES,$encoding);
$content = array(
'title'=>$title,
'description'=>$body,
'mt_allow_comments'=>0, // 1 to allow comments
'mt_allow_pings'=>0, // 1 to allow trackbacks
'post_type'=>'post',
'mt_keywords'=>$keywords,
'categories'=>array($category)
);
$params = array(0,$username,$password,$content,true);
$request = xmlrpc_encode_request('metaWeblog.newPost',$params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $rpcurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$results = curl_exec($ch);
curl_close($ch);
return $results;
}
wpPostXMLRPC('Проверка', 'Тут будет русское описание', 'http://site/xmlrpc.php', 'admin', '123456', 'категория'); |
|
Есть и второй вариант который нашёл на просторах интернета, в нём постится нормально, но сам код очень громоздкий, хочется понять что не так с первым способом. Он красивее что ли.
PHP | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| include_once 'xmlrpc.inc.php';
//чтоб не было проблем с кодировкой
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
header('Content-type:text/html;charset=utf-8');
//логин и пароль
$u_name = 'admin';
$u_pass = '123456';
//обращаемся к test.wordpress.loc/xmlrpc.php
$wp = new xmlrpc_client('/xmlrpc.php','site',80);
//кодировка клиента
$wp->request_charset_encoding = 'UTF-8';
//чтоб возвращал в виде php-переменных
$wp->return_type = 'phpvals';
$struct = array();
//тип записи: page - страница, post - пост
$struct['post_type'] = new xmlrpcval('post', 'string');
//наименование статьи
$struct['title'] = new xmlrpcval('тут будет заголовок', 'string');
//сама статья отформатированная в html
$struct['description'] = new xmlrpcval('В черном-черном городе, на черной-черной улице, не буду <strong>сам заправлять картриджи!</strong>', 'string');
//краткое описание, которое будет отображено на главной
$struct['mt_excerpt'] = new xmlrpcval('Краткое описание статьи', 'string');
//массив с тегами
$struct['mt_keywords'] = new xmlrpcval(array(
new xmlrpcval('анекдот', 'string'),
new xmlrpcval('юмор', 'string')), 'array');
//комментарии: 0 - запрещены, 1 - разрешены
$struct['mt_allow_comments'] = new xmlrpcval(1, 'int');
//пинги: 0 - запрещены, 1 - разрешены
$struct['mt_allow_pings'] = new xmlrpcval(1, 'int');
//вместо таймштампа можно передать
//объект класса DateTime
$struct['dateCreated'] = new xmlrpcval(
time(), 'dateTime.iso8601');
//статуст записи: publish - публичная, private - приватная
$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'),
//публикация: true - опубликована,
//false - не опубликована
new xmlrpcval(true, 'boolean'));
//вызываем процедуру metaWeblog.newPost
$r = $wp->send(new xmlrpcmsg('metaWeblog.newPost', $params));
//если ошибка, сообщаем об ошибке постинга
if ($r->faultCode()) {
die('Ошибка постинга:' . $r->faultString());
}
//WP вернет идентификатор поста в случае успеха
$p = $r->value(); |
|
Прошу помочь, понять и простить )
0
|