golang web编程之——读取csdn最新文章

前端之家收集整理的这篇文章主要介绍了golang web编程之——读取csdn最新文章前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

利用go语言内置的各种网络包可以方便的进行web编程。本文章利用了csdn的开放API实现读取最新文章的需求。演示了go语言发起http get请求和json的umarshing特性。

原文:小宇的博客

简单的http GET请求

go语言内置了net/http包,采用http.Get能够方便的发起GET请求

package@H_403_16@ main

import@H_403_16@ (
    "fmt"@H_403_16@
    "io/IoUtil"@H_403_16@
    "log"@H_403_16@
    "net/http"@H_403_16@
)

func@H_403_16@ main() {

    resp,err := http.Get("http://api.csdn.net/blog/getnewarticlelist?client_id=????&page=1&size=10"@H_403_16@)
    if@H_403_16@ err != nil@H_403_16@ {
        log.Fatal(err)
    }
    contents,err := IoUtil.ReadAll(resp.Body)
    resp.Body.Close()
    if@H_403_16@ err != nil@H_403_16@ {
        log.Fatal(err)
    }
    fmt.Printf("%s"@H_403_16@,contents)
}

看到返回的内容为json格式。

{"page"@H_403_16@:@H_403_16@1@H_403_16@,"count"@H_403_16@:@H_403_16@12733@H_403_16@,"size"@H_403_16@:@H_403_16@10@H_403_16@,"list"@H_403_16@:@H_403_16@[{"ArticleId"@H_403_16@:@H_403_16@52963517@H_403_16@,"BlogId"@H_403_16@:@H_403_16@5022393@H_403_16@,"UserName"@H_403_16@:"u013410747"@H_403_16@@H_403_16@,"Title"@H_403_16@:"linux修改默认的编辑器"@H_403_16@@H_403_16@,"Description"@H_403_16@:"sudo select-editor 选择vim 搞定。。"@H_403_16@@H_403_16@,"PostTime"@H_403_16@:"\/Date(1477712141000)\/"@H_403_16@@H_403_16@,"UpdateTime"@H_403_16@:"\/Date(1477712177908)\/"@H_403_16@@H_403_16@,"Digg"@H_403_16@:@H_403_16@0@H_403_16@,"Bury"@H_403_16@:@H_403_16@0@H_403_16@,"ChannelId"@H_403_16@:@H_403_16@2@H_403_16@,"Type"@H_403_16@:@H_403_16@1@H_403_16@,"Status"@H_403_16@:@H_403_16@0@H_403_16@,"ViewCount"@H_403_16@:@H_403_16@0@H_403_16@,"CommentCount"@H_403_16@:@H_403_16@0@H_403_16@,"CommentAuth"@H_403_16@:@H_403_16@2@H_403_16@,"IsTop"@H_403_16@:false@H_403_16@,"Level"@H_403_16@:@H_403_16@0@H_403_16@,"OutlinkCount"@H_403_16@:@H_403_16@0@H_403_16@,"Note"@H_403_16@:null@H_403_16@,"IP"@H_403_16@:null@H_403_16@,"Categories"@H_403_16@:null@H_403_16@,"Tags"@H_403_16@:[]@H_403_16@,"ColumnAlias"@H_403_16@:null@H_403_16@,"ColumnTitle"@H_403_16@:null@H_403_16@,"MarkDownContent"@H_403_16@:null@H_403_16@,"MarkDownDirectory"@H_403_16@:null@H_403_16@,"ArticleEditType"@H_403_16@:@H_403_16@0@H_403_16@,"ArticleMore"@H_403_16@:null@H_403_16@},...umnAlias":null,"@H_403_16@ColumnTitle@H_403_16@":null,"@H_403_16@MarkDownContent@H_403_16@":null,"@H_403_16@MarkDownDirectory@H_403_16@":null,"@H_403_16@ArticleEditType@H_403_16@":0,"@H_403_16@ArticleMore@H_403_16@":null}]}成功: 进程退出代码 0. @H_403_16@

JSON转为内部结构体

那么如何把json格式的内容转为golang的内部结构体呢?这需要利用json.Unmarshal

package@H_403_16@ main

import@H_403_16@ (
    "encoding/json"@H_403_16@
    "fmt"@H_403_16@
    "io/IoUtil"@H_403_16@
    "log"@H_403_16@
    "net/http"@H_403_16@
)

type@H_403_16@ Article struct@H_403_16@ {
    ArticleId   int@H_403_16@
    BlogId      int@H_403_16@
    UserName    string@H_403_16@
    Title       string@H_403_16@
    Description string@H_403_16@
    PostTime    string@H_403_16@
    UpdateTime  string@H_403_16@
    ViewCount    int@H_403_16@
    CommentCount int@H_403_16@
    Categories  int@H_403_16@
    ColumnAlias bool@H_403_16@
    Url         string@H_403_16@
}
type@H_403_16@ Articles struct@H_403_16@ {
    Page  int@H_403_16@ `json:"page,int"`@H_403_16@
    Count int@H_403_16@
    Size  int@H_403_16@
    List  []*Article
}

func@H_403_16@ main() {
    resp,err := http.Get("http://api.csdn.net/blog/getnewarticlelist?client_id=????&page=0&size=20"@H_403_16@)
    if@H_403_16@ err != nil@H_403_16@ {
        log.Fatal(err)
    }
    str,err := IoUtil.ReadAll(resp.Body)
    resp.Body.Close()
    if@H_403_16@ err != nil@H_403_16@ {
        log.Fatal(err)
    }

    var@H_403_16@ contents Articles
    if@H_403_16@ err := json.Unmarshal(str,&contents); err != nil@H_403_16@ {
        log.Fatal("Json unmarshing Failed: "@H_403_16@,err)
    }

    for@H_403_16@ k,v := range@H_403_16@ contents.List {
        fmt.Printf("%v. %v\n"@H_403_16@,k,v.Title)
    }
}

最后,我们完成了用csdn的开放API实现读取最新文章的需求。

0. @H_403_16@1048. Find Coins (25)解题报告
1. @H_403_16@1049. Counting Ones (30)解题报告
2. @H_403_16@java实习第二天
3. @H_403_16@1060. 爱丁顿数(25)
4. @H_403_16@剑指offer-数组中出现次数超过一半的数字
5. @H_403_16@jsonp跨域访问案例
6. @H_403_16@framework jar包MAKEFILE示例
7. @H_403_16@Unity3d 乱序之惑
8. @H_403_16@CodeForces 445C DZY Loves Physics
9. @H_403_16@LeetCode #424: Longest Repeating Character Replacement
10. @H_403_16@面板显示private变量用标签[SerializeField]
11. @H_403_16@Postgresql问题解决--连接数过多
12. @H_403_16@多维高斯分布及多维条件高斯分布
13. @H_403_16@王朝  都要学C
14. @H_403_16@CharacterController.Move 实现角色移动
15. @H_403_16@bootargs
16. @H_403_16@不用输入法输自己的名字!!!!
17. @H_403_16@mybatis mbg自动生成的selectByExample按条件查询不出来值。
18. @H_403_16@系统乔迁留念贴
19. @H_403_16@java中Proxy(代理与动态代理)

猜你在找的Go相关文章