英文:
Why are Atom item titles not being returned using go-pkg-rss?
问题
要翻译的内容如下:
要么是我疯了,要么是我不理解指针数组,要么是库出了问题。也许你可以帮忙。下面的代码似乎可以正常获取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
}
英文:
Either I am losing my mind, I don't understand arrays of pointers, or the library is busted. Perhaps you can help. The following code seems to fetch Atom items just fine, but viewing their titles are coming back as empty strings.
(This happens to be implemented via http, I don't think that's the problem but of course anything's possible.)
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
}
答案1
得分: 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)
}
英文:
There is some bug with package "go-pkg-rss" about reading response.
There is a lot of similar packages, i tried to replicate your example with another one (it's simpler i think):
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)
}
答案2
得分: 2
你的代码对我也不起作用。虽然获取的记录数量是正确的,但记录本身没有值。请随时在项目的GitHub页面上提交问题。
另外,请注意你传递项目给HTTP处理程序的方式存在数据竞争问题,因为itemHandler
是并发执行的,不知道它是否在HTTP执行for
循环的同时被调用。最好使用通道来解决这个问题!
英文:
Your code does not work for me either. While the number of fetched records is correct,
the records itself have no value. Feel free to file an issue on the project's github page.
Also note that your way of transferring the items to the http handler has a data race
as itemHandler
gets executed concurrently and it is not known if it is called in
the time the http executes the for
loop or not. Better use a channel for that!
答案3
得分: 2
go-pkg-rss使用的xml解析库中引入了一个错误。我已经提交了一个拉取请求,用于修复xml解析器和go-pkg-rss中的问题。拉取请求的链接是:https://github.com/jteeuwen/go-pkg-rss/pull/23
英文:
There was a bug introduced in the xml parsing library go-pkg-rss uses. I've submitted a pull request for both the xml parser and go-pkg-rss to fix the issue. The PR is at: https://github.com/jteeuwen/go-pkg-rss/pull/23
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论