- **Upstream typos: `destory` (not `destroy`)** — `unbookmarkPost` POSTs to `/ajax/statuses/destoryFavorites` and `unfollowUser` POSTs to `/ajax/friendships/destory`. Both spellings are wrong (Weibo's typo); using the "correct" `destroy` returns HTML 404. Param name is also asymmetric — followUser takes `friend_uid`, unfollowUser takes `uid`.
Resources
7Install
npx skillscat add imoonkey/openweb/src-sites-weibo Install via the SkillsCat registry.
Here's a thinking process: 1. **Analyze the Request:** - **Goal:** Write a 2-3 sentence plain-text summary in English - **Subject:** An AI agent skill for a public software directory (related to Weibo/microblogging) - **Content to cover:** What it does, what problem it solves, when to use it - **Constraints:** - Objective, factual tone only - No marketing language, superlatives, calls to action - Natural prose, no bullet points, no headings, no markdown - No quotes wrapping - At most 60 words - **Output:** ONLY the summary text 2.
Overview
Chinese microblogging platform (social media). China's Twitter/X equivalent with trending topics, user timelines, post detail/comments, and write operations (like, repost, follow, bookmark).
Workflows
Browse trending and read a post
getHotSearch→realtime[].wordgetHotFeed(group_id, containerid, extparam)→statuses[].mid,statuses[].user.idgetPost(id=mid)→ full post with text, images, engagement
Explore a user's profile and posts
getUserProfile(uid)→screen_name, bio,followers_count, verificationgetUserDetail(uid)→ birthday,ip_location,created_atgetUserStatuses(uid, page)→list[].mid,list[].user.idgetPost(id=mid)→ full post detail
Read home feed and interact (verified write ops, paired)
getHotFeed(group_id, containerid, extparam)→ pick post →statuses[].mid(numeric long),statuses[].user.idlikePost(id ← statuses[].mid)→ok,attitudeunlikePost(id ← statuses[].mid)→ok(reverses likePost)bookmarkPost(id ← statuses[].mid)→ok,favorited_timeunbookmarkPost(id ← statuses[].mid)→ok(reverses bookmarkPost; note upstream typodestory)repost(id ← statuses[].mid, reason)→ok,statuses(publish a quote-repost)
midformat matters. Write ops require the numeric long-integermid
(e.g.5289345339621625) from feed responses, not the alphanumericmblogid(e.g.Qyj0ifs0m) used bygetPost. setLike/destoryFavorites accept
only the long integer.
Follow / unfollow a user from a post
getPost(id)or feed →user.idfollowUser(friend_uid ← user.id)→ returns target user objectunfollowUser(uid ← user.id)→ reverses followUser (note: param isuid, notfriend_uid; endpoint typodestory)
Operations
| Operation | Intent | Key Input | Key Output | Notes |
|---|---|---|---|---|
| getFriendsFeed | home feed | list_id | statuses[].mid, user.id, since_id | entry point; paginate via since_id |
| getHotFeed | trending feed | group_id, containerid, extparam | statuses[].mid, user.id, total_number | entry point; 102803 = default hot |
| getHotSearch | trending topics | — | realtime[].word, num, icon_desc | entry point; top 50 |
| getUserProfile | user profile | uid | user.screen_name, followers_count, verified | entry point (with known uid) |
| getUserDetail | user extended info | uid ← getUserProfile | ip_location, created_at, birthday | |
| getUserStatuses | user's posts | uid ← getUserProfile, page | list[].mid, user.id, total | page-based pagination |
| getPost | post detail | id ← feed/statuses mid | text_raw, reposts_count, comments_count, attitudes_count, user.id, pic_infos | |
| getLongtext | full text for truncated post | id ← getPost (when isLongText=true) | longTextContent, longTextContent_raw | |
| listReposts | post reposts | id ← getPost id (numeric) | data[], total_number | page-based |
| likePost | like a post | id ← feed/getPost mid (numeric long) | ok, attitude | SAFE: reversible via unlikePost |
| repost | repost/retweet | id ← feed mid, reason | ok, statuses | SAFE: reversible via deletePost (not exposed) |
| followUser | follow a user | friend_uid ← user.id | id, screen_name, ok | SAFE: reversible via unfollowUser |
| bookmarkPost | bookmark a post | id ← feed mid | status (post obj) | SAFE: reversible via unbookmarkPost |
| unlikePost | unlike a post | id ← feed mid | ok | CAUTION: reverses likePost |
| unfollowUser | unfollow a user | uid ← user.id | id, screen_name, ok | CAUTION: param is uid not friend_uid; endpoint typo /friendships/destory |
| unbookmarkPost | remove bookmark | id ← feed mid | status (post obj, favorited:false) | CAUTION: endpoint typo /statuses/destoryFavorites |
Quick Start
# Get trending topics
openweb weibo exec getHotSearch '{}'
# Get home feed
openweb weibo exec getFriendsFeed '{"list_id": "my_follow_all", "count": 25}'
# Get hot/trending feed
openweb weibo exec getHotFeed '{"group_id": 102803, "containerid": 102803, "count": 10, "extparam": "discover|new_feed"}'
# Get a user's profile
openweb weibo exec getUserProfile '{"uid": 1918530507}'
# Get a user's posts
openweb weibo exec getUserStatuses '{"uid": 1706699904, "page": 1}'
# Get a specific post
openweb weibo exec getPost '{"id": "Qyj0ifs0m"}'
# Get reposts of a post
openweb weibo exec listReposts '{"id": 5281762063682574, "page": 1, "count": 10}'
# Like / unlike a post (numeric long mid, not mblogid)
openweb weibo exec likePost '{"id": "5289345339621625"}'
openweb weibo exec unlikePost '{"id": "5289345339621625"}'
# Bookmark / unbookmark (note "destory" typo on the unbookmark endpoint)
openweb weibo exec bookmarkPost '{"id": "5288272024575643"}'
openweb weibo exec unbookmarkPost '{"id": "5288272024575643"}'
# Follow / unfollow (note: unfollow uses `uid`, follow uses `friend_uid`)
openweb weibo exec followUser '{"friend_uid": "6859786766"}'
openweb weibo exec unfollowUser '{"uid": "6859786766"}'
# Quote-repost
openweb weibo exec repost '{"id": "5289345339621625", "reason": "interesting"}'Known Limitations
- Login required — every op needs a logged-in
weibo.combrowser tab (SUB cookie). - Numeric long
midfor write ops — likePost/unlikePost/bookmarkPost/unbookmarkPost/repost reject the alphanumericmblogid. Readmidfrom feed responses (getFriendsFeed.statuses[].mid,getHotFeed.statuses[].mid), not fromgetPost. - Upstream typos:
destory(notdestroy) —unbookmarkPostPOSTs to/ajax/statuses/destoryFavoritesandunfollowUserPOSTs to/ajax/friendships/destory. Both spellings are wrong (Weibo's typo); using the "correct"destroyreturns HTML 404. Param name is also asymmetric — followUser takesfriend_uid, unfollowUser takesuid.