2013-09-21 1 views
1

Либо я теряю рассудок, я не понимаю массивы указателей, или библиотека разрушена. Возможно, вы можете помочь. Следующий код, похоже, очень удобен для чтения элементов Atom, но просмотр их заголовков возвращается как пустые строки.Почему заголовки элементов Atom не возвращаются с помощью go-pkg-rss?

(Это происходит будет осуществляться через 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 или нет. Лучше используйте для этого канал!

2

Существовал ошибка введена в XML разборе библиотеки Go-PKG-RSS использует. Я отправил запрос на перенос как для анализатора xml, так и для go-pkg-rss, чтобы исправить эту проблему. PR находится по адресу: https://github.com/jteeuwen/go-pkg-rss/pull/23