Install
openclaw skills install v2exV2EX API 2.0 integration for accessing V2EX forum data, notifications, topics, nodes, and member profiles
openclaw skills install v2exThis skill provides integration with V2EX API 2.0 Beta, allowing you to access V2EX forum functionality including notifications, topics, nodes, and member information.
V2EX API 2.0 requires a Personal Access Token for authentication.
Authorization: Bearer <your-token>https://www.v2ex.com/api/v2/
GET /notifications
Optional parameters:
p - Page number (default: 1)Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/notifications?p=1"
DELETE /notifications/:notification_id
Example:
curl -X DELETE \
-H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/notifications/123456"
GET /member
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/member"
GET /token
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/token"
GET /nodes/:node_name
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/nodes/programmer"
GET /nodes/:node_name/topics
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/nodes/programmer/topics"
GET https://www.v2ex.com/api/topics/hot.json
Returns the currently trending topics across all nodes. No authentication required.
Example:
curl -s "https://www.v2ex.com/api/topics/hot.json"
GET https://www.v2ex.com/api/topics/latest.json
Returns the most recent topics across all nodes. No authentication required.
Example:
curl -s "https://www.v2ex.com/api/topics/latest.json"
GET /topics/:topic_id
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/topics/12345"
GET /topics/:topic_id/replies
Example:
curl -H "Authorization: Bearer <token>" \
"https://www.v2ex.com/api/v2/topics/12345/replies"
Default rate limit: 600 requests per hour per IP
Rate limit headers in responses:
X-Rate-Limit-Limit - Total allowed requestsX-Rate-Limit-Reset - Unix timestamp when limit resetsX-Rate-Limit-Remaining - Remaining requests in current windowNote: CDN-cached requests only consume rate limit on the first request.
GET /notifications to fetch latest notificationsGET /api/topics/hot.json to get trending topics (no token required)GET /nodes/:node_name/topics to get topicsGET /topics/:topic_idGET /topics/:topic_id/repliesGET /topics/:topic_id for updatesGET /topics/:topic_id/replies for new commentsAll API responses are in JSON format. Common fields include:
success - Boolean indicating request successmessage - Error message if request failedCommon HTTP status codes:
200 - Success401 - Unauthorized (invalid or missing token)403 - Forbidden (insufficient permissions)404 - Not found429 - Rate limit exceeded500 - Server errorimport os
import requests
class V2EXClient:
BASE_URL = "https://www.v2ex.com/api/v2"
def __init__(self, token=None):
self.token = token or os.environ.get('V2EX_TOKEN')
if not self.token:
raise ValueError("V2EX token is required")
self.headers = {
"Authorization": f"Bearer {self.token}"
}
def get_notifications(self, page=1):
"""Get latest notifications"""
response = requests.get(
f"{self.BASE_URL}/notifications",
headers=self.headers,
params={"p": page}
)
response.raise_for_status()
return response.json()
def delete_notification(self, notification_id):
"""Delete a specific notification"""
response = requests.delete(
f"{self.BASE_URL}/notifications/{notification_id}",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_member(self):
"""Get current member profile"""
response = requests.get(
f"{self.BASE_URL}/member",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_node(self, node_name):
"""Get node information"""
response = requests.get(
f"{self.BASE_URL}/nodes/{node_name}",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_node_topics(self, node_name):
"""Get topics in a node"""
response = requests.get(
f"{self.BASE_URL}/nodes/{node_name}/topics",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_topic(self, topic_id):
"""Get topic details"""
response = requests.get(
f"{self.BASE_URL}/topics/{topic_id}",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_topic_replies(self, topic_id):
"""Get replies for a topic"""
response = requests.get(
f"{self.BASE_URL}/topics/{topic_id}/replies",
headers=self.headers
)
response.raise_for_status()
return response.json()
def get_hot_topics(self):
"""Get trending topics across all nodes (classic API, no token required)"""
response = requests.get("https://www.v2ex.com/api/topics/hot.json")
response.raise_for_status()
return response.json()
def get_latest_topics(self):
"""Get latest topics across all nodes (classic API, no token required)"""
response = requests.get("https://www.v2ex.com/api/topics/latest.json")
response.raise_for_status()
return response.json()
# Usage example
if __name__ == "__main__":
client = V2EXClient()
# Get notifications
notifications = client.get_notifications()
print(f"You have {len(notifications.get('result', []))} notifications")
# Get member profile
member = client.get_member()
print(f"Hello, {member.get('result', {}).get('username')}!")
# Get node info
node = client.get_node("python")
print(f"Node: {node.get('result', {}).get('title')}")
# Get topics from a node
topics = client.get_node_topics("python")
for topic in topics.get('result', []):
print(f"- {topic.get('title')}")
# Get hot topics (no token required)
hot_topics = client.get_hot_topics()
print("\n🔥 Hot Topics:")
for topic in hot_topics[:5]:
print(f"- [{topic['node']['title']}] {topic['title']} ({topic['replies']} replies)")
You can use VS Code's REST Client extension to test the API:
### Get hot topics (classic API, no auth required)
GET https://www.v2ex.com/api/topics/hot.json
### Get latest topics (classic API, no auth required)
GET https://www.v2ex.com/api/topics/latest.json
### Get notifications
GET https://www.v2ex.com/api/v2/notifications
Authorization: Bearer <your-token>
### Get member profile
GET https://www.v2ex.com/api/v2/member
Authorization: Bearer <your-token>
### Get node info
GET https://www.v2ex.com/api/v2/nodes/programmer
Authorization: Bearer <your-token>
### Get topic
GET https://www.v2ex.com/api/v2/topics/12345
Authorization: Bearer <your-token>