Интеграция Twitter/X API с сайтом
Twitter/X API v2 после изменения тарифной политики в 2023 году стал платным для большинства использований. Бесплатный Basic tier очень ограничен. Основные сценарии: отображение твитов аккаунта, автопостинг контента, авторизация через Twitter.
Тарифные планы X API (2025)
| Тир | Стоимость | Возможности |
|---|---|---|
| Free | $0 | 500 постов/мес, только для авторов |
| Basic | $100/мес | 10K постов чтения, 100 записей |
| Pro | $5000/мес | 1M постов чтения, 300K записей |
Для отображения твитов на сайте — достаточно Basic или встраивание через oEmbed (без API).
Встраивание без API (oEmbed)
public function embedTweet(string $tweetUrl): string
{
$resp = Http::get('https://publish.twitter.com/oembed', [
'url' => $tweetUrl,
'theme' => 'light',
'hide_thread' => 'true',
'omit_script' => 'true',
]);
return $resp->json('html');
}
Twitter API v2: публикация постов
import tweepy
client = tweepy.Client(
consumer_key=CONSUMER_KEY,
consumer_secret=CONSUMER_SECRET,
access_token=ACCESS_TOKEN,
access_token_secret=ACCESS_TOKEN_SECRET,
)
def post_tweet(text: str, media_ids: list = None) -> str:
resp = client.create_tweet(text=text, media_ids=media_ids)
return resp.data['id']
OAuth 2.0 авторизация через Twitter
Route::get('/auth/twitter/redirect', function () {
$codeVerifier = Str::random(64);
$codeChallenge = base64url_encode(hash('sha256', $codeVerifier, true));
session(['twitter_code_verifier' => $codeVerifier]);
return redirect('https://twitter.com/i/oauth2/authorize?' . http_build_query([
'response_type' => 'code',
'client_id' => config('services.twitter.client_id'),
'redirect_uri' => route('auth.twitter.callback'),
'scope' => 'tweet.read users.read offline.access',
'state' => Str::random(16),
'code_challenge' => $codeChallenge,
'code_challenge_method' => 'S256',
]));
});
Сроки
Автопостинг через API: 2–3 дня. OAuth авторизация: 2 дня.







