几个月前将博客升级成 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/
声明
- 本作品采用署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。除非特别注明, 霖博客文章均为原创。
- 转载请保留本文(《[WPImage2WeiBo] WordPress 微博图床插件》)链接地址: https://youthlin.com/?p=1546
- 订阅本站:https://youthlin.com/feed/
“[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
正常情况下,插件启用时应该建好了表,之后文章加载时发现图片已经上传过,就不会再上传到微博了。(实际上对同一张图片重复上传,貌似微博也会返回同一个地址。)
wp_weibo_image在数据库里面不存在,每次刷新网页新浪图床的地址都不一样
插件启用时会自动建立数据表才对,试下禁用重新启用…
这个插件非常好,满足了远程图片自动更换的需求。
只是有个问题,访问页面时会显示数据库查询错误,怎么解决?
具体是什么报错呢?我只在最新版WordPress测试了,可以开下debug看下错误信息嘛
悄悄说:其实去afraid家免费二级域名搜个叫“17ping”的com和cn都是已备案域名,可以直接用
就是不知2021年到期后还能不能再用了,反正到时再改也可以,就是比较麻烦。微博和七牛都挺了不少时间,看起来还是比较放心的。但微博会偶发删违规图片(有些即便不违规也被误判),所以国情所致,还是没法放心使用的。
我还是准备自建图片附件存储方案,配合自己的系统和VPS,还要想出来一套比较完善的自动备份机制,真累啊……