WordPress文章同步到新浪微博的三种方法

同步到微博大概有三种方法,插件、关联博客、非插件微博接口

第一种,直接百度搜索就可以;
第二种,由于新浪现在已经取消了关联博客的选项,但该功能却没有被取消你可以放问下面这个地址,然后配置一下就可以了

http://weibo.com/tool/bloglink

第三种方法需要使用新浪的接口,如下操作:
1)到新浪微博开放平台创建一个站内应用http://open.weibo.com/apps/new?sort=app,通过不通过审核都可以,只不过通过的话可以在微博下方显示来自某某应用,如来自KingGoo技术博客image ,具体怎么创建你可以在百度谷歌上搜索一下,很简单(但如果你一直没有通过审核,还想通过审核的话,我可以提供有偿帮助嘎嘎~),创建好应用后,下面需要使用到申请应用的 App Key;
2)编辑你主题的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; 
    //去掉文章内的html编码的空格、换行、tab等符号(如果你文章的编码格式是这样子,可以将下面的"//"去掉即开启此功能)
    //$get_post_centent = str_replace("\t", " ", str_replace("\n", " ", str_replace(" ", " ", $get_post_centent)));
    $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);

大概一般都应该知道是什么意思吧

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’));

 

最后会在你发送博文后,马上同步一条信息到微博上,如下图所示:

WordPress文章同步到新浪微博的3种方法


该微博接口请求参数:

必选

类型及范围

说明

source

false

string

采用OAuth授权方式不需要此参数,其他授权方式为必填参数,数值为应用的AppKey

status

true

string

要发布的微博文本内容,必须做URLencode,内容不超过140个汉字。

visible

false

int

微博的可见性,0:所有人能看,1:仅自己可见,2:密友可见,3:指定分组可见,默认为0。

access_token

false

string

采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。

list_id

false

string

微博的保护投递指定分组ID,只有当visible参数为3时生效且必选。

lat

false

float

纬度,有效范围:-90.0到+90.0,+表示北纬,默认为0.0。

long

false

float

经度,有效范围:-180.0到+180.0,+表示东经,默认为0.0。

annotations

false

string

元数据,主要是为了方便第三方应用记录一些适合于自己使用的信息,每条微博可以包含一个或者多个元数据,必须以json字串的形式提交,字串长度不超过512个字符,具体内容可以自定。
- THE END -
版权声明:
转载原创文章请注明,文章出处:http://kinggoo.com
原文地址:http://kinggoo.com/wpsycnweibo.htm
发表评论?

