WordPress发布文章同步到新浪微博失败的解决办法

转载   张戈博客  2016-01-28 06:49:24  3,505 人阅读  16 条评论

投放广告联系   诚邀合作伙伴   赞助我们   垃圾评论惩罚

张戈博客很久之前分享过一篇《WordPress发布文章自动同步到新浪微博(带特色图片)》的文章,但经常有站长留言反馈同步失败,我一直觉得是代码部署问题。

最近很长一段时间,张戈博客也无法同步,我又觉得是微博自身的问题。直到近期抽空DeBUG了一下微博同步,取得了返回结果,才发现是由于网站IP变更导致的!

一、网站IP变更

如下是我DeBUG取得的返回 json 结果:

WordPress发布文章同步到新浪微博失败的解决办法

格式化如下:

  1. {
  2.     "headers": {
  3.         "server""nginx/1.6.1",
  4.         "date""Sat, 16 Jan 2016 11:43:34 GMT",
  5.         "content-type""application/json;charset=UTF-8",
  6.         "connection""close",
  7.         "api-server-ip""10.75.5.90",
  8.         "vary""Accept-Encoding"
  9.     },
  10.     "body""{\"error\":\"Ip Limit, request ip is not contained in safety ip\",\"error_code\":10004,\"request\":\"/2/statuses/upload_url_text.json\"}",
  11.     "response": {
  12.         "code"400,
  13.         "message""Bad Request"
  14.     },
  15.     "cookies": [ ],
  16.     "filename"null
  17. }

其中“Ip Limit, request ip is not contained in safety ip”很明显地指出了错误原因:当前IP不在微博服务器白名单列表当中。说白了就是网站换了IP地址,和你之前申请微博应用时填写的IP不一致了!前往新浪微博开放平台看了下,里面设置的IP果然还是之前的老IP:

WordPress发布文章同步到新浪微博失败的解决办法1

所以,如果发现你部署了代码,却总是无法同步,请前往微博开放平台,如图查看并更正一下网站现用服务器的IP地址

当然,修改后会进入二次审核状态,耐心等待好了。

WordPress发布文章同步到新浪微博失败的解决办法2

二、DeBUG 方法

如果上述分享还不能解决你的问题,最后张戈再分享本文用到的DeBUG方法。

原理很简单,所谓的DeBUG就是取得微博同步的返回值,看下到底是什么原因不能同步。

DeBUG代码如下:

  1. <?php
  2. /**
  3. * WordPress发布文章同步到新浪微博(DeBUG测试)
  4. * 文章地址:https://zhangge.net/5082.html
  5. */
  6. ini_set('display_errors', true);
  7. require('./wp-blog-header.php');
  8. header("Content-type: text/html;charset=UTF-8");
  9. header('HTTP/1.1 200 OK');
  10. function post_to_sina_weibo_test($post_ID) {
  11.    $get_post_info = get_post($post_ID);
  12.    $get_post_centent = get_post($post_ID)->post_content;
  13.    $get_post_title = get_post($post_ID)->post_title;
  14.    if ($get_post_info->post_status == 'publish') {
  15.        $appkey='1034947262'; /* 此处是你的新浪微博appkey,不修改的话就会显示来自张戈博客哦! */
  16.        $username='微博用户名';
  17.        $userpassword='微博密码';
  18.        $request = new WP_Http;
  19.        $keywords = "";
  20.        /* 获取文章标签关键词 */
  21.        $tags = wp_get_post_tags($post_ID);
  22.        foreach ($tags as $tag ) {
  23.           $keywords = $keywords.'#'.$tag->name."#";
  24.        }
  25.       /* 修改了下风格,并添加文章关键词作为微博话题,提高与其他相关微博的关联率 */
  26.      $string1 = '【文章发布】' . strip_tags$get_post_title ).':';
  27.      $string2 = $keywords.' 查看全文:'.get_permalink($post_ID);
  28.      /* 微博字数控制,避免超标同步失败 */
  29.      $wb_num = (138 - WeiboLength_test($string1.$string2))*2;
  30.      $status = $string1.mb_strimwidth(strip_tags( apply_filters('the_content', $get_post_centent)),0, $wb_num,'...').$string2;
  31.        /* 获取特色图片,如果没设置就抓取文章第一张图片 */
  32.        if (has_post_thumbnail()) {
  33.           $timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' );
  34.           $url = $timthumb_src[0];
  35.        /* 抓取第一张图片作为特色图片,需要主题函数支持 */
  36.        } else if(function_exists('catch_first_image_test')) {
  37.           $url = catch_first_image_test();
  38.        } else {
  39.           $url = ''/* ★★★★★★★★ Debug的时候,此处建议人工指定一张图片的url地址,方便定位 */
  40.        }
  41.        /* 判断是否存在图片,定义不同的接口 */
  42.        if(!emptyempty($url)){
  43.           $api_url = 'https://api.weibo.com/2/statuses/upload_url_text.json'; /* 新的API接口地址 */
  44.           $body = array('status' => $status,'source' => $appkey,'url' => $url);
  45.        } else {
  46.           $api_url = 'https://api.weibo.com/2/statuses/update.json';
  47.           $body = array('status' => $status,'source' => $appkey);
  48.        }
  49.        $headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));
  50.        $result = $request->post($api_urlarray('body' => $body,'headers' => $headers));
  51.        return json_decode($result);
  52.     }
  53. }
  54. /*
  55. //获取微博字符长度函数 
  56. */
  57. function WeiboLength_test($str)
  58. {
  59.     $arr = arr_split_zh_test($str);   //先将字符串分割到数组中
  60.     foreach ($arr as $v){
  61.         $temp = ord($v);        //转换为ASCII码
  62.         if ($temp > 0 && $temp < 127) {
  63.             $len = $len+0.5;
  64.         }else{
  65.             $len ++;
  66.         }
  67.     }
  68.     return ceil($len);        //加一取整
  69. }
  70. /*
  71. //拆分字符串函数,只支持 gb2312编码  
  72. //参考:http://u-czh.iteye.com/blog/1565858
  73. */
  74. function arr_split_zh_test($tempaddtext){
  75.     $tempaddtext = iconv("UTF-8""GBK//IGNORE"$tempaddtext);
  76.     $cind = 0;
  77.     $arr_cont=array();
  78.     for($i=0;$i<strlen($tempaddtext);$i++)
  79.     {
  80.         if(strlen(substr($tempaddtext,$cind,1)) > 0){
  81.             if(ord(substr($tempaddtext,$cind,1)) < 0xA1 ){ //如果为英文则取1个字节
  82.                 array_push($arr_cont,substr($tempaddtext,$cind,1));
  83.                 $cind++;
  84.             }else{
  85.                 array_push($arr_cont,substr($tempaddtext,$cind,2));
  86.                 $cind+=2;
  87.             }
  88.         }
  89.     }
  90.     foreach ($arr_cont as &$row)
  91.     {
  92.         $row=iconv("gb2312","UTF-8",$row);
  93.     }
  94.     return $arr_cont;
  95. }
  96. /* 抓取文章第一张图片作为特色图片(已加上是否已存在判断,可放心添加到functions.php) */
  97. if(!function_exists('catch_first_image_test')){
  98.   function catch_first_image_test() {
  99.     global $post$posts;
  100.     $first_img = '';
  101.     ob_start();
  102.     ob_end_clean();
  103.     $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $get_post_centent,$matches);
  104.     $first_img = $matches [1][0];
  105.     return $first_img;
  106.    }
  107. }
  108. echo post_to_sina_weibo_test(5082); //此处数字改成博客已发布文章的ID即可
  109. ?>

首先根据自己微博修改以上代码中的微博 app_key、用户名、密码。然后,将最后一句代码中的5082改成你博客已发布文章的ID。最后,将代码保存为php文件(比如 test.php),上传到网站根目录并在浏览器访问即可看到微博同步返回的结果了!

能看到失败原因,相信问题已经解决了一半,是不是又学到了一招呢?

如果文章对你有帮助,请赞赏支持boke112导航发展!

文章标签: ,  
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为转载文章,来源于 张戈博客 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

 发表评论


  1. 早莫
    早莫 【小白】 @回复

    设置好之后,第一次发文章同步成功了,没有任何的提示,但是后续在发布文章的时候就提示does multipart has image错误,还没有找到原因

    • boke112导航
      boke112导航【村长】2017-02-18 14:06  回复

      @早莫这个问题没有遇到过,你可以百度这个错误看看怎么解决

  2. 自来也
    自来也 【小白】 @回复

    同步失败了,提示IP不在白名单中,可是已经添加到了白名单中了,难道万网的虚拟主机不靠谱。。

  3. 技术拉近你我
    技术拉近你我 【进士】 @回复

    厉害! [强]

  4. 归途网
    归途网 【举人】 @回复

    请问微博在同步的时候说是URL无效是怎么回事
    错误”errors”:{“http_request_failed”:[“URL\u65e0\u6548\u3002″]},”error_data”:[]

    • boke112导航
      boke112导航【村长】2016-04-21 09:14  回复

      @归途网如果确实根据文章的要求一一设置后还出现错误,建议到张戈原文处留言,他对这个问题研究比较深。

  5. 橘子书
    橘子书 【丞相】 @回复

    这个对自媒体挺有用的!

  6. 金亨先生
    金亨先生 【状元】 @回复

    有用的

  7. 小宋日志
    小宋日志 【尚书】 @回复

    我的终于调试好了。

  8. 明月登楼
    明月登楼 【王爷】 @回复

    目前同步都正常!

  9. 好文章
    好文章 【尚书】 @回复

    技术性的文章、赞一个

  10. 小宋日志
    小宋日志 【尚书】 @回复

    张戈还是很热心的。

  11. 三月福利吧
    三月福利吧 【状元】 @回复

    有时间也把这个搞上~

  12. 自由人理财
    自由人理财 【秀才】 @回复

    感觉很高深,看不懂 [衰]

  13. 阿龙个人博客
    阿龙个人博客 【进士】 @回复

    [微笑] 说实话,个人不是很关心这个哦,权当了解下张张见识吧。

  14. Koolight
    Koolight 【尚书】 @回复

    我感觉还是手动有选择性的发微博还是好一些,自动推送的话,微博都是一样的格式了。