要么我失去了理智,我不理解指针数组,或者库被破坏了。也许你可以帮忙。以下代码似乎可以很好地获取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
}
答案 0 :(得分: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)
}
答案 1 :(得分:2)
您的代码对我也不起作用。虽然获取的记录数是正确的, 记录本身没有价值。随意在项目的github页面上提交问题。
另请注意,将项目传输到http处理程序的方式有数据竞争
同时执行itemHandler
并且不知道它是否被调用
http执行for
循环的时间与否。更好地使用频道!
答案 2 :(得分:2)
go-pkg-rss使用的xml解析库中引入了一个错误。我已经提交了xml解析器和go-pkg-rss的pull请求来解决问题。 PR位于:https://github.com/jteeuwen/go-pkg-rss/pull/23