惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
B
Blog
P
Proofpoint News Feed
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
有赞技术团队
有赞技术团队
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
罗磊的独立博客
L
LangChain Blog
GbyAI
GbyAI
腾讯CDC
T
The Blog of Author Tim Ferriss
Microsoft Security Blog
Microsoft Security Blog

PixelNest

会议是效率的杀手 国庆出游记录 对居家办公的一些想法 2022 春节 《搏击俱乐部》的结局 纪念 PAI 头一回达到 100 卡片笔记法 《刑法学讲义》的部分摘录 迁移博客 《UNIX 传奇》摘录 就地过年 一点记录:docker-compose 编排不同项目间的网络 近期读的几本书 办新身份证 git 获取其他分支的单个文件或目录 我的高考成绩 推荐 2020 年上半年的 8 部影视作品 ChromeOS 开发者模式 终于下单了《守望者》 联通来电管家服务 一些实用的 bash 代码片段 关于 鸟枪换炮 《架构整洁之道》摘录 惨淡的星球大战 旧笔记本电脑 if...then... 命令行检测 SSL 证书过期时间 《程序员的职业素养》读书笔记 2019 国庆假期
向百度主动推送网站链接
2019-07-10 · via PixelNest

百度站长工具提供了三种自动提交链接的方法,分别是主动推送、自动推送和 sitemap。

填 sitemap 最方便,但是效果很差。我提交的 sitemap 的最后抓取时间是 2019-06-22,已经有半个多月没有抓取,即使我去后台点击「手动更新文件」也无济于事,其状态一直是「等待」。

自动推送需要在页面上添加由百度提供的一段 JS。这种办法至少有以下缺点:

  • 让页面体积变大
  • 这段 JS 代码可能会被浏览器扩展屏蔽
  • 这段 JS 代码来自百度

只好再尝试主动推送了

今天无奈地写了一个脚本,向百度主动推送网站的各个 URL。实际上所有 URL 还是来自网站的 sitemap。

#!/bin/bash

set -o errexit

BAIDU_URL="http://data.zz.baidu.com/urls"
BAIDU_TOKEN="XXXXXXXXXXX" # replace with your own token

CURL="/usr/bin/curl"
XMLLINT="/usr/bin/xmllint"
URL_TEMP=$(mktemp /tmp/url_XXXXXXXXX)
XML_TEMP=$(mktemp /tmp/xml_XXXXXXXXX)

function green {
  local green="\033[0;32m"
  local end="\033[0m"
  echo -e -n "${green}${1}${end}"
}

function download {
    local website=$1
    local xml_url="$website/sitemap.xml"
    green "downloading $xml_url..."
    $CURL "$xml_url" > "$XML_TEMP" 2>/dev/null
    green "done\n"
}

function push {
    local website=$1
    local count=0
    count=$(wc -l "$URL_TEMP" | awk '{print $1}')
    if [[ $count -gt 0 ]]; then
        green "pushing $count urls to baidu\n"
        $CURL -H 'Content-Type:text/plain' --data-binary @"$URL_TEMP" "${BAIDU_URL}?site=${website}&token=${BAIDU_TOKEN}"
    else
        echo "nothing to push"
    fi
}

function parse {
    local file=$1
    $XMLLINT --format "$file" | grep loc | cut -d '>' -f2 | cut -d ' "$URL_TEMP"
}

function protocol {
    local website=$1
    if [[ ${website:0:4} != "http" ]]; then
        echo "https://$website"
    else
        echo "$website"
    fi
}

function clean {
    rm "$XML_TEMP"
    rm "$URL_TEMP"
    echo ""
    green "byebye"
    echo ""
}

function main {
    local website=$1
    if [[ "x$website" = "x" ]]; then
        echo "no website"
        exit -1
    fi
    website=$(protocol "$website")
    echo "website: $website"
    download "$website"
    parse "$XML_TEMP"
    push "$website"
    clean
}

main "$@"

写了那么多,其实核心就是使用 xmllint 那句,把 URL 从 XML 文件中取出来。本想用 xpath 直接获取 sitemap.xml 里的各个链接内容,摸索了半个小时也没弄成,索性改成粗暴的做法,也就是现在脚本里由管道串起来的一个个 grep 和 cut 命令。

百度站长工具的「主动推送」有推送数据、更新数据和删除数据三个接口,我这个博客的链接并不多,所以我只用了推送数据这一个接口,每次都推全量的 URL。

做主动推送的主要原因是这个博客在百度的收录量太少,而这个「主动推送」呢,也只是死马当活马医。

当前,2019 年 7 月 9 日,这个博客在百度的收录(站长工具后台查看)仅仅是 70 左右,在百度搜索 site:ifttl.com 有 52 个结果,而在 Google 和 Bing 的搜索结果分别有 245 和 148 个。

最后差点忘了,在 crontab 里加上一条,每天定时往百度 push 一把。

05 10 * * * /path/to/the/script/push_to_baidu.sh ifttl.com > /dev/null 2>&1