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

ずぼら主婦さゆです。

 

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

3人家族

 

 

このブログでは

 

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

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

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

 

を発信していきます!

 

 

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

嬉しいですおねがい

 

 

 

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

 

 

 

 

こんにちは!さゆです。

 

前回から続いている

「アプリにアクセスを許可できません」

エラーとの格闘、ついに進展がありました💦 

 

 

3日間、もう心が折れそうになりながらも

ChatGPTさんと一緒に頑張った結果が...!

 

 

📝設定見直しの提案をもらいました

 

ChatGPTから具体的なチェックポイントを教えてもらいました✨

さゆ:
「何度やっても同じだね。問題が発生しました。アプリにアクセスを許可できません。前に戻ってもう一度ログインしてください。」

ChatGPT:
「エラー『アプリにアクセスを許可できません』が繰り返し出てしまう原因は、X Developer Portalでのアプリ設定に何らかの不備がある可能性が高いです。特に以下の点を確認・修正してみてください:
________________________________________
✅【1】Callback URLの修正(最重要)
現在の設定:https://localhost/
これはローカル開発用であり、X側が制限している場合があります。
🔧以下のような、実在するウェブサイトURLに変更してみてください:
https://yourdomain.com/callback
※もしご自身のWebサイトをお持ちでなければ、以下のような無料のURLを使ってテストも可能です(最終的には調整が必要ですが):
•    https://example.com/callback
•    https://127.0.0.1/callback(←localhostの代わりにIPアドレスを使う手も)
________________________________________
✅【2】Client ID / Client Secret の有効性
再生成した CLIENT_SECRET を使っていてもエラーが出る場合:
•    前回のクライアント情報がキャッシュされている可能性もあります。
•    一度、クライアントを削除して作り直すのが確実な手段です(面倒ですが成功率は高いです)
________________________________________
✅【3】「Type of App」や「Permissions」が合っているか再確認
必ず以下のように設定してください:
•    App permissions:Read and write
•    Type of App:Web App, Automated App or Bot
•    Callback URL:実在するURL(例:https://yourdomain.com/callback)
________________________________________
✅【4】URLを生成するPythonコードの確認
URLを生成しているPythonコード(auth_step1.py)で redirect_uri が "https://localhost/" になっていれば、それも一致するように修正してください。
________________________________________
もしよければ、
•    現在の「User Authentication Settings」のスクショ(ぼかし可)
•    auth_step1.py のコード内容
を共有いただければ、具体的にどこを直せばいいかピンポイントでアドバイスできますよ。無理な範囲は共有不要です🙆‍♀️」

 

さゆ:

「アプリ設定はこんな感じです:
App permissions:Read and write
Type of App:Web App, Automated App or Bot
Callback URI:https://127.0.0.1/callback」

 

ChatGPT:

「完璧です!その設定で保存すれば、OAuth 2.0 認証の「アプリにアクセスを許可できません」エラーは解消されるはずです✨」

 

 

😤でも...まだエラーが続く

 

設定を保存して再実行したのに...😱

 

問題が発生しました
アプリにアクセスを許可できません。前に戻ってもう一度ログインしてください。

 

この時、正直「もうダメかも...」って思いかけました💦 

 

さゆ:

「何度やっても同じだよ。」 

 

 

ChatGPTの新提案:「Native App」に変更!

 

ChatGPT:
「ここまでの設定はばっちりだから、あと一歩!落ち着いて、以下のポイントを一緒に確認しよう👇

________________________________________
✅ このエラーの原因は、設定のどこかがTwitter側の要件と合っていないためです。
「アプリにアクセスを許可できません」というエラーは、redirect_uri の不一致かアプリの種類/認証種別のミスマッチがほとんどの原因です。
________________________________________

🔍 原因チェックリスト(最新版)
① Callback URI(Redirect URI)
•    現在設定:https://127.0.0.1/callback ✅ OK(←今のコードと一致している)
•    Twitter側にも https://127.0.0.1/callback と正確に登録されているか確認して!
•    http ではなく https である必要がある(意外と重要)
________________________________________
② アプリの種類(Type of App)
現在は「Web App, Automated App or Bot」を選んでいるね。
これは 正しい選択肢です。ただし、これを選んだ場合は 「Confidential Client」 扱いになります。
👉 それに応じて 認証コードの取得も code_challenge などが必要になることも。
________________________________________
✅ 対処法(推奨):アプリの種類を「Native App」に変更してみよう!
📌 なぜ?
「Native App」は簡略化されたフローを使えて、ローカル開発(127.0.0.1)との相性がいいです。
________________________________________
✅ 変更手順
1.    X Developer Portalのアプリ設定ページへ
2.    「User authentication settings」をクリック
3.    以下を変更:
•    App permissions:✅「Read and Write」
•    Type of App:🔄「Native App」 に変更!
•    Callback URL:✅ https://127.0.0.1/callback
•    Website URL:✅ https://example.com(ダミーでOK)
4.    ⏬ Save をクリック
________________________________________
✅ その後、再び auth_step1.py を実行してみて
python auth_step1.py 
URLが表示されたらクリックして、ログイン~許可の流れをやってみてね!
________________________________________
💬 うまくいけば:
•    「許可しますか?」の画面が出て、ログインできるようになるはず!
•    ブラウザのURLバーに https://127.0.0.1/callback?code=xxxxx... というURLが表示されるはず!

________________________________________
進めたら「変更したよ!」と教えてください😉
そこから次の認証ステップに進もう!」

 

 

🔄設定変更したけど...まさかの結果

 

今度こそ!っと

実行ボタンを押したら…

 

このサイトにアクセスできません 127.0.0.1 で接続が拒否されました。 次をお試しください 接続を確認する プロキシとファイアウォールを確認する ERR_CONNECTION_REFUSED

 

さゆ:

「またまた、エラーっぽいよ?」 

 

ChatGPT:
「大丈夫、これは想定内の挙動です👌💡
実はこのエラー、「認証に成功してリダイレクトされた先に、何もサーバーが立っていないから」表示されているだけ。
つまり:
認証そのものは成功している可能性が高い! 🎉

________________________________________

✅ やるべきこと
❶ ブラウザのアドレスバー(URL)をよく見て!
こんな感じのURLになっていませんか?
https://127.0.0.1/callback?code=abc1234XYZ567&state=xxxxx
👉 この中の code=xxxxx... の部分が 認証コードです!
________________________________________
❷ 「code=」以降の文字列を コピー してください
例:
code=abc1234XYZ567 → この「abc1234XYZ567」が必要!」
 

 

😲えっ!?成功してたの?

 

ChatGPTに「ブラウザのアドレスバーを見て!」って言われて確認したら...

 

https://127.0.0.1/callback?error=invalid_request&state=0mi9HMiy...

 

あれ?エラーの文字が😅

 

 

ChatGPTの新しいアドバイス

 

ChatGPT:
「ありがとう、URL確認しました。
これは明確に「認証コード(code)が返ってきていない」=認証に失敗しているという状態です💧
________________________________________
❌ エラーの意味:「invalid_request」
このエラーが表示されるときは、設定やリクエストの形式にミスがあるのが原因です。
________________________________________
✅ 原因として最も可能性が高いのはこれ:
「code_challenge / code_verifier」が含まれていない
(OAuth 2.0 PKCE 認証の要件を満たしていない)
OAuth2Session を使って認証URLを生成する場合、Twitterの認証フローでは**PKCE(Proof Key for Code Exchange)**が必須です。
________________________________________
🛠️ 解決策:OAuth2Session で code_challenge_method='S256' を明示しよう
以下のようにコードを修正してください👇
 

import os from dotenv 

import load_dotenv from requests_oauthlib 

import OAuth2Session from oauthlib.oauth2 

import BackendApplicationClient import secrets 

 

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

load_dotenv() 

 

# 環境変数から読み込み client_id = os.getenv("CLIENT_ID") redirect_uri = "https://127.0.0.1/callback" 

 

# PKCEの code_verifier(ランダム文字列を生成) 

code_verifier = secrets.token_urlsafe(64) 

 

# セッション作成(PKCE対応) 

oauth = OAuth2Session( client_id=client_id, redirect_uri=redirect_uri, scope=["tweet.read", "tweet.write", "users.read", "offline.access"], code_challenge_method="S256" ) 

 

# 認証URLの生成(code_challenge を含めて) 

authorization_url, state = oauth.authorization_url( "https://twitter.com/i/oauth2/authorize", code_challenge=code_verifier # ここ大事!

 

# 認証URL表示 print("🔑 以下のURLにアクセスして、認証コードをコピーしてね:\n") 

print(authorization_url) 

 

# code_verifier をファイルなどに一時保存(step2で使うため) 

with open("code_verifier.txt", "w") as f: f.write(code_verifier)

________________________________________
✅ 次のステップ
1.    このコードで auth_step1.py を上書きして実行
2.    表示されたURLを開いて、ログイン&許可
3.    今度こそ code=xxxxxx が返ってくるURLがブラウザに表示されるはず✨
4.    それを使って auth_step2.py に進めます(※その際は code_verifier.txt の内容を使います)
________________________________________
準備できたら「URL表示されたよ!」「認証コード取れたよ!」と教えてください😊」
 

 

🛠️新しいコードに挑戦!

 

もらったプログラムをに上書きして実行したものの…

 

TypeError: Session.__init__() got an unexpected keyword argument 'code_challenge_method'

 

さゆ:
「なんかエラーになった。 」 
 

ChatGPT:

「ありがとう、エラー内容しっかりキャッチできてるよ!
このエラー👇は「code_challenge_method は requests-oauthlib では直接渡せない」という意味です。

________________________________________
✅ 解決方法:手動でPKCEの code_challenge を生成してURLに追加する
TwitterのOAuth 2.0 認証では [PKCE (Proof Key for Code Exchange)] が必須なのですが、requests-oauthlib は code_challenge_method="S256" を直接渡す機能に未対応です。
そこで、手動で code_verifier → code_challenge を生成して、URLに組み込みます。
________________________________________
✨ 修正版コード(100%動くPKCE対応版)
 

import os 

import secrets 

import hashlib 

import base64 from urllib.parse 

import urlencode from dotenv 

import load_dotenv 

 

# .envファイル読み込み 

load_dotenv() 

client_id = os.getenv("CLIENT_ID") 

redirect_uri = "https://127.0.0.1/callback" 

 

# ① PKCE用の code_verifier を生成(43〜128文字)

code_verifier = secrets.token_urlsafe(64) 

 

# ② code_challenge を S256(SHA256 + base64url)で生成 

code_challenge = hashlib.sha256(code_verifier.encode("utf-8")).digest() 

code_challenge = base64.urlsafe_b64encode(code_challenge).rstrip(b"=").decode("utf-8") 

 

# ③ スコープとパラメータをURLに追加 

params = { 

"response_type": "code", 

"client_id": client_id, 

"redirect_uri": redirect_uri, 

"scope": "tweet.read tweet.write users.read offline.access", 

"state": secrets.token_urlsafe(16), 

"code_challenge": code_challenge, 

"code_challenge_method": "S256" 

 

# ④ 認証URL生成 

authorization_url = "https://twitter.com/i/oauth2/authorize?" + urlencode(params) 

print("🔑 以下のURLにアクセスして、認証後にブラウザに表示されるURLをコピーしてください:\n") 

print(authorization_url) 

 

# ⑤ code_verifier をファイル保存(step2で使用) 

with open("code_verifier.txt", "w") as f: f.write(code_verifier) 

 

 

🎉ついに認証コードをゲット!

 

ChatGPTがくれた最新コードをドキドキしながら実行💓

 

すると…

 

https://127.0.0.1/callback?state=zWl8IhbrhnCUeEFatrc5nQ&code=WnRKN2Q0VWxZcEdVS1d2cmNZd1lPX0...

 

さゆ:
「もしかして、これは成功?」

 

ChatGPT:

「よく頑張りました👏
そのURLに含まれている code パラメータがまさに「次のステップ」で使う 認可コード(authorization code)です!」

 

 

 

思わず「えーーー!?本当に!?」
って声に出しちゃいました😆
 
 
 娘も「ママすごいね〜」って褒めてくれて
なんだか涙が出そうになりました🥺
 
 

今回の学び✏️

 

✅ 認証コード(Authorization Code)
→ Xに「この人は本当にアプリを使って良い人ですよ」って証明するもの🎫
✅ PKCE(ピクシー)
→ より安全に認証するための追加のセキュリティ仕組み🔐
✅ OAuth 2.0
→ アプリがXにアクセスするための安全な認証システム🛡️

 

 

次回予告🚀

 

ついに手に入れた認証コード!✨
でも、これで終わりじゃないんです!
 
でもChatGPTによるとこれを使って
今度は「アクセストークン」というものを
取得する必要があるそうです🎯
 
 
「アクセストークン?またよくわからない言葉が...」
 
って思ったけど
ここまで来たら最後まで頑張ります💪
 

次回は
「認証コードからアクセストークンを取得する方法」
をお届けします📝
 
 
果たして、PC音痴主婦さゆの挑戦は
最終ゴールまで辿り着けるのでしょうか...?😅
 
 
💭 今日の気づき
3日間の格闘を経て感じたのは
「初心者だからって諦める必要はない」
ということです✨

わたしみたいにPC音痴でも
ChatGPTのサポートがあれば
少しずつでも前に進めるって実感しました😊
 

同じようにプログラミングや技術的なことに
挑戦している方がいらっしゃったら
一緒に頑張りましょう🤝
 
 

🛍️集中力UPや気分転換に!

 

今回の作業で改めて
「コーヒーは必須だな」
って思いました☕ 
 
長時間パソコンと向き合うときには
好きなコーヒーを飲みながらやると集中力が続きます✨
 

特に疲れた時には
ちょっと贅沢なドリップコーヒーを入れて気分転換🎵
 
香りだけでもリラックスできて
「よし、もう一度頑張ろう!」って思えるんです💪
 
 

\集中力UPや気分転換に!/

プレミアムドリップコーヒー(10g*20袋)

 

 

\夜間の作業が多い方に!/

目に優しい LEDデスクライト

 

 

\長時間のPC作業で目が疲れる方に!/

ブルーライトカット眼鏡

 

 
 
次回もお楽しみに〜💕
 
 

 

 

\ChatGPT活用本/

 

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

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

実践的な使い方が満載!

 

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

・ChatGPTを初めて使う方

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

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

 

楽天ROOMでは

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

 

 

 

 

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

ありがとうございます✨

 

 


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

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

フォローしてね



それではまたバイバイ

 

 

 

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

 

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