Archive

Posts Tagged ‘远程发布’

用用Windows Live Writer(WLW)向WordPress远程XML-RPC协议发布文章(WLW)向WordPress远程XML-RPC协议发布文章

2011-07-10 留下评论

学习Wordpress过程中,了解到通过一些软件在桌面发布文章的方法,这次向大家分享windows live writer发布的方法,真是简单又方便,感兴趣的朋友可以体验一下。

一、开启Wordpress的远程发布功能

进入WP后台,设置>>撰写,如下图,将远程发布XML-RPC协议勾选上,并保存更改。

二、下载并安装windows live writer(WLW)

1、进入微软官方下载页面下载live程序包,由于微软将好几个软件打包了,所以文件有些大130M,不过安装的时候可以选择只安装WLW,点此新页面进入下载页面>> 另外其他网站提供该软甲下载,文件比较小,但安全不能保证,不推荐;

2、下载完成后,运行安装包,进入选择要安装的程序界面,将不需要的软件取消勾选,然后安装即可;我就想要writer,所以其他都没有安装;

3、安装后,live会自动安装一些微软小软件,例如登录管理器,上传工具等,我都卸载掉了,保留“windows live软件包”就可以;

4、运行安装好的writer,会进入设置引导界面,如下图的步骤设置:

选择日志服务类型为“其他日志服务”;
填写博客访问地址、后台登录用户名及密码;
连网验证,如果提示405错误,那就是你的WP后台设置不正确,需要根据第一步重新设置;

5、设置完成后,即可进入主界面发布文章了,快体验一些吧,添加more标签、链接、图片、相册、表格、地图、标签都可以加。

用XML-RPC协议读写WordPress上的文章

2011-07-10 留下评论

//使用Incutio的XML-RPC库和Blogger API发布文章的例子,其中IXR库也是Wordpress自身所用的库,可以在“wp-includes/class-IXR.php”找到。

<?php
$xmlrpcurl=http://blog.bluesky.cn/xmlrpc.php&#8217;;
$blogid=‘1’;
$username=‘admin’;
$password=‘pass’;
$postTitle=‘标题’;
$postContent=‘正文内容’;

require(‘class-IXR.php’);  // /wordpress/wp-includes/class-IXR.php
$client = new IXR_Client($xmlrpcurl);

$params=array(
,
‘blog_ID’=>$blogid,
‘user_login’=>$username,
‘user_pass’=>$password,
‘post_content’=> . $postContent,
‘publish’=>true
);
$params=array_values($params);

$client->query(“blogger.newPost”,$params);
$response=$client->getResponse();

if ($response[‘faultCode’]==0){
print ‘Success’;
} else {
print ‘Fail:’ . $response[‘faultString’];
}
?>

//以下是用XML-RPC for PHP库和metaWeblog接口发布文章的例子。要先下载phpxmlrpc库取出其中的xmlrpc.inc来用。

<?php
include(“xmlrpc.inc”); // 这里要改成xmlrpc.inc所在的路径
$GLOBALS[‘xmlrpc_internalencoding’] = ‘UTF-8’;

define (‘DOMAIN’, ‘blog.bluesky.cn’); // 博客的域名
define (‘BLOGID’, 1); // 博客ID,一般为1
define (‘USER’, ‘admin’); // 博客登录的用户名
define (‘PASSWORD’, ‘pass’); // 博客登录的密码

// 创建 xml-rpc client
$cl = new xmlrpc_client ( “/xmlrpc.php”, DOMAIN, 80);

// 准备请求
$req = new xmlrpcmsg(‘metaWeblog.newPost’);
// 逐个列出请求的参数:
$req->addParam ( new xmlrpcval ( BLOGID, ‘int’)); // 博客ID
$req->addParam ( new xmlrpcval ( USER, ‘string’ )); // 用户名
$req->addParam ( new xmlrpcval ( PASSWORD, ‘string’ )); // 密码
$struct = new xmlrpcval (
array (
“title” => new xmlrpcval ( ‘标题’, ‘string’ ), // 标题
“description” => new xmlrpcval ( ‘正文内容’, ‘string’), // 内容
), “struct”
);
$req->addParam ( $struct );
$req->addParam ( new xmlrpcval (1, ‘int’)); // 立即发布

// 发送请求
$ans = $cl->send($req);

var_dump ( $ans );
?>

//注意一定要加上:$GLOBALS[‘xmlrpc_internalencoding’] = ‘UTF-8’;这一句,否则不能正确处理中文。

//另一段也是用phpxmlrpc库和metaWeblog接口发表文章的例子代码,该代码使用了返回类型为“phpvals”,这样可以直接用返回结果的$r->val来获取文章ID号。

<?php
include(“xmlrpc.inc”);
$GLOBALS[‘xmlrpc_internalencoding’] = ‘UTF-8’;

$c = new xmlrpc_client(“/xmlrpc.php”, “blog.bluesky.cn”, 80);
$content[‘title’]=“标题”//标题
$content[‘description’]=“正文内容”; //内容
$content[‘mt_keywords’]=“标签1,标签2”//标签
$content[‘wp_password’]=“”//文章密码,输入后显示加密
$content[‘categories’] = array(“分类1”,“分类2”); //分类名
$x = new xmlrpcmsg(“metaWeblog.newPost”,
array(php_xmlrpc_encode(“1”), //BLOG ID
php_xmlrpc_encode(“admin”), //用户名
php_xmlrpc_encode(“pass”), //密码
php_xmlrpc_encode($content),
php_xmlrpc_encode(“1”)));    //立即发表

$c->return_type = ‘phpvals’;
$r =$c->send($x);
if ($r->errno==“0”)
echo “发表成功,文章序号为:”.$r->val;
else {
echo “出错了”;
print_r($r);
}
?>

//以下是读取最新一篇文章的例子代码:

<?php
include(“xmlrpc.inc”);
$GLOBALS[‘xmlrpc_internalencoding’] = ‘UTF-8’;
$c = new xmlrpc_client(“/xmlrpc.php”, “blog.bluesky.cn”, 80);

$msg = new xmlrpcmsg(‘metaWeblog.getRecentPosts’,
array(php_xmlrpc_encode(“1”),
php_xmlrpc_encode(“admin”),
php_xmlrpc_encode(“pass”),
php_xmlrpc_encode(“1”)) );
$res = $c->send($msg);
$val = $res->value();

$val->arraymem(0)->structreset();
while (list($key, $v) = $val->arraymem(0)->structeach())
{
echo “Element: $key; Type: “.$v->kindOf().“; Value:”.$v->scalarval().\n;
}
?>

WordPress通过XML-RPC协议远程发布文章的PHP代码

2011-07-10 留下评论

<?php
require_once(“class-IXR.php”);  // 为WordPress安装包内自带的IXR类库文件:wp-includes/class-IXR.php
$client->debug = true//开发测试时设置为true,api完成上线后改为false
$username = “wordpresswriter”; $password = ‘wppass’; $wpsite = http://www.brandgoods2009.com&#8217;; //改成自己的
$xmlclient = $wpsite.“/xmlrpc.php”;
$title = “test title标题”;
$body = ‘ 测试wordpress xmlrpc api的使用方法,正文包括要上传的图片:<img width=”60″ height=”60″ alt=”” src=”/fckUpload/image/test.jpg” />,从数据库中获取该文章后自动定时发布”;
$category = array(“Blogger API”,” MetaWeblog API”,”MovableType API”); //这些分类必须存在,否则需先新建
/*metaWeblog API(metaWeblog.getCategories)获取wordpress文章分类*/
$client = new IXR_Client($xmlclient);
$params = array(0,$username,$password);
if (!$client->query(‘metaWeblog.getCategories‘, $params)) {
die(‘Something went wrong ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());
}
$catarray = $client->getResponse();    // 返回的是数组array
foreach ($category as $cat) {
if (in_array($cat,$catarray)==false){ //依次对比,若不存在则新建wordpress分类
/*新建wordpress文章分类*/
$client = new IXR_Client($xmlclient);
$categ = array(
…..
);
$params = array(0,$username,$password,$categ);
if (!$client->query(‘wp.newCategory‘, $params)) {
die(‘Something went wrong ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());
}
}
}
$keywords = array(“keyword1″,”keyword2″,”keyword3″); //和分类不同,若这些tag标签若不存在,则wordpress发布文章的API metaWeblog.newPost会自动创建。
$kjmy_Post_MinSeconds = 60*60*24*3;   //自动定时发布最少时间间隔3天
$kjmy_Post_MaxSeconds = 60*60*24*4;   //自动定时发布wordpress文章时间最多间隔4天

$kjmy_Post_Seconds = mt_rand($kjmy_Post_MinSeconds, $kjmy_Post_MaxSeconds); //远方博客定时发布时间范围3~4天
$client = new IXR_Client($xmlclient);
$params = array(0,$username,$password,1);
if (!$client->query(‘metaWeblog.getRecentPosts‘, $params)) {
die(‘Something went wrong ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage()); }
elseif ($myresponse = $client->getResponse()) {
$latesturl = $myresponse[0][‘permaLink‘];  echo $latesturl; //返回上一次发表的文章地址
$object = $myresponse[0][‘dateCreated‘];   //返回上一次发表文章日期,为IXR_Date对象
$latestpostdate = …..
else {$latestpostdate = strtotime(date(“Y-m-d H:i:s”));}
$posttime = $latestpostdate+$kjmy_Post_Seconds; //发布时间为举例上一篇发表时间3~4天。
/*以下是上传文件图片的API:metaWeblogNewMediaObject—————————————*/

/*在线上传

if (isset($_FILES[‘kjmy_Poster_File‘][‘tmp_name‘]) && $_FILES[‘kjmy_Poster_File‘][‘tmp_name‘] != “){
if ($_FILES[“kjmy_Poster_File”][“error”] > 0){
echo “Error: ” . $_FILES[“kjmy_Poster_File”][“error”] . “<br />”;
} else {
// 请参考metaWeblogNewMediaObject 及 wp_upload_bits函数。

$name = ….
$type = …..
$bits =…..
}
}
*/
/*检测远方博客数据库文章中是否存在图片,有则上传并替换src地址*/
$imgtag = ‘<img‘;
$srctag = ‘src‘;
$rootpath = $_SERVER[‘DOCUMENT_ROOT‘]; //获取网站根目录的服务器路径
// $pattern = ‘/src=\“(.*?)\”/’;
$pattern = “/<img.+src=(‘|\”|)?(.*)(\\1)([\s].*)?>/ismUe”;  //图片代码标签的正则表达式,子模式匹配src地址
if (strpos($body,$imgtag) && strpos($body,$srctag)) {
preg_match_all ($pattern,$body,$matches);
// $newurl = array();
for ($i=0; $i< count($matches[0]); $i++) {
$src = $matches[2][$i];
$imgsrc = $src;
$name = …..
$filesrc = ……
$type = mime_content_type($filesrc); //获取文件类型,php.in需要启用pecl模块
$bits = …….
$data = array(
name‘=>….
type‘=>…..
bits‘=>….
);
// $newurl[$i] = ixrupload($username,$password,$data);
$client = new IXR_Client($xmlclient);
$fileparams = array(0,$username,$password,$data);
if (!$client->query(‘metaWeblog.newMediaObject‘, $fileparams)) {
die(‘Something went wrong ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());
$returnurl=””;
} elseif ($client->getResponse()) {
$response = $client->getResponse();
$returnurl = $response[‘]; echo $imgsrc; echo $returnurl;
}
$body = str_replace($imgsrc,$returnurl,$body);  //记得给$body赋值
}
}
/*发表文章*/
$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’,
‘date_created_gmt’=>……..
‘dateCreated’=>$posttime,
‘categories’=>$category,
‘mt_keywords’=>$keywords,
// ‘enclosure’=>$enclosure,这只用于在自定义区域上传音乐等资源,改用metaWeblog.newMediaObject上传
// ‘custom_fields’ =>  array($customfields)
);
// Create the client object
$client = new IXR_Client($xmlclient);
$params = array(0,$username,$password,$content,true); // Last parameter is ‘true’ which means post immideately, to save as draft set it as ‘false’
// Run a query for PHP
if (!$client->query(‘metaWeblog.newPost’, $params)) {
die(‘Something went wrong – ‘.$client->getErrorCode().‘ : ‘.$client->getErrorMessage());
}
else{
echo “<li>文章《”.$title.“》发表成功</li>”;
}

?>

分类:PHP, WordPress 标签:, , , , ,