Как отправить ключ API в Datadog с помощью urllib?

В настоящее время у меня есть программа, которая позволяет мне программно создавать и публиковать информационные панели в Datadog. Используя функции API здесь, мне удалось успешно создать, обновить, и удаляйте дашборды, как мне нравится. Однако теперь я хотел бы извлечь скелет существующих панелей мониторинга, которые я уже создал из Datadog, чтобы увидеть, что было добавлено или удалено. Для этого мне нужно выяснить, как отправить ключ API вместе с запросом. У меня нет проблем с получением информации о досках более высокого уровня, но я хотел бы пойти еще дальше.

Это то, что я получаю, позвонив api.ScreenBoard.get_all()

{
    'screenboards': [{
        'read_only': <boolean>,
        'resource': <resource-link>,
        'description': <description>,
        'created': <date>,
        'title': <text>,
        'modified': <date>,
        'created_by': { ''' <creator information> ''' },
        'id': <table-id>
    }]
}

Теперь конечная цель - просто извлечь JSON из ссылки «ресурс», заданной этой командой. Я пытался использовать urllib и urllib2 для объединения этой ссылки с хост-сайтом (например, https://www.foo.com/{resource-link}), но продолжаю получать следующие результаты:

<addinfourl at 0000000000 whose fp = <socket._fileobject object at 0x000000000>>

OR

{"errors": ["API key required"]}

Код, вызвавший эту ошибку:

def getSkeleton(self):
    boards = self.getAll(); # utilizing the api.ScreenBoards.get_all() function
    boardList = boards['screenboards'];
    for x in boardList:
        url = self.target + x['resource']; # creating the JSON url
        data = urllib.urlopen(url).read();
        print data

Как видите, моя переменная data возвращает ошибку. Итак, все, что мне нужно, это выяснить, как отправить ключ API вместе с моим запросом для решения проблемы. Если кто знает, как выполнить эту задачу, я был бы очень признателен.


person Chloe Bennett    schedule 13.06.2018    source источник


Ответы (2)


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

def getSkeleton(self):
    api_key = 'your api key';
    app_key = 'your application key';
    boards = self.getAll(); # utilizing the api.ScreenBoards.get_all() function
    boardList = boards['screenboards'];
    for x in boardList:
        url = self.target + x['resource'] + "?api_key=" + api_key +"&application_key=" + app_key;
        data = urllib.urlopen(url).read();
        print data
person Chloe Bennett    schedule 13.06.2018

Используйте библиотеку requests, это намного проще

Создайте заголовок запроса, подобный этому

def headers(apikey):
    return {'Authorization': 'Bearer {}'.format(apikey),
            'Content-Type': 'application/json'}

Отправьте такой запрос

result = get(url, headers=headers(apikey))
person knowingpark    schedule 13.06.2018