将WordPress中的文章自动同步到新浪微博(纯代码,支持自定义Appkey)

将WordPress中的文章自动同步到新浪微博(纯代码,支持自定义Appkey)

话说有了备案号就是事事顺利,有了备案号,Jeff 去申请新浪微博的开放平台那是一次通过。你可以到新浪微博 @Jeff的阳台 看看所发的微博,不少是自定义来源为DeveWork 的,就是靠这个开发平台实现的啦。言归正传,下面就分享纯代码将WordPress 中的文章自动同步到新浪微博的方法,该方法支持自定义APPKEY。恩,后面那个才是重点。

首先先秀一下实现的效果:

新浪微博开放平台 ,WordPress

关键点是那个自定义来源信息:来自xxxx的那个。

请事先了解一下新浪开放平台,http://open.weibo.com/ 本文不作介绍。直接进入教程。

一、申请 APPKEY

成为开发者(需要身份验证的说),到新浪微博开放平台后台管理“添加网站”(如下图),原则上通过不通过审核都可以,因为只需要的是获得个APPKEY。通过的话可以在微博下方显示来自xxx,如来自DeveWork ,或者来自Jeff的阳台;没通过的话只会显示 来自未审核应用 这样的字眼。据说有备案号才能通过,在天朝,忍忍啊~

新浪微博开放平台WordPress

二、敲代码

打开目前主题正在使用的functions.php 文件,在最后一个 ?> 前加入以下代码:

// 微博同步
function post_to_sina_weibo($post_ID) {
  if( wp_is_post_revision($post_ID) ) return;
    $get_post_info = get_post($post_ID);
    $get_post_centent = get_post($post_ID)->post_content; 
    $get_post_title = get_post($post_ID)->post_title;
  if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
    $request = new WP_Http;
    $status = '【' . strip_tags( $get_post_title ) . '】 ' . mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, 132,'...') . ' 全文地址:' . get_permalink($post_ID) ;
    $api_url = 'https://api.weibo.com/2/statuses/update.json';
    $body = array( 'status' => $status, 'source'=>'4135063399');
    $headers = array( 'Authorization' => 'Basic ' . '1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==' );
	/*
	如果你使用改方法,请注释掉上面$headers = array( 'Authorization' => 'Basic ' . '1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==' );
	换成如下代码
	//你的新浪微博登陆名
	$username = '' ;
	//你的新浪微博登陆密码
	$password = '' ;
	$headers = array( 'Authorization' => 'Basic ' .  base64_encode('$username:$password'));
	*/	
    $result = $request->post( $api_url , array( 'body' => $body, 'headers' => $headers ) );
    }
}
add_action('publish_post', 'post_to_sina_weibo', 0);

上面代码需要修改的地方:

第11行需要修改为你的 Appkey,源代码中4135063399的那个。

第12行的 1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA== 需要修改为你的'bate64编码加密'位置,你自己到http://www.mxcz.net/tools/base64.aspx自己把你的帐号密码进行一下加密,格式是你新浪微博的登陆帐号:登陆密码(如 username@gmail.com:password)

相关代码解析:

if( wp_is_post_revision($post_ID) ) return;
//如果是修订版本
$get_post_info = get_post($post_ID);
//获取该文章信息
$get_post_centent = get_post($post_ID)->post_content;
//文章内容(不知道为什么在使用获取全部post_ID数据后没办法得到content,所以单独在请求下)
$get_post_title = get_post($post_ID)->post_title;
//文章标题
if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
//判断是不是已经发表的文章或页面
$status = '【' . strip_tags( $get_post_title ) . '】 ' . mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, 132,'...') . ' 全文地址:' . get_permalink($post_ID) ;
// strip_tags( $get_post_title ) 是获取文章标题
// mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, 132,'...') 是截取文章的长度
// get_permalink($post_ID) 该文章链接地址
$api_url = 'https://api.weibo.com/2/statuses/update.json';
//老接口用不了了,必须用v2.0
$body = array( 'status' => $status, 'source'=>'4135063399');
// $status 要发布的微博文本内容,内容不超过140个汉字
// $source 数值为应用的AppKey
$headers = array( 'Authorization' => 'Basic ' . 'bate64编码加密' );
//这里的'bate64编码加密'位置,你自己到http://www.mxcz.net/tools/base64.aspx自己把你的帐号密码进行一下加密,格式是你新浪微博的登陆帐号:登陆密码(如,username@gmail.com:password)
//如果不喜欢这么使用$headers = array( 'Authorization' => 'Basic ' . 'bate64编码加密' ),就替换使用下面这个方法也可以,一样
//你的新浪微博登陆名
$username = '' ;
//你的新浪微博登陆密码
$password = '' ;
$headers = array( 'Authorization' => 'Basic ' . base64_encode('$username:$password'));

其实就Jeff亲自实践,使用明文账号密码是行不通的(即使第二种方法不行),建议第一种bate64编码加密的方法。

更多前往:http://kinggoo.com/wpsycnweibo.htm 本文核心代码及相关文字来源于此,感谢原作者。

评分:
当前平均分 0.00 (0%) - 0 个投票
25 条 评论
  1. 这个功能还能用么?

    6年前 回复
  2. 同步到多个账号怎么搞啊。。。

    7年前 回复
  3. $headers = array(‘Authorization’ => ‘Basic ‘ . base64_encode(‘$username:$password’));
    最后应该改为:
    base64_encode(“$username:$password”));单引号不能包含变量

    9年前 回复
  4. 怎么同步文章内的图片呢

    9年前 回复
  5. 楼主能否实现指定栏目(分类)同步到新浪微博,小弟水平太差,只能用现成的,恳请楼主百忙之中能够修改一下,非常感谢楼主分享

    10年前 回复
    • 应该用 is_catagory 这个函数判断下就可以了

      10年前 回复
      • 搜索了很多is_catagory 这个函数判断,作了尝试,进行了各种代码测试,无奈就是不行。本人是超级菜鸟,还请楼主能否给出代码,非常感谢楼主

        10年前 回复
        • 我没测试哈,思路应该是对的,暂时没有空测试。

          10年前 回复
          • 本人不会php,都是搜索出来的代码尝试, is_catagory 判断弄了好几天了,还是不行,结果是不能同步。我修改的代码如下,请楼主批评指正。
            if ( in_category( array( 48 ) ) ) {

            function post_to_sina_weibo($post_ID) {

            if( wp_is_post_revision($post_ID) ) return;
            //如果是修订版本

            $get_post_info = get_post($post_ID);
            //获取该文章信息
            $get_post_centent = get_post($post_ID)->post_content;
            //文章内容(不知道为什么在使用获取全部post_ID数据后没办法得到content,所以单独在请求下)
            $get_post_title = get_post($post_ID)->post_title;
            //文章标题

            }

            10年前 回复
  6. 使用明文也是可以了,多数情况可能是代码书写的问题,也有可能是主机服务的一些问题才会不支持!很多好友的确遇到这累问题很多,有些可以解决有些只能换curl的方法

    10年前 回复
  7. 博主,能借用下你的APPkey试一下吗,我这老是不能成功。

    10年前 回复
    • 203783827 应该要对应域名才能发出的哦

      10年前 回复
      • 谢谢了,还是不行,我这不是用的wordpress,另一个php程序,找了个可代替wp_http的类,估计这个http请求类有问题。。。

        10年前 回复
  8. 想弄,但是还是算了,自己发完文章使用百度分享分享一下得了,一切为了seo。。。。

    11年前 回复
  9. sb,写的php代码有致命错误。

    11年前 回复
    • 请问致命错误是什么?麻烦请教一下,本人是PHP菜鸟。

      11年前 回复
  10. 确定不是functions.php?是funtions.php?

    11年前 回复
    • 哎呀,写错了。一直都这么写,现在才发现错了。

      11年前 回复
      • 呵呵,博主还是很厉害的,赞!

        11年前 回复
发表评论