Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Współpraca Yii z blogiem opartym na wordpressie
#1
Witajcie,

Chciałbym zaimplementować w aplikacji Yii moduł odpowiedzialny za pobieranie informacji kanałem RSS z blogów, filtrowanie tej informacji i wyświetlanie wg określonych argumentów (np. coś ala Czytnik Google). Pomożecie?
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję Smile

Any sufficiently advanced technology is indistinguishable from magic.
Odpowiedz
#2
Pomożemy! Czego nie wiesz? Smile

BTW. Myśmy tam na PW nie rozmawiali o kodzie? Bo coś mi świta, ale PW znaleźć nie mogę. Daj znać.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#3
Na PW rozkopałem tę sprawę Smile

Problem wygląda tak:
1. Userzy mają swoje blogi i na swoich profilach w serwisie mają zapisane linki do tych blogów.
2. Chcę zrobić by na profilu użytkownika były ostatnie wpisy z bloga, data, linki. Zwykły RSS. Najczęściej będzie to pobierane z wordpressa, jednak najlepiej by było to rozwiązanie uniwersalne (strona udostępnia RSS więc jesteśmy w domu).

Z pomocy chciałbym aby:

echo $ostatnie_wpisy_z_bloga;

wyświetliło to co chcę.

Czyli:
1. Jak pobrać RSS z Bloga w PHP? Może Yii ma jakiś fajny mechanizm do jego obsługi? cURL wchodzi w grę?
2. Kiedy pobierać ten RSS? Bo przecież nie przy każdym przeładowaniu strony. Wiadomości powinny być w miarę aktualne.
3. Jaka byłaby najlepsza struktura bazy danych i aplikacji by to było wydajne. Nie chcę by przy każdym odświeżeniu było "Oczekiwanie na mojSlodziutkiBlogasek.prv.pl". Wiadomo o co chodzi.
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję Smile

Any sufficiently advanced technology is indistinguishable from magic.
Odpowiedz
#4
Odpowiem Ci na PW wieczorem Smile

Tak na szybko:
1. Po co curl? Jest przecież wyborne http://php.net/manual/en/book.simplexml.php (+ XPath w razie potrzeby).
2. Zależy Wink Może na początku 4 razy na dobrę? Co 6 godzin?
3. Najlepsza struktura? To jest relacja 1:m, więc wszystko trzymasz w jednej tabeli (oczywiście osobna tabela na userów). Coś w ten deseń (oczywiście z wyłączeniem struktury):
ID INT PRIMARY AI
User_ID INT AI UNIQUE FK Users_ID
// reszta struktury

Jeśli chcesz więcej info, musisz powiedzieć czy to ma być zwykły agregator czy coś innego i objaśnij trochę swoje założenia zasady działania.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
Założenia:

1. Jeżeli użytkownik zadeklarował swoją prywatną stronę na koncie i można z niej pobrać najnowsze posty to
na stronie użytkownika ala http://www.webmastertalk.pl/r-rafalsky-u wyświetlane są ostatnie posty na blogu z linkami do tego bloga
2. Wyświetlamy wyniki powiedzmy w dwóch przypadkach: ostatnie 5 lub te, które dzisiaj się pokazały - tutaj nie ma filozofii wielkiej

Zależy mi na wydajności więc:

- strona ładnie się ładuje korzystając z własnych zasobów
Tutaj wymyśliłem dwa sposoby:
1. wyświetlamy widok $this->render('user'); po czym łączymy się z blogiem odświeżając posty - user nie czeka a po odświeżeniu ma nowości. Ew.wykorzystać AJAXa do pobrania najnowszych wyników.
2. W godzinach nocnych zajeździć serwer odwiedzając wszystkie blogi.

- by nie zapchać bazy przechowujemy w bazie tylko x wyników i aktywnie resztę usuwamy.

Tabela:
ID, user_ID, date, title, link

Tyle powinno wystarczyć.

Aaaa mam 3 pomysł. Smile
3. Wyświetlamy stronę i po wyświetleniu wysyłamy AJAXem adres bloga czekając na przerobienie przez serwer. Ew pobieramy RSS przez JS zajeżdżając przeglądarkę użytkownika.

Któryś z tych pomysłów jest sensowny?
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję Smile

Any sufficiently advanced technology is indistinguishable from magic.
Odpowiedz
#6
Z doświadczenia wiem, że operacje na plikach w PHP demonem wydajności nie są. Problemem jest tutaj to, że następuje połączenie z zewnętrznym serwerem, mamy więc dwa problemy:
1. wolny czas odpowiedzi serwera docelowego = długie czekanie
2. Twój serwer - jeśli trafisz na duże obciążenie RAM + CPU = długie oczekiwanie (a może też wywalić błąd).

Możesz przechowywać sobie tyle wpisów, ile Ci potrzeba.

Ja tam będę jednak twierdził, że cron to najlepsze rozwiązanie. Przecież w momencie połączenia sprawdzasz sobie datę ostatniego wpisu. Taki mechanizm dużej ilości zasobów jadł nie będzie. Druga kwestia, w przypadku pobierania danych w locie: musiałbyś zaimplementować dobry mechanizm łapania wyjątków oraz ubijania procesu w przypadku zbut długiego czasu odpowiedzi.

3 pomysł odpada. Patrz wyżej.

Nie zapomnij tylko o założeniu klucza obcego. W razie pytań, wal.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#7
No dobra mamy crona (najlepiej na oddzielnym serwerze ale ta sama baza). I odwiedzamy blogi szukając nowości o 2 w nocy. Teraz inny problem

Mamy ok 10k userów i taki skrypcik:

foreach $users as $user
$user->odwiedzBloga->przerobPosty->zapiszPosty;

w życiu nie wykona się całkowicie. Przecież taka operacja może trwać z 15 min.

A jak ma się do tego XSLT? http://pl.wikipedia.org/wiki/XSLT
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję Smile

Any sufficiently advanced technology is indistinguishable from magic.
Odpowiedz
#8
Dlatego musisz to sobie podzielić na paczki, po 500 czy tysiąc, w zależności od tego jaki masz serwer. Nigdy nie rób na całej puli danych. Jak wysyłasz mailing to też go przecież dzielisz Smile
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#9
No dobra, jakoś tam paczki zrobię, ew. w backendzie zrobię opcję w stylu "Przejrzyj kilka blogów" i kod na zasadzie try catch aż nie wywali.

Myślałem jeszcze o tym rozszerzeniu: http://www.yiiframework.com/extension/yii-crontab/ ale nie wiem czy to ma jakiekolwiek znaczenie na zwykłym hostingu (czy będzie miało się szansę wykonać)
Jak pomogłem daj '+'. To nie boli, a ja mam satysfakcję Smile

Any sufficiently advanced technology is indistinguishable from magic.
Odpowiedz
#10
Każdy rozsądniejszy hosting daje teraz crona. Tylko teraz kwestia co ile możesz ustalić zadanie (bo często nie częściej niż co 5 minut). O to musisz się dowiedzieć u swojego dostawcy.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  www.YouCv.tv Współpraca keis 1 1,937 12-02-2012, 04:17
Ostatni post: Heyek

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl