微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 while 循环中使用 curl 来访问 Wikipedia 的 API

如何解决在 while 循环中使用 curl 来访问 Wikipedia 的 API

我首先要说的是,我是 Stack Overflow 的新手,对 bash 脚本编写相对较新,因此对于我在问题中犯的任何错误,我深表歉意。

我正在寻求我需要做的多步骤流程的帮助。我必须从某个维基百科页面获取语言 ISO 代码列表,将它们保存在一个文件中,然后在另一个维基百科页面中使用所述代码获取生成的结果并将它们保存在另一个文件中。结果应该按字典顺序排序,从重复和空行中清除,我应该添加一些额外的行作为页眉和页脚。我几乎可以做我上面描述的所有事情,但中间部分有问题:使用代码并取回生成的结果。

while
    [ $(wc -l < PageWhereTheCodesAre.txt) -gt 0 ]
do 
    curl -X POST https://SomeWikiPage -H "Content-Type: application/json" -H "Authorization: Bearer $(getaccesstoken)" --data '{ "source": "'"$(getcodevalues)"'","comment": "SomeComment","latest": { "id": "'$(getrevisionid)'" } }' &&
    sed -i "1,10d" PageWhereTheCodesAre.txt &&
    curl https://SameWikiPage |
    grep -P -o '(?<=RegexListBegin:).*?(?=:RegexListEnd)' |
    tr "\t" "\n" >> File1 &&
    getrevisionid &&
    sleep 10s
done &&

这是我为此使用的循环。首先,“sleep 10s”之前的命令 getrevisionid 通常不应该在那里。我添加它的唯一原因是因为如果我不这样做,就会发生“奇怪”的事情:每 2 个请求后,我就会收到第三个的编辑冲突回复,即使没有人真正编辑该 wiki 页面.我通过反复试验发现,即使我真的不知道如何解决问题,也可以解决问题。其次,最重要的是,保存排序生成结果 + 页眉/页脚的文件(File1),令我惊讶的是,在不同的脚本运行中得到不同的最终结果。比如一次我总共可以得到40860行,如果我立即再次运行,我可能会得到41230行,然后得到40580行然后......我最强烈的怀疑是在while中出了什么问题我在上面展示的循环和一些 curl GET 请求在某种程度上无法正常工作。

这些是我的变量:

getrevisionid()
{
    curl SomeWikiPage |
    jq -r '.latest.id'
}

getcodevalues ()
{
    printf "{{ #invoke:SomeWikiCommand" &&
    head -n 10 PageWhereTheCodesAre.txt |
    tr "\n" " " &&
    printf "}}"
}

getaccesstoken()
{
    echo AnAccesstoken
}

这都与我正在开发的 wikibot 相关。如果有人认为这会有所帮助,我愿意展示我上面描述的所有代码。鉴于我在 bash 脚本方面的信息不是那么先进,如果我已经展示的内容中有任何帮助,我将不胜感激,只要稍作改动,我就可以轻松地将其与其余代码合并。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。