2013-09-21 28 views
1

要么我失去了我的想法,我不明白指针数组,或图书馆被捣毁。也许你可以帮忙。下面的代码似乎很好地获取Atom项目,但查看它们的标题会以空字符串的形式返回。为什么不使用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 
} 

回答

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) 
} 
+0

我认为你是对的,在其中的一个实用程序:https://github.com/jteeuwen/go-pkg-rss/issues/22 –

+0

PS。您可以轻松调整代码以在单独的goroutine中获取结果,并获得更好的性能。 – rastasheep

2

您的代码不为我工作,要么。虽然提取的记录数量正确,但记录本身没有任何价值。随意在项目的github页面上提出问题。

另外请注意,您的转移项目到HTTP处理程序的方式有数据争 作为itemHandler被同时执行,并且如果在 调用时的HTTP执行for循环或不是不知道。为此更好地使用频道!

相关问题