[API使用代码]WordPress自动同步到新浪微博头条文章 | 祭夜Bug
  • 欢迎访问祭夜blog,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧
  • 有页面排版问题,请到留言板反馈,谢谢!
  • 点击链接加入群聊【祭夜#桃花源#】:祭夜#桃花源#

[API使用代码]WordPress自动同步到新浪微博头条文章

Wordpress 祭夜ゐ 1年前 (2017-07-15) 2459次浏览 已收录 52个评论 扫描二维码

Typecho 版

[插件]typecho的微博头条同步插件

WordPress 版看这里 本来不想写 Typecho 的头条文章插件,应该是没空写。。。因此我推辞了一位与 […]

更新日志

2017-07-21 修复封面为第一张图片时,获取失败的问题

2017-08-13 添加博客文章的标签关联到新浪话题

2017-08-17 修正同步话题

2017-09-01 我加了需要修改的地方的说明 :idea: 

2018-06-21 修正获取封面代码,更正一个数字

 

代码在文章底部

 

最近申请了微博登陆看见微博里有个头条文章高级写入接口

申请传送—>微博开放平台

于是就想去折腾折腾
[API 使用代码]WordPress 自动同步到新浪微博头条文章

祭夜比较懒,就去百度搜了搜,看见一个插件竟然要 18RMB

[API 使用代码]WordPress 自动同步到新浪微博头条文章
纳尼?至于吗。。。。我一个穷高中生买不起啊
于是呢,我就看了看其他的
发现有个代码版,不错可以折腾折腾
有兴趣的去看看——–>传送门
原版的问题挺多,我就修改优化了

实现原理

在发布文章时,调用微博头条文章接口,实现博客文章与头条文章同步
接口文档简单说明

接口文档地址:http://open.weibo.com/wiki/2/proxy/article/publish
文档中使用 oauth2 授权方式,通过 access_token 获得权限调用接口,为了适应 WordPress 和代码编写简单,我们采用 BaseAuth 授权方式。如果你对授权方式感兴趣,可以查看REST API 安全设计指南 这篇文章。

发布后效果

[API 使用代码]WordPress 自动同步到新浪微博头条文章

代码编写

注意:部分代码需要自行修改!!!

 

必须修改:19,20,21,55

建议修改:72行(正常使用请关闭,异常时请打开

 

以下代码增加到自己主题的 functions.php 文件中。

/** 
 * WordPress 同步文章到新浪微博头条文章 By 无主题博客 
 * 完善修正 By 祭夜
 * 修正内容:
 * 1.部分代码错误
 * 2.修复同步到头条文章时 HTML 代码被去掉的问题
 * 3.增加头条文章封面
 * 4.添加博客文章的标签关联到新浪话题
 * 原文地址: http://wuzhuti.cn/2715.html(原站已停运)
 */  
function post_to_sina_weibo_toutiao($post_ID) {     
    //ini_set('display_errors', true);
    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')
    {  
    $appkey = 'App Key';          //App Key
    $username = '用户名';        //用户名
    $userpassword = '密码';    //密码
    $request = new WP_Http;  
    /* 获取文章标签关键词*/
       $tags = wp_get_post_tags($post_ID);
       foreach ($tags as $tag ) {
          $keywords = $keywords.'#'.$tag->name."#";
       } 
    $status = '【' . strip_tags($get_post_title) . '】 ' . mb_strimwidth(strip_tags(apply_filters('the_content', $get_post_centent)) , 0, 132, ' ');  
    $api_url = 'https://api.weibo.com/proxy/article/publish.json';  
    $body = array(
        'title'   => strip_tags($get_post_title),         //头条的标题
        'content' => get_post($post_ID)->post_content.' 
原文地址:' . get_permalink($post_ID),    //头条的正文
        'cover'   => mmimg($post_ID),                 //头条的封面
        'summary' => mb_strimwidth(strip_tags(apply_filters('the_content', $get_post_centent)) , 0, 110, '...'),      //头条的导语
        'text'    => mb_strimwidth(strip_tags(apply_filters('the_content', $get_post_centent)) , 0, 110, $status).$keywords.'原文地址:' . get_permalink($post_ID),    //微博的内容
        'source'  => $appkey
    );  
    $headers = array('Authorization' => 'Basic ' . base64_encode("$username:$userpassword"));  
    $result = $request->post($api_url, array('body' => $body,'headers' => $headers)); 
    logInfo($result['body']);
  }  
} 
add_action('publish_post', 'post_to_sina_weibo_toutiao', 0);        //给发布文章增加一个分享微博头条文章的动作
//获取封面
function catch_that_image($postID){
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=\"?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>/i',get_post($postID)->post_content,$matches);
	$first_img = $matches[1][0];
	//将文章第一张图片的地址赋值给$first_img
	if(empty($first_img)){
		//文章第一张图为空,也就是整篇文章没有图片,将默认设置的图片的地址赋值给$first_img
		$popimg = git_get_option('git_sina_weibo_cover');
		$first_img = $popimg;
	}
	return $first_img;
}
function mmimg($postID){
	$cti = catch_that_image($postID);
	//得到$first_img 的值,并赋值给$cti
	$showimg = $cti;
	//将$cti 的值赋值给$showimg
	has_post_thumbnail();
	if(has_post_thumbnail()){
		//判断是否有特色图片,有则将$showimg 的值替换为特色图片的地址,否则不变
		$thumbnail_image_url = wp_get_attachment_image_src(get_post_thumbnail_id(),'thumbnail');
		$shareimg = $thumbnail_image_url[0];
	}
	else{
		$shareimg = $showimg;
	}
	;
	return $shareimg;
}
//调用代码:mmimg($post_ID)
 //写日志函数
function logInfo($msg)
{
   $logSwitch = 1;                                     // 日志开关:1 表示打开,0 表示关闭
    $logFile    = '/tmp/sync_weibo.log';    // 日志路径           
    if ($logSwitch == 0 ) return;
    date_default_timezone_set('Asia/Shanghai');
    file_put_contents($logFile, date('[Y-m-d H:i:s]: ') . $msg . PHP_EOL, FILE_APPEND);
    return $msg;
}

以上代码已经过祭夜测试,并以投入使用

有问题请在评论区反馈,谢谢


祭夜 blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[API 使用代码]WordPress 自动同步到新浪微博头条文章
喜欢 (5)
cqcadmin
关于作者:
祭夜酱站长
发表我的评论
取消评论

表情
贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您也可以使用第三方账号登录


(52)个小伙伴在吐槽
  1. prprp 第一次来PY大佬 想要typecho版本的!!!
    北海2018-06-21 20:17 回复 Windows 7 | Chrome 53.0.2785.104
    • cqcadmin
      还没接触过typecho,况且现在是准高三,得好好学习,你懂
      祭夜ゐ2018-06-21 20:20 回复 Windows 10 | Chrome 67.0.3396.87
    • cqcadmin
      抽时间弄了一个https://www.jysafe.cn/3226.air
      祭夜ゐ2018-06-23 10:01 回复 Windows 10 | Chrome 67.0.3396.87
  2. 博客做的好花哨
    老哥网赚博客2018-03-30 23:14 回复 Windows 7 | Chrome 55.0.2883.87
  3. 空了试试。感谢博主。
    LsevenTT站群哥2018-03-26 08:22 回复 Windows 7 | Chrome 55.0.2883.87
  4. 现在好像是不行了,之前新浪不是把那个啥接口关了吗。。
    LsevenTT站群哥2018-03-24 14:22 回复 Windows 7 | Chrome 55.0.2883.87
    • cqcadmin
      那是高级文章接口,这是头条文章接口
      祭夜ゐ2018-03-25 07:50 回复 Windows 7 | Chrome 63.0.3239.132
  5. 61ca932ea1
    哈哈 谢谢啦
    MEtask2018-02-24 01:07 回复 Windows 8.1 | Chrome 64.0.3282.140
  6. 发表新文章会在微博同步2篇一样的文章,怎么解决
    富贵气逼人2018-01-13 18:46 回复 Mac OS X | Firefox浏览器 57.0
    • cqcadmin
      请确保只有本代码执行微博同步功能。可以关闭所有插件重试。并检查代码正确性。
      祭夜ゐ2018-01-16 22:53 回复 Linux | Chrome 53.0.2785.146
  7. [2017-09-13 17:47:47]: {"error":"Insufficient app permissions!","error_code":10014,"request":"/proxy/article/publish.json"}[2017-09-13 17:47:48]: {"error":"Insufficient app permissions!","error_code":10014,"request":"/proxy/article/publish.json"}报错是这个,怎么改啊?
    1024rd.com2017-09-13 17:49 回复 Windows 10 | Chrome 60.0.3112.113
    • cqcadmin
      你还没申请权限,请申请,谢谢!
      祭夜ゐ2017-09-13 18:22 回复 Linux | Chrome 37.0.0.0
      • 我已经有App Key和App Secret了。难道还要开发者身份证验证嘛?
        1024rd.com2017-09-13 18:39 回复 Windows 10 | Chrome 60.0.3112.113
    • cqcadmin
      我想说,这是常识
      祭夜ゐ2017-09-13 22:37 回复 Linux | Chrome 37.0.0.0
  8. 这个是同步微博头条文章的,有没有发布新文章后把文章的摘要或者截取一定字数内容加链接推送到微博的?类似张戈那个,只不过目前张戈的那个好像不好用。
    Climit2017-09-08 14:36 回复 Windows 10 | Chrome 60.0.3112.113
    • cqcadmin
      同步微博目前由于新浪接口下线,只能同步文字不支持图片
      祭夜ゐ2017-09-13 13:00 回复 Linux | Chrome 61.0.3163.81
      • 那也可以啊,至少能同步,文章和链接,你有写吗?
        Climit2017-09-13 15:41 回复 Linux | Chrome 53.0.2785.49
        • cqcadmin
          我也是张戈改的,差不多,由于现在用头条,我之前的代码好像删了
          祭夜ゐ2017-09-13 18:20 回复 Linux | Chrome 37.0.0.0
  9. 文章不错支持一下
    新闻资讯2017-09-05 14:34 回复 Windows 7 | Chrome 31.0.1650.63
  10. 求教,放了代码后,只同步了两篇文章,之后就不同步了,是什么问题??/
    heizida2017-09-01 15:24 回复 Windows 10 | Chrome 59.0.3071.115
    • cqcadmin
      你好,如果没有开启调试请开启调试,然后查看日志中的错误记录
      错误码 错误信息 描述
      10001 system error 系统错误
      10008 param xxx invalid 参数xxx不符合要求
      11001 sass check error 发布过于频繁
      11002 create statuses error 微博发送失败
      11003 bind error 文章关联微博失败
      祭夜ゐ2017-09-01 16:04 回复 Windows 7 | Chrome 55.0.2883.87
      • 你好,是查看sync_weibo.lon吗??[2017-08-31 01:27:14]: {"code":100000,"msg":"","data":{"object_id":"1022:2310474146617157562123","url":"http:\/\/weibo.com\/ttarticle\/p\/show?id=2310474146617157562123","mid":4146617156479742}}[2017-08-31 19:47:28]: {"code":100000,"msg":"","data":{"object_id":"1022:2310474146894040386888","url":"http:\/\/weibo.com\/ttarticle\/p\/show?id=2310474146894040386888","mid":4146894043014144}}[2017-08-31 20:49:22]: {"code":10008,"msg":"param cover invalid","data":[]}[2017-09-01 12:40:02]: {"code":10008,"msg":"param cover invalid","data":[]}[2017-09-01 12:42:52]: {"code":10008,"msg":"param cover invalid","data":[]}[2017-09-01 13:17:40]: {"code":10008,"msg":"param cover invalid","data":[]}[2017-09-01 14:10:22]: {"code":100000,"msg":"","data":{"object_id":"1022:2310474147171594246534","url":"http:\/\/weibo.com\/ttarticle\/p\/show?id=2310474147171594246534","mid":4147171597537530}}[2017-09-01 14:24:17]: {"code":10008,"msg":"param cover invalid","data":[]}[2017-09-01 14:27:17]: {"code":10008,"msg":"param cover invalid","data":[]}
        heizida2017-09-01 18:51 回复 Windows 10 | Chrome 62.0.3175.3
    • cqcadmin
      根据"code":10008,"msg":"param cover invalid","data":[]以及官方文档说明错误码10008对应参数cover错误即你的图片地址是错误的,应该是
      $popimg= '默认图片地址(可以是LOGO等)';
      没有修改为正确的地址。
      祭夜ゐ2017-09-01 18:56 回复 Windows 7 | Chrome 55.0.2883.87
      • 可以了,谢谢了,好人一生平安,弱弱的问句,有同步到新浪博客的方法吗??想搞博客群
        heizida2017-09-01 19:29 回复 Windows 10 | Chrome 62.0.3175.3
    • cqcadmin
      可以试一试这一篇文章:https://zhangge.net/4512.html
      祭夜ゐ2017-09-01 19:34 回复 Windows 7 | Chrome 55.0.2883.87
      • 这个插件不懂你有没有在用,我这边输入用户名和密码后显示无法登录
        heizida2017-09-01 19:45 回复 Windows 10 | Chrome 62.0.3175.3
    • cqcadmin
      没测试
      祭夜ゐ2017-09-01 19:48 回复 Windows 7 | Chrome 55.0.2883.87
      • 用不了,有别的办法吗??
        heizida2017-09-01 20:00 回复 Windows 10 | Chrome 62.0.3175.3
        • cqcadmin
          抱歉,没有了
          祭夜ゐ2017-09-01 20:14 回复 Windows 7 | Chrome 55.0.2883.87
  11. 我的是thinkphp框架写的程序,模拟请求方法总是失败,实在不知道该怎么弄了,求助大神,谢谢了
    zper2017-08-31 10:50 回复 Windows 10 | Chrome 50.0.2661.102
    • cqcadmin
      抱歉个人不了解REST API,您可以使用http://open.weibo.com/wiki/Toutiao/api 以OAuth授权来解决
      祭夜ゐ2017-08-31 12:24 回复 Windows 7 | Chrome 55.0.2883.87
      • OAuth授权的话需要点一次授权登录,体验不太好,想学你的用Basic授权登录,然后进行发布操作,现在走到了request->post这一步了,想实现一个php的post的模拟来替换您的$request->post($api_url, array('body' => $body,'headers' => $headers)); 不知道该怎么写了,求教,写了多次都提示{"error":"auth by Null spi!","error_code":21301,"request":"/proxy/article/publish.json"}
        zper2017-08-31 13:51 回复 Windows 10 | Chrome 50.0.2661.102
    • cqcadmin
      这边是调用了Wordpress内部整合的rest api 而我并不是什么大神,只是修修代码。你可以查找一下关于rest api的相关文档进行开发。另外,OAuth授权中access_token的过期时间通常为30天。30天进行一次授权还是可以接受的。
      祭夜ゐ2017-08-31 15:19 回复 Windows 7 | Chrome 55.0.2883.87
  12. 大神好,我的程序是我自己开发的,没有所谓的WP_Http类,常识了几次模拟post请求,返回的都是{"error":"auth by Null spi!","error_code":21301,"request":"/proxy/article/publish.json"},接口已经申请到了,账号密码也确认正确,但就是不成功,能否帮忙写一个模拟post的请求,谢谢了
    zper2017-08-31 10:46 回复 Windows 10 | Chrome 50.0.2661.102
  13. 3de561dce3
    老大 调试可以正常发布,但是代码放到模板函数里 无法同步
    风云2017-08-17 09:24 回复 Windows 7 | Chrome 45.0.2454.101
    • cqcadmin
      是在哪里调试的
      祭夜ゐ2017-08-17 10:05 回复 Windows 10 | Chrome 55.0.2883.87
      • 3de561dce3
        打包成php文件上传到主机,那个sync_weibo.log日志文件在哪 没找到
        风云2017-08-17 10:15 回复 Windows 7 | Chrome 45.0.2454.101
        • cqcadmin
          日志在服务器根目录的“tmp目录“”下
          祭夜ゐ2017-08-17 10:16 回复 Windows 10 | Chrome 55.0.2883.87
          • 3de561dce3
            用的是景安的主机,在根目录下没有tmp/sync_weibo.log,调试的时候echo post_to_sina_weibo_toutiao(597);能同步到微博
            风云2017-08-17 10:53 Windows 7 | Chrome 45.0.2454.101
        • cqcadmin
          景安的没用过。。。你可以全盘搜索,或者用“芒果云”管理器搜索http://www.kalcaddle.com/
          祭夜ゐ2017-08-17 11:00 回复 Windows 10 | Chrome 55.0.2883.87
    • cqcadmin
      查看sync_weibo.log日志文件看是不是发布过程出问题
      祭夜ゐ2017-08-17 10:06 回复 Windows 10 | Chrome 55.0.2883.87
  14. 貌似php7用不了
    爱看吧2017-08-16 20:58 回复 Windows 8.1 | Chrome 55.0.2883.87
    • cqcadmin
      嗯--这个我测试一下看看,待会儿答复
      祭夜ゐ2017-08-16 21:00 回复 Windows 10 | Chrome 55.0.2883.87
    • cqcadmin
      支持php7,请您检查代码是否正确,或者您可以开启DEBUG功能进行代码上的修正,原文中多处代码需修改
      祭夜ゐ2017-08-16 21:07 回复 Windows 10 | Chrome 55.0.2883.87
      • 难道是wp版本不支持?
        爱看吧2017-08-16 21:33 回复 Windows 8.1 | Chrome 55.0.2883.87
        • cqcadmin
          我是最新4.8.1的版本,应该与版本关系不大,重要的是检查日志文件看代码运行是否错误,然后,查看头条发布日志,以确定问题所在
          祭夜ゐ2017-08-16 21:37 回复 Windows 10 | Chrome 55.0.2883.87
          • 问题在于,我一贴上代码网站就出现:Fatal error: Call to undefined function git_get_option() in xx/xxx/functions.php on line 129
            爱看吧2017-08-16 21:40 Windows 8.1 | Chrome 55.0.2883.87
    • cqcadmin
      那就是代码没有修改正确,在第129行“git_get_option()”未定义,这个函数是我这边主题的函数,您需要稍加修改
      祭夜ゐ2017-08-16 21:43 回复 Windows 10 | Chrome 60.0.3112.90
      • if(git_get_option('git_sinaarticle_b')) {//开关选项,请自行修改(要么动主题设置,要么去掉判断)这个函数哪里获取
        爱看吧2017-08-16 21:50 回复 Windows 8.1 | Chrome 55.0.2883.87
      • 搞不了,假如去掉函数图片就不同步了吗?
        爱看吧2017-08-16 21:55 回复 Windows 8.1 | Chrome 55.0.2883.87
        • cqcadmin
          这是我自己加的,便于控制,你的主题不会有的,直接删除就行,另外函数第36行我做了修改
          祭夜ゐ2017-08-17 10:29 回复 Windows 10 | Chrome 55.0.2883.87