V2EX 的帖子详情接口

58 min read

V2EX 的帖子详情接口可以通过以下 URL 进行请求:

https://www.v2ex.com/api/topics/show.json?id={id}

其中,{id} 是帖子的 ID,可以通过浏览器访问帖子页面时 URL 中的 ID 获得。

该接口返回的是 JSON 格式的数据,包含了帖子的详细信息,例如标题、内容、创建时间、回复数、节点名称等。以下是一个示例 JSON 数据:

{
    "id": 123456,
    "title": "这是一个示例帖子标题",
    "url": "https://www.v2ex.com/t/123456",
    "content": "这是一个示例帖子内容",
    "content_rendered": "<p>这是一个示例帖子内容</p>",
    "replies": 10,
    "created": 1614995656,
    "last_modified": 1614995656,
    "member": {
        "id": 123456,
        "username": "example",
        "avatar_mini": "//cdn.v2ex.com/avatar/123456.png?s=24&d=retro",
        "avatar_normal": "//cdn.v2ex.com/avatar/123456.png?s=48&d=retro",
        "avatar_large": "//cdn.v2ex.com/avatar/123456.png?s=73&d=retro"
    },
    "node": {
        "id": 123,
        "name": "example",
        "title": "示例节点",
        "title_alternative": "Example Node",
        "url": "https://www.v2ex.com/go/example",
        "topics": 1234,
        "avatar_mini": "//cdn.v2ex.com/navatar/123456.png?s=24&d=retro",
        "avatar_normal": "//cdn.v2ex.com/navatar/123456.png?s=48&d=retro",
        "avatar_large": "//cdn.v2ex.com/navatar/123456.png?s=73&d=retro"
    }
}

您可以使用 Go 的标准库中的 net/httpencoding/json 包发起 HTTP 请求,并解析返回的 JSON 数据。以下是一个示例代码:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Topic struct {
    ID              int    `json:"id"`
    Title           string `json:"title"`
    URL             string `json:"url"`
    Content         string `json:"content"`
    ContentRendered string `json:"content_rendered"`
    Replies         int    `json:"replies"`
    Created         int64  `json:"created"`
    LastModified    int64  `json:"last_modified"`
    Member          struct {
        ID           int    `json:"id"`
        Username     string `json:"username"`
        AvatarMini   string `json:"avatar_mini"`
        AvatarNormal string `json:"avatar_normal"`
        AvatarLarge  string `json:"avatar_large"`
    } `json:"member"`
    Node struct {
        ID                 int    `json:"id"`
        Name               string `json:"name"`
        Title              string `json:"title"`
        TitleAlternative   string `json:"title_alternative"`
        URL                string `json:"url"`
        Topics             int    `json:"topics"`
        AvatarMini         string `json:"avatar_mini"`
        AvatarNormal       string `json:"avatar_normal"`
        AvatarLarge        string `json:"avatar_large"`
        Header             string `json:"header"`
        Footer             string `json:"footer"`
        Created            int64  `json:"created"`
        LastModified       int64  `json:"last_modified"`
        Stars              int    `json:"stars"`
        Members            int    `json:"members"`
        OnlineMembers      int    `json:"online_members"`
        Description        string `json:"description"`
        DescriptionRendered string `json:"description_rendered"`
    } `json:"node"`
}

func main() {
    id := 123456 // 帖子的 ID
    url := fmt.Sprintf("https://www.v2ex.com/api/topics/show.json?id=%d", id)

    resp, err := http.Get(url)
    if err != nil {
        // 处理错误
    }
    defer resp.Body.Close()

    var topic Topic
    err = json.NewDecoder(resp.Body).Decode(&topic)
    if err != nil {
        // 处理错误
    }

    // 打印帖子的标题和内容
    fmt.Println(topic.Title)
    fmt.Println(topic.Content)
}