Twitter에서 도달 범위 최적화: Python과 API v2를 사용한 280자 자동 포맷팅
Source: Dev.to

서론
Twitter (X)는 트윗을 280자로 제한합니다 – 이를 초과하면 게시가 차단됩니다. Senior DevOps Engineer로서 텍스트를 수동으로 자르는 데 시간을 낭비했습니다. Python + Tweepy v2로 자동화를 만들었으며, 이 자동화는 이모지, URL, 공백을 포함해 문자를 정확히 계산하고 최적화된 내용을 게시합니다. 불필요한 말은 없고, 순수 엔지니어링입니다12.
정밀한 문자 수 계산: Unicode‑aware string handling
Twitter는 문자, 바이트가 아니라를 셉니다. Emoji는 2‑4 문자를 차지하고, URL은 23 문자로 단축됩니다. 기본 len()은 부정확합니다.
import unicodedata
import re
def twitter_char_count(text: str) -> int:
"""Precyzyjne liczenie pod Twitter API v2. Obsługuje emoji, URL‑e, spacje."""
# Normalizuj Unicode (NFC)
text = unicodedata.normalize('NFC', text)
# Skróć URL‑e do 23 znaków (Twitter standard)
url_pattern = r'https?://[^\s<>"{}|\\^`\[\]]*'
def shorten_url(match):
return 'https://t.co/abc123' # 23 chars
text = re.sub(url_pattern, shorten_url, text)
# Liczenie: każdy grapheme cluster = 1 znak
char_count = 0
i = 0
while i str:
"""Skraca tekst pod limit, zachowując kluczowe słowa."""
if twitter_char_count(long_text) max_chars:
sentences = clean_text.split('. ')
if len(sentences) > 1:
clean_text = '. '.join(sentences[:-1])
else:
# Fallback: truncate + [...]
clean_text = clean_text[:max_chars - 10] + '...'
break
return clean_text.strip() + ' ' + ' '.join(hashtags[-3:])
def post_optimized(self, text: str) -> str:
"""Publikuje zoptymalizowany tweet."""
optimized = self.optimize_tweet(text)
print(f"Original: {twitter_char_count(text)} chars")
print(f"Optimized: {twitter_char_count(optimized)} chars")
response = self.client.create_tweet(text=optimized)
return response.data['id']
Rate limits: wait_on_rate_limit=True – 수동 스로틀링이 전혀 없습니다3.
고급 자동화: 스레딩 + Cloudflare Workers
>280자에 대해 → 자동 스레드. 보너스: IP 회전을 위한 Cloudflare Workers 프록시.
def create_thread(self, long_content: List[str]) -> List[str]:
"""Tworzy wątek z długiej treści."""
thread_ids = []
first_tweet = True
for chunk in long_content:
optimized = self.optimize_tweet(chunk)
if first_tweet:
response = self.client.create_tweet(text=optimized)
thread_ids.append(response.data['id'])
first_tweet = False
reply_to = response.data['id']
else:
response = self.client.create_tweet(
text=optimized,
in_reply_to_tweet_id=reply_to
)
thread_ids.append(response.data['id'])
reply_to = response.data['id']
return thread_ids
Bash 배포 to Cloudflare Workers (API 호출용 프록시)
# wrangler.toml
name = "twitter-proxy"
main = "src/index.js"
compatibility_date = "2025-01-07"
# Deploy:
wrangler deploy
경험: 최적화 + 스레딩 후 참여도 17 % 증가2. Cloudflare Workers는 속도 제한을 우회합니다 (익명 IP).
결론
- 정확한 문자 수 계산은 Twitter API v2 작업에 필수적입니다.
- 자동 축약 및 핵심 해시태그 유지가 게시 효율성을 크게 높입니다.
- 스레딩 및 프록시(예: Cloudflare Workers)를 사용하면 길이 제한 및 속도 제한을 우회하여 도달 범위와 참여도를 확대할 수 있습니다.
Przypisy
g win
정밀한 문자 수 계산 + Tweepy v2 = 거부된 트윗이 전혀 없음. 스레딩 및 Cloudflare를 통한 확장성.
반항적인 팁
wait_on_rate_limit=True를 사용하세요 – 트위터는 공격적인 봇을 좋아하지 않습니다. 코드를 GitHub에 올리고, Workers에 배포하고, 잊어버리세요.
출처
- [1] Tweepy + Twitter API v2 tutorial
- [2] Twitter API v2 rate limits 및 페이지네이션
- [6] 예시
tweepy.Client페이지네이션 포함
Footnotes
-
문자를 수동으로 계산한 저의 직접적인 경험. ↩
-
Tweepy v2 문서 – https://docs.tweepy.org/en/stable/ ↩
