代码之家  ›  专栏  ›  技术社区  ›  rubo77

自动替换HTML页面中的所有死链接文本

  •  0
  • rubo77  · 技术社区  · 6 年前

    我有一个每日动态创建的固件下载页面,其中包含许多不同的下载链接: https://freifunk.in-kiel.de/firmware/release-candidate/2018.1~exp-215/site/download/

    现在不是每天都有这些下载都是有效的,但是仍然应该有一个注释,那就是这些固件是不可用的。

    我考虑过通过正则表达式解析脚本,以获取该页面上的所有链接,然后启动一些curl调用,以检查链接是否已断开。如果死了,则将链接的文本替换为“N/A”。

    1 回复  |  直到 6 年前
        1
  •  0
  •   rubo77    6 年前

    此脚本成功地检查了包含字符串“glion”的所有链接:

    #!/bin/bash
    # set the new version here
    CUR=2018.1~ngly-234
    BRANCH='nightly'
    OUT_FILE=index.html
    wget -k --no-check-certificate http://freifunk.in-kiel.de/firmware-rc.html -O $OUT_FILE
    # replace the data from the template
    sed -i 's|/sysupgrade/gluon-ffki-<VERSION>|/sysupgrade/gluon-ffki-'$CUR'|g' $OUT_FILE
    sed -i 's|/factory/gluon-ffki-<VERSION>|/factory/gluon-ffki-'$CUR'|g' $OUT_FILE
    sed -i 's|release-candidate|'$BRANCH'/'$CUR'|g' $OUT_FILE
    echo -n "dead link check "
    #sed -i "s/tube2/nixtube2/g" $OUT_FILE  # for debug to create a dead link
    INVALID='">n/a </a><deadlink none="'
    while IFS= read -r URL; do
      if wget --no-check-certificate --spider "$URL" 2>/dev/null; then
        echo -n .
      else
        echo
        echo "$URL does not exist"
        sed -i 's|'$URL'|'$URL''"$INVALID"'|g' $OUT_FILE
      fi
    #done < <(grep -Po '(?<=href=")[^"]*' $OUT_FILE|grep gluon|grep alfa)  # for debug
    done < <(grep -Po '(?<=href=")[^"]*' $OUT_FILE|grep gluon)
    echo "dead link check done"
    sed -i 's|http://|//|g' $OUT_FILE