→ חזרה לספרייה
🔖

X Bookmarks Fetcher

הורידו את ה-bookmarks שלכם מ-X (טוויטר) דרך ה-API הרשמי — טקסט, תמונות, סרטונים

📡 API רשמי, לא scraping

הסקיל משתמש בנקודת הקצה GET /2/users/:id/bookmarks של X API v2. אין session של Chrome, אין כלים של צד שלישי, אין סיכון להפרה של תנאי השימוש. אישור חד-פעמי בדפדפן (OAuth 2.0), ומכאן והלאה הכל דרך API עם refresh token שמתחדש אוטומטית.

🎯 מה הסקיל עושה?

שואב את ה-bookmarks האחרונים שלכם מ-X ושומר אותם לתיקייה מקומית:

📋 דרישות מקדימות

⚙️ הגדרה חד-פעמית (5 דקות)

1
צרו אפליקציה ב-X Developer Portal

היכנסו ל-developer.x.com/en/portal/dashboard, צרו פרויקט (אם אין) ובתוכו צרו App חדש.

2
הפעילו OAuth 2.0

בעמוד ה-App, גשו ל-User authentication settings ולחצו Set up. מלאו:

שדהערך
App permissionsRead או Read and write
Type of AppWeb App, Automated App or Bot
Callback URI / Redirect URLhttp://127.0.0.1:8765/callback
Website URLכל URL שלכם (לדוגמה הפרופיל ב-X)

שמרו. X יציג את ה-Client ID וה-Client Secret — העתיקו עכשיו (ה-secret יכול להופיע רק פעם אחת).

3
הזינו את הפרטים ב-.env
cd ~/.claude/skills/x-bookmarks-fetcher/scripts
cp .env.example .env

ערכו את .env:

X_CLIENT_ID=your-client-id
X_CLIENT_SECRET=your-client-secret
4
הרצת אימות חד-פעמי
node auth.mjs

הדפדפן ייפתח אוטומטית, תלחצו Authorize app, וה-tokens יישמרו ל-.tokens.json (chmod 600). מכאן והלאה כל קריאה מתחדשת לבדה.

🚀 שימוש

# Bookmarks מ-48 השעות האחרונות (ברירת מחדל)
node fetch.mjs

# 24 שעות אחרונות
node fetch.mjs --hours 24

# שבוע אחרון
node fetch.mjs --hours 168

# מתאריך ספציפי
node fetch.mjs --since 2026-05-19T00:00:00Z

# תיקיית פלט מותאמת
node fetch.mjs --out ~/Downloads/x-bookmarks

# בלי הורדת media (רק טקסט — מהיר)
node fetch.mjs --no-media

📁 מבנה הפלט

/tmp/x-bookmarks-YYYYMMDD/
├── bookmarks-raw.json     # תשובת API מלאה
├── index.json             # פריטים מנותחים
├── index.md               # סקירה קריאה
├── @handle_tweetid.txt    # קובץ אחד לכל bookmark
└── media/
    ├── <media_key>.jpg
    ├── <media_key>.mp4
    └── <media_key>_poster.jpg

⚙️ אפשרויות fetch.mjs

אפשרותברירת מחדלתיאור
--hours N48סינון לציוצים מ-N השעות האחרונות
--since ISOחוצץ זמן מדויק (ISO 8601). דורס את --hours
--out DIR/tmp/x-bookmarks-YYYYMMDDתיקיית פלט
--max-pages N20עצור אחרי N עמודי API (100 לעמוד)
--no-mediaoffדלג על הורדת תמונות/סרטונים

⚠️ דקדוק לסינון זמן

X API מחזיר bookmarks בסדר השמירה (החדש ראשון), אבל לא חושף את זמן השמירה עצמו — רק את created_at של הציוץ עצמו. הסינון לפי --hours חל על מתי הציוץ פורסם. אם שמרתם היום ציוץ ישן, הוא יסונן החוצה. רוב המקרים זה קירוב טוב מספיק.

🔒 אבטחה

🐞 בעיות נפוצות

"Something went wrong — you weren't able to give access to the App"

ה-Callback URL לא רשום או לא תואם בדיוק. ודאו שב-X dev portal זה בדיוק http://127.0.0.1:8765/callback (בלי slash בסוף, http ולא https).

"Unsupported Authentication" ב-fetch.mjs

ה-bookmarks endpoint דורש OAuth 2.0 User Context. ודאו ש-node auth.mjs סיים בהצלחה ושיש .tokens.json ב-scripts/. בדקו עם cat .tokens.json שהשדה scope כולל bookmark.read.

Rate limit (429)

Free tier ≈ 10 בקשות ל-15 דקות. הסקריפט קורא את x-rate-limit-reset וישן עד שהחלון נפתח.

Port 8765 תפוס

שחררו את הפורט (lsof -i :8765) או שנו את PORT בראש auth.mjs — אבל אז עדכנו גם את ה-Callback URI ב-X dev portal.

⬇️ הורדת הסקיל