Je crée une application django qui crée un calendrier et un dossier google docs pour les utilisateurs, et utilise l'API pour insérer des événements et ajouter des documents. Il y a quelques mois, cela fonctionnait assez bien. maintenant je fais un refactoring majeur de mon code et, en testant les composants mentionnés ci-dessus, j'ai découvert qu'ils ne fonctionnent plus! Lorsque je tente de créer un dossier ou un calendrier, je reçois cette réponse de l'API:L'authentification OAuth échoue pour les API de données google pour les domaines hébergés utilisant gdata
RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unknown authorization header</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unknown authorization header</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unknown authorization header'}
Mon code ressemble à ceci sur -Basé this example dans le Documentation- google (le code docs est plus court, donc je ll coller celui-là, si le bit d'authentification est en fait une fonction commune à la fois):
from gdata.auth import OAuthSignatureMethod, OAuthToken, OAuthInputParams
from gdata.calendar.service import CalendarService
from django.conf import settings
client_instance = CalendarService()
client_instance.SetOAuthInputParameters(OAuthSignatureMethod.HMAC_SHA1,
settings.OAUTH_CONSUMER_KEY,
consumer_secret=settings.OAUTH_CONSUMER_SECRET)
user_tokens = UserToken.objects.get(user=user)
if not user_tokens.oauth_access_token_value or not user_tokens.oauth_valid_token:
raise Exception('The user has not allowed us to access his services')
oauth_token=OAuthToken(key=user_tokens.oauth_access_token_value, secret=user_tokens.oauth_access_token_secret)
oauth_token.oauth_input_params = OAuthInputParams(OAuthSignatureMethod.HMAC_SHA1,
settings.OAUTH_CONSUMER_KEY,
consumer_secret=settings.OAUTH_CONSUMER_SECRET)
client_instance.SetOAuthToken(oauth_token)
new_folder = docs_service.CreateFolder("some folder")
l'exception vient de cette dernière ligne, a changé quelque chose dans l'API ou il est juste moi? (Je parie que c'est juste moi, mais je ne peux pas le voir car il a travaillé deux mois)