![]() |
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? ![]() 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ę ![]() 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 ![]() 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 ![]() 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ł. ![]() 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 ![]() 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. |