ガイドAPIリファレンス
ガイド

PythonによるOAuth 2.0トークンの取得方法

OAuth 2.0トークン認証を使用するには、アプリがHEREサービスへのリクエストごとにOAuth 2.0トークン資格情報を取得できるようにする必要があります。このチュートリアルでは、Pythonを使用してHERE OAuth 2.0ベアラートークンを取得する方法について説明します。

前提条件

  • HEREプラットフォームアカウント。お持ちでない場合、platform.HERE.com で取得できます。
  • OAuthトークン資格情報。詳細については、OAuthトークンの取得に関するページを参照してください。

OAuth 2.0トークンリクエストをコーディングする

OAuth 2.0トークン認証を使用する場合は、アプリがHEREサービスへのリクエストごとにトークン資格情報をできるようにする必要があります。

これを行うには、次のいずれかを実行します。

HEREは、アプリによる認証済みAPI呼び出しに安全なアクセストークンを提供するREST APIを提供しています。トークンは作成後、最大24時間使用できます。

手順

ステップ1 - アプリを登録する

トークンの取得に必要なアクセスキーIDとアクセスキーシークレットを生成するには、アプリを登録する必要があります。

詳細については、「アプリを登録して資格情報を取得する」を参照してください。以下はclient.credentialsファイルの例です。

here.user.id = HERE-83f93718-8856-4239-9b1e-7b930915876b
here.client.id = wAT7An4k4ypVlLimnq8O
here.access.key.id = wUr2KJHDJkN2WMYwrl_fDA
here.access.key.secret = WDC4YqoQMFbhozEF7r7ccwZSYWHBtYORoIAmRBARvQip_eOS1VUshGUQmTw8j5R552OVW0kVTcpoLB8BjdMkIQ
here.token.endpoint.url = https://account.api.here.com/oauth2/token

ステップ2 - OAuth 2.0署名を作成し、トークンをリクエストする

トークンをリクエストするときは、リクエストの[承認]ヘッダーでOAuth署名を渡す必要があります。この署名は、ユーザーまたはアプリの認証に使用します。まず、以下の6つのキーと値のペアを含むパラメーター文字列を作成します。

なお、Authentication and Authorization APIへのトークンリクエストごとに新しい署名を作成する必要があります。署名は一度のみ使用できます。

資格情報ファイル 資格情報ファイルを取得するには、「OAuth 2.0トークン」を参照してください。このファイルには、次の資格情報が含まれています。

資格情報説明
grant_type各ファイルでは、この値は常にclient_credentialsです。
oauth_consumer_keyHERE Credentialsの生成後にcredentials.propertiesファイルから取得したアクセスキーID値。
oauth_nonce再使用されることのない、一意の文字列。
oauth_signature_methodこれは常にHMAC-SHA256にしてください。
oauth_timestamp現在の時刻。具体的には、Unixエポックから経過した秒数。
oauth_versionこれは常に1.0にしてください。

リクエスト

IDEでPythonファイルを作成し、次のコードを追加します。必ず、お使いのoauth_consumer_keyを、HEREプラットフォームからダウンロードしたclient_credentialsファイルにあるアクセスキーID値に置き換えてください。

次のコードブロックはAPIによる認証を示し、ドイツのベルリンにあるCurry Innの検索を実行します。

  • まず、コードはOAuth 2.0認証を使用してアクセストークンを取得し、そのトークンを使用して特定のAPIエンドポイントへのPOSTリクエストを行います。
  • importにより、コードはrequests_oauthlibからリクエストライブラリとOAuth1をインポートします。
  • 次にkey_idkey_secretを使用してclient_keyclient_secretでOAuth1オブジェクトを作成し、signature_typeには'auth_header'を指定します。
  • その後、grant_type'client_credentials'に設定し、認証用にoauthオブジェクトを使用し、Content-Typeヘッダーを'application/x-www-form-urlencoded'に設定して、https://account.api.here.com/oauth2/tokenにPOSTリクエストが送信されます。
  • 次に、r.json()['access_token']を使用してアクセストークンをJSONレスポンスから抽出します。
  • ヘッダーにベアラートークンとContent-Typeが'text/plain'の承認ヘッダーが含まれるrequests.Sessionオブジェクトが作成されます。
  • 最後に、GETリクエストがhttps://discover.search.hereapi.com/v1/discoverに送信されます。
import requests
from requests_oauthlib import oauth2

oauth = OAuth1(client_key=key_id, client_secret=key_secret, signature_type='auth_header')
r = requests.post('https://account.api.here.com/oauth2/token',data=dict(grant_type='client_credentials'), auth=oauth,
                  headers={'Content-Type' : 'application/x-www-form-urlencoded'})

access_token = r.json()['access_token']


s = requests.Session()
s.headers = {'Authorization': f"Bearer {access_token}",
             'Content-Type': 'text/plain'}
 
params = dict(at='52.5228,13.412', q='restaurant', limit=1)
r = s.get('https://discover.search.hereapi.com/v1/discover', params=params)
print(r.json())

レスポンス

次のコードブロックは、ドイツのベルリンにあるCurry Innに対する上のリクエストを実行した後のレスポンスの例です。返されるJSONオブジェクトはレストランの包括的な情報 (場所、種類、営業に関する詳細など) を提供します。

{
'items': [{'title': 'Curry Inn',
   'id': 'here:pds:place:276u33dc-a56607ef6101420ff5ea793cdc5c6cfe',
   'language': 'de',
   'ontologyId': 'here:cm:ontology:restaurant',
   'resultType': 'place',
   'address': {'label': 'Curry Inn, Karl-Liebknecht-Straße, 10178 Berlin, Deutschland',
    'countryCode': 'DEU',
    'countryName': 'Deutschland',
    'stateCode': 'BE',
    'state': 'Berlin',
    'countyCode': 'B',
    'county': 'Berlin',
    'city': 'Berlin',
    'district': 'Mitte',
    'street': 'Karl-Liebknecht-Straße',
    'postalCode': '10178'},
   'position': {'lat': 52.52298, 'lng': 13.41134},
   'access': [{'lat': 52.52328, 'lng': 13.41118}],
   'distance': 49,
   'categories': [{'id': '100-1000-0009', 'name': 'Fastfood', 'primary': True},
    {'id': '100-1000-0003', 'name': 'Schnellrestaurant/Lieferservice'}],
   'references': [{'supplier': {'id': 'yelp'},
     'id': 'Ix4qi3rQxTZv8GfhsNKN1A'}],
   'foodTypes': [{'id': '202-000', 'name': 'Indisch', 'primary': True}],
   'openingHours': [{'categories': [{'id': '100-1000-0003'}],
     'text': ['Mo: 10:00 - 24:00',
      'Di-Sa: 00:00 - 02:00, 10:00 - 24:00',
      'So: 00:00 - 02:00, 10:00 - 23:30'],
     'isOpen': False,
     'structured': [{'start': 'T100000',
       'duration': 'PT16H00M',
       'recurrence': 'FREQ:DAILY;BYDAY:MO,TU,WE,TH,FR,SA'},
      {'start': 'T100000',
       'duration': 'PT13H30M',
       'recurrence': 'FREQ:DAILY;BYDAY:SU'}]}]}]
}

その他の参考資料

詳細については、以下を参照してください。