我试图在Github组织中获得依赖于特定存储库的列表。
例如。如果我有一个名为string_utils
的库,我只想搜索存储库的名称(而不是文件,不是内容,只是存储库名称))包含类似import string_utils
的内容。
当我使用Github浏览器搜索时,我得到了存储库中的所有文件及其内容的特定匹配行。我只需要存储库名称。
我结束了将请求复制为curl请求,并执行一些shell脚本:
query_string="q=<query search> -repo:<repo>"
url="https://<URL stuff>/search"
grep_regex='<a.+class="Link--secondary".+href="/[^/]+/[^"]+(?=">)'
declare -a dependents="$(
(
seq 1 "$PAGES"
| xargs -P0 -I page_number
curl
--get
--data-urlencode "${query_string}"
--data-urlencode "type=Code"
--data-urlencode "p=page_number"
--data-urlencode "filename=pom.xml"
--header "${COOKIE_HEADER}"
--silent
"$url"
)
| grep -Po "$grep_regex"
| awk '!unique[$0]++'
)"
但是我得到的存储库比预期的少。我想这是因为分页问题。
有谁知道如何得到所有的结果没有分页,或更好的方法?
您应该使用GitHub REST API。搜索有特定的端点。这个API是为机器可读的交互而设计的,而使用像你这样的网络抓取技术可能随时会崩溃,并且很可能被阻止作为反滥用措施。
但是,请注意REST API响应仍然是分页的。这是因为GitHub不知道你想要多少响应,并且可能有许多响应你的请求(搜索,可能数百万)。如果您只想要前一千个响应,那么生成其余响应将是非常浪费的,因此GitHub要求您一次请求不超过一百个。这是对REST api的标准度量,以提供良好的性能并避免DoS攻击。