Інтеграція 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 дня.







