Jak pobrać wszystkie stare elementy z kanału RSS?

117

Eksperymentowałem z pisaniem własnego czytnika RSS. Potrafię obsłużyć bit "parsowania XML". Utknęło mi się to „Jak pobrać starsze posty?”

Większość kanałów RSS zawiera tylko 10–25 najnowszych elementów w pliku XML. Jak uzyskać WSZYSTKIE elementy w pliku danych, a nie tylko najnowsze?

Jedynym rozwiązaniem, jakie udało mi się znaleźć, było użycie „nieoficjalnego” API Czytnika Google, które byłoby czymś w rodzaju

http://www.google.com/reader/atom/feed/http://fskrealityguide.blogspot.com/feeds/posts/default?n=1000

Nie chcę uzależniać mojej aplikacji od Czytnika Google.

Czy jest lepszy sposób? Zauważyłem, że na Bloggerze mogę zrobić „? Start-index = 1 & max-results = 1000”, a na WordPressie mogę zrobić „? Paged = 5”. Czy jest jakiś ogólny sposób na pobranie źródła RSS, aby zawierał wszystko, a nie tylko najnowsze pozycje?

user14834
źródło
1
Dla zainteresowanych dokumentacja nieoficjalnego interfejsu API czytnika: code.google.com/p/google-reader-api/w/list
Nate Parsons
3
Czy jest nowy sposób, odkąd pytanie zostało zadane około 6 lat temu, jak dawka Feedly
shareef
Bardzo chciałbym zobaczyć zaktualizowaną odpowiedź na to pytanie. Bardzo rozczarowujące, jeśli nic się nie zmieniło od 8 lat! To jedyne nowe rozwiązanie, jakie widziałem: app.pub.center stackoverflow.com/questions/5761954/ ...
Jess Riedel

Odpowiedzi:

65

Kanały RSS / Atom nie pozwalają na pobieranie informacji historycznych. Do wydawcy kanału należy dostarczenie go, jeśli chce, na przykład w przykładach bloggera lub Wordpressa, które podałeś powyżej.

Jedynym powodem, dla którego Czytnik Google ma więcej informacji, jest to, że zapamiętał je z czasu, gdy pojawił się po raz pierwszy.

Jest trochę informacji na temat czegoś takiego, o którym mówi się jako rozszerzenie protokołu ATOM , ale nie wiem, czy faktycznie jest gdziekolwiek zaimplementowane.

David Dean
źródło
10

Jak wspomniały inne odpowiedzi, kanał może nie zawierać danych archiwalnych, ale elementy historyczne mogą być dostępne z innego źródła.

Archive.org's Wayback Machine ma API do dostępu do treści historycznych, w tym kanałów RSS (jeśli ich boty je pobrały). Stworzyłem narzędzie internetowe Backfeed, które wykorzystuje ten interfejs API do ponownego generowania kanału zawierającego połączone elementy historyczne. Jeśli chcesz szczegółowo omówić wdrożenie, skontaktuj się z nami.

Quinn Comendant
źródło
3
Ups! Znalazłem to. Ten link wyszczególnia go ws-dl.blogspot.fr/2013/07/… Konkretnie, zrobiłbyś coś takiego: web.archive.org/web/timemap/link/$url Dzięki!
The1nk
8

Z mojego doświadczenia z RSS wynika, że ​​kanał jest kompilowany według ostatnich X elementów, gdzie X jest zmienną. Niektóre kanały mogą mieć pełną listę, ale ze względu na przepustowość większość miejsc prawdopodobnie ogranicza się do kilku ostatnich elementów.

Prawdopodobną odpowiedzią dla czytnika Google, który ma stare informacje, jest to, że przechowuje je później dla użytkowników.

Rob Haupt
źródło
8

W nawiązaniu do tego, co powiedział David Dean, kanały RSS / Atom będą zawierać tylko to, co wydawca kanału ma w danym momencie i ktoś musiałby aktywnie zbierać te informacje, aby mieć jakiekolwiek informacje historyczne. Zasadniczo Czytnik Google robił to za darmo, a podczas interakcji z nim można było pobrać te zapisane informacje z serwerów bazy danych Google.

Teraz, gdy wycofali się ze służby, o ile wiem, masz dwie możliwości. Musisz albo rozpocząć zbieranie tych informacji z interesujących Cię kanałów i przechowywać dane za pomocą XML lub czegoś podobnego, albo możesz zapłacić za te dane jednej z firm, które sprzedają tego typu zarchiwizowane informacje z kanałów.

Mam nadzieję, że te informacje komuś pomogą.

Seán

Seán O'Sullivan
źródło
6

Kolejne potencjalne rozwiązanie, które mogło nie być dostępne, gdy pierwotnie zadano pytanie i nie powinno wymagać żadnej konkretnej usługi.

  1. Znajdź adres URL żądanego źródła RSS i użyj waybackpack, aby uzyskać zarchiwizowane adresy URL dla tego kanału.
  2. Użyj FeedReadera lub podobnej biblioteki, aby ściągnąć zarchiwizowany kanał RSS.
  3. Weź adresy URL z każdego kanału i zeskrob je, jak chcesz. Jeśli cofasz się w czasie, możliwe, że są jakieś martwe linki.
Alex Klibisz
źródło
To genialna sugestia. Wayback Machine rzeczywiście archiwizuje również kanały RSS. Nie będzie działać z czytnikami kanałów GUI, ale dla programistycznych czytników nie jest zbyt wielkim problemem nadpisanie żądania internetowego i zamiast tego przesłanie go do buforowanego pliku RSS / Atom.
Cerin
@Alex, czy mógłbyś podać przykład? Uważam, że twoja sugestia jest bardzo intrygująca.
SanMelkote
2
@SanMelkote Dawno o tym nie myślałem. Postaram się zapamiętać, żeby wykopać mój kod i jeśli go znajdę, opublikuję go jako treść na githubie.
Alex Klibisz
2

Standardy RSS / Atom nie mają możliwości przeszukiwania starszych artykułów RSS.

Pracuję również nad czytnikiem RSS i postanowiłem zbudować własną usługę archiwizacji RSS ( https://app.pub.center ). Korzystanie z REST API jest bezpłatne. Pobieramy pieniądze za powiadomienia push.

Serwis codziennie sonduje swój katalog kanałów RSS i buforuje artykuły. Następnie możesz odzyskać te artykuły w porządku chronologicznym. Na przykład:

Strona 1 of The Atlantic https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=1

Strona 2 z Atlantyku https://pub.center/feed/02702624d8a4c825dde21af94e9169773454e0c3/articles?limit=10&page=2

wle8300
źródło
Wygląda interesująco, ale link nie działa.
bluenote10
2

Wszystkie poprzednie odpowiedzi w mniejszym lub większym stopniu polegały na tym, że istniejące usługi nadal mają kopię tego pliku danych lub silnik plików danych, aby móc dynamicznie dostarczać starsze produkty.

Jest jednak inny, co prawda proaktywny i raczej teoretyczny sposób na zrobienie tego: pozwól, aby Twój czytnik kanałów używał buforującego serwera proxy, który semantycznie rozumie kanały RSS i / lub Atom i buforuje je na podstawie pozycji do dowolnej liczby elementów.

Jeśli czytnik kanałów nie sonduje regularnie kanałów, proxy może pobierać znane kanały na podstawie własnego czasu, aby nie przegapić elementu w bardzo niestabilnych kanałach, takich jak ten z przyjaznych dla użytkownika, który ma tylko jedną pozycję i zmienia się każdego dnia (lub przynajmniej kiedyś to robił). Stąd jeśli feedreadere.g. awaria lub utrata połączenia sieciowego podczas nieobecności przez kilka dni, możesz stracić elementy w pamięci podręcznej czytnika kanałów. Posiadanie proxy do regularnego pobierania tych kanałów (np. Z centrum danych zamiast z domu lub na serwerze zamiast laptopa) pozwala na łatwe uruchomienie czytnika kanałów tylko wtedy i wtedy, gdy bez utraty pozycji, które zostały wysłane po pobraniu kanałów przez ostatnim razem, ale ponownie obrócone przed pobraniem ich następnym razem.

Nazywam tę koncepcję Semantic Feed Proxy i zaimplementowałem implementację proof of concept o nazwie sfp . To jednak niewiele więcej niż dowód słuszności koncepcji i nie rozwinąłem go dalej. (Więc byłbym zadowolony z podpowiedzi do projektów o podobnych pomysłach lub celach. :-)

Axel Beckert
źródło