97 条评论。

  1. 博主你好,前两天看了你的文章加入代码之后普通账号测试正常,但是我使用企业账号就发现不会同步微博,代码方面不是很懂不会调试,也看不到返回的错误信息,博主能够帮忙调试一下吗?

  2. 不知道博主有没有折腾过在wordpress获取新浪微博,
    想请教一下能不能在wp上获取微博的发布时间,现在内容已经得到了,只是时间一直没解决。

    例如 1分钟前 1小时前 1天前

  3. 一直弄不上,我的应用审核也通过了。是不是就复制博主上面哪段代码,然后把base64和appkey改了就行了呢。其他照样吧 ❗ ❗

  4. 用了两种方法都没成功 😯

  5. Twitter,Facebook,Tumblr同步国内各网站方法 | Memory - pingback on 2014 年 05 月 31 日 在 21:20
  6. 博主您好,我有两个疑问:
    1、http://open.weibo.com/connect 如何找到这个功能的入口;
    2、用户在我的网站用新浪微博登陆后,如何将自己的评论同步到自己的微博呢?是由appkey和source决定的吗?我的理解是:appkey是属于我网站,而source是用户自己的

    • 你好!
      1)你指的这个功能的入口是 管理中心 — 我的网站,在这里面添加你要审核的网站
      2)如果是那样的话,可能需要使用评论箱 http://open.weibo.com/widget/comments.php

      • 是这样的,我的网站已经有自己开发的评论系统了,我只需要打上勾,就选择了“同步到微博”这个功能,请教思路,谢谢! :razz:在一些网站见过这样的,不知道是什么原理,或者通过什么组件完成的

        • 其实想要这样的可以用多说,或者微博评论框都可以
          原理大概就是 勾选上后就会已组件形式发送,微博那边有相关api接口调用的

          • 另外 base64_encode(‘$username:$password’)得到的accesstoken好像不对哦,我看都是2.0开头的,我的就是2.00q3c5RBvzUkJEaee213a3f5cEoOyC,而base64_encode(‘$username:$password’)得到的是其他字符串

  7. Twitter,Facebook,Tumblr同步国内各网站方法 | My Memory - pingback on 2014 年 03 月 23 日 在 22:18
  8. 新浪微博早在2011年就停止了Basic Auth认证方式的支持了,博主为什么还能使用 Basic Auth认证方式 获得授权呢?http://open.weibo.com/wiki/Announcement-oauth

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

    • //答案肯定是可以。
      //用下面这个方法来找到此分类的根,这样是因为你不可能为每个分类都申请一个新浪应用。所以找到根处这样比较稳妥
      function get_category_root_id($cat)
      {
      $this_category = get_category($cat); // 取得当前分类
      while($this_category->category_parent) // 若当前分类有上级分类时,循环
      {
      $this_category = get_category($this_category->category_parent); // 将当前分类设为上级分类(继续查找上一级根)
      }
      return $this_category->term_id; // 返回根分类的id号
      }
      //默认获取当前分类ID,为查找根分类做准备
      function get_article_category_ID() {
      $category = get_the_category();
      return $category[0]->cat_ID;
      }

      // 微博同步
      function post_to_sina_weibo($post_ID) {
      if( wp_is_post_revision($post_ID) ) return;
      //$categoryRootId 用来保存当前文章分类的root的id值
      $categoryRootId = get_category_root_id(get_article_category_ID());
      switch ($category_id)
      {
      /* id*代表的是你本身wordpress内设置的根分类,也就是同级分类,比如统计文类有
      * A-|a1
      * |a2
      * B-|b1
      * |b2
      * (当你的文章是a1的时候,程序会找到根分类A,当是b1的时候会找到根分类B。)
      * 而你需要找到A、B根分类的ID,这个可以看的。然后写在下面id后面是数字那里,里面写文章内function $appkey那部分
      */
      case id1: //这个就是比如你的根分类是A,这个id需要你到数据库里面查找
      $body = array( ‘status’ => $status, ‘source’=>’500000000’);
      break;
      case id2:
      $body = array( ‘status’ => $status, ‘source’=>’500000001’);
      break;
      case id3:
      $body = array( ‘status’ => $status, ‘source’=>’500000002’);
      break;
      default:
      $body = array( ‘status’ => $status, ‘source’=>’500000000’);
      }

      $get_post_info = get_post($post_ID);
      $get_post_centent = get_post($post_ID)->post_content;
      //去掉文章内的html编码的空格、换行、tab等符号(如果你文章的编码格式是这样子,可以将下面的”//”去掉即开启此功能)
      //$get_post_centent = str_replace(“\t”, ” “, str_replace(“\n”, ” “, str_replace(” “, ” “, $get_post_centent)));
      $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’;
      $headers = array( ‘Authorization’ => ‘Basic ‘ . ‘这个地方是你新浪邮箱帐号:新浪密码base64算法后的字符串’ );
      $result = $request->post( $api_url , array( ‘body’ => $body, ‘headers’ => $headers ) );
      }
      }
      add_action(‘publish_post’, ‘post_to_sina_weibo’, 0);

      //不知道你能大概理解不,因为我没有去实验,你可以自己找个环境实验一下

    • 请把刚才我回复给你留言内的’、“这个符号都换成半角的’、” 这个是半角的哦 不是全角
      不然程序会有问题

      • 非常感谢楼主无私分享。没想到楼主这么快给予回复,而且还做了提醒,非常感激。
        我的意思没有表达清楚,我想实现的是,实现博客中一个文章分类目录里的文章同步到微博,其他的文章分类则不分享。例如:楼主的“诗感得意”,根据楼主原来的方法,只要一发文章,都会同步到微博,现在希望达到,文章发表在“得”的子目录下会同步到微博,文章发表在其他“意””感“诗”子目录下不会同步到微博。不知道这样能否去实现。
        恳请楼主在有空的情况下,帮忙修改一下,再次感谢楼主的无私分享精神。

        • 那就不需要get_category_root_id($cat)这个方法了。
          将$categoryRootId = get_category_root_id(get_article_category_ID());改为$categoryRootId = get_article_category_ID();
          把id1改成得的这个分类ID就可以了,比如得的分类id是11 ,appkey是50000012那
          case 11: //这个就是比如你的根分类是A,这个id需要你到数据库里面查找
          $body = array( ‘status’ => $status, ‘source’=>’50000012′);
          break;

          • function post_to_sina_weibo($post_ID) {
            if( wp_is_post_revision($post_ID) ) return;
            $category = get_the_category();
            $categoryId = $category[0]->cat_ID;

            $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’;
            switch ($categoryId)
            {
            case 48:
            $body = array( ‘status’ => $status, ‘source’=>’你的appkey’);
            break;
            default:
            $body = array( ‘status’ => $status, ‘source’=>”);
            break;
            }
            $headers = array( ‘Authorization’ => ‘Basic ‘ . ‘你的用户名和密码的bate64编码’ );

            $result = $request->post( $api_url , array( ‘body’ => $body, ‘headers’ => $headers ) );
            }
            }
            add_action(‘publish_post’, ‘post_to_sina_weibo’, 0);

        • 回复不了是吗?可以直接发条新的评论呢!

  10. 🙁 博主你好,我按照你的方法修改了主题的functions.php,插在尾部的,但是没有成功,为什么呢?

  11. 你好,我在别的建站程序上测试,用的是修改后的不依赖wordpress的wp_http类,不过不能成功,博主能帮忙看下吗?

  12. 楼主你好,感谢你的分享,但为什么我在functions.php增添代码后还是不行,我的主题是下载的,我网站倒是已经申请好了,哈哈。。谢谢你的帮助。已经粉你微博啦

  13. 楼主你好,感谢你的分享,但是我有个问题,我的funtions.php文件只有开头有,我尝试随便插入位置,但是没有成功,这要怎么办。感谢

  14. 貌似微博有这个功能吧,当WP博客发表了文章会被自动同步到新浪微博的,只要在网址哪里填写博客地址就行了。

    • 是啊 有 ,可是格式不一样。我在文章中也提到了,微博带的叫关联博客 ,格式是 标题 + 链接地址
      我的这个是这样子的 不一样。以后会改成会附带图片的那种 kinggoo.com

  15. 关注您博客这么久了..也凑个热闹 找方便的话 国内的多说和微博wordpress插件安装就可以了

  16. 😥 还是不行啊,不知道问题出在哪里了??博主能不能做成一个插件啊?

  17. 博主,按照你的代码去弄,却不行啊。在新浪开放平台那里不是应该“添加网站”而非“创建应用”吗?还有我是直接明文写入账号密码的。求救~~

    • 不好意思我现在在外地,等我回去后帮你解决

    • 我那里有两种方式,你看看 明文的是在上面 写到变量里

      • 在新浪开放平台那里不是应该“添加网站”而非“创建应用”吗?

        • 对 是添加网站
          还有你之前问的,改成下面这样就可以了
          $username = ” ;
          //你的新浪微博登陆密码
          $password = ” ;
          $headers = array( ‘Authorization’ => ‘Basic ‘ . base64_encode(‘$username:$password’));

          • 我在sae上的博客测试的不能同步,用的第二种明文账户名密码方法,你这句跟原文没区别呀?

            • 恩 对的,原文只不过是防止一小部分人如果入侵 或者 进入你网站 直接看到帐号密码(因为base64网上加密解密都有)

              你不能同步吗?你自己创建应用了吗?

              • 我已经创建了,我一会儿用加密的方法再试一下吧。不太理解你的注释,第二种直接填明文的方法也要用$headers = array( ‘Authorization’ => ‘Basic ‘ . base64_encode(‘$username:$password’));这一行代码吗,

                • $body = array( ‘status’ => $status, ‘source’=>’4135063399’); < --4135063399个是你的appkey $headers = array( 'Authorization' => ‘Basic ‘ . ‘1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==’ );< --1fFjYc3uQHZpcF32fS5jb146MxFeY19DYF53aWfzNA==这个是加密后的密码和帐号 然后我在下面有注释,或者可能你没有过多的接触过php /* 这个是注释,在这个里面的所有php内容都不会生效 */ 你可以到文章中的这里去加密 到http://www.mxcz.net/tools/base64.aspx自己把你的帐号密码进行一下加密,格式是你新浪微博的登陆帐号:登陆密码(如,username@gmail.com:password),格式就是括号内的。如果你不明白这种,你可以把上面的headers = array***这一行注释掉可以在前面添加英文的 // 既可注释掉单行,或者删除掉改行,改为如下信息也可以 $username = '这里写你的新浪微博登录帐号' ; $password = '这里写你的新浪微博密码' ; $headers = array( 'Authorization' => ‘Basic ‘ . base64_encode(‘$username:$password’));

                  • 我改了 不行。两种方式都用不了啊、

                  • 不会呀。都是按照你说的用的英文符号的。我密码有“.”这个需要另外转制符号嘛?

                    • 这样我加密了下面的数据 你看看你加密完是不是一样的啊
                      加密前:weibo@kinggoo.com:weibo#Pass
                      加密后:d2VpYm9Aa2luZ2dvby5jb206d2VpYm8jUGFzcw==
                      因为回复里面会把引号,双引号变成中文形式的,所以请注意””

                      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_centent = str_replace(“\t”, “”, str_replace(“\n”, “”, str_replace(” “, “”, $get_post_centent)));
                      $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’); //这里是你申请的app的key
                      $headers = array( ‘Authorization’ => ‘Basic ‘ . “d2VpYm9Aa2luZ2dvby5jb206d2VpYm8jUGFzcw==” );
                      $result = $request->post( $api_url , array( ‘body’ => $body, ‘headers’ => $headers ) );
                      }
                      }

                      add_action(‘publish_post’, ‘post_to_sina_weibo’, 0);

                  • 重新看了下 是一样的 没用。不发送围脖

            • 还没有搞定,我用的你注释里列的方法,已注释掉上面一种。暂不成功,原因不明。上面一种需要去第三方网站转码,不知道会不会泄密,每次改密码都要转一次比较麻烦。

              • 你按下面这个提示的写吧
                function post_to_sina_weibo($post_ID) {
                $username = ‘把你的用户名写这’ ;
                $password = ‘密码写这里’ ;
                $appkey = ‘应用的appkey写这里’;
                if( wp_is_post_revision($post_ID) ) return;
                $get_post_info = get_post($post_ID);
                $get_post_centent = get_post($post_ID)->post_content;
                //去掉文章内的html编码的空格、换行、tab等符号(如果你文章的编码格式是这样子,可以将下面的”//”去掉即开启此功能)
                //$get_post_centent = str_replace(“\t”, ” “, str_replace(“\n”, ” “, str_replace(” “, ” “, $get_post_centent)));
                $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’=>’$appkey’);
                $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);

  18. 很久没来了,有更新,相当给力啊~

发表评论