2.

ツイートできないにもかかわらずエラー内容が出力されない場合

編集

TwitterのAPIを使っていると、ツイートされないにも関わらずエラーが表示されない場合があります。

その場合は、ツイートの文字数制限をオーバーしている場合があります。

ツイートする前に文字数制限内に収まるよう、文字列の長さを調整しましょう。

2018/02/20現在の文字数制限は280です。

詳細:エラーが表示されない原因

Twitter API(X API)でツイート送信に失敗してもエラーが上がってこないケースには、いくつか典型的なパターンがあります。

  • 文字数制限超過 — 半角280文字/全角140文字(記事執筆時点)。超過するとサーバー側で受理されないがクライアントによってはエラーが見えない
  • 重複投稿(duplicate) — 直前と同一内容のツイートはサーバー側で拒否される
  • レートリミット超過 — HTTP 429。リトライ間隔のヘッダで分かる
  • 認証エラー — HTTP 401。アクセストークンの期限切れ/権限不足
  • POST権限なし — アプリ作成時の設定が Read のみ。 Read and Write に変更が必要
  • HTTPSの問題 — リクエスト自体がサーバーに届いていない
  • 例外を握り潰している — アプリケーション側のtry-catchで例外を捨てている

切り分け手順

1. レスポンスを必ずログに出す

// PHP TwitterOAuth ライブラリの例
$result = $connection->post("statuses/update", ["status" => $text]);
if ($connection->getLastHttpCode() != 200) {
    error_log("Twitter post failed: " . print_r($result, true));
}

2. 文字数を事前にチェック

// 簡易チェック(実際は半角全角・URL短縮を考慮要)
if (mb_strlen($text) > 280) {
    throw new Exception("Tweet too long: " . mb_strlen($text));
}

URLは t.co で短縮されるので、生のURL長さで判定すると誤判定になります。twitter-text ライブラリで正しい文字カウントが可能です。

3. 重複投稿を避ける

連続投稿時は文末にタイムスタンプを付ける等で重複扱いを回避できます。

4. APIのHTTPステータスコードを記録

ステータス意味
200成功
401認証失敗
403権限なし/重複投稿/文字超過
404エンドポイント誤り
429レートリミット
500/502/503Twitter側障害

5. アプリの権限を確認

Twitter Developer Portal でアプリ設定を開き、App permissionsRead and Write 以上になっているか確認します。変更後はアクセストークンの再発行が必要です。

注意点

  • X API の仕様変更: 2023年以降 Twitter API は X API として大幅変更。無料枠の縮小、エンドポイント名の変更あり
  • 文字数制限の細目: 日本語1文字=1カウント、URL=23カウント(t.co短縮後)、絵文字は通常2カウント
  • エラーレスポンスをそのまま握り潰さない: 必ずログ出力とアラート通知を仕込む

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. APIにアプリケーションを登録する
  2. ツイートできないにもかかわらずエラー内容が出力されない場合
  3. エラー一覧

最近更新/作成されたページ