吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1861|回复: 3
收起左侧

[其他转载] 【go】RSS解析

  [复制链接]
dadashuai 发表于 2021-8-25 09:42
package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
)

func main() {

    srcName := "i.rss"
    if len(os.Args) >= 2 {
        srcName = os.Args[1]
    }
    xml_up := getXmlFile("i.rss")
    xml := getXmlFile(srcName)
    rss_up := ParseRSS(xml_up)
    rss := ParseRSS(xml)

    displayRssChannel(rss.Channel)
    ComparedRSS(rss_up, rss)
}

//对比两张rss
func ComparedRSS(rss_up *RssFeed, rss *RssFeed) string {
    var items_up []*RssItem = rss_up.Channel.Item
    var items []*RssItem = rss.Channel.Item
    var maxLen = 10
    var buffer bytes.Buffer
    for i := 0; i < len(items); i++ {
        var check = false
        //判断在数组中是否存在
        for j := 0; j < len(items_up); j++ {
            if items[i].Title == items_up[j].Title {
                check = true
                break
            }
        }
        if !check {
            fmt.Println(items[i].Title)
            fmt.Println("bbs.yzjlb.net" + items[i].Comments)
            buffer.WriteString(fmt.Sprintf("%s\n%s%s", items[i].Title, "***.net", items[i].Comments))
            buffer.WriteString("\n\n")
        }
        if i >= maxLen {
            break
        }

        // var datetime, err = time.Parse(" 21 January 2021 13:01:42 +0800", rss.Item[i].PubDate[strings.Index(rss.Item[i].PubDate, ",")+1:])
        // // var datetime, err = time.ParseDuration(rss.Item[i].PubDate)
        // if err != nil {
        //  fmt.Println("err: ", err)
        // }
        // fmt.Println(datetime.Format("2006-01-02 15:04:05 010"))
    }
    if buffer.Len() > 2 {
        return buffer.String()[0 : buffer.Len()-2]
    }
    return ""
}

//显示rss信息
func displayRssChannel(rss *RssChannel) {
    fmt.Println("Title:", rss.Title)
    fmt.Println("Link:", rss.Link)
    fmt.Println("Last build date:", rss.LastBuildDate)
    fmt.Println("Pub date:", rss.PubDate)
    fmt.Println("Language:", rss.Language)
    fmt.Println("Description:", rss.Description)
    for i := 0; i < len(rss.Item); i++ {
        fmt.Println(rss.Item[i].Title)
        // var datetime, err = time.Parse(" 21 January 2021 13:01:42 +0800", rss.Item[i].PubDate[strings.Index(rss.Item[i].PubDate, ",")+1:])
        // // var datetime, err = time.ParseDuration(rss.Item[i].PubDate)
        // if err != nil {
        //  fmt.Println("err: ", err)
        // }
        // fmt.Println(datetime.Format("2006-01-02 15:04:05 010"))
    }
}

//读取文件
func getXmlFile(filename string) []byte {
    f, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Println("Unable to read src xml file.", err)
        os.Exit(0)
    }
    return f
}

//将rss数据解析为RssFeed结构体
func ParseRSS(x []byte) *RssFeed {
    feed := RssFeed{}
    d := xml.NewDecoder(bytes.NewReader(x))
    err := d.Decode(&feed)
    if err != nil {
        fmt.Println("Failed decoding xml")
        os.Exit(0)
    }
    return &feed
}

type RssFeed struct {
    XMLName xml.Name    `xml:"rss"`
    Channel *RssChannel `xml:"channel"`
}
type RssChannel struct {
    XMLName       xml.Name   `xml:"channel"`
    Title         string     `xml:"title"`
    Description   string     `xml:"description"`
    Link          string     `xml:"link"`
    Language      string     `xml:"language"`
    PubDate       string     `xml:"pubDate"`
    LastBuildDate string     `xml:"lastBuildDate"`
    Item          []*RssItem `xml:"item"`
}

type RssItem struct {
    XMLName     xml.Name `xml:"item"`
    Title       string   `xml:"title"`
    Link        string   `xml:"link"`
    PubDate     string   `xml:"pubDate"`
    Creator     string   `xml:"dc:creator"`
    Description string   `xml:"description"`
    Comments    string   `xml:"comments"`
}

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Seven_2017 发表于 2021-8-25 10:00
证书还是啥,时间地点人物起因经过结果,描述一下嘛
 楼主| dadashuai 发表于 2021-8-25 10:43
FlyingFire 发表于 2021-8-25 11:01
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-16 00:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表