Agregator RSSów z portali informacyjnych

Pierwszego kwietnia pisaliśmy o ,,szokujących danych o szoku”. Humorystyczny wpis zdradzał przy okazji powstanie narzędzia zbierającego RSSy z różnych polskich portali informacyjnych.
Narzędzie to jest dostępne publicznie, można z niego korzystać do woli. Jak? O tym napisze dziś jego autor Mateusz Kula.

Dla niecierpliwych mały spoiler. Poniższy fragment kodu R pobiera RSSy z okresu od 1 stycznia 2012 do 1 czerwca 2013 z pierwszego źródła RSSów z bazy.

Na razie możliwość dodawania nowych źródeł jest dostępna tylko dla uprzywilejowanych użytkowników. Jeżeli chcielibyście dodać dowolne źródło RSS do tego agregatora napiszcie mi maila lub podajcie adres źródła w komentarzach.

Ok, zobaczmy jak to narzędzie działa i jak z niego korzystać.

Agregator RSSów z portali informacyjnych

Mateusz Kula

Wstęp

Agregator RSS który napisaliśmy składa się z serwera, interfejsu użytkownika / administratora oraz bazy danych. Program pozwala na zapisanie listy kanałów RSS a następnie regularne odpytywanie. Serwisy RSS odpowiadają w postaci dokumentu XML bądź Atom, który jest parsowany, czyli wyodrębniane są konkretne pola, a następnie zapisywany jako encja w bazie danych. Agregator pozwala na pobranie poprzez przeglądarkę internetową przeparsowanych wiadomości w postaci pliku csv. Wiadomości mogą być pobrane w całości (może być to nawet kilkadziesiąt megabajtów w zależności od ilości feedów oraz czasu przez jaki są śledzone) bądź dla konkretnego feeda (poprzez podanie jego id) oraz z możliwością określenia przedziału czasowego z jakiego mają być pobrane dane.

Serwer

Serwer napisany jest w języku php, co umożliwia szybkie uruchomienie go na niemal dowolnym serwerze linuxowym. Do parsowania pobranych feedów użyliśmy bibliotekę lastRSS, dostępną pod tym adresem http://lastrss.oslab.net/. Jest ona nie tylko mała i łatwa w obsłudze ale posiada też mechanizm zapamiętywania pobranych danych dzięki czemu serwisy są odpytywane tylko celem pobrania nowych danych. Jeżeli na serwerze mamy zainstalowany php, pliki wystarczy skopiować do jakiegoś foldery w public_html i po drobnej konfiguracji są one gotowe do użycia. Aby agregator okresowo aktualizował dane z feedów należy do crona dodać wpis wywołujący skrypt pull_rss_cron.php. Do działania agregatora istotne jest umieszczenie pliku settings.php o dwa poziomy wyżej niż pozostałe. Plik settings.php powinien mieć następującą postać:

Zmienne należy ustawić odpowiednio do posiadanej przez siebie konfiguracji.

Interfejs użytkownika

Interfejs do agregatora napisany jest w javascript z użyciem biblioteki jQuery UI (http://jqueryui.com/) dzięki czemu szybko mogliśmy utworzyć ładnie i spójnie stylistycznie przyciski i okienko dialogowe. Abu zmodyfikować listę obserwowanych rssów należy udać się przeglądarką internetową do skryptu manage.php podmieniając w adresie odpowiednie dla swojej konfiguracji nazwę serwera i folder: http://smarterpoland.pl/materialy/rss/manage.php
Z poziomu skryptu manage.php można jedynie dodawać obserwowane rssy, nie można ich modyfikować ani usuwać co podyktowane jest tym iż jest to publicznie dostępny interfejs i chcieliśmy uniknąć utraty danych przez przypadek bądź złośliwą działalność. Oczywiście jest to marne zabezpieczenie ale wydaje się być adekwatne do ważności przechowywanych danych. W manage.php można odczytać istotną informację o id feeda co może być przydatne podczas pobierania danych.

Baza danych

Jako bazy danych zdecydowaliśmy się użyć MySql z dwoma tabelami. Jedna z nich (feeds) przechowuje listę feedów z ich nazwami i adresami, natomiast druga jest złączona z pierwszą poprzez pole feed_id i zawiera sparsowane encje zawierające link do artykułu, tytuł, opis, guid (indywidualny identyfikator jednoznacznie wyróżniający encję) oraz datę publikacji. MySql, podobnie jak php powinien być dostępny na większości serwerów linuxowych a jeżeli nie jest to bez względu na system można go bezpłatnie pobrać i szybko zainstalować.

Tabela feeds

 

Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
name varchar(128) NO NO NULL  
address varchar(256) NO NO NULL  

 

Tabela feeds_items

 

Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
feed_id int(11) NO MUL NULL  
link varchar(256) YES   NULL  
title varchar(256) YES   NULL  
description varchar(256) YES   NULL  
guid varchar(256) YES   NULL  
publication_date varchar(256) YES   NULL  

 

Pobieranie danych

Aby pobrać dane należy za pomocą przeglądarki internetowej pobrać następujący adres, podmieniając w zależności od swojej konfiguracji nazwę serwera oraz folderu w którym umieszczone są skrypty: http://smarterpoland.pl/materialy/rss/joined_data.php
W ten sposób pobrany będzie plik csv zawierający wszystkie zagregowane artykuły z feedów.

Aby ograniczyć pobierane dane można użyć dodatkowych parametrów zapytania:
• feedId – pobrane będą tylko dane zagregowane dla określonego feeda
• fromDate
• toDate

Nie ma konieczności stosowania wszystkich tych parametrów a więc można na przykład pobrać wszystkie encje dla konkretnego feeda podając tylko feedId bądź artykuły z wszystkich feedów które ukazały się nie później niż pewna data używając tylko parametru toDate. Daty mogą być dowolnymi ciągami, które MySql potrafi przetworzyć na datę, jedną z możliwości jest użycie formatu yyyymmdd oznaczający użycie czterech cyfr określających rok, następnie dwóch cyfr określających miesiąc i na koniec dwóch cyfr określających dzień miesiąca. W przypadku użycia nieprawidłowego formatu daty lub nieistniejącego id feeda w csv znajdziemy zamiast danych informację o błędzie.

Przykładowe zapytanie używające parametrów:
http://smarterpoland.pl/materialy/rss/joined_data.php?feedId=1&fromDate=20120101&toDate=20121212

3 thoughts on “Agregator RSSów z portali informacyjnych”

    1. Dziękuję, ciekawy pomysł.
      Dodałem oba źródła RSS do obserwacji. Jak tylko uzbiera się trochę danych, będzie można się im przyjrzeć.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *