Auto-mirror Twitter/X content to Binance Square. Monitors specified Twitter accounts or topics, fetches new tweets, transforms content, and posts to Binance...
Automatically fetch tweets from specified Twitter accounts or keyword searches, transform the content for Binance Square, and post them. Designed for building automation pipelines with configurable polling intervals and deduplication.
| Item | Description | How to get |
|---|---|---|
TWITTER_TOKEN | 6551 API Bearer token | 访问 https://6551.io/mcp 注册获取 |
SQUARE_API_KEY | Binance Square OpenAPI Key | 登录币安 → 访问 创作者中心 → 页面右侧「查看 API」申请 |
┌─────────────────────────────────────────────┐
│ 1. FETCH: Get tweets from Twitter/X │
│ - By account: monitor specific users │
│ - By topic: keyword/hashtag search │
├─────────────────────────────────────────────┤
│ 2. FILTER: Deduplicate & quality check │
│ - Skip already-posted tweet IDs │
│ - Skip retweets / replies (optional) │
│ - Min engagement threshold (optional) │
├─────────────────────────────────────────────┤
│ 3. TRANSFORM: Adapt content for Square │
│ - Add source attribution │
│ - Translate if needed │
│ - Add relevant #hashtags │
│ - Trim to Square length limits │
├─────────────────────────────────────────────┤
│ 4. POST: Publish to Binance Square │
│ - Call Square API │
│ - Record posted tweet ID │
│ - Log post URL │
├─────────────────────────────────────────────┤
│ 5. WAIT: Sleep for configured interval │
│ - Default: 300 seconds (5 minutes) │
│ - Respect daily post limits │
└─────────────────────────────────────────────┘
curl -s -X POST "https://ai.6551.io/open/twitter_user_tweets" \
-H "Authorization: Bearer $TWITTER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"username": "TARGET_USERNAME",
"maxResults": 10,
"product": "Latest",
"includeReplies": false,
"includeRetweets": false
}'
curl -s -X POST "https://ai.6551.io/open/twitter_search" \
-H "Authorization: Bearer $TWITTER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keywords": "TOPIC_KEYWORDS",
"minLikes": 50,
"product": "Top",
"maxResults": 10,
"lang": "en"
}'
curl -s -X POST "https://ai.6551.io/open/twitter_search" \
-H "Authorization: Bearer $TWITTER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hashtag": "bitcoin",
"minLikes": 100,
"product": "Top",
"maxResults": 10
}'
curl -s -X POST "https://www.binance.com/bapi/composite/v1/public/pgc/openApi/content/add" \
-H "X-Square-OpenAPI-Key: $SQUARE_API_KEY" \
-H "Content-Type: application/json" \
-H "clienttype: binanceSkill" \
-d '{
"bodyTextOnly": "TRANSFORMED_CONTENT"
}'
When transforming a tweet for Binance Square, apply the following rules:
{transformed_content}
Source: @{username} on X ← optional (show_source=true)
Publish by using 6551 twitter mirror tool ← default enabled (show_tool_attribution=true)
{#hashtag1} {#hashtag2} {#hashtag3}
Publish by using 6551 twitter mirror tool — controlled by show_tool_attribution (default: true)Source: @username on X — controlled by show_source (default: true)translate is enabled, translate to the target language while preserving technical termsOriginal Tweet by @VitalikButerin:
Excited about the new EIP-4844 progress. Proto-danksharding will reduce L2 fees by 10-100x.
This is huge for Ethereum scalability. https://t.co/xxx
Transformed for Binance Square (show_source=true, show_tool_attribution=true):
Vitalik Buterin 对 EIP-4844 的最新进展感到兴奋。Proto-danksharding 将把 L2 费用降低 10-100 倍,这对以太坊的可扩展性意义重大。
Source: @VitalikButerin on X
Publish by using 6551 twitter mirror tool
#Ethereum #EIP4844 #L2 #Crypto
Transformed for Binance Square (show_source=false, show_tool_attribution=true):
Vitalik Buterin 对 EIP-4844 的最新进展感到兴奋。Proto-danksharding 将把 L2 费用降低 10-100 倍,这对以太坊的可扩展性意义重大。
Publish by using 6551 twitter mirror tool
#Ethereum #EIP4844 #L2 #Crypto
The automation script uses a JSON config file (see mirror_config.example.json):
{
"mode": "account",
"accounts": ["VitalikButerin", "cabornedefi"],
"keywords": "",
"hashtag": "",
"poll_interval_seconds": 300,
"min_likes": 0,
"min_retweets": 0,
"max_posts_per_run": 5,
"include_replies": false,
"include_retweets": false,
"translate": false,
"translate_to": "zh",
"content_template": "{content}\n\n{source_attribution}\n{tool_attribution}\n{hashtags}",
"show_source": true,
"show_tool_attribution": true,
"add_hashtags": ["Crypto", "Web3"],
"state_file": "mirror_state.json",
"dry_run": false
}
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | "account" | "account" = monitor users, "search" = keyword search, "hashtag" = hashtag search |
accounts | string[] | [] | Twitter usernames to monitor (mode=account) |
keywords | string | "" | Search keywords (mode=search) |
hashtag | string | "" | Hashtag to monitor (mode=hashtag) |
poll_interval_seconds | int | 300 | Seconds between each polling cycle |
min_likes | int | 0 | Minimum likes to qualify for mirroring |
min_retweets | int | 0 | Minimum retweets to qualify |
max_posts_per_run | int | 5 | Max posts per polling cycle |
include_replies | bool | false | Include reply tweets |
include_retweets | bool | false | Include retweets |
translate | bool | false | Translate content before posting |
translate_to | string | "zh" | Target language for translation |
content_template | string | see above | Template for Square post content |
show_source | bool | true | Show Source: @username on X attribution |
show_tool_attribution | bool | true | Show Publish by using 6551 twitter mirror tool |
add_hashtags | string[] | [] | Extra hashtags to append |
state_file | string | "mirror_state.json" | File to track posted tweet IDs |
dry_run | bool | false | If true, print content but don't post |
The script maintains a mirror_state.json to track posted tweets:
{
"posted_tweet_ids": ["1234567890", "1234567891"],
"last_poll_time": "2026-03-07T10:00:00Z",
"post_count_today": 5,
"last_reset_date": "2026-03-07",
"post_log": [
{
"tweet_id": "1234567890",
"square_post_id": "298177291743282",
"square_url": "https://www.binance.com/square/post/298177291743282",
"username": "VitalikButerin",
"posted_at": "2026-03-07T10:05:00Z"
}
]
}
| Scenario | Action |
|---|---|
| Twitter API fails | Log error, retry next cycle |
| Square API returns 20002/20022 (sensitive words) | Log & skip this tweet, continue |
| Square API returns 220009 (daily limit, max 100 posts/day) | Stop posting, wait until next day |
| Square API returns 220004 (key expired) | Stop and alert user |
| Tweet already posted (duplicate ID) | Skip silently |
| Network error | Retry with exponential backoff (max 3 retries) |
TWITTER_TOKEN and SQUARE_API_KEY exist before startingpython3 scripts/auto_mirror.pyUser: Mirror VitalikButerin's tweets to my Binance Square
Agent: I'll set up auto-mirroring for @VitalikButerin → Binance Square.
Config:
- Mode: account
- Account: VitalikButerin
- Poll interval: 5 minutes
- Translate: No
Let me fetch the latest tweets first to preview...
[Fetches and shows latest tweet]
Here's how the first post would look on Binance Square:
---
Excited about the new EIP-4844 progress...
Source: @VitalikButerin on X
Publish by using 6551 twitter mirror tool
#Ethereum #Crypto
---
Shall I start the auto-mirror with these settings?
User: Auto-post trending Bitcoin tweets to Binance Square, minimum 500 likes
Agent: I'll monitor Twitter for popular Bitcoin tweets and mirror them to Binance Square.
Config:
- Mode: search
- Keywords: "bitcoin"
- Min likes: 500
- Poll interval: 10 minutes
Starting monitor...
# Set environment variables
export TWITTER_TOKEN="your_6551_token"
export SQUARE_API_KEY="your_square_key"
# Run with config file
python3 scripts/auto_mirror.py --config mirror_config.json
# Run with CLI args
python3 scripts/auto_mirror.py \
--mode account \
--accounts VitalikButerin,elonmusk \
--interval 300 \
--translate \
--translate-to zh
abc12...xyz9ZIP package — ready to use