実現したいこと
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への投稿が実現されません。
補足
特になし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。