Wpis z mikrobloga

#python #django #tweepy #api #webdev

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?

(,)
  • 7
@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.
@macza: kumam, ale powiedzmy ze chce wysylac te tweety z serwera to frontendu powiedzmy ze cos 10 sekund

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.reply
channel)
Group('dashboard').send({
'text': json.dumps(status._json)
})

Powyzsza funkcja jest wolana tylko raz, czy w takim razie musze zaschedulowac kolejnego taska
@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 ?