質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

【Go】Twitter API のコールバックURLが承認されない

haru_ren
renren

総合スコア48

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

1回答

0グッド

0クリップ

675閲覧

投稿2022/10/20 11:38

編集2022/10/20 11:48

前提

Go言語でTwitter APIを使い、ツイートする機能を実装中です。
echoでサーバー起動時後に、localhost:3022/authにアクセスするとTwitterのログイン画面を表示するようにしたいのですが、表題のエラーが発生し解決できず困っています。誰か助けてください!

環境

・OS: mac
・言語: Go 1.19
・FW: echo

実現したいこと

  • echoでサーバー起動時後に、localhost:3022/authにアクセスするとTwitterのログイン画面を表示するようにしたい。

発生している問題・エラーメッセージ

cli

1authentication failed: OAuth server status 403, <?xml version='1.0' encoding='UTF-8'?><errors><error code="415">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error></errors>

該当のソースコード

  • go run main.goでRunAPIServer関数を実行しています。

go

1func RunAPIServer() { 2 e := echo.New() 3 e.GET("/auth",AuthTwitter) 4 e.GET("/callback",Callback) 5 6 // サーバー開始 7 go func() { 8 if err := e.Start(":3022"); err != nil { 9 e.Logger.Info("shutting down the server") 10 } 11 }() 12 13 quit := make(chan os.Signal) 14 signal.Notify(quit, os.Interrupt) 15 <-quit 16 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) 17 18 defer cancel() 19 20 if err := e.Shutdown(ctx); err != nil { 21 e.Logger.Fatal(err) 22 } 23} 24 25const ( 26 callback = "https://cat.newstyleservice.net/callback" 27 test = "http://localhost:3022/callback" 28) 29 30// ツイッター認証 31func AuthTwitter(c echo.Context) error { 32 api := getTwitterAPI() 33 var url = callback 34 35 hostname, err := os.Hostname() 36 37 if err != nil { 38 fmt.Printf("failed to retrieve host name: %v\n", err) 39 } 40 41 if strings.Contains(hostname, "local") { 42 url = test 43 } 44 45 // こちらの関数でコケています。 46 uri, _, err := api.AuthorizationURL(url) 47 48 if err != nil { 49 // 該当のエラーログは、下記で出力されています。 50 fmt.Printf("authentication failed: %v\n", err) 51 return err 52 } 53 54 // 成功したらTwitterのログイン画面へ 55 return c.Redirect(http.StatusFound, uri) 56} 57 58// 読み取り後、コールバックから認証まで 59func Callback(c echo.Context) error { 60 token := c.QueryParam("oauth_token") 61 secret := c.QueryParam("oauth_verifier") 62 api := getTwitterAPI() 63 64 cred, _, err := api.GetCredentials(&oauth.Credentials{ 65 Token: token, 66 }, secret) 67 68 if err != nil { 69 fmt.Println(err) 70 return err 71 } 72 73 api = anaconda.NewTwitterApi(cred.Token, cred.Secret) 74 75 sess := session.Default(c) 76 sess.Set("token", cred.Token) 77 sess.Set("secret", cred.Secret) 78 sess.Save() 79 80 return c.Redirect(http.StatusFound, "./tweet") 81}

試したこと

  • [Twitter API] OAuthのCallback URLホワイトリスト化に対応するを参考にdeveloper.twitter.comでコールバックURLを追加
    • 設定したコールバックURLは、上記該当コードの定数で定義しているhttps://cat.newstyleservice.net/callback
  • 環境変数が読み込まれているか確認
    • 上記該当コードには記載していません。
    • twitter api のカスタマーキーとカスタマーシークレットキーを読み込んでいます。
    • anacondaパッケージを使用

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

ホワイトリストに「 https://cat.newstyleservice.net/callback 」を設定したのならそれで
https://cat.newstyleservice.net/callback 」にHTTPリクエストを投げたら
「起動しているGoのechoサーバー」に到達するように設定しなければ動かないと思います。
localhostで試すのならホワイトリストに「 http://localhost:3022/callback 」を設定する必要がありそうです。
(ただしAPIサービスによってはlocalhostを使わせてくれないものがあったりします)

投稿2022/10/20 13:38

編集2022/10/20 13:38
nobonobo

総合スコア3259

renren😄を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

haru_ren

2022/10/20 22:27

ありがとうございます!解決できました!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。