Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
Współpraca Yii z blogiem opartym na wordpressie - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: Współpraca Yii z blogiem opartym na wordpressie (/thread-wspolpraca-yii-z-blogiem-opartym-na-wordpressie)



Współpraca Yii z blogiem opartym na wordpressie - R_Rafalsky - 29-06-2012

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?


RE: Współpraca Yii z blogiem opartym na wordpressie - Pedro84 - 29-06-2012

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ć.


RE: Współpraca Yii z blogiem opartym na wordpressie - R_Rafalsky - 29-06-2012

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.


RE: Współpraca Yii z blogiem opartym na wordpressie - Pedro84 - 29-06-2012

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.


RE: Współpraca Yii z blogiem opartym na wordpressie - R_Rafalsky - 29-06-2012

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?


RE: Współpraca Yii z blogiem opartym na wordpressie - Pedro84 - 29-06-2012

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.


RE: Współpraca Yii z blogiem opartym na wordpressie - R_Rafalsky - 30-06-2012

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


RE: Współpraca Yii z blogiem opartym na wordpressie - Pedro84 - 30-06-2012

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


RE: Współpraca Yii z blogiem opartym na wordpressie - R_Rafalsky - 04-07-2012

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ć)


RE: Współpraca Yii z blogiem opartym na wordpressie - Pedro84 - 04-07-2012

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.