Po ostatnim moim wpisie https://www.wykop.pl/wpis/29031763/programowanie-python-django-api-twitter-no-witam- dostałem całkiem sensowne odpowiedzi i bardzo mi pomogliście. W swojej aplikacji napisanej w #django chciałbym streamować na żywo tweety pod zadany tag i wyświetlać jej w przeglądarce. W tym momencie używam biblioteki #tweepy która daje mi możliwość streamowania. Moge pullować i wyświetlać tweety w consoli bez najmniejszego problemu, niestety problemy pojawiają się kiedy chcę wyświetlać je w przegladarce. Zapytałem Niemireczków (ง͠°͟ل͜͡°)ง ze slacka o tematyce #python i #django i polecili mi że najlepszym rozwiązaniem tego problemu jest użycie relatywnie młodej biblioteki do django o nazwie channel. Będzie dużym uproszeczniem jak powiem że ta biblioteka zastępuje często djangowiczom websockety i bibliotekę tornado-websockets. Czy jakiś Mirosław z dobrym serduszkiem mógłby mi wytłumaczyć jak skleić ze sobą te dwie biblioteki?
@ponczkowy: channels to normalne połączenie websocketowe.
Masz jedną apkę, która komunikuje się z twitterem, robi te celery taski itd zapusuje w bazie wyniki.
Websocket ("duga apka") powinien tylko pobierać rekordy z bazy/cache i wysyłać do klientów dane, które się zaktualizowały.
Utwórz jakiś url typu /tweets w nim zwracasz wszystkie dane do momentu wywołania GET. Następnie ui łączy się z socketami i nasł#!$%@? nowych tweetów. Ot cała filozofia.
@ponczkowy: ja bym podzielił tweety na kategorie: /tweets/goodnight GET zwraca JSON'a z listą ostatnich + user subskrybuje kanał "tweets_goodnight" i dostaje co 10s na ten kanał kolejne dane.
@ponczkowy: wysyłać możesz jak chcesz, nie twórz tego na wsconnect, tam nic nie powinno się dziać. Group używaj po zapisie danych do bazy: 1. Api - pobieranie 2. Zapis do bazy (lub pomijamy) 3. Wysyłka do socketów 4. Loop do 1
@macza: a to co jest wysylane w wsconnect? Group('dashboard').send({ 'text': json.dumps(status.json) }) skad socket bedzie wiedzialco zostalo w nim podane ?
Czyli zrezygnowac z taska calkowicie na rzecz loopa ?
Wiam Mirkowicze,
Po ostatnim moim wpisie https://www.wykop.pl/wpis/29031763/programowanie-python-django-api-twitter-no-witam-
dostałem całkiem sensowne odpowiedzi i bardzo mi pomogliście.
W swojej aplikacji napisanej w #django chciałbym streamować na żywo tweety pod zadany tag i wyświetlać jej w przeglądarce. W tym momencie używam biblioteki #tweepy która daje mi możliwość streamowania.
Moge pullować i wyświetlać tweety w consoli bez najmniejszego problemu, niestety problemy pojawiają się kiedy chcę wyświetlać je w przegladarce. Zapytałem Niemireczków (ง ͠° ͟ل͜ ͡°)ง ze slacka o tematyce #python i #django i polecili mi że najlepszym rozwiązaniem tego problemu jest użycie relatywnie młodej biblioteki do django o nazwie channel. Będzie dużym uproszeczniem jak powiem że ta biblioteka zastępuje często djangowiczom websockety i bibliotekę tornado-websockets. Czy jakiś Mirosław z dobrym serduszkiem mógłby mi wytłumaczyć jak skleić ze sobą te dwie biblioteki?
(╯︵╰,)
Masz jedną apkę, która komunikuje się z twitterem, robi te celery taski itd zapusuje w bazie wyniki.
Websocket ("duga apka") powinien tylko pobierać rekordy z bazy/cache i wysyłać do klientów dane, które się zaktualizowały.
Utwórz jakiś url typu /tweets w nim zwracasz wszystkie dane do momentu wywołania GET. Następnie ui łączy się z socketami i nasł#!$%@? nowych tweetów. Ot cała filozofia.
tutaj jest funkcja z mojego pliku consumer.py:
wraca mi X tweetow
Powiedzmy ze chce tylko jednego tweeta dla slowa 'goodnight'.
co 10 sekund
@channel_session_user_from_http
def wsconnect(message):
tweets = api.search(q='goodnight')
status = tweets[0]
Group('dashboard').add(message.replychannel)
Group('dashboard').send({
'text': json.dumps(status._json)
})
Powyzsza funkcja jest wolana tylko raz, czy w takim razie musze zaschedulowac kolejnego taska
/tweets/goodnight GET zwraca JSON'a z listą ostatnich + user subskrybuje kanał "tweets_goodnight" i dostaje co 10s na ten kanał kolejne dane.
1. Api - pobieranie
2. Zapis do bazy (lub pomijamy)
3. Wysyłka do socketów
4. Loop do 1
Group('dashboard').send({
'text': json.dumps(status.json)
})
skad socket bedzie wiedzialco zostalo w nim podane ?
Czyli zrezygnowac z taska calkowicie na rzecz loopa ?