Często odwiedzane wiadomości?


(Kloc221) #1

Witam zastanawiam się jak zrobić na stronie coś takiego jak “hot news” czyli pięć najczęściej odwiedzanych wiadomości ??

Do każdego artykułu muszę dać jakiś licznik wyświetleń czy co, a potem to jakoś sprowadzać ?


(maniooo) #2

Witaj,

tak jak mówisz: zliczasz odwiedziny każdego artykułu, wybierasz 5 najlepszych i wyświetlasz.

Oczywiście można to jakoś optymalizować, ale to już zależne od tego, w czym ta strona.

W popularnych CMS-ach są gotowe wtyczki do tego.


(Kloc221) #3

No to będę miał problem, chyba że podrzuci mi ktoś jakiś tutorial ??

Strona nie jest CMS’em, potrzebował bym jakiś własnoręczny skrypt…


(Damgora) #4

a jakie masz możliwości przechowywania informacji o liczbie odwiedzin - baza, plik(i) z newsami, osobny plik?


(Kloc221) #5

Newsy zapisywane są do pliku.txt - co do tego gdzie mogly by się zapisywać liczby wyświetleń wszystko mi jedno…


(Mathew) #6

Po co tworzysz kolejny temat o tym samym?


(Kloc221) #7

Że co ? gdzie ty masz taki temat…


(Tomek Matz) #8

Najlepiej byłoby użyć do tego celu bazy danych, np. darmowego MySQL-a. Jeśli chciałbyś mieć w miarę wiarygodne wyniki to musiałbyś przechowywać adresy IP, które wyświetliły dany news. Ma to pewne korzyści, bo oprócz tego, że wyniki będą bardziej wiarygodne (licznik wyświetleń danego newsa nie zostanie podbity przez jeden adres IP) to być może w przyszłości będziesz robić taki bajer, że dla różnych regionów różne newsy będą uznawane za najpopularniejsze. Oczywiście licznik wyświetleń zawsze można oszukać, np. proxy, czy zmienne IP, ale na pewno zostanie to ograniczone.

W bazie danych miałbyś tabelę z dwoma kolumnami

  1. Nazwa lub identyfikator newsa (ważne, żeby wartość ta była unikalna dla danego newsa)

  2. Adres IP, który odwiedził dany news

Przy wyświetleniu danego newsa sprawdzałbyś adres IP osoby odwiedzającej. Jeśli adresu IP nie będzie w bazie danych dla danego newsa to go dodasz, jeśli będziesz to nie robisz nic.

Na stronie, na której masz wyświetlać najbardziej popularne newsy po prostu wykonywałbyś select na bazie danych z użyciem GROUP BY po nazwie newsa i COUNT po adresach IP i na podstawie tego znajdowałbyś najpopularniejsze strony. Załóżmy, że tabelę nazwałbyś sobie Visitors, a kolumny ID oraz IP. Wówczas ten select, który zwracałby Ci 5 najpopularniejszych newsów wyglądałby tak:

dla MySQL-a:

SELECT ID, COUNT(IP) AS Counter

FROM visitors

GROUP BY ID

ORDER BY Counter DESC

LIMIT 5

dla SQL Server:

SELECT TOP 5 ID, COUNT(IP) AS Counter

FROM visitors

GROUP BY ID

ORDER BY Counter DESC

W innych bazach danych nie wiem jakie są odpowiedniki TOP i LIMIT, ale to sobie znajdziesz w google. Jeśli takiego odpowiednika nie będzie no to po prostu w kodzie ograniczysz sobie ilość zwróconych rekordów z bazy danych do pięciu, czy tam do ilu będziesz chciał.


(Kloc221) #9

Skoro system się opiera na plikach nie będę go chyba przerabiał (poza tym nie potrafię) aby korzystać z tego. Poszukuję jakiegoś rozwiązania możliwego na plikach…


(Tomek Matz) #10

:?

No jeśli chcesz mieć w plikach to utwórz sobie jakiś plik, który będzie miał taką strukturę

wiersz nr 1: [nazwa lub identyfikator newsa numer 1 - koniecznie unikalny dla danego newsa]

wiersz nr 2: [adresy IP, które odwiedziły news numer 1 oddzielone np. średnikami]

wiersz nr 3: [nazwa lub identyfikator newsa numer 2 - koniecznie unikalny dla danego newsa]

wiersz nr 4: [adresy IP, które odwiedziły news numer 2 oddzielone np. średnikami]

itd.

Generalnie będzie to rozwiązanie gorsze niż z bazą danych, ale też będzie działać. Algorytm postępowania jest taki sam jak w przypadku bazy danych, czyli

Przy wyświetleniu danego newsa sprawdzałbyś adres IP osoby odwiedzającej. Jeśli adresu IP nie będzie w pliku dla danego newsa to go dodasz, jeśli będziesz to nie robisz nic.

Na stronie, na której masz wyświetlać najbardziej popularne newsy wczytujesz cały plik i zliczasz ile adresów IP odwiedziło poszczególne newsy i na podstawie tego wyznaczasz najbardziej popularne.

Jeśli potrafisz działać na plikach XML to użyj go zamiast zwykłego txt. Przynajmniej będzie to wszystko bardziej estetycznie wyglądać, zarówno w samym pliku, jak i w kodzie. Napisz też w jakim języku to robisz to może się komuś będzie chciało wrzucić gotowy fragment kodu. Mi się nie chce :smiley:


(Kloc221) #11

To nie takie forum :? Ale jak by co php/html