分类
wordpress

[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 插件开发

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

先来看一下文件组织:

.
├── WPImage2WeiBo.php                            主文件,引入其他文件
├── exception
│   └── WeiBoException.php                       自定义异常类
├── index.php                                    nothing
├── languages                                    i18n 语言包
│   ├── wp-image-to-weibo-zh_CN.mo
│   └── wp-image-to-weibo-zh_CN.po
├── readme.txt                                   插件描述
├── service
│   └── WeiBoUploader.php                        上传图片到微博的类
├── task
│   ├── lifecycle.php                            插件启用初始化表
│   └── processor.php                            过滤文章内容
└── view
    └── settings.php                             后台设置页面

由于之前没有用 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 微博图床插件”上的40条回复

你好什么时候有空能修复下 还有几个前缀能用

回复 回复时对方会收到邮件通知

我想请问一下,怎么替换为本地的图片?插件关闭以后 文章内使用的还是微博的图片地址

如果你是常规模式,那么停用插件就可以了。如果是修改模式,在设置页面有“重置外链”的按钮,点击后就会重置为原始url,重置后再关闭插件即可。

插件的思路很棒,但有两点需要优化:
1.加载插件后打开速度后奇慢无比,平均10秒左右
2.无论上传png还是gif,输出的都只是jpg格式

谢谢博主的插件,同时我也想反馈插件启用后在我的网站上使用了比以前多12-15秒的查询时间,无论是nginx+php7.2还是apache+php7.2都遇到这样的问题。

所以我只好在写文章的时候临时打开一下插件,写完后就把插件关闭了。

插件的确要优化一下,开了插件用常规模式TTFB大概在10S左右,
另外一个修改模式TTFB大概在20s,

关闭插件TTFB在300ms,这个差距还是非常大,也就是基本上开了插件网站都快没法打开了。

php7.1 ngnix1.14

建议优化一下脚本,用了之后首页打开时间非常慢!https://abbeyok.com/?p=138

你好,感谢反馈。每篇文章第一次加载时是会比较慢的,因为第一次加载时会将每张图片上传到新浪微博,之后加载时应该是直接读数据库的。这个是默认的实时查库模式,即保存在文章中的图片地址不变,而是在输出页面时实时替换链接。
也可以在后台设置为修改模式:每次保存文章时直接将替换好的链接保存在数据库中,这样每次输出就不需要实时替换了。

好像是有点影响。关闭插件我这TTFB不超过700ms,开启修改模式也差不多,常规模式900ms。
不过也没有你说的十多秒那么严重额,可能是 PHP 版本问题吧,我只在我自己网站测试了,所以可能其他网站 PHP 版本不一样,代码写的不兼容。(毕竟我也不是很懂 PHP)

PHP Parse error: syntax error, unexpected T_STRING in D:\**\web\wp-content\plugins\WPImage2WeiBo-master\exception\WeiBoException.php on line 9

大神,插件启用的时候报了一个语法错误咋搞?

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

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

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

https://github.com/YouthLin/WPImage2WeiBo

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

有的呀,在设置里,选中了修改模式才会显示「重置外链」按钮。
另外,貌似你的邮件地址也是不存在的额…

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

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

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

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

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

给博主大大反馈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中,或者缩略图,也没匹配到 ,希望博主空了能看看,感谢开源共享精神。

你好,感谢反馈,这几天太忙了没看到评论。有时间我会尽快修的!

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

感谢反馈,的确可以不区分大小写。慢的问题楼下也有

该问题已修复,但你的邮件地址不可达,本来想邮件通知你的。

该问题已修复,但你的邮件地址不可达,本来想邮件通知你的。

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

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

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

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

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

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

插件启用时会自动建立数据表才对,试下禁用重新启用…

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

具体是什么报错呢?我只在最新版WordPress测试了,可以开下debug看下错误信息嘛

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

发表回复

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

[/鼓掌] [/难过] [/调皮] [/白眼] [/疑问] [/流泪] [/流汗] [/撇嘴] [/抠鼻] [/惊讶] [/微笑] [/得意] [/大兵] [/坏笑] [/呲牙] [/吓到] [/可爱] [/发怒] [/发呆] [/偷笑] [/亲亲]