Как использовать модуль "Запросы Python" для выполнения вызовов curl

Мне нужно использовать API, который делает вызовы cURL. API показан здесь: https://www.pivotaltracker.com/help/api/rest/v5. Я пишу код в Python 2.7 и загрузил модуль Requests для использования для вызовов cURL, однако я не совсем уверен, как это сделать. Это то, что я до сих пор:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/n/projects/my_project_number'

r = requests.get(url, auth=(username, password))

Теперь, когда у меня есть ответ r, что мне делать с ним, чтобы сделать вызовы cURL, чтобы использовать функции API, такие как функция GET /projects/{project_id}/epics/{epic_id}. Вызов cURL для этой функции:

export TOKEN='your Pivotal Tracker API token'
export PROJECT_ID=99

curl -X GET -H "X-TrackerToken: $TOKEN" "https://www.pivotaltracker.com/services/v5/projects/$PROJECT_ID/epics/4"

Спасибо за любую помощь, вы можете предоставить!

РЕДАКТИРОВАТЬ (спасибо @Rob Watts) Теперь это мой код:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/services/v5/me'

r = requests.get(url, auth=(username, password))
response_json = r.json()
token = response_json['api_token']

project_id = 'my_project_id'
url = 'https://www.pivotaltracker.com/services/v5/projects/{}/epics/1'

r = requests.get(url.format(project_id), headers={'X-TrackerToken':token})

print r.text

Но это все еще не работает. Это вывод:

{
  "code": "unfound_resource",
  "kind": "error",
  "error": "The object you tried to access could not be found.  It may have been removed by another user, you may be using the ID of another object type, or you may be trying to access a sub-resource at the wrong point in a tree."
}

Но согласно документации, я ожидаю что-то вроде этого:

{
    "created_at": "2014-08-26T12:00:00Z",
    "description": "Identify the systems and eliminate the rebel scum.",
    "id": 1,
    ...
}

1 ответ

Решение

Похоже, что первый вызов, который вы должны сделать, - это конечная точка '/me', а затем извлечь токен API из ответа:

import requests

username = 'my_username'
password = 'my_password'
url = 'https://www.pivotaltracker.com/services/v5/me'

r = requests.get(url, auth=(username, password))
response_json = r.json()
token = response_json['api_token']

С этой конечной точки вы можете получить некоторые другие вещи, помимо вашего токена API. Посмотрите документацию для этой конечной точки, чтобы узнать, есть ли что-нибудь еще, что вам понадобится.

Как только вы получите свой токен API, все остальные вызовы будут довольно простыми. Например:

project_id = 'your_project_id' # could get this from the previous response
r = requests.get('https://www.pivotaltracker.com/services/v5/projects/{}/epics/4'.format(project_id), headers={'X-TrackerToken':token})

Я объясню части вызова cURL, которые они имеют для этого примера, и как они переводят:

export VARNAME

Установите переменную для вызова cURL. Где вы видите $VARNAME где переменные используются.

-X GET

Я не знаю, почему они включают это. Это просто указывает на использование GET, который является значением по умолчанию для cURL. С помощью requests.get заботится об этом. Тем не менее, для тех, которые имеют -X POST, вы бы использовали requests.post, так далее.

-H "X-TrackerToken: $TOKEN"

Это определяет заголовок. Для запросов мы используем headers Ключевой аргумент - headers={key:value}, В этом конкретном примере мы имеем headers={'X-TrackerToken':token},

"https://..."

URL. Это входит в качестве первого аргумента. Переменные (как $PROJECT_ID в вашем примере) можно вставить с помощью format метод строк.

Другие вопросы по тегам