โ† Back to Browser & Automation
Browser & Automation by @zizi-cat

spool

Threads CLI - Read, post, reply, and search on Meta's Threads using OpenClaw

0
Source Code

spool

OpenClaw browser ๋„๊ตฌ๋กœ Threads (threads.net) ์กฐ์ž‘ํ•˜๊ธฐ.

Prerequisites

ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ

  • OpenClaw with browser tool enabled
  • openclaw browser profile
  • Threads ๊ณ„์ • ๋กœ๊ทธ์ธ ์™„๋ฃŒ

Headless ์„œ๋ฒ„์ธ ๊ฒฝ์šฐ (GUI ์—†์Œ)

Xvfb ๊ฐ€์ƒ ๋””์Šคํ”Œ๋ ˆ์ด ํ•„์š”:

# 1. Xvfb ์„ค์น˜ ๋ฐ ์„œ๋น„์Šค ๋“ฑ๋ก
sudo apt install -y xvfb
sudo tee /etc/systemd/system/xvfb.service << 'EOF'
[Unit]
Description=X Virtual Frame Buffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/Xvfb :99 -screen 0 1920x1080x24
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now xvfb

# 2. OpenClaw Gateway์— DISPLAY ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
echo -e '[Service]\nEnvironment=DISPLAY=:99' > ~/.config/systemd/user/openclaw-gateway.service.d/display.conf
systemctl --user daemon-reload
systemctl --user restart openclaw-gateway

๋กœ๊ทธ์ธ (์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ)

browser action=start profile=openclaw
browser action=open profile=openclaw targetUrl="https://www.threads.net/login"
# ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์š”์ฒญ

์‚ฌ์šฉ๋ฒ•

1. ํƒ€์ž„๋ผ์ธ ์ฝ๊ธฐ

browser action=open profile=openclaw targetUrl="https://www.threads.net"
browser action=snapshot profile=openclaw compact=true

๊ฒฐ๊ณผ์—์„œ ๊ฐ ๊ฒŒ์‹œ๋ฌผ์˜ ์ž‘์„ฑ์ž, ๋‚ด์šฉ, ์ข‹์•„์š”/๋Œ“๊ธ€ ์ˆ˜ ํ™•์ธ ๊ฐ€๋Šฅ.

2. ํฌ์ŠคํŒ… (์ „์ฒด ํ”Œ๋กœ์šฐ)

Step 1: ํ™ˆ์œผ๋กœ ์ด๋™

browser action=open profile=openclaw targetUrl="https://www.threads.net"
browser action=snapshot profile=openclaw compact=true

Step 2: "What's new?" ๋ฒ„ํŠผ ์ฐพ์•„์„œ ํด๋ฆญ snapshot์—์„œ "What's new?" ๋˜๋Š” "Empty text field" ํฌํ•จ๋œ button์˜ ref ์ฐพ๊ธฐ

browser action=act profile=openclaw request={"kind":"click","ref":"e14"}

(ref๋Š” snapshot๋งˆ๋‹ค ๋‹ค๋ฆ„! ๋ฐ˜๋“œ์‹œ snapshot์—์„œ ํ™•์ธ)

Step 3: ๋‹ค์ด์–ผ๋กœ๊ทธ์—์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ

browser action=snapshot profile=openclaw compact=true

textbox ref ์ฐพ์•„์„œ:

browser action=act profile=openclaw request={"kind":"type","ref":"e14","text":"ํฌ์ŠคํŒ… ๋‚ด์šฉ"}

Step 4: Post ๋ฒ„ํŠผ ํด๋ฆญ

browser action=act profile=openclaw request={"kind":"click","ref":"e22"}

(Post ๋ฒ„ํŠผ ref๋„ snapshot์—์„œ ํ™•์ธ)

Step 5: ํ™•์ธ

browser action=snapshot profile=openclaw compact=true

โ†’ "Posted" ํ…์ŠคํŠธ์™€ "View" ๋งํฌ๊ฐ€ ๋ณด์ด๋ฉด ์„ฑ๊ณต!

3. ํ”„๋กœํ•„ ๋ณด๊ธฐ

browser action=open profile=openclaw targetUrl="https://www.threads.net/@username"
browser action=snapshot profile=openclaw compact=true

4. ๊ฒ€์ƒ‰

browser action=open profile=openclaw targetUrl="https://www.threads.net/search?q=๊ฒ€์ƒ‰์–ด"
browser action=snapshot profile=openclaw compact=true

5. ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ

# ๊ฒŒ์‹œ๋ฌผ ์—ด๊ธฐ
browser action=open profile=openclaw targetUrl="https://www.threads.net/@user/post/POSTID"
browser action=snapshot profile=openclaw compact=true

# Reply ๋ฒ„ํŠผ ํด๋ฆญ (ref ํ™•์ธ ํ›„)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-ref>"}

# ํ…์ŠคํŠธ ์ž…๋ ฅ ๋ฐ ๊ฒŒ์‹œ (ํฌ์ŠคํŒ…๊ณผ ๋™์ผ)

ํ•ต์‹ฌ ํฌ์ธํŠธ

  1. snapshot ๋จผ์ €! - ๋ชจ๋“  ์ž‘์—… ์ „์— snapshot์œผ๋กœ ํ˜„์žฌ ํŽ˜์ด์ง€ ์ƒํƒœ์™€ ref ํ™•์ธ
  2. ref๋Š” ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง - snapshot ๊ฒฐ๊ณผ์—์„œ ํ•ญ์ƒ ์ƒˆ๋กœ ์ฐพ๊ธฐ
  3. compact=true - ํ† ํฐ ์ ˆ์•ฝ์„ ์œ„ํ•ด ํ•ญ์ƒ ์‚ฌ์šฉ
  4. targetId ์œ ์ง€ - ๊ฐ™์€ ํƒญ์—์„œ ์ž‘์—…ํ•˜๋ ค๋ฉด targetId ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ
  5. ํฌ์ŠคํŒ… ์ „ ํ™•์ธ - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚ด์šฉ ํ™•์ธ๋ฐ›๊ณ  ํฌ์ŠคํŒ…

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋ฌธ์ œ ํ•ด๊ฒฐ
browser ๋„๊ตฌ ์•ˆ ๋จ Xvfb ์‹คํ–‰ ํ™•์ธ, DISPLAY=:99 ์„ค์ • ํ™•์ธ, Gateway ์žฌ์‹œ์ž‘
๋กœ๊ทธ์ธ ์•ˆ ๋จ /login ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ›„ ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์š”์ฒญ
ref ๋ชป ์ฐพ์Œ snapshot ๋‹ค์‹œ ์ฐ๊ณ  ๋น„์Šทํ•œ ํ…์ŠคํŠธ/๋ฒ„ํŠผ ์ฐพ๊ธฐ
ํฌ์ŠคํŒ… ์•ˆ ๋จ Post ๋ฒ„ํŠผ์ด disabled์ธ์ง€ ํ™•์ธ (ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„์š”)