1

要么我失去理智,要么我不理解指针数组,要么图书馆被破坏了。也许你可以帮忙。以下代码似乎可以很好地获取 Atom 项目,但查看它们的标题却是空字符串。

(这恰好是通过http实现的,我认为这不是问题,但当然一切皆有可能。)

package main

import (
    "fmt"
    rss "github.com/jteeuwen/go-pkg-rss"
    "net/http"
    "os"
)

var items []*rss.Item
var channels []*rss.Channel

func hello(w http.ResponseWriter, r *http.Request) {
    feed := rss.New(5, true, chanHandler, itemHandler)
    url := "http://stackoverflow.com/feeds"
    feed.Fetch(url, nil)
    fmt.Printf("Sent fetch for %s\n", url)
    fmt.Fprintf(w, "There are %d items in %s\n\n", len(items), url)
    for key, value := range items {
        fmt.Fprintf(w, "%d: %s\n\n", key, value.Title)
    }
}

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}

func chanHandler(feed *rss.Feed, newchannels []*rss.Channel) {
    channels = newchannels
}

func itemHandler(feed *rss.Feed, ch *rss.Channel, newitems []*rss.Item) {
    items = newitems
}
4

3 回答 3

3

包“go-pkg-rss”有一些关于读取响应的错误。

有很多类似的包,我试图用另一个复制你的例子(我认为它更简单):

import (
    "fmt"
    "github.com/SlyMarbo/rss"
    "net/http"
    "os"
)

func hello(w http.ResponseWriter, r *http.Request) {
    url := "http://stackoverflow.com/feeds"
    feed, _ := rss.Fetch(url)
    fmt.Printf("Sent fetch for %s\n", url)
    fmt.Fprintf(w, "There are %d items in %s\n\n", len(feed.Items), url)
    for key, value := range feed.Items {
        fmt.Fprintln(w, key, value.Title)
    }
}

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}
于 2013-09-21T20:59:32.650 回答
2

你的代码对我也不起作用。虽然提取的记录数是正确的,但记录本身没有任何价值。随意在项目的 github 页面上提出问题。

另请注意,您将项目传输到 http 处理程序的方式存在数据竞争,因为itemHandler它同时执行,并且不知道它是否在 http 执行for循环时被调用。最好使用渠道!

于 2013-09-21T18:30:02.260 回答
2

go-pkg-rss 使用的 xml 解析库中引入了一个错误。我已经为 xml 解析器和 go-pkg-rss 提交了一个拉取请求来解决这个问题。PR 位于:https ://github.com/jteeuwen/go-pkg-rss/pull/23

于 2013-10-01T15:46:11.250 回答