[WPImage2WeiBo] WordPress 微博图床插件

几个月前将博客升级成 HTTPS 了, 导致七牛图床全部失效啦,七牛提供的二级域名不支持 HTTPS, 只能绑定备案的自定义域名,然而并没有已备案域名,只能抛弃七牛啦。搜了一下,发现微博是支持 https 的,于是打算使用微博的图床。

下载安装:https://github.com/YouthLin/WPImage2WeiBo

思路

为了防止以后微博突然禁用外链,文章里的链接在数据库中还是保存为原始的路径。即 http://your-domain.com/wp-content/uploads/2017/01/01/xxx.jpg 这样的形式。
而在输出文章时,替换每个图片链接为微博外链。这样只要原始图片文件一直存在,就算微博禁用了外链,我们把插件一关,也还可以使用原始图片。
所以插件要做的事就是,把原始图片上传到微博中,并维护一个原图链接到微博外链的对应关系。在输出文章时,用外链替换就行了。

下载七牛图片

由于之前图片都在七牛,所以想把文件都自己保管一份。
如果你之前没有迁移过博客,只是使用七牛插件,把本地文件上传到七牛的话,那么你的空间应该是保留有原始文件的,可以跳过这一步。
如果要下载七牛云里所有文件,参见上一篇文章:下载七牛云空间所有文件

微博图床插件

效果:输出文章时,会自动检测图片链接,若是新增的图片链接,那么会上传到微博中,使用微博外链替换原图链接输出。原图链接与外链的对应关系保存在数据库中。
实现:网上已有 PHP 上传图片到微博的代码,不过是需要 cookie 的,Cookie 如何获得并保持有效,这里用的方案是保存用户名与密码进行自动登录。
所以其实整个插件就三部分,一是 WordPress 插件的写法,hook 拦截文章输出等;二是微博自动登录更新 cookie; 三是上传图片。

WordPress 插件开发

这个网上资料很多,搜几篇看一下就可以开始了,然后要实现什么功能再继续搜索。
比如通用的做法是插件头信息,监听插件启用、停用、卸载。然后要对文章输出进行处理,那么需要了解要用到哪个过滤器。另外在后台需要配置用户名密码,涉及到插件如何在设置里添加子页面。

先来看一下文件组织:

由于之前没有用 PHP 写过任何实际项目,所以文件夹我都是按写 Java 的习惯瞎分类的,不过反正能正常运行哈哈哈。
具体的代码就不写了,都是抄的已有实现。


利用微博当图床 – php 语言实现
获取微博登录 Cookies 的几种方案

如果不是 WordPress 要用微博图床的话,可以使用 Chrome 插件 GitHub 可以搜到几个:
https://github.com/fate-lovely/pic-on-weibo
https://github.com/suxiaogang/WeiboPicBed前两天逛博客又发现一个:
https://inn-studio.com/vbed/


“[WPImage2WeiBo] WordPress 微博图床插件”的28个回复

Loading...
  1. 有点小问题,文章图片太多用写入模式,会出现文章图片的pid和数据库中的不一致的情况 导致还原会部分失败

  2. 插件非常不错,但是在打开图片站那种类型的网站时,速度巨慢无比,查询数据库需要2s以上,已经在后台选用修改模式,但是没有效果,能修复下吗?

    1. @ 随风 可以了 请下载最新代码重新安装插件~~
      启用插件后在设置里选择‘修改模式’即可。
      有一个已知问题:
      从媒体库插入图片时,插入的内容实际是短标签,处理时将只会处理保存在数据库中的文章内容;
      那么,响应式图片的 srcsetsizes 属性将不再生效,因为这些属性不保存在数据库中,是渲染页面时实时计算的。

      https://github.com/YouthLin/WPImage2WeiBo

      1. @ Youth.霖 博主没还原模式么,比如某浪,突然不能用了。刚发现启用后只有新文章处理了,目前好像只实现了写入,还原貌似没…

          1. @ Youth.霖 我这个随便写的邮箱,怕垃圾信息,现在的好了,历史的文章好像不能处理。要是有个按钮和处理进度就好了 类似 共 9999文章/已处理xxx文章 xxx图

  3. 博主你好,关于数据库查询次数过多问题和数据库缓存问题。
    我的站点文章比较多,没篇文章有20几张图片,这样每次点击导航分类与文章时发现越来越慢,经过排查发现是文章输出显示时插件会去进行查询导致的。

    解决思路
    能否把每篇文章根据文章id获取里面的图片地址,图片地址不区分大小写,然后存在你的对照表中,然后插件查询对照表真实图片地址,完成上传后直接通过文章id修改文章中数据库地址为weibo的地址,如果文章图片不能访问了,插件再次读取真实地址进行上传,如果weibo停止掉了,我们可以点击插件的切换回来,根据文章id图片地址再写回原始地址。

    那么什么时候上传图片,什么时候更新图片,触发机制使用wordpress文章发布通知,与删除通知,还有查看事件。

    这个功能可以做成2个模式,当前的为动态载入模式(简单)。模式2为 数据库覆盖模式(速度快)

  4. 给博主大大反馈2个问题,某些url匹配机制会出现问题
    (案例一) 地址:https://youthlin.com/2018/03/bmp3nl5zak2bmp3nl5zak21030.gif
    结果:3nl5zak2bmp3nl5zak21030.gif

    (案例二) 地址:https://youthlin.com/2018/03/bmp53.gif
    结果:53.gif
    分析:连接中包含了bmp或是jpg时就匹配不到gif了,而是类似3nl5zak2bmp3nl5zak21030.gif,由于自己不会写正则所以没办法修改,建议把地址后面加上后缀.gif |.jgp 类似这样的机制

    另外如果主题是有头图的,类似文章有封面形式的,图片在background中,或者缩略图,也没匹配到 ,希望博主空了能看看,感谢开源共享精神。

      1. @ Youth.霖 我也发现这个问题,不过还有个问题,就是图片url如果里面含有大写,也会匹配出现问题,建议匹配不区分大小写,另外不知道为什么文章过多网站特别卡。

  5. 经过多次测试发现某些图片会出现地址获取错误,希望博主修复下。

  6. 启动时遇到个问题,不知道怎么回事

    无法启用插件,因为它引起了一个致命错误(fatal error)。
    /public_html/wp-content/plugins/WPImage2WeiBo-master/service/WeiBoUploader.php on line 172

    1. @ 路过 你好,好像是因为 PHP 5.4 之后才可以这样简写数组的,之前的版本应该写成
      $post_data = array( //172行
      ); //189行

  7. 是不是每次图片都要上次新浪图床一次,因为我看到每一次打开的图片地址都不一样,试了几个空间的数据里面也没有表wp_weibo_image

    1. @ sansan 正常情况下,插件启用时应该建好了表,之后文章加载时发现图片已经上传过,就不会再上传到微博了。(实际上对同一张图片重复上传,貌似微博也会返回同一个地址。)

  8. 这个插件非常好,满足了远程图片自动更换的需求。
    只是有个问题,访问页面时会显示数据库查询错误,怎么解决?

  9. 悄悄说:其实去afraid家免费二级域名搜个叫“17ping”的com和cn都是已备案域名,可以直接用 [/发呆]
    就是不知2021年到期后还能不能再用了,反正到时再改也可以,就是比较麻烦。微博和七牛都挺了不少时间,看起来还是比较放心的。但微博会偶发删违规图片(有些即便不违规也被误判),所以国情所致,还是没法放心使用的。
    我还是准备自建图片附件存储方案,配合自己的系统和VPS,还要想出来一套比较完善的自动备份机制,真累啊……

发表评论

电子邮件地址不会被公开。 必填项已用*标注