DATA-WORLD-BLOG

.env can’t connect_Notion Python

👤horomi
❓ 環境変数が通らない


Traceback (most recent call last):
  File "/Users/herohoro/rss-to-notion/notionReed.py", line 25, in <module>
    'Authorization': 'Bearer ' + NOTION_ACCESS_TOKEN,
                     ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str

💬 Answer

このエラーメッセージは NOTION_ACCESS_TOKENNone になっているために発生しているようです。 Bearer という文字列と None を連結しようとしているため、Pythonはエラーをスローします。

この問題を解決するには、 NOTION_ACCESS_TOKEN に有効なNotion APIのアクセストークンを設定する必要があります。以下のように行います:

NOTION_ACCESS_TOKEN = 'your_notion_access_token'
NOTION_DATABASE_ID = 'your_notion_database_id'

ここで、your_notion_access_tokenは実際のNotion APIのアクセストークンに置き換え、your_notion_database_idも実際のデータベースIDに置き換える必要があります。アクセストークンはNotionの設定ページから取得できます。なお、APIキーは非常に重要な情報であるため、絶対に他人に公開しないように注意してください。

❓ 直接入力しないで通したい

NOTION_ACCESS_TOKEN = os.getenv("NOTION_TOKEN")
NOTION_DATABASE_ID = os.getenv("NOTION_FEED_ID")

ではだめなんですか?

💬 Answer:UNIXで設定

os.getenv("NOTION_TOKEN")os.getenv("NOTION_FEED_ID") を使用して環境変数からトークンやIDを取得することは可能です。ただし、この方法を使用するためには、事前にこれらの環境変数を設定しておく必要があります。

環境変数はシステムの設定や秘密情報(APIキーなど)を保存するのに便利な方法で、コード内に直接それらの情報を書くことなく、必要な情報にアクセスすることができます。環境変数は一般的にシェルから、または特定のアプリケーションから設定されます。

環境変数が設定されていない、または名前が間違っている場合、os.getenv()Noneを返します。このため、エラーが発生しています。

以下は、UNIXベースのシステム(LinuxやMac OS)で環境変数を設定する方法です。コマンドラインから以下のように入力します:

export NOTION_TOKEN="your_notion_access_token"
export NOTION_FEED_ID="your_notion_database_id"

そして、Pythonスクリプトを実行する前にこれらのコマンドを実行します。

これらの環境変数が設定されていることを確認するためには、Pythonスクリプトの中で以下のようにプリントしてみると良いでしょう:

import os
print(os.getenv("NOTION_TOKEN"))
print(os.getenv("NOTION_FEED_ID"))

これにより、期待される値が出力されるかどうかを確認できます。

ただし、セキュリティの観点から、秘密情報を含む環境変数をログやコンソールに出力することは推奨されません。この方法はデバッグ目的でのみ使用し、デバッグが終わったら該当する行を削除してください。

❓ Prompt:接頭辞quote

exportを実行するとquote> というのが表示されます。これは何?

💬 Answer

quote> が表示されるということは、シェルがまだコマンドの終了を待っている、ということを示しています。これは、ほとんどの場合、ダブルクオート(")やシングルクオート(')などのペアが閉じられていないときに発生します。

つまり、シェルはまだクオートの終わりを待っているということです。

例えば、次のようなコマンドを入力すると quote> が表示されます:

export NOTION_TOKEN="your_notion_access_token

このコマンドでは最後のダブルクオート(")がないため、シェルはコマンドの終了を待っています。

正しくは、次のようになります:

export NOTION_TOKEN="your_notion_access_token"

このように、ダブルクオート(")を忘れずに閉じることが重要です。また、特殊文字をエスケープするために \(バックスラッシュ)を使用する場合も、同様の事象が発生する可能性があります。

🙄
確かにシングルクウォートになってた….

❓ Prompt:.envファイルがつながらなかった理由

できました!!Mac OSで環境変数を設定できました。
これは.envファイル内に同じ内容を定義していますが、使えなかった原因はなんですか?

💬 Answer

.envファイルを使用して環境変数を設定することは一般的な手法であり、特にPythonのプロジェクトではよく用いられます。しかし、これらの変数が実際に環境に読み込まれるように設定する必要があります。これは通常、プログラムが起動するときに行います。

Pythonで.envファイルから環境変数を読み込むためには、python-dotenvというパッケージを使用することが一般的です。次のようにインストールします:

pip install python-dotenv

そして、次のようにスクリプト内で読み込みます:

from dotenv import load_dotenv

load_dotenv()  # take environment variables from .env.

NOTION_ACCESS_TOKEN = os.getenv("NOTION_TOKEN")
NOTION_DATABASE_ID = os.getenv("NOTION_FEED_ID")

このload_dotenv()関数を呼び出すと、同じディレクトリ内の.envファイルから環境変数が読み込まれます。これにより、os.getenv()関数を使用してこれらの変数を取得することが可能になります。

なお、.envファイルがプロジェクトのルートディレクトリ以外の場所にある場合、load_dotenv()関数にそのパスを渡す必要があります:

load_dotenv('.env')  # or load_dotenv('/path/to/.env')

ただし、.envファイルは公開されるべきではないため、Gitなどのバージョン管理システムには含めないようにしてください。そのためには、.gitignoreファイルに.envを追加してください。

な・る・ほ・ど\(^o^)/