API från Python

Moderator: Telldus

Post Reply
bmjbmj
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am

API från Python

Post by bmjbmj »

Hej

Kan någon besvara vad jag gjort för fel här för jag tycker att nu har jag prövat allt men endast fått fel typ 500 i retur från servern och det säger ju bara att den inte begriper vad min kod säger :? .

Anntagande # 1
Enligt vad jag förståt av dokumentationen och granskning av exempel koden använder Telldus OAuth ver 1.0.

Anntagnade # 2
Då man loggar in och aktoriserar att en privat/utvecklar version av nycklar skall/får skapas för en egen användare genomför webbsidan det mellansteg som man normalt behöver utför i programmet och de fyra nycklar som visas på sidan är de slutgiltiga nycklarna.

Anntagande # 3
API:et nås från httpS OBS! 'S' även att en del exemple inte använder ett krypterat protokol
Jag har dock prövat båda med och utan, samma fel.

Anntagande # 4
Svaret på annropet ges som standard på något av formaten xml eller json om man inte sänder med en parrameter för format???? Vad är parametern??? Ändpunkten avslutad med .xml/.json som brukligt???

Programmet borde då se ut så här (nycklarna givetvis avkapade av säkerhetsskäl i listningen):
--->

Code: Select all

from requests_oauthlib import OAuth1Session
protected_url = "https://api.telldus.com/devices/list" #httpS in prouduction????
client_key= "FEH..."
client_secret= "ZUX...."
resource_owner_key= "7ac8...." #oauth_token Normaly from oauth_tokens.get('oauth_token')
resource_owner_secret= "58f..." #oauth_token_secret Normaly from oauth_tokens.get('oauth_token_secret')
oauth = OAuth1Session(client_key,
                          client_secret=client_secret,
                          resource_owner_key=resource_owner_key,
                          resource_owner_secret=resource_owner_secret)
r = oauth.get(protected_url)
print r
<---
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Re: API från Python

Post by micke.prag »

bmjbmj wrote:Anntagande # 1
Enligt vad jag förståt av dokumentationen och granskning av exempel koden använder Telldus OAuth ver 1.0.
Stämmer
bmjbmj wrote:Anntagnade # 2
Då man loggar in och aktoriserar att en privat/utvecklar version av nycklar skall/får skapas för en egen användare genomför webbsidan det mellansteg som man normalt behöver utför i programmet och de fyra nycklar som visas på sidan är de slutgiltiga nycklarna.
Stämmer
bmjbmj wrote:Anntagande # 3
API:et nås från httpS OBS! 'S' även att en del exemple inte använder ett krypterat protokol
Jag har dock prövat båda med och utan, samma fel.
Det går att använda både http och https. Vi rekommenderar https där det är möjligt. Känsliga anrop såsom user/changePassword kräver dock https.
bmjbmj wrote:Anntagande # 4
Svaret på annropet ges som standard på något av formaten xml eller json om man inte sänder med en parrameter för format???? Vad är parametern??? Ändpunkten avslutad med .xml/.json som brukligt???
devices/list med xml:
https://api.telldus.com/xml/devices/list
devices/list med json:
https://api.telldus.com/json/devices/list

Detta exempel kan säkert också komma till nytta:
http://developer.telldus.com/browser/ex ... ive/tdtool
Micke Prag
Software
Telldus Technologies
bmjbmj
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am

Re: API från Python

Post by bmjbmj »

Tack! :D

Djävulen satt som vanligt i detaljerna :wink: Jag hade missat att 'json' skulle vara en del av URL:en, inte ett sufix! Här är en fungerande och testad kod för den som vill läsa av sina givare med hjälp av Python. OBS! Man måste givetvis hämta valida 'kodnycklar' för sin egen användare!

Code: Select all

# By B Mathias Johansson (CopyLeft)
#
# Dependes on:
#	      requests
#	      requests_oauthlib
# OBS! OBS! Instal 'pip' (if not already present). >sudo apt-get install python-pip !OBS !OBS
#
# >sudo pip install requests requests_oauthlib

from requests_oauthlib import OAuth1Session

protected_url = "https://api.telldus.com/json/sensors/list"

client_key= "FEH..."
client_secret= "ZUX..."
resource_owner_key= "7ac..."
resource_owner_secret= "58f..."

oauth = OAuth1Session(client_key,
                          client_secret=client_secret,
                          resource_owner_key=resource_owner_key,
                          resource_owner_secret=resource_owner_secret)

payload={'includeValues': '1'}
r = oauth.get(protected_url,params=payload)
print r.status_code
print ""
if(r.status_code==200):
	print r.json()
Post Reply