新浪微博图床防盗链后个人博客上的图片如何本地化?

转载   笛声  2019-04-29 08:49:02  499 人阅读  19 条评论

盼望着,盼望着,春天来了,新浪微博图床防盗链了。我们知道这一天早晚会来,只是来得比大家预期的都要早,以为还可以安心的用几年呢。就算是当初“weibo.com 这个域名我要了,你开个价,我不还价”这般财大气粗,依然经不住粗水长流的流量费用。那么新浪微博图床防盗链后我们博客的图片怎么办?

新浪博客已正式宣布“相册”功能下线(点此了解详情),相册导出功能开放到 2019 年 7 月 31 日 24 时,建议大家要及时将新浪相册的图片导出,若想批量导出新浪博客相册的图片到本地的可以参考『新浪微博图床防盗链后个人博客上的图片如何本地化?』和『批量将新浪博客相册图片导入 WordPress 本地教程

最有效的临时解决办法

还是照着笛声博客的风格,先来一个最简单的方法。那就是在网站配置文件里面加一行配置:add_header Referrer-Policy "no-referrer"; 这条配置的意思是将整个 Referer 首部移除。访问来源信息不随着请求一起发送。总之就是让新浪那边认为,这张图片我是直接输入完整的图片地址打开的,而不是从他人的网站引用打开的。

server {
listen 443 http2 fastopen=3 reuseport;
server_name hqidi.com www.hqidi.com;
root /www/blog;
add_header Referrer-Policy "no-referrer";

另一种方法就是在主题文件 header.php 文件中添加相关代码,详见『新浪微博开启防盗链导致博客引用图片失效怎么办?』。不过这终究不是长久之计,refarrer 相关的功能都失效了,有点饮鸩止渴的意思,我们还是得另辟蹊径。

最有效的解决办法

我们还是以尽量简单的方法来搞定这个问题。首先我们要把网站中所有放在新浪图床上的图片都找出来,然后下载到我们的网站服务器上。

找出所有新浪图床上的照片

如果你是打开你网站的每一个页面,然后一个个去找的话,请打开窗户,确认下面没人,然后把电脑丢下去。笛声这里提供一个非常快速的方法找出所有新浪图床上的图片,我们先来看看新浪图床图片 URL 的特点:

http://ws1.sinaimg.cn/large/006tKfTcgy1g12lp87my3j30ow0780sz.jpg
https://ws2.sinaimg.cn/large/0072Lfvtly1fymh07hzkkj30dq0dqagc.png
https://ws3.sinaimg.cn/large/006tNc79gy1g2cj78h6x5j31gf0itwhj.gif
https://ws4.sinaimg.cn/large/0072Lfvtly1fzmelgwrkkj30el09taag.jpg

我们需要一个正则表达式把上面的链接都匹配出来

  • 最前面的协议有两种情况 http 和 https,所以我们用 https?来匹配(问号表示前面的‘s’要么出现 0 次,要么出现 1 次)
  • 后面的 ws 开头的主机好像有 4 台,然后我就算他 10 台,所以对应的正则为 ws[0-9]
  • ‘/large/491ea66cgy1g26kbwkrgpj22001hs7wh’这一段杂七杂八的用[a-Z0-9/]+?来匹配,‘[a-Z0-9/]’这里表示不管你是字母还是数字,还是/都给你匹配上,后面的+表示前面的数字、字母会出现一次或者多次,最后的问号是用来防止过渡匹配的,在这不加问号也没问题。
  • 最后面的图片格式用.(jpg|png|gif)来匹配。

最终的正则表达式为

https?://ws[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)

当然,如果你的网站数据库非常大的话,你需要把这条正则写的尽量的精确,免得半天都跑不出来结果,比方说你全站 https 就可以这样写:

https://ws[1-4].sinaimg.cn/large/[a-Z0-9/]+?.(jpg|png|gif)

正则有了,我们现在去网站的数据库文件里面把所有新浪图床上的图片捞出来,执行下面的命令,最后的 190425.sql 是网站数据库备份文件。

grep -Eo 'https?://ws[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' 190425.sql

新浪微博图床防盗链后个人博客上的图片如何本地化? 海纳百川 第1张

新浪图床图片本地化

刚刚我们把所有新浪图床上图片 URL 全都找了出来,我们现在用一个 for 循环把新浪上的图片全下载下来,建议在网站根目录新建一个 large 目录,把你网站数据库备份文件 190425.sql 也放到这里,然后把图片全下载到这里,在 large 目录里面执行:

for i in `grep -Eo 'https?://ws[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' 190425.sql`;do wget $i;done

此时,你已经把所有新浪图床上的图片都下载到服务器上,你只要修改下链接就行了。

现在要动数据库了,一定得先备份数据库,一定得先备份数据库,一定得先备份数据库,然后动手。

登录进 MySQL,use 切换到你网站数据库,然后执行下面命令:

UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws1.sinaimg.cn', 'hqidi.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws2.sinaimg.cn', 'hqidi.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws3.sinaimg.cn', 'hqidi.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws4.sinaimg.cn', 'hqidi.com');

注意自行替换最后面的“hqidi.com”,此时,大功告成,新浪图床图片本地化完成,记得一定要把 large 目录里面的数据库备份文件删除。

您可能感兴趣的文章

文章标签: ,  
原文地址:https://hqidi.com/144.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为转载文章,来源于 笛声 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
©boke112导航,本站推荐使用:阿里云 ECS服务器等云产品服务,国外免备案主机建议使用:老薛主机
转载砖家

 发表评论

强表情无奈表情抠鼻表情笑哭表情偷笑表情衰表情流汗表情奋斗表情吐血表情抓狂表情晕表情流泪表情疑问表情呲牙表情惊讶表情鼓掌表情

  1. 明月登楼的博客
    明月登楼的博客 @回复

    唉,早就对新浪微博图床的稳定性表示怀疑了!

  2. 有意博客
    有意博客 @回复

    我的图都比较大,最大的大概有6M左右,全站的图片现在大概有500-800M,本地化我感觉困难很,目前我放在路过图床了

    • 懿古今
      懿古今2019-05-07 17:04  回复

      @有意博客你的图片应该都是没有经过处理的高清图片,我是考虑到速度和空间问题,所以都是提前把图片处理的

  3. 一芦居
    一芦居 @回复

    还是本地化吧,这么累为了啥

  4. echo “你好";
    echo “你好"; @回复

    讲真的 我比较感兴趣第一个方法,但是不知道这个东西放到哪里啊
    好吧,我把那个mate 放到头上了,瞬间感觉爽啊
    非常完美

  5. 仙界Life
    仙界Life @回复

    新浪最终还是开启了防盗链,我们这些白嫖新浪的就有点小麻烦,不过看来这篇文章,也不是什么难事 [呲牙]

  6. 子午物联网
    子午物联网 @回复

    收藏了个bing桌面图片的博客,大图都放在sina博客,确实不错

  7. 6sv博客
    6sv博客 @回复

    小型服务器,全部图片保存本地,网站打开会不会影响速度?

  8. 七号文库
    七号文库 @回复

    本地空间好小啊

  9. 菊
     @回复

    一直在smms存 还比较稳定

  10. 时间爱人
    时间爱人 @回复

    其实oss挺好用的

  11. 子午书屋
    子午书屋 @回复

    也支持https,这不错

  12. 趣知识
    趣知识 @回复

    我以前也用新浪的,挺不错

  13. 佐语先森
    佐语先森 @回复

    没用过,不担心。

  14. 知识共享网
    知识共享网 @回复

    已经做迁移了,唉

  15. WordPress建站吧
    WordPress建站吧 @回复

    没有接触过这个

  16. 去看你博客
    去看你博客 @回复

    网站图片一直保存在本地,不搞啥外链。

  17. 情话大全
    情话大全 @回复

    居然抢到沙发了