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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Twitter

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

Q&A

解決済

1回答

88閲覧

Laravel11 Xへの投稿がエンドポイントでエラーになる。

tkm0604

総合スコア555

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Twitter

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

0グッド

0クリップ

投稿2024/11/14 01:22

実現したいこと

Laravelからの投稿をXにも投稿したい。

Laravel11で開発しています。
abraham/twitteroauthライブラリを使用してXアカウントによるログイン機能を実装しました。

発生している問題・分からないこと

postTweet()からXへの投稿がされない。
エンドポイント指定の誤りのようなのですが、、、正しいエンドポイントがわかりません。

PHP

1 public function postTweet($title, $body) 2 { 3 // 認証情報を取得してTwitterOAuthインスタンスを作成 4 $twitter = new TwitterOAuth( 5 env('TWITTER_CLIENT_ID'), 6 env('TWITTER_CLIENT_SECRET'), 7 env('TWITTER_ACCESS_TOKEN'), 8 env('TWITTER_ACCESS_TOKEN_SECRET') 9 ); 10 11 12 $tweetContent = [ 13 "text" => $title . "\n" . $body 14 ]; 15 16 //以下のddではAbraham\TwitterOAuth\TwitterOAuth tokenなどが取得されている 17 // dd($twitter); 18 19 //以下のddでは$tweetContent(投稿の内容)が生成されている 20 // dd($tweetContent) 21 22 // Twitterに投稿 23 try { 24 $response = $twitter->post("https://api.x.com/2/tweets", $tweetContent, ['Content-Type' => 'application/json']); // v2エンドポイントを指定し、JSONリクエストに設定 25 // レスポンス内容とエラー内容を確認 26 //以下のddの結果$twitterは404 $responseはnull $twitterはnull 27 // dd($twitter->getLastHttpCode(), $response, $twitter->getLastBody()); 28 29 // レスポンスのHTTPコードを確認 30 if ($twitter->getLastHttpCode() == 200) { 31 Log::info('Twitterへの投稿に成功しました: ' . json_encode($response)); 32 return true; 33 } else { 34 Log::error('Twitterへの投稿に失敗しました: ' . json_encode($response)); 35 return false; 36 } 37 } catch (\Exception $e) { 38 // エラーが発生した場合の処理 39 Log::error('例外が発生しました: ' . $e->getMessage()); 40 return false; 41 } 42 }

postTweet関数は以下のstore関数内で実行されています

php

1public function store(Request $request) 2 { 3 $inputs = $request->validate([ 4 'title' => 'required|max:255', 5 'body' => 'required|max:1000', 6 'image' => 'image|max:1024', 7 ]); 8 $post = new Post(); 9 $post->title = $request->title; 10 $post->body = $request->body; 11 $post->user_id = auth()->user()->id; 12 if (request('image')) { 13 $original = request()->file('image')->getClientOriginalName(); 14 $name = date('Ymd_His') . '_' . $original; 15 request()->file('image')->move('storage/images', $name); 16 $post->image = $name; 17 } 18 $post->save(); 19 // Twitterに投稿 20 $tweetResult = $this->postTweet($post->title, $post->body); 21 22 23 24 // 成功・失敗メッセージを表示 25 $message = $tweetResult ? '投稿を作成し、Xへも投稿しました' : '投稿を作成しましたが、Xへの投稿に失敗しました'; 26 27 return redirect()->route('post.create')->with('message', $message); 28 } 29 30 31 32

エラーメッセージ

error

1// レスポンスのHTTPコードを確認 2Logを仕込んだ結果以下のエラーになります。 3local.ERROR: Twitterへの投稿に失敗しました: null 4 5 6以下のddの結果$twitterは404 $responseはnull $twitterはnull 7dd($twitter->getLastHttpCode(), $response, $twitter->getLastBody());

該当のソースコード

PHP

1// v2エンドポイントを指定し、JSONリクエストに設定 2$response = $twitter->post("https://api.x.com/2/tweets", $tweetContent, ['Content-Type' => 'application/json']);

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

エンドポイントが原因なのかとURLを直接指定したり、X API1.1のエンドポイントpost("statuses/update", などしてみましたが、Xへの投稿が実現されません。

補足

特になし

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下の処理の書き方が間違えていました。
$response = $twitter->post("https://api.x.com/2/tweets", $tweetContent, ['Content-Type' => 'application/json']);

以下に修正してXへ投稿できるようになりました
$response = $twitter->post('tweets', $tweetContent);

投稿2024/11/14 02:33

編集2024/11/14 03:20
tkm0604

総合スコア555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問