Install
openclaw skills install 6551-twitter-to-binance-squareAuto-mirror Twitter/X content to Binance Square. Monitors specified Twitter accounts or topics, fetches new tweets, transforms content, and posts to Binance Square automatically. Auto-run on messages like 'mirror twitter to binance square', 'auto post from twitter', 'start twitter mirror'.
openclaw skills install 6551-twitter-to-binance-squareAutomatically 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...xyz9