[API使用代码]WordPress自动同步到新浪微博头条文章 | 祭夜博客
  • 欢迎光临,这个博客颜色有点多

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

Wordpress msojocs 8年前 (2017-07-15) 27040次浏览 已收录 54个评论 扫描二维码

wordpress插件版

[WP插件]WordPress头条文章插件

文章目录[隐藏] 代码版 设置界面: To Do 说明 项目 历时一天 #(流汗滑稽) 这个插件初步完成了。 […]

 

Typecho版

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

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

更新日志

2019-07-18 停更代码,转向插件

插件继续更新,优化细节,增加微博官方的html标签的支持

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

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

2017-08-17 修正同步话题

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

2017-07-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.添加博客文章的标签关联到新浪话题
 * 原文地址:https://wuzhuti.cn/2715-html
 *修正地址:https://www.jysafe.cn/1940.air
 */  
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;
}

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

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


祭夜の咖啡馆 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[API使用代码]WordPress自动同步到新浪微博头条文章
喜欢 (341)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
OwO表情
贴图 加粗 删除线 居中 斜体 签到

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(54)个小伙伴在吐槽
  1. 文章不错非常喜欢
    新闻头条2020-01-02 00:31 回复 Windows 7 | Chrome 63.0.3239.132
  2. 怎么更新5.3后经常出错呢,大佬更新过吗?
    设若2019-11-15 09:14 回复 Windows 10 | Chrome 63.0.3239.132
  3. 有集成吗
    精斑检测2018-08-22 13:20 回复 Windows XP | Chrome 55.0.2883.87
    • 已经考虑,但插件得等明年我高考完了才会发布。届时插件将与微博头条的规则相匹配,排版更加美观。 #(开心)
      祭夜ゐ2018-08-25 18:36 回复 Linux | Chrome 70.0.3527.0
  4. 发布成功,文章没有内容呀
    老鱼2018-08-03 18:35 回复 Linux | Chrome 64.0.3282.123
  5. 请问55行要如何修改?
    乐悠先生2018-07-27 19:00 回复 Windows 10 | Chrome 55.0.2883.87
    • 类似$popimg = 'http://xxx.com/xxx.jpg'; #(墨镜滑稽)
      祭夜ゐ2018-07-30 12:59 回复 Linux | Chrome 52.0.2716.0
  6. prprp 第一次来PY大佬 想要typecho版本的!!!
    北海2018-06-21 20:17 回复 Windows 7 | Chrome 53.0.2785.104
  7. 博客做的好花哨
    老哥网赚博客2018-03-30 23:14 回复 Windows 7 | Chrome 55.0.2883.87
  8. 空了试试。感谢博主。
    LsevenTT站群哥2018-03-26 08:22 回复 Windows 7 | Chrome 55.0.2883.87
  9. 现在好像是不行了,之前新浪不是把那个啥接口关了吗。。
    LsevenTT站群哥2018-03-24 14:22 回复 Windows 7 | Chrome 55.0.2883.87
    • 那是高级文章接口,这是头条文章接口
      祭夜ゐ2018-03-25 07:50 回复 Windows 7 | Chrome 63.0.3239.132
  10. 哈哈 谢谢啦
    MEtask2018-02-24 01:07 回复 Windows 8.1 | Chrome 64.0.3282.140
  11. 发表新文章会在微博同步2篇一样的文章,怎么解决
    富贵气逼人2018-01-13 18:46 回复 Mac OS X | Firefox浏览器 57.0
    • 请确保只有本代码执行微博同步功能。可以关闭所有插件重试。并检查代码正确性。
      祭夜ゐ2018-01-16 22:53 回复 Linux | Chrome 53.0.2785.146
  12. [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
    • 你还没申请权限,请申请,谢谢!
      祭夜ゐ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
  13. 这个是同步微博头条文章的,有没有发布新文章后把文章的摘要或者截取一定字数内容加链接推送到微博的?类似张戈那个,只不过目前张戈的那个好像不好用。
    Climit2017-09-08 14:36 回复 Windows 10 | Chrome 60.0.3112.113
    • 同步微博目前由于新浪接口下线,只能同步文字不支持图片
      祭夜ゐ2017-09-13 13:00 回复 Linux | Chrome 61.0.3163.81
      • 那也可以啊,至少能同步,文章和链接,你有写吗?
        Climit2017-09-13 15:41 回复 Linux | Chrome 53.0.2785.49
        • 我也是张戈改的,差不多,由于现在用头条,我之前的代码好像删了
          祭夜ゐ2017-09-13 18:20 回复 Linux | Chrome 37.0.0.0
  14. 文章不错支持一下
    新闻资讯2017-09-05 14:34 回复 Windows 7 | Chrome 31.0.1650.63
  15. 求教,放了代码后,只同步了两篇文章,之后就不同步了,是什么问题??/
    heizida2017-09-01 15:24 回复 Windows 10 | Chrome 59.0.3071.115
    • 你好,如果没有开启调试请开启调试,然后查看日志中的错误记录
      错误码 错误信息 描述
      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
    • 根据"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
    • 可以试一试这一篇文章: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
    • 用不了,有别的办法吗??
      heizida2017-09-01 20:00 回复 Windows 10 | Chrome 62.0.3175.3
      • 抱歉,没有了
        祭夜ゐ2017-09-01 20:14 回复 Windows 7 | Chrome 55.0.2883.87
  16. 我的是thinkphp框架写的程序,模拟请求方法总是失败,实在不知道该怎么弄了,求助大神,谢谢了
    zper2017-08-31 10:50 回复 Windows 10 | Chrome 50.0.2661.102
    • 抱歉个人不了解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
    • 这边是调用了Wordpress内部整合的rest api 而我并不是什么大神,只是修修代码。你可以查找一下关于rest api的相关文档进行开发。另外,OAuth授权中access_token的过期时间通常为30天。30天进行一次授权还是可以接受的。
      祭夜ゐ2017-08-31 15:19 回复 Windows 7 | Chrome 55.0.2883.87
  17. 大神好,我的程序是我自己开发的,没有所谓的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
  18. 老大 调试可以正常发布,但是代码放到模板函数里 无法同步
    风云2017-08-17 09:24 回复 Windows 7 | Chrome 45.0.2454.101
    • 查看sync_weibo.log日志文件看是不是发布过程出问题
      祭夜ゐ2017-08-17 10:06 回复 Windows 10 | Chrome 55.0.2883.87
    • 打包成php文件上传到主机,那个sync_weibo.log日志文件在哪 没找到
      风云2017-08-17 10:15 回复 Windows 7 | Chrome 45.0.2454.101
      • 日志在服务器根目录的“tmp目录“”下
        祭夜ゐ2017-08-17 10:16 回复 Windows 10 | Chrome 55.0.2883.87
        • 用的是景安的主机,在根目录下没有tmp/sync_weibo.log,调试的时候echo post_to_sina_weibo_toutiao(597);能同步到微博
          风云2017-08-17 10:53 回复 Windows 7 | Chrome 45.0.2454.101
      • 景安的没用过。。。你可以全盘搜索,或者用“芒果云”管理器搜索http://www.kalcaddle.com/
        祭夜ゐ2017-08-17 11:00 回复 Windows 10 | Chrome 55.0.2883.87
  19. 貌似php7用不了
    爱看吧2017-08-16 20:58 回复 Windows 8.1 | Chrome 55.0.2883.87
    • 嗯--这个我测试一下看看,待会儿答复
      祭夜ゐ2017-08-16 21:00 回复 Windows 10 | Chrome 55.0.2883.87
    • 支持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
        • 我是最新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
    • 那就是代码没有修改正确,在第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
        • 这是我自己加的,便于控制,你的主题不会有的,直接删除就行,另外函数第36行我做了修改
          祭夜ゐ2017-08-17 10:29 回复 Windows 10 | Chrome 55.0.2883.87