Hi Tobi,
die Doku unter GitHub - httpie/httpie-oauth: OAuth plugin for HTTPie gibt leider wenig her, ich denke du musst trotz des PlugIns noch viel selbst machen. Zuerst wäre ein POST-Request auf …/consumer_token dran, in dem du den client-name übergibst, um als Antwort darauf einen client-key und ein client-secret zu bekommen. Authentifizierung mit E-Mail Adresse und Passwort kommt erst später.
Aus eigener Erfahrung: Ich habe zuerst lange an OAuth gehangen, bevor es endlich geklappt hat, sehr frustrierend. Sobald ich da durch war, hat es mehr Spaß gemacht. Erst danach habe ich eine Python-Bibliothek für Discovergy gefunden, die die Authentifizierung und auch erste Requests (Meter, Values) sehr vereinfach. Viel mehr kann das Paket derzeit aber nicht.
Vielleicht hilft dir mein Code, um den Ablauf zu verstehen. Wie du siehst musste ich auch noch einiges drum rum bauen, damit es klappt, obwohl ich eine OAUTH-Bibliothek nutze.
1.) Der manuelle Weg (Python)
#!/usr/bin/python3
from rauth import OAuth1Service
from urllib.parse import urlencode
import requests
base_url = 'https://api.discovergy.com/public/v1/'
email = 'mail@example.com'
password = 'secret'
client_name = 'WhateverIwantToCallMyClient'
# Get consumer key and secret (not part of OAuth 1.0)
consumer_token_url = base_url + 'oauth1/consumer_token'
response = requests.post(url=consumer_token_url, data={'client': client_name})
if not response:
print('Error during consumer_token Request\n'
+ ' HTTP Status Code: ' + str(response.status_code) + '\n'
+ ' HTTP Response: ' + str(response.content))
consumer_key = response.json()['key']
consumer_secret = response.json()['secret']
print('Consumer Key: ' + consumer_key)
print('Consumer Secret: ' + consumer_secret)
discovergy = OAuth1Service(
name='discovergy',
consumer_key=consumer_key,
consumer_secret=consumer_secret,
request_token_url=base_url + 'oauth1/request_token',
access_token_url=base_url + 'oauth1/access_token',
authorize_url=base_url + 'oauth1/authorize',
base_url=base_url)
# Get OAuth request token
request_token, request_token_secret = discovergy.get_request_token(method='POST')
print('Request Token: ' + request_token)
print('Request Token Secret: ' + request_token_secret)
# Call authorize URL with email and password to get OAuth verifier
authorize_url = discovergy.get_authorize_url(request_token)
authorize_url += '&' + urlencode({'email': email, 'password': password})
print('Authorize URL: ' + authorize_url)
response = requests.get(url=authorize_url)
if not response:
print('Error during authorize_url Request\n'
+ ' HTTP Status Code: ' + str(response.status_code) + '\n'
+ ' HTTP Response: ' + str(response.content))
idx = str(response.content).find('oauth_verifier=')
if idx > -1:
oauth_verifier = str(response.content)[idx + 15:-1]
print('OAuth Verifier: ' + oauth_verifier)
# Get OAuth access token
session = discovergy.get_auth_session(request_token,
request_token_secret,
method='POST',
data={'oauth_verifier': oauth_verifier})
print('Access Token: ' + session.access_token)
print('Access Token Secret: ' + session.access_token_secret)
r = session.get(base_url + 'meters', header_auth=True)
print(str(r.content))
2.) Mit Hilfe des Python-Pakets „PyDiscovergy“
#!/usr/bin/python3
from pydiscovergy import PyDiscovergy
import datetime
import time
import schedule
import requests
email = 'mail@example.com'
password = 'secret'
clientname = 'WhateverIwantToCallMyClient'
discovergy = PyDiscovergy(clientname)
discovergy.login(email, password)
# Get all meters for account
meters = discovergy.get_meters()