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
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?
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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
źródło
Kolejne potencjalne rozwiązanie, które mogło nie być dostępne, gdy pierwotnie zadano pytanie i nie powinno wymagać żadnej konkretnej usługi.
źródło
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
źródło
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. :-)
źródło