параметры страницы bitbucket API 2.0 с использованием pagelen не по умолчанию

Я столкнулся с громоздким ограничением Bitbucket API 2.0 - я надеюсь, что есть способ сделать его более удобным.

Если кто-то хочет получить список репозиториев из bitbucket API 2.0, можно использовать этот URL-адрес:

https://api.bitbucket.org/2.0/repositories/{teamname}

Это возвращает первые 10 репозиториев в списке. Чтобы получить доступ к следующим 10, нужно просто добавить параметр страницы:

https://api.bitbucket.org/2.0/repositories/{teamname}?page=2

Это возвращает следующие 10. Можно также настроить количество результатов, возвращаемых с помощью параметра pagelen, например:

https://api.bitbucket.org/2.0/repositories/{teamname}?pagelen=100

Максимальное количество может варьироваться в зависимости от учетной записи, но 100 — это максимум, который любая команда может запросить при каждом вызове API. Громоздкая часть заключается в том, что я не могу найти способ получить страницу 2 с числом страниц, равным 100. Я пробовал следующие варианты:

https://api.bitbucket.org/2.0/repositories/{teamname}?pagelen=100&page=2
https://api.bitbucket.org/2.0/repositories/{teamname}?page=2&pagelen=100

Я также пытался использовать такие параметры, как limit или size, но безрезультатно. Возможно ли поведение, которое я ищу? Некоторую соответствующую документацию можно найти здесь.


person LHM    schedule 01.08.2017    source источник


Ответы (1)


EDIT: кажется, что такое поведение возможно, однако API-интерфейс bitbucket 2.0 распознает несколько параметров, только если весь URL-адрес заключен в кавычки.

Пример:

curl "https://api.bitbucket.org/2.0/repositories/{teamname}?pagelen=100&page=2"

ИСХОДНЫЙ ОТВЕТ: я смог обойти это, создав сценарий bash, который перебирал каждую страницу с 10 результатами, добавляя каждые новые 10 репозиториев во временный файл, а затем клонируя эти 10 репозиториев. Единственное, что нужно сделать вручную, это обновить верхний предел в цикле for, чтобы он был последней ожидаемой страницей.

Вот пример скрипта:

for thisPage in {1..23}
    do
        curl https://api.bitbucket.org/2.0/repositories/[organization]?page=$thisPage -u [username]:[password] > repoinfo

        for repo_name in `cat repoinfo | sed -r 's/("slug": )/\n\1/g' | sed -r 's/"slug": "(.*)"/\1/' | sed -e 's/{//' | cut -f1 -d\" | tr '\n' ' '`
            do
                echo "Cloning " $repo_name
                git clone https://[username]@bitbucket.org/[organization]/$repo_name
                echo "---"
            done
    done

Большая помощь была получена из: https://haroldsoh.com/2011/10/07/clone-all-repos-from-a-bitbucket-source/ и http://adomingues.github.io/2015/01/10/clone-all-repositories-from-a-user-bitbucket/ Спасибо!

person LHM    schedule 02.07.2018