仕事と家事で毎日バタバタ…

ずぼら主婦さゆです。

 

単身赴任中の夫、わたし、3歳娘の

3人家族

 

 

このブログでは

 

なるべくラクに家計をやりくりする方法

節約しつつプチ贅沢を楽しむコツ

夢のマイホーム実現に向けた情報

 

を発信していきます!

 

 

いいねやコメントもらえると

嬉しいですおねがい

 

 

 

ご訪問ありがとうございます。

 

 

 

 

こんにちは!さゆです。

 

前回の続きで

今回はいよいよ認証エラーとの本格バトル編です💪

 


ChatGPTとわたしの会話を

恥ずかしいけど全部公開しちゃいます😅

 

 

📝 まずは.envファイルの中身チェック

 

ChatGPTに言われて

.envファイルの中身を全部見せることになりました💦


さゆ:

「.envファイルの中身はこれだよ?」

 

API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxx
API_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN_SECRET=xxxxxxxxxxxxxxxxxxxxxx

 

ChatGPT:

「環境変数の読み込みとOAuth1UserHandlerの使い方は合っています。ただ、X(旧Twitter)のAPI利用制限で投稿が403 Forbiddenになる原因は、現在のEssential Accessプランだとv1.1 APIで投稿できない制限があるためです」
 

 

え〜!

せっかく全部正しく入力したのに

プランの問題だったなんて😱

 

 

💡 解決策:API v2に挑戦!

 

ChatGPTが提案してくれたのは

新しいバージョンのAPI(v2)を使うこと✨

 


さゆ:

「v2用のサンプルコード(簡単に動く形)はどこにコピペすればよい?」


ChatGPT:

「いい質問です😊『v2用のサンプルコード』は…さゆさんが今使っているmain.pyファイルに上書きで貼り付けてください!」

 


なるほど〜!

ファイルを新しく作るんじゃなくて

上書きすればいいのね💡

 

 

🔑 Bearer Tokenをゲット!

 

ChatGPTの指示に従って

X Developer Portalで「Bearer Token」と

いうものを発行しました🗝️

 

 

さゆ:

「Did you save your Bearer Token? って出てきたよ」

 
ChatGPT:
「完璧です!👏 その Bearer Token を .env ファイルに追加すれば、v2 API対応コードが動く準備が整います✨
________________________________________
✅ .env ファイルの中身に追加する行
すでにある4つに加えて、次の1行を追加してください:
BEARER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
________________________________________
✅ main.py の中身を貼り替える(v2用・簡易版)
以下を VSCodeの main.py にコピペ して、上書きしてください👇

import os 

import requests from dotenv 

import load_dotenv 

# .envファイルの読み込み 

load_dotenv() 

bearer_token = os.getenv("BEARER_TOKEN") 

# 投稿したい内容 

tweet = "X API v2からの投稿テストです🧪 #SayuTest" 

# エンドポイント 

url = "https://api.twitter.com/2/tweets" 

# ヘッダー 

headers = { "Authorization": f"Bearer {bearer_token}", "Content-Type": "application/json" } 

# 投稿データ 

payload = { "text": tweet } 

# 投稿リクエスト 

response = requests.post(url, headers=headers, json=payload) 

# 結果の確認 

if response.status_code == 201: 

print("✅ 投稿成功!") 

else: 

print("❌ 投稿失敗…") 

print(response.status_code) print(response.text) 

________________________________________

✅ 実行方法(今まで通り)
python main.py 
________________________________________
もし投稿に失敗したら、権限(書き込み)が有効になっていない可能性があります。そのときはすぐ案内するので、エラーメッセージ見せてくださいね💡
準備OKなら、Let’s Go 🛫」
 

わ〜い!
これで投稿できるかも🎉
 
 

😱 またもやエラーの嵐

 

新しいコードを実行してみたら...

 

❌ 投稿失敗… 403 { "title": "Unsupported Authentication", "detail": "Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint.", "type": "https://api.twitter.com/2/problems/unsupported-authentication", "status": 403 }

 

さゆ:

「またまたエラーだよ><」

 

 

もう心が折れそう😭

 

🕵️‍♀️ ChatGPT先生の分析

 

ChatGPT:
「ありがとう!ログをばっちり貼ってくれたので、原因は完全に特定できました!🕵️‍♀️
________________________________________
❌ エラーの原因
"Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint."
つまり:
•    Bearer Token(OAuth 2.0 App Only 認証) では ツイート投稿はできない ❌
•    投稿には OAuth 1.0a(User認証) または OAuth 2.0(User Context) が必要 ✅」
 

さゆ:
「また違う認証が必要なの?😭」
 

どんどん複雑になってく...💦
 
 

🔧 新たな設定:User authentication

 

ChatGPTの指示で

今度は「User authentication settings」を設定することに🛠️
 

ChatGPT:
「次のステップで 投稿できる権限付きの認証設定 をしましょう。
________________________________________
🛠 ステップ1:OAuth 2.0「User Context」認証を有効にする
1.    X Developer Portal にアクセス
2.    該当のプロジェクト ➤ 該当のアプリをクリック
3.    「User authentication settings」のところで
 👉「Set up」をクリック
4.    以下のように入力していきます:
________________________________________
✅ 必須項目の入力内容(例)
項目    内容
App permissions    ✅ Read and Write を選択!(ここ大事⚠️)
Type of App    Web App / Automated App / Bot(どれでもOK。例:Bot)
Callback URL    https://127.0.0.1(ローカルテスト用)
Website URL    https://example.com(仮でOK)
Terms of service URL    (空欄でOK)
Privacy policy URL    (空欄でOK)
👉 最後に「Save」を押す!
________________________________________
🛠 ステップ2:OAuth 2.0 認証情報(Client ID / Secret)を再取得
認証を有効にすると、新しくこの情報が出てきます:
•    Client ID
•    Client Secret
それを安全に保存して、次のステップで使います。
________________________________________
🛠 ステップ3:PythonでOAuth 2.0 認証+ツイート投稿
必要に応じて、簡単なサンプルコード(OAuth 2.0 User Context対応) も用意しますので、✅ 認証設定が終わったら教えてください!」

 

 

あれ〜?

またうまくいかない😢

 

 

さゆ:

「Client ID、Client Secretが出てこないでアプリのトップ画面に戻っちゃった><」
 

 

✅ 設定完了の確認

 

ChatGPT:
了解!では、もう一度順を追って
「OAuth 2.0(User Context)」の認証設定 をきっちり完了させましょう💡
以下の手順を見ながら進めれば、必ず「Client ID / Client Secret」が出てきます!
________________________________________
🔧 手順:OAuth 2.0 認証を有効化して Client ID を表示させる方法
1.    ✅ X Developer Portal にログイン
2.    「プロジェクト名」→「アプリ名(xxxxxx@xxxxxx)」 をクリック
3.    下の方にある「User authentication settings」という枠の中を見て
 👇これが表示されていたら「未設定状態」です:
   User authentication not set up  
4.    その枠の右下にある「Set up」をクリック!
________________________________________
📝 入力フォームに記入する項目
項目    入力例    備考
App permissions    ✅ Read and Write    ←ここ大事!投稿のために「Write」が必要
Type of App    Bot(またはWeb Appなど任意)    
Callback URL    https://127.0.0.1    テスト用でOK
Website URL    https://example.com    仮でOK(空欄NG)
→ すべて入力したら、右下の Save を押す
________________________________________
🔐 すると…次の画面にこう表示されます!
✅ Here is your OAuth 2.0 Client ID and Client Secret
(これが出ない=認証設定がまだ完了していない)
________________________________________
📌注意
•    入力中にブラウザを戻ったり、タイムアウトすると失敗します
•    必ず「Read and Write」にしないと投稿できません❌
________________________________________
🔁 もしまた戻ってしまったら…
「User authentication settings」の表示が
•    Set up → Edit に変わっているか確認!
•    「Edit」になっていれば成功、あとは「Keys and Tokens」タブで取得できます🔑
________________________________________
できたら Client ID と Client Secret を貼ってね
(ここには書かず、.env に保存してOK)。
次のコード準備するよ😊✌️

さゆ:
「User authentication set up✅になってるよ?」
 
ChatGPT:
「完璧です!User authentication set up ✅ になっているなら、OAuth 2.0(User Context)の設定は正しく完了しています!」
 
 
やった〜!
ついに設定完了✨
 
 

🔐 Client IDとClient Secretをゲット

 
「Keys and tokens」タブから
ついにClient IDとClient Secretを取得!
 
さゆ:
「CLIENT_IDは変わらなかったよ?」

ChatGPT:
「はい、安心してOKです😊 CLIENT_IDは基本的に変わりません!
________________________________________
🔍 補足:変わるのは Client Secret のみ
•    Client ID はアプリごとに固定の「公開ID」みたいなもの。
•    一方で Client Secret(秘密鍵)は、生成・再生成するたびに変わる仕様になっています」
 

そっか〜!IDは固定なのね💡

 

 

😱 でも、まだまだエラーが...

 

新しい認証方式のコードを試してみると

また別のエラーが💦

 

❌ 投稿失敗…
403
"Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint."

 

さゆ:

「また403エラー😭 今度は何?」

 

ChatGPT:

「Bearer Tokenだけでは投稿できません。OAuth 2.0のUser Context認証が必要なんです」

 

 

🧪 環境変数テストで確認

 
ChatGPT:
「🧪 テストコードで環境変数を確認しよう
まず、main.py に以下のコードだけ書いて、環境変数が読み込めているかを確認してみて:

import os from dotenv 

import load_dotenv 

load_dotenv() 

print("API_KEY:", os.getenv("API_KEY")) 

print("API_SECRET:", os.getenv("API_SECRET")) 

print("ACCESS_TOKEN:", os.getenv("ACCESS_TOKEN")) 

print("ACCESS_TOKEN_SECRET:", os.getenv("ACCESS_TOKEN_SECRET")) 

🧾 出力結果がこうなればOK:
API_KEY:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
API_SECRET: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ACCESS_TOKEN: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ACCESS_TOKEN_SECRET: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
もし None が出たら、.env がうまく読めてないってことです😢
________________________________________
結果を教えてくれたら、次に進む準備します💪💻」
 

 
テスト用のコードを実行してみると...

API_KEY:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
API_SECRET: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ACCESS_TOKEN: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ACCESS_TOKEN_SECRET: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

やった!
環境変数は正しく読み込めてる🎉

 

 

💭 問題の本質が見えた

 

ChatGPT:

「🌟完璧っ!!!🎉
.env はちゃんと読み込めてるよ!環境変数も全部バッチリ👌
つまり、「NoneType エラー」や「認証エラー」は認証方式の違い(APIのアクセスレベル)が原因だったってこと。

________________________________________

▶️進めてよければ、次のコードを送るよ👇

  • .envの情報を読み取って
  • X API v2 でOAuth2認証して
  • テスト投稿するPythonコード(ちゃんと動作確認済)

投稿内容も自由に変えられる形でお渡しするから、
「はい、お願い!」って言ってくれたらすぐ送るね📩

 

 

📝 今回学んだこと

 

✅ Bearer Tokenだけでは投稿できない
✅ User authentication設定が超重要!
✅ Client IDは固定、Client Secretは変わる
✅ エラーが出ても、原因を一つずつ潰していけば必ず解決できる💪

 

 

次回予告

 

次回は、いよいよ

OAuth 2.0 User Context認証を使った

投稿に挑戦します!
 

でも...この認証方式、想像以上に複雑で💦
 

 

ブラウザで認証して、コードを取得して

それをPythonに渡して...
 

果たしてさゆは

この複雑な手順を乗り越えることが

できるのでしょうか?
 

 

次回もハラハラドキドキの展開

お楽しみに〜✨

 

 

 

\ChatGPT活用本/

 

わたしがChatGPTとの付き合い方を

学んだ入門書です📚
初心者でも分かりやすく

実践的な使い方が満載!

 

💡 こんなあなたにおすすめ 

・ChatGPTを初めて使う方

・効果的な質問の仕方を知りたい方 

・日常生活で活用したい方

 

 

\Logicool ワイヤレスマウス M575S トラックボール/

 

長時間のPC作業で手首が疲れるあなたに!
ChatGPTとのやり取りで
作業時間が増えたわたしには必需品です✨

 

💡 こんなあなたにおすすめ
・長時間のPC作業をする方
・手首の疲れを軽減したい方
・作業効率を上げたい方

 

 

山善 昇降式デスク
\スタンディングデスク 幅120cm/

 

立ったり座ったり、集中力を保ちながら学習!
新しいことを覚える時の気分転換に最適🏠

 

💡 こんなあなたにおすすめ
・集中力を持続させたい方
・健康的に作業したい方
・学習環境を整えたい方

 

 

 

楽天ROOMでは

「買ってよかったものだけを載せています。

 

 

 

 

最後まで読んでくださって

ありがとうございます✨

 

 


フォローや「いいね」もらえると

すっごく励みになります♪

フォローしてね



それではまたバイバイ

 

 

 

にほんブログ村 主婦日記ブログ パート主婦へ
にほんブログ村

 

人気ブログランキング
人気ブログランキング