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

발행: (2026년 1월 7일 오전 11:26 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Cover image for Twitter에서 도달 범위 최적화: Python과 API v2로 280자 자동 포맷팅

Karol

서론

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

  1. 문자를 수동으로 계산한 저의 직접적인 경험.

  2. 제 프로젝트의 통계 (GitHub 저장소, 2024). 2

  3. Tweepy v2 문서 – https://docs.tweepy.org/en/stable/

Back to Blog

관련 글

더 보기 »

Lyra: 명령줄 어시스턴트

나는 어시스턴트의 골격과 메인 루프를 코딩했다. 음성이나 AI 어시스턴트보다 CLI 어시스턴트를 선택한 이유는 하드웨어 제한 때문이다. 나는…