Доступ к данным ASANA с использованием запросов Python

Во-первых, я не гуру Python, как вы, наверное, заметили... Итак, начнем.

Я пытаюсь использовать API Asana для извлечения данных с запросами Python (проекты, задачи и т. д.) и выполнять аутентификацию с использованием Oauth 2.0... Я пытался найти простой скрипт Python, чтобы было что-то для начала, но я не повезло, и я не могу найти достойный и простой пример!

Я уже создал приложение и получил свои client_secret и client_secret. Но я действительно не знаю, с чего и как начать... Кто-нибудь может мне помочь?

import sys, os, requests

sys.path.append(os.path.dirname(os.path.dirname(__file__)))

import asana
import json
from six import print_
import requests_oauthlib
from requests_oauthlib import OAuth2Session

client_id=os.environ['ASANA_CLIENT_ID'],
client_secret=os.environ['ASANA_CLIENT_SECRET'],
        # this special redirect URI will prompt the user to copy/paste the code.
        # useful for command line scripts and other non-web apps
redirect_uri='urn:ietf:wg:oauth:2.0:oob'

if 'ASANA_CLIENT_ID' in os.environ:

    #Creates a client with previously obtained Oauth credentials#
    client = asana.Client.oauth(

        #Asana Client ID and Secret, set as a Windows environments to avoid hardcoding variables into the script#
        client_id=os.environ['ASANA_CLIENT_ID'],
        client_secret=os.environ['ASANA_CLIENT_SECRET'],
        # this special redirect URI will prompt the user to copy/paste the code.
        # useful for command line scripts and other non-web apps
        redirect_uri='urn:ietf:wg:oauth:2.0:oob'
        )
    print ("authorized=", client.session.authorized)

    # get an authorization URL:

    (url, state) = client.session.authorization_url()


    try:
        # in a web app you'd redirect the user to this URL when they take action to
        # login with Asana or connect their account to Asana
        import webbrowser
        webbrowser.open(url)
    except Exception as e:
        print_("Open the following URL in a browser to authorize:")
        print_(url)

    print_("Copy and paste the returned code from the browser and press enter:")

    code = sys.stdin.readline().strip()
    # exchange the code for a bearer token
    token = client.session.fetch_token(code=code)

    #print_("token=", json.dumps(token))
    print_("authorized=", client.session.authorized)

me = client.users.me()


print "Hello " + me['name'] + "\n"

params = {'client_id' : client_id, 'redirect_uri' : redirect_uri, 'response_type' : token,}

print_("*************** Request begings *******************"+"\n")
print_("r = requests.get('https://app.asana.com/api/1.0/users/me)" + "\n")
r = requests.get('https://app.asana.com/api/1.0/users/me', params)

print_(r)
print_(r.json)
print_(r.encoding)

workspace_id = me['workspaces'][0]['id']
print_("My workspace ID is" + "\n")
print_(workspace_id)

print_(client.options)

Я не уверен, как использовать библиотеку запросов с Asana. Их документ по python мне не помог. Я пытаюсь вытащить доступные проекты и их цвета кода, чтобы позже я мог отображать их в веб-браузере (для высокоуровневого просмотра различных проектов и их соответствующих цветов - зеленый, желтый или красный)

Когда я ввожу URL-адрес (https://app.asana.com/api/1.0/users/me) в браузере, он возвращает мне ответ json с данными, но когда я пытаюсь сделать то же самое со сценарием, он возвращает мне ответ 401 (не авторизованный).

Кто-нибудь знает, что я упускаю/делаю неправильно?

Спасибо!!!


person Juancho    schedule 09.05.2017    source источник
comment
Я вижу, вы используете библиотеку asana oauth. Но не OAuth2Session из библиотеки запросов-oauthlib. Я думаю, вместо этого вам следует следовать приведенному здесь примеру - запросы -oauthlib.readthedocs.io/en/latest/   -  person iamkhush    schedule 09.05.2017


Ответы (1)


Я считаю, что проблема в том, что библиотека запросов является библиотекой более низкого уровня. Вам нужно будет передать все параметры вашим запросам.

Есть ли причина, по которой вы не используете исключительно клиентскую библиотеку Asana Python для выполнения запросов? Все данные, которые вы хотите получить из Asana (проекты, задачи и т. д.), доступны с помощью библиотеки Asana Python. Вы захотите посмотреть в библиотеке, чтобы найти нужные вам методы. Например, методы для ресурса tasks могут можно найти здесь. Я думаю, что этот подход будет проще (и менее подвержен ошибкам), чем переключение между библиотекой Asana и библиотекой Requests. Библиотека Asana фактически построена поверх запросов (как здесь).

person Jeff    schedule 09.05.2017
comment
Спасибо за предоставленные ссылки. Они очень помогли! Ваше здоровье. - person Juancho; 13.05.2017