Как отправить ключ API в Datadog с помощью urllib? - PullRequest
0 голосов
/ 13 июня 2018

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

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

ИЛИ

{"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 вместе с моим запросом для решения проблемы.Если кто-нибудь знает, как выполнить эту задачу, я был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

При поиске по этой другой проблеме я обнаружил, что все, что необходимо для решения этой проблемы, - это указать ключ 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
0 голосов
/ 13 июня 2018

Использовать библиотеку запросов намного проще

Создать такой заголовок запроса

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

Отправить запрос как этот

result = get(url, headers=headers(apikey))
...