Maszynka do czytania Twittera

Bardzo lubię Twittera, który w Polsce jest trochę niedowartościowany. Według mnie to najszybsze źródło informacji, a przy okazji - przyjemne i wygodne w zdobywaniu danych do przeróżnych analiz. Najnowsze dane do jakich dotarłem (nie szukałem długo - jakieś 2 minuty) mówią o tym, że w Polsce z FB korzysta jakieś pięć razy więcej użytkowników niż z Twittera. Niby mało, ale jak zobaczymy jest to wystarczająco. Analizowaliśmy już w oparciu o dane z Twittera wyniki Oscarów oraz aktywność podczas meczu piłki nożnej. Nie ma jednak prostego sposobu (nie znam, może raczej tak), aby w krótkim czasie dotrzeć to tego co aktualnie dzieje się na Twitterze. Przygotujemy sobie więc odpowiednie narzędzie.

Idea

Twitter w swojej dobroci udostępnia coś co nazywa się trendami. To najpopularniejsze hashtagi i słowa w danym momencie. Algorytm wybierający co jest w trendach nie jest powszechnie znany, trochę o tym pisze sam Twitter, trochę można znaleźć na Quorze, o mechanizmie dobrze opowiada wideo:

W skrócie i uproszczeniu - dla danej lokalizacji (bo trendy są podzielone na lokalizacje) trzeba zbadać jakie słowa (z tego co widać po trendach to też pary słów - bi-gramy) i hashtagi pojawiają się najczęściej w jakimś zadanym czasie. To co jest najpopularniejsze trafia do trendów. Tym nie będziemy się zajmować, skorzystamy z tego dobrodziejstwa wierząc, że Twitter wybiera dobrze. Idea całej maszynerii jest następująca:

  • pobieramy cyklicznie trendy
  • dla kilku ostatnich godzin określamy, które trendy mają znaczenie
  • dla tych trendów pobieramy twitty
  • analizujemy tak przygotowaną bazę

Zebranie trendów

Na początek potrzebujemy tokenu aplikacji twitterowej. Było o tym w poprzednim wpisie, gdzie odsyłałem tutaj. Na koniec uzyskania tokenu w poprzednim wpisie otrzymaliśmy plik twitter_token.rdata, z którego teraz będziemy korzystać. Przygotujemy prosty skrypt, który pobierze aktualną listę trendów i doda ją do popranych wcześniej danych. Oczywiście każdy trend będzie opatrzony datą i godziną pobrania. Taki skrypt powinien być uruchamiany cyklicznie - na przykład co 15 minut. Całość poniżej:

library(rtweet)
library(dplyr)

# token
load("twitter_token.rdata")

# poprzednio zapisane trendy
trends_all <- readRDS("trends.Rds")

# trends
woeid <- 23424923 # Polska

# pobranie aktualnych trendów dla określonej lokalizacji
trends <- get_trends(woeid)

# wybieramy tylko interesujące nas kolumny
trends <- trends %>%
    select(trend, query) %>%
   # oznaczamy kolejność twittów i dodajemy znacznik aktualnego czasu
    mutate(n = row_number(),
             check_time = Sys.time())

# dodajemy do poprzedniej listy
trends_all <- rbind(trends_all, trends)

# ...i zapisujemy
saveRDS(trends_all, file="trends.Rds")

Przy pierwszym uruchomieniu musimy zamiast

trends_all <- readRDS("trends.Rds")

przygotować pustą tabelkę na dane, czyli na przykład w konsoli R wykonać:

trends_all <- data.frame()
saveRDS(trends_all, file="trends.Rds")

Oczywiście ten kawałek można wstawić do gotowego skryptu - w ramach obsługi wyjątku kiedy plik trends.Rds nie istnieje.

Zebranie twittów

Mając zebrane trendy musimy zdecydować z których z nich będziemy pobierać twitty. Możemy brać po prostu najnowsze - wówczas zabawa z zapisywaniem historii trendów jest zbędna (po prostu pobieramy najnowsze trendy i z nich najnowsze twitty). Ja jednak stwierdziłem, że to nie da poprawnego obrazu i postanowiłem rankować trendy, a później przeglądać te najważniejsze. Trzeba wymyślić sposób rankowania. Poszedłem po linii najmniejszego oporu i zdecydowałem, że:

  • im wyżej w trendach tym ważniejszy jest dany temat
  • im dawniej temat był wysoko tym mniejsza jego ważność obecnie

Idąc tym tropem postanowiłem nadać wagi zmieniające się z czasem - najnowsza lista trendów ma wagę 1, ta poprzednia - 1/2, jeszcze wcześniejsza - 1/3 i tak dalej, według schematu 1/n, gdzie n to n-ta historyczna chwila. Następnie liczymy scoring danego trednu jako iloczyn jego pozycji w danej chwili pozycja trendu i wagi tej chwili. To co jest najbliżej jedynki jest najważniejszym trendem (ma najlepszy scoring). Poniższy skrypt liczy które trendy są “najważniejsze”, a następnie dla 12 najważniejszych pobiera po 1000 najnowszych twittów i zapisuje je do pliku tweets.Rds:

library(tidyverse)
library(rtweet)

# token
load("twitter_token.rdata")

# które trendy nas interesują?
trends_all <- readRDS("trends.Rds")

# ile_jednostek max czasu (ile_jednostek * 15 minut temu)
ile_jednostek <- 8
min_time <- trends_all %>%
   select(check_time) %>%
   distinct() %>%
   arrange(desc(check_time)) %>%
   .[ile_jednostek, 1]

# wagi do scoringu
wagi <- data.frame(pos = 1:max(trends_all$n), waga = 1/1:max(trends_all$n))

# liczymy scoring
trends <- trends_all %>%
   filter(check_time >= min_time) %>%
   left_join(wagi, by = c("n" = "pos")) %>%
   mutate(score = n*waga) %>%
   group_by(trend) %>%
   # scoring
   summarise(score = sum(score)/sum(waga)) %>%
   ungroup() %>%
   # odległość scoringu od jedynki
   mutate(n = abs(1-score)) %>%
   arrange(n) %>%
   left_join(trends_all %>% select(trend, query), by="trend") %>%
   select(trend, query) %>%
   distinct()


# pobieramy twitty
tweets <- tibble()

# pierwsze 12 trendów - pobranie twittów
for(i in 1:12) {
   cat(paste0("\n", i, "/12 - ", as.character(trends[i, "trend"]), "\n"))
   trend_tweets <- search_tweets(as.character(trends[i, "query"]),
                                 n = 1000,
                                 include_rts = FALSE, retryonratelimit = TRUE,
                                 parse = TRUE)
   
   # warunek zabezpieczający przed błędami
   # czasem search_tweets() zwraca listę zamiast data.frame
   if("data.frame" %in% class(trend_tweets)) {
       trend_tweets$trend <- as.character(trends[i, "trend"])
       trend_tweets$query <- as.character(trends[i, "query"])
       tweets <- rbind(tweets, trend_tweets)
   }
}

# zapisujemy plik
saveRDS(tweets, file="tweets.Rds")

Powyższy powinien być wykonany tuż przed przygotowaniem raportu.

Przygotowanie raportu

Sam raport to już wyciągnięcie najbardziej interesujących nas informacji o twittach. I od nas zależy co uznamy, za ciekawe informacje. Na początek przygotujemy odpowiednie dodatki:

setwd("~/RProjects/TwitterTrends_Raport")

library(tidyverse)
library(lubridate)
library(tidytext)
library(wordcloud)
library(stringr)

# to przyda nam się do chmurki słów
pl_stop_words <- read_lines("polish_stopwords.txt")

theme_set(theme_minimal())

tweets <- readRDS("tweets.Rds")

i nieco oczyścimy dane wybierając tylko interesujące nas kolumny, upraszczając czasy twittów (niwelując sekundy) i wybierając ostatnie 12 godzin:

# potrzebne kolumny
tweets_an <- tweets %>%
   select(screen_name, user_id, created_at, text, trend,
          retweet_count, favorite_count, status_id, source) %>%
   distinct() %>%
   mutate(created_at = with_tz(created_at)) %>%
   mutate(created_at = make_datetime(year(created_at),
                                             month(created_at),
                                             day(created_at),
                                     hour(created_at),
                                             minute(created_at), 0))


# wyfiltrowanie zbednych twittów
tweets_an <- tweets_an %>%
   # boty i spamerzy
   filter(!source %in% c("Poland Trends")) %>%
   # tylko ostatnie 12 godzin
   filter(created_at >= Sys.time() - hours(12))

Teraz możemy sobie analizować do woli. Możemy na przykład sprawdzić jak w czasie zmienia się ilość twittów w poszczególnych trendach, jak wyglądają najpopularniejsze słowa użyte w twittach należących do danego trendu oraz które twitty były najpopularniejsze (miały najwięcej retwittów oraz polubień). Na początek przygotujemy tabelę z popularnością słów w podziale na trendy (z usunięciem stop words - polskich i angielskich):

# chmurki słów
words <- tweets_an %>%
   # bez linków
   mutate(text = gsub(" ?(f|ht)tp(s?)://(.*)[.][a-z]+", "", text)) %>%
   unnest_tokens(word, text, token="words") %>%
   count(word, trend) %>%
   ungroup() %>%
   # usuniecie z chmurki slowa - trendu (oczywiscie ono dominuje)
   filter(word != str_to_lower(str_replace_all(trend, "#", ""))) %>%
   # bez stop words
   filter(!word %in% pl_stop_words) %>%
    filter(!word %in% stop_words$word)

Teraz poskładajmy wszystko w całość w ramach jednej pętli idącej po kolei trend po trendzie:

trends <- unique(words$trend)

for(i in 1:length(trends)) {
   # zbiór twittów z tagu
   tweets_an_trend <- tweets_an %>% filter(trend == trends[i]) 

   # liczba twittów w czasie
   tweets_an_trend %>%
      count(created_at) %>%
      ungroup() %>%
      ggplot() +
      geom_point(aes(created_at, n), color="darkgreen", alpha = 0.3, size = 3) +
      expand_limits(y = 0) + labs(x="Czas", y="Liczba twittów")

   # chmurka słów
   tmp <- filter(words, trend == trends[i])
   wordcloud(tmp$word, tmp$n,
             min.freq = mean(tmp$n)+sd(tmp$n),
             colors = RColorBrewer::brewer.pal(12, "Paired"))

   # najpopularniejsze twitty
   tweets_an_trend %>%
      select(screen_name, text, status_id, created_at,
             retweet_count, favorite_count) %>%
      mutate(text = gsub("\n", " ", text)) %>%
      mutate(score = retweet_count + favorite_count) %>%
      top_n(10, wt = score) %>%
      arrange(desc(score), desc(created_at)) %>%
      mutate(link = paste0("[",
                           format(created_at, "%Y-%m-%d @ %H:%M"),
                           "](https://twitter.com/",
                           screen_name,
                           "/status/",
                           status_id,")")) %>%
      select(Twitt=text, Czas=link, Autor=screen_name,
             RTs=retweet_count, FAVs=favorite_count)

}

Wynik powyższego fragmentu kodu zamieszczam na końcu wpisu.

Automatyzacja

No fajnie, fajnie, ale z całego opisu wynika, że tu trzeba kliknąć, tam co 15 minut coś uruchomić, potem zapisać plik, coś wygenerować. Masakra, co to za automat?! Otóż można to wszystko zautomatyzować. Wystarczy:

  • przygotować w sumie cztery pliki: skrypt do pobierania trendów, skrytp do pobierania twittów, szablon raportu (na przykład w postaci dokumentu Rmarkdown) oraz skrypt renderujący dokument Rmarkdown
  • do unixowego crona lub windowsowego Harmonogramu zadań (czy jak to się tam nazywa) dodać uruchomienie skryptu do pobierania trendów
  • przed przeglądem raportu uruchomić skrypt do pobrania twittów oraz renderujący raport
  • gotowy raport można oglądać w przeglądarce (jeśli renderujemy go do HTMLa) lub np. w PDFie
  • uruchomienie przeglądarki można również zawrzeć w skrypcie

W takiej konfiguracji na przykład co 15 minut w tle pobierają nam się trendy, a jeśli chcemy przeczytać raport - klikamy na ikonkę, maszyna się mieli (pobiera twitty i buduje raport) i otwiera na koniec przeglądarkę z wynikiem. Można też razem z pobraniem trendów przygotować ich scoring, pobrać twitty, a sam raport zbudować jako aplikację R/Shiny, która po uruchomieniu na początek wczytuje twitty, a póżniej robi z nimi co zechcemy. Jak takową zbuduję to nie omieszkam poinformować. Tymczasem - poniżej efekt działania maszynki aktualny na 2017-06-20, 13:32. Zwróćcie uwagę co pojawia się na polskim Twitterze - w moim odczuciu polski Twitter to polityka o prawicowym odcieniu oraz tzw. gimbaza. Może właśnie dlatego nie jest tak popularny?

Wynik działania skryptu

TREND: egzaminzawodowy

TwittCzasAutorRTsFAVs
despacito dzisiaj jest egzamito proszę o chociaż 20 punktito chce to zdanito despasito #egzaminzawodowy2017-06-20 @ 01:03prpstrstdims5042
A CO TAM KURWA, ROBIE #SHINE_FOREVER #projektlady #POLSWE #egzaminzawodowy https://t.co/sUCzeigIU32017-06-20 @ 07:31flawlessugar367
wiecie czego ja sie najbardziej boje? że bateria w kalkulatorze przestanie mi działać XD #egzaminzawodowy2017-06-20 @ 08:21opsitsharreh2431
#egzaminzawodowy Zdałem! Mistrz painta!<U+00A0><U+00BD><U+00B8><U+008D> https://t.co/aKHhRhXeQ12017-06-20 @ 12:51Hispadon043
nie stresujcie sie, serio ja zadnego probnego praktycznego nie zdalam, a na normalnym mialam 100% takze no XDDD #egzaminzawodowy2017-06-20 @ 11:09drevzix610
Czy 3 czarne długopisy mi wystarczą Boje się że mój kalkulator nie jest prosty A co jeśli się spóźnie Ide sie zajebać #egzaminzawodowy2017-06-20 @ 08:06daria9oo9411
kto musiał wstać o 7 pomimo że egzamin ma 10 bo szukał po całym mieście kalkulatora i czarnego długopisa? <U+00A0><U+00BD><U+00B9><U+008B> #egzaminzawodowy2017-06-20 @ 08:29MaddieJLemon38
TRZYMAM MOCNIUTKO ZA WSZYSTKICH KCIUKI, DACIE RADĘ <U+270A> #egzaminzawodowy2017-06-20 @ 07:57xmylukeyx83
TO JUZ DZISIAJ #egzaminzawodowy2017-06-20 @ 04:47buterazix54
Powodzenia życzę dzisiaj wszystkim którzy piszą #egzaminzawodowy w każdej kwalifikacji2017-06-20 @ 08:22FreakyShoter35
nie wierze że stresowałam sie jebanym egzaminem gimnazjalnym, a to jest gówno do tego #egzaminzawodowy2017-06-20 @ 08:19opsitsharreh35

TREND: W Polsce

TwittCzasAutorRTsFAVs
Naprawdę wystarczy dać 500 zł i postraszyć islamskimi terrorystami, by w Polsce rządzić? Rozliczyć bezprawie PiS to mało. Trzeba edukować.2017-06-20 @ 07:25PSzubartowicz44298
<U+00A0><U+00BD><U+00B4><U+00B4>Dziś o 3.45 rano kierowca ciężarówki zarejestrowanej w Polsce zginął w ataku migrantow pod Calais https://t.co/ZFeITbKFcs2017-06-20 @ 07:49ErykMistewicz21285
Tarczyński: To wojna cywilizacji i my tej wojny w Polsce nie chcemy. Tej wojny w Polsce nie będzie dopóki rządzi PiS https://t.co/lTmuAXpAUx2017-06-20 @ 00:08D_Tarczynski67221
Zostałem oskarżony z art.256 kk. Za co konkretnie?Za mówienie NIE Talmudowi i banderyzmowi. Rozprawa jesienią. Jesteśmy w Polsce? POMOŻECIE? https://t.co/1vd29XMPhL2017-06-20 @ 12:15jacekmiedlar56118
Szukali tego faszyzmu w Polsce i w końcu znaleźli. A jak się nie ma co się lubi, to się bierze faszyzm leworęczny. https://t.co/pg71d8WBGE2017-06-20 @ 11:12makowski_m40123
W Polsce była taka “kolaboracja z Niemcami”, że 6 mln obywateli RP przypłaciło to życiem.. https://t.co/CHZuviW5o22017-06-20 @ 00:05de_Talleyrand_3155
NAJWIĘKSZA AFERA W POLSCE. WIADOMO KTO ZA NIĄ STOI I WIADOMO, DLACZEGO NIE CHCĄ TEGO WYJAŚNIĆ… https://t.co/eobHXaKws9 https://t.co/0Q1e5YuyD92017-06-20 @ 09:58SOKzBURAKApl2946
Czy możesz mi jenocie wyjaśnić, jakim cudem mamy w Polsce uchodźców z Czeczenii? Czy my graniczymy z Czeczenią? https://t.co/e6pnXnJBLi2017-06-20 @ 09:37LeskiPiotr1252
Wybaczcie ironiczny ton, bo rzeczywiście, cytując Garczarka: w Polsce wciąż są ludzie, ktorzy budzą się z krzykiem w środku nocy.2017-06-20 @ 08:40SamPereira_340
W Polsce jest pewien target kibiców, którzy nigdy nie przestaną traktować siatkarzy jak półbogów. Aż przykro na to patrzeć.2017-06-19 @ 23:45randomowykibic1227

TREND: Calais

TwittCzasAutorRTsFAVs
Van driver killed after migrants drag tree trunks onto road in Calais. https://t.co/EbR2iRgVXX2017-06-20 @ 13:18PrisonPlanet202151
Houses in Béthune, Pas-de-Calais, France https://t.co/rujocQB1d12017-06-20 @ 11:58archpics64158
Truck driver dies as he crashes into roadblock of tree trunks set up by migrants near #Calais https://t.co/YaSPJ0Ix6R https://t.co/Tnit1qfGPN2017-06-20 @ 11:50RT_com12358
Calais lorry driver dies thanks to barriers setup by immigrants https://t.co/vQaPlN8kxc2017-06-20 @ 13:09DavidJo529519459940
Bonjour @OmarSy et @QueensChristine. Un petit mot pour le chauffeur tué par les migrants ? #Calais https://t.co/m173Lp6TqW2017-06-20 @ 12:54DamienRieu7460
Calais van driver dead in migrant roadblock crash https://t.co/YQ1hH1UsMG2017-06-20 @ 11:27BBCWorld6857
jak ktoś nadal twierdzi że uchodźcy nie stanowią zagrożenia to niech powie to rodzinie Polaka który zginął dziś pod Calais przez tę dzicz <U+009F><U+0098><U+00A1><U+009F><U+0098><U+00A1> https://t.co/02nTtD1l0H2017-06-20 @ 12:38daguuniaa3655
Towarzysza pseudoekologa Cimoszewicza, wraz z synalem posłem, prosimy o interwencję w Calais. Tam pisowcy z Erytrei zdrowe drzewa wycinają.2017-06-20 @ 11:26AMKpatriot1857
Van driver dies after migrants block Calais road with tree trunks https://t.co/JaiNHwZCOT2017-06-20 @ 12:30Telegraph5218
Migranten in #Calais verursachten offenbar mit liegenden Baumstämmen auf der A16 einen tödlichen Unfall. https://t.co/oDMKND7pr92017-06-20 @ 11:53anna_IIna4223

TREND: TeenChoice

TwittCzasAutorRTsFAVs
they deserve it so much!! My #TeenChoice For #ChoiceCollaboration Is “Just Hold On” By @Louis_Tomlinson & @steveaoki https://t.co/LXYkrqxHzF2017-06-20 @ 13:31LouisPromoSquad102
#TeenChoice #ChoiceSongGroup Shout Out To My Ex by @LittleMix https://t.co/ovSzCF1Pe02017-06-20 @ 13:31adidaswithlm11
My #TeenChoice nominee for #ChoiceMusicGroup us @TheVampsband <U+009F><U+0096><U+00A4> @TheVampsJames https://t.co/V9aiDwlLYI2017-06-20 @ 13:31fairlyoddlevi11
Ang tatamad niyo Katycats! #TeenChoice #ChoiceFemaleArtist @katyperry2017-06-20 @ 13:31iconicjohnroy11
Shawn please follow me/tweet me/dm me/visit me… #ChoiceMaleArtist #TeenChoice @ShawnMendes2017-06-20 @ 13:31SnowWhite_010520
My #TeenChoice for #ChoiceRockArtist is @Harry_Styles2017-06-20 @ 13:32larryissexyyy10
My #TeenChoice nominee for #ChoiceRockArtist is @Harry_Styles2017-06-20 @ 13:32ayotIQ10
My #TeenChoice pick for #ChoiceCollaboration is @Louis_Tomlinson & @steveaoki for “Just Hold On” <U+009F><U+0098><U+0087>2017-06-20 @ 13:32louisrunmeover10
My #TeenChoice vote for #ChoiceRockArtist is @Harry_Styles2017-06-20 @ 13:32xaroulakats10
My #TeenChoice nominee for #ChoiceThrowbackTVShow is #BuffyTheVampireSlayer!!!2017-06-20 @ 13:32BuffyIsImmortal10
#TeenChoice for #ChoiceSongGroup is Shout Out To My Ex by @LittleMix https://t.co/di7yBk2wBk2017-06-20 @ 13:31dilayhaspolat10
My #TeenChoice for #ChoiceMaleArtist is @Harry_Styles2017-06-20 @ 13:31styIeskay10

TREND: POLSWE

TwittCzasAutorRTsFAVs
A CO TAM KURWA, ROBIE #SHINE_FOREVER #projektlady #POLSWE #egzaminzawodowy https://t.co/sUCzeigIU32017-06-20 @ 07:31flawlessugar367
<U+00A0><U+00BC><U+00B7><U+00B5><U+00A0><U+00BC><U+00B7><U+00B1> Dawid Kownacki: “I knew this game was a big chance for me.” <U+26BD><U+FE0F><U+00A0><U+00BD><U+00B2><U+00AA> #U21EURO #POLSWE https://t.co/IlDEqrIZM52017-06-19 @ 23:55UEFAUnder21834
Przemarsz szwedów na @ArenaLublin na mecz #POLSWE. Przystanek pod hotelem piłkarzy. #Lublin https://t.co/cQnwR8vX6t2017-06-20 @ 00:08BartoszMargul48
#TooHotToSleep #sportsMW #RoyalAscot #TDI17 #HRK17 #Mourinho #POLSWE #maturita2017 #20giugno #Consip #svkeng #NIMAMD https://t.co/vPPzNAMbWd2017-06-20 @ 13:12kortru256
.@dkownacki24 cały czas wierzy w awans! #POLSWE #U21EURO Dołączcie do zabawy -> https://t.co/aUT9kJ31Lh https://t.co/fVDXbEMPRC2017-06-20 @ 08:20polsatsport011
#POLSWE https://t.co/d8V0Wyx21y2017-06-20 @ 00:26kroliczyomyk08
Cytaty słynnych ludzi ;) #POLSWE #mecz #goorsky #humor https://t.co/4HlTyMlbYx2017-06-19 @ 23:50goorsky_pl17
Po co była Szwedom pomarańczowa konewka na meczu? #POLSWE https://t.co/3TsMhRHRWC2017-06-20 @ 01:45AlekTabor07
Zobacz wczorajszy przemarsz Szwedów przez ulice Lublina [ZDJĘCIA, WIDEO] <U+25B6><U+FE0F> https://t.co/uh4ZFWZXpu #POLSWE https://t.co/ESOczIfEjg2017-06-20 @ 08:59GOL24pl06
#POLSWE e #SVKENG per l’ #EUROPEOUNDER21 VEDI TUTTO SU https://t.co/RKqBne2v9W #Notizie #News #Scrivoquandovoglio #Calcio #Poland #Sweden https://t.co/zrghTCaaHa2017-06-19 @ 23:53ScrivoQuandoVog33

TREND: AmberGold

TwittCzasAutorRTsFAVs
Polecam śledzić dzisiejsze przesłuchanie komisji #AmberGold,bo świadek Kloskowski ma relatywnie małe braki w pamięci:https://t.co/VXRoH3jhh32017-06-20 @ 12:29wassermann_ma78195
Konkurs na stanowisko dla Michała Tuska? Kloskowski: Po co konkurs. Ja chciałem zatrudnić konkretnie Michała Tuska! #ambergold PO w pigułce2017-06-20 @ 12:25WBiedron3391
Czy pupilek PO na Pomorzu opowie nam dzisiaj jak załatwiał robotę dla Michała Tuska u przekręciarza Marcina S.? T. Kloskowski #AmberGold2017-06-20 @ 10:09WBiedron2169
Suski, który nigdy nie pracował w biznesie i nie wie jak on funkcjonuje, udaje w komisji #AmberGold eksperta od funkcjonowania lotniska. https://t.co/b1fnIESndF2017-06-20 @ 12:07zKaszebe1563
Wyprzedzam fakty,jakby pan Kloskowski stwierdził,że nie było go na otwarciu terminala i nie zna Nowaka.. #AmberGold https://t.co/M5VaNt94Xk2017-06-20 @ 10:37zdrapkaaa2034
Małe ćwiczenie logopedyczne przed jutrzejszą komisją #AmberGold Spadł bąk na strąk, a strąk na pąk. Pękł pąk, pękł strąk, a bąk się zląkł.2017-06-20 @ 08:59tender_Stig1039
Komisja ds. #AmberGold przesłucha prezesa gdańskiego lotniska https://t.co/DeXlhcoLd9 #wieszwiecej2017-06-20 @ 07:24tvp_info924
Nie mówcie proszę mojemu szefowi, że przyniosłam dziś do pracy słuchawki, by przemycać urywki transmisji z komisji śledczej #AmberGold <U+009F><U+0098><U+0089> <U+009F><U+0099><U+008A> <U+2708>2017-06-20 @ 08:52justi_justyna024
Plan dnia: Posiedzenie komisji śledczej ds. #AmberGold, spotkanie @BeataSzydlo z premierem Szwecji https://t.co/sT7FoO2wCd https://t.co/pSJlcxuXQP2017-06-20 @ 07:18DoRzeczy_pl814
Podobno młody Tusk wjedzie jutro kłusem na koniu przed komisję #AmberGold https://t.co/bM2fPv79Tt2017-06-20 @ 11:21plan3letni714

TREND: Paryża

TwittCzasAutorRTsFAVs
BUM! Zamachowiec z Paryża miał na imię Adam a jego matka jest Polką. Psychoprawico. Czekam na wasz przekaz dnia w tej sprawie. Czas start!2017-06-20 @ 09:56BLewak66215
Szef klubu PiS w Radomiu ws. uchodźców: nie chcemy tu Londynu, Brukseli i Paryża. Spokojnie. Wam grozi maksymalnie Radom.2017-06-20 @ 10:48BLewak36212
Jeśli to prawda że matka niedoszłego zamachowcy z Paryża przyjechała do Francji w 80s, to mamy dowód że należało pomagać Polakom na miejscu.2017-06-20 @ 09:18PanZolty35142
Terrorysta z Paryża miał polskie korzenie. Mam nadzieję, że Francuzi nie wezmą przykładu z PL rządu i nie będą dyskredytować całego narodu.2017-06-20 @ 11:38Antosiewicz1539
Syn polskiej imigrantki zmontował atak w Paryżu. W #UK Polacy rasistowsko pobili Brytyjczyka. https://t.co/yqeLTeKK1C2017-06-20 @ 09:26BWicinski1624
Ciekawe, co na to powiedzą wszyscy przeciwnicy imigrantów. Zamachowiec z Paryża miał polskie korzenie https://t.co/Zc001YRUlv2017-06-20 @ 09:17jedlina_olgierd730
Zamachowiec z Paryża miał pozwolenie na broń, choć był… na liście terrorystów https://t.co/5IS63fSpy22017-06-20 @ 10:09niezaleznapl1015
Zamachowiec z Paryża miał pozwolenie na broń, choć był… na liście terrorystów https://t.co/BZE1vm0vUO2017-06-20 @ 10:12aneczka07612
“Zamachowiec z Paryża to Adam. D. Ma polskie korzenie” @wirtualnapolska nie przestaje manipulować! W kolejnych screenach pokażę ich taktykę<U+00A0><U+00BD><U+00B8><U+00A0> https://t.co/n2IwTRgdVZ2017-06-20 @ 09:00zabikozord99
Zamachowiec z Paryża miał pozwolenie na broń, choć był… na liście terrorystów https://t.co/YVS9C7N2H12017-06-20 @ 10:42AdamNieznaj159

TREND: KPRM

TwittCzasAutorRTsFAVs
Dziś w #KPRM premier @BeataSzydlo gości premiera Szwecji Stefana Löfvena. https://t.co/0QxQyshsxK2017-06-20 @ 09:08PremierRP1755
W #KPRM premier @BeataSzydlo wita premiera Szwecji Stefana Löfvena. https://t.co/60lPTksYar2017-06-20 @ 08:32PremierRP1754
W #KPRM trwa spotkanie z mediami premier @BeataSzydlo oraz premiera Szwecji Stefana Löfvena. https://t.co/VZvrFhbIqX2017-06-20 @ 10:12PremierRP1120
Premier @BeataSzydlo w #KPRM: Polska rozwija się dynamicznie, realizujemy ambitny plan.2017-06-20 @ 10:16pisorgpl722
Premier @BeataSzydlo w #KPRM: Z Premierem Szwecji rozmawialiśmy o zagrożeniach oraz sytuacjach, które nas niepokoją.2017-06-20 @ 10:14pisorgpl718
Premier @BeataSzydlo w #KPRM: Szwecja jest dla Polski partnerem strategicznym i chcemy wzmacniać naszą współpracę.2017-06-20 @ 10:19PremierRP618
Premier @BeataSzydlo w #KPRM: Utrzymanie międzynarodowego poparcia dla Ukrainy jest kluczowe dla rozwoju i stabilizacji tego państwa.2017-06-20 @ 10:15pisorgpl816
Premier @BeataSzydlo w #KPRM: z Premierem Szwecji rozmawialiśmy m.in. na temat naszych stosunków bilateralnych i sytuacji gospodarczej.2017-06-20 @ 10:13pisorgpl319
Premier @BeataSzydlo w #KPRM: W trakcie rozmowy z Premierem Szwecji koncertowaliśmy się na kryzysie migracyjnym i #Brexit.2017-06-20 @ 10:17pisorgpl813
Premier @BeataSzydlo w #KPRM: Szczególną wagę ma nasza współpraca ze Szwecją w zakresie partnerstwa wschodniego.2017-06-20 @ 10:14pisorgpl516

TREND: Dawidowicza

TwittCzasAutorRTsFAVs
@TomekHajto7 @GIPHY Manager Dawidowicza ma jakieś sekstaśmy na Marcina Dornę?2017-06-20 @ 00:58pajkiel213
Podobno składamy skargę do UEFY za brutalny faul Dawidowicza na Linettym. Bez piłki!!!2017-06-20 @ 00:20GolaBartek08
@TwaroTwaro Ale nie rozumiem trochę filozofii Dorny. Jest środkowy pomocnik Murawski ograny. Dobry sezon a na siłę kreuje się Dawidowicza2017-06-20 @ 10:18bartek1987102
https://t.co/7zEYROJqwe dla wszystkich ktorych wczoraj ominął roast Dawidowicza2017-06-20 @ 09:05Trener_Jarzabek02
Naprawdę przykro było patrzeć na poczynania #Dawidowicza. Kolejny chłopak, który chciał za szybko wejść w poważną piłkę. Czas na odbudowę.2017-06-20 @ 08:21Mikolaj_Zimoch11
@lukaszd85 Więcej od Dawidowicza w Benfice B <U+009F><U+0098><U+0082><U+009F><U+0098><U+0082> ale pełna zgoda, za wiele nie zwojował ;)2017-06-20 @ 12:20wojciechwrycza01
@IwanskiMaciej Pan redaktor uprawia żenadę publicznie broniąc Dawidowicza. Jest zawodowym piłkarzem, a gra jak amator z podwórka.2017-06-20 @ 11:45Ignem_feram01
Może na pierwsze 15 minut Dorna wystawi Dawidowicza na szpicy żeby przypadkowo nie strzelić bramki za szybko? #POLSWE #POLENG #EuroU212017-06-20 @ 09:00lukaszprochno01
@wkamel76 @PawlowskiGK “Gwiazdy” zawsze szybko spadają.. przykłady Pawłowskiego, Dawidowicza, naszego dyrektora ds. Kontaktu z mediami czyt. Bielika itp..2017-06-20 @ 08:00Patryk_Wiese01
@tomekpasieczny Oglądał ich na treningach. Skoro postawił na Dawidowicza/Jacha to chyba Bielik aż tak nie mógł ich kasować? Albo trener ślepy.2017-06-20 @ 00:20M_Wawrzynowski01
Wcale mnie nie dziwi gra Dawidowicza. Poza walecznoscia nigdy nic nie pokazywal.2017-06-20 @ 00:18Filipgks01
@KoltonRoman A kto jest menadżerem Dawidowicza?2017-06-20 @ 00:07MegafonAG01

TREND: Sejmu

TwittCzasAutorRTsFAVs
20.6.1940 Niemcy zabili w Palmirach 358 osób. Marszałka sejmu Macieja Rataja i złotego medalistę Janusza Kusocińskiego. Pamięć nie zagaśnie! https://t.co/DnBW2Qx6Iu2017-06-20 @ 08:31analizuje4353
Wśród ofiar byli były marszałek Sejmu Maciej Rataj, działacz PPS Mieczysław Niedziałkowski i złoty medalista olimpijski Janusz Kusociński https://t.co/mDHjgAqLj62017-06-20 @ 07:24ipngovpl3627
“To jakaś głupota. Dowolny lek może mieć takie działanie np. lek na astmę”. https://t.co/VUxF6J1eqY https://t.co/wEBbGBXmo32017-06-20 @ 10:27SOKzBURAKApl719
KRS i sądy zdjęte z porządku obrad Sejmu #300POLITYKALIVE https://t.co/1dEtS1xcDF2017-06-20 @ 10:14300polityka56
Projekty zmian w KRS i sądach skreślone z porządku obrad Sejmu https://t.co/kGFQ3rY6PT https://t.co/dk3Q9wRBVu2017-06-20 @ 11:18RepublikaTV28
#Kuchciński: skreśliłem z porządku obrad posiedzenia Sejmu projekt zmian w ustawie o #KRS oraz w Prawie o ustroju sądów powszechnych2017-06-20 @ 10:16rzeczpospolita17
Już niecała godzina dzieli nas od rozpoczęcia 44. posiedzenia Sejmu. Początek obrad o godz. 10.00. https://t.co/7NydMndgvN2017-06-20 @ 09:09KancelariaSejmu44
77 lat temu w Palmirach Niemcy rozstrzelali 378 Polaków w tym marszałka Sejmu Macieja Rataja https://t.co/2s1k13cEzm2017-06-20 @ 09:07PiotrZgorzelski44
Ustawa o zakazie propagowania komunizmu jednym z tematów posiedzenia @KancelariaSejmu https://t.co/1pWuQzwz9B2017-06-20 @ 11:47RadioMaryja43
.@MarekKuchcinski: skreśliłem z porządku obrad obecnego posiedzenia Sejmu projekt zmian w ustawie o KRS … 1/22017-06-20 @ 10:17RadioMaryja43

TREND: Trybunał Konstytucyjny

TwittCzasAutorRTsFAVs
Obecny Trybunał Konstytucyjny ma tyle wspólnego z Konstytucją RP, co bita śmietana z przemocą.2017-06-20 @ 12:41pola_mm1882
Trybunał Konstytucyjny: Przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa są niekonstytucyjne #KRS2017-06-20 @ 12:59MarekKuchcinski2263
Trybunał Konstytucyjny przy okazji orzeczenia o KRS zdecydował także o unieważnieniu prawa grawitacji i podważył twierdzenie Pitagorasa.2017-06-20 @ 13:10joannamucha1146
Trybunał Konstytucyjny: Przepisy ustawy o KRS dotyczące zasad wyboru sędziów do Rady są niezgodne z konstytucją! https://t.co/lMuWJcZMOh https://t.co/WfrtaPtTon2017-06-20 @ 13:01AdamNieznaj11418
Trybunał Konstytucyjny: Przepisy ustawy o KRS dotyczące zasad wyboru sędziów do Rady są niezgodne z konstytucją! https://t.co/G1h96COdw82017-06-20 @ 12:54wPolityce_pl715
Nie dajcie sobie wmówić, że to, co wydaje obecnie Trybunał Konstytucyjny to wyroki TK. Wydają je nie-sędziowie. To opinie przy ciasteczkach.2017-06-20 @ 12:47KuczynskiM516
Trybunał Konstytucyjny: przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa - niekonstytucyjne https://t.co/6myj9fqawR2017-06-20 @ 12:46PAPinformacje910
#KOD zaprasza 20 czerwca przed Trybunał Konstytucyjny https://t.co/xOzh7Ofxvn2017-06-19 @ 23:52Kom_Obr_Dem512
Trybunał Konstytucyjny uznał za niezgodne z ustawą zasadniczą przepisy, dotyczące wyboru sędziów do Krajowej Rady Sądownictwa #KRS #TK (IAR) https://t.co/y8rgMftwDr2017-06-20 @ 12:43PolskieRadio2427
@tvn24 i @gazetapl_news jeszcze nie rozumieją, że Trybunał Konstytucyjny właśnie wydał wyrok na najwyższą kastę.2017-06-20 @ 12:43kontrowersje07
Trybunał Konstytucyjny orzekł, że zaskarżone przez ministra Ziobrę przepisy ustawy o KRS-ie są niekonstytucyjne. @TOKFM_NEWS2017-06-20 @ 12:32rochkowalski34

TREND: Krajowej Rady Sądownictwa

TwittCzasAutorRTsFAVs
Trybunał Konstytucyjny: Przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa są niekonstytucyjne #KRS2017-06-20 @ 12:59MarekKuchcinski2263
O 15 w @RepublikaTV o wyroku TK w sprawie Krajowej Rady Sądownictwa. Ważny dzień dla sądownictwa czytaj PAŃSTWA2017-06-20 @ 11:10artomczynski1429
Trybunał Konstytucyjny: przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa - niekonstytucyjne https://t.co/6myj9fqawR2017-06-20 @ 12:46PAPinformacje910
#TK: niekonstytucyjne przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa https://t.co/MB0JvcxGSb2017-06-20 @ 12:35Wiadomosci_PR94
TK: niekonstytucyjne przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa. https://t.co/GNImdBpbNh2017-06-20 @ 12:35RMF24pl94
#PAP: #TK: niekonstytucyjne przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa. #Pilne2017-06-20 @ 12:38RadioMaryja65
Panie @Jaroslaw_Gowin dlaczego Pan znowu klamie? “Kadencja wybranych członków Krajowej Rady Sądownictwa trwa cztery lata”2017-06-20 @ 07:33JacekJaworskiGd29
Art 187. ust 3. Konstytucji RP: “Kadencja wybranych członków Krajowej Rady Sądownictwa trwa cztery lata”. #KRS #TK2017-06-20 @ 12:58JakubDudek9727
#TK: niekonstytucyjne przepisy o obecnych zasadach wyboru sędziów do Krajowej Rady Sądownictwa #KRS https://t.co/BXde5qU8me2017-06-20 @ 12:45Wiadomosci_PR27
Trybunał Konstytucyjny uznał za niezgodne z ustawą zasadniczą przepisy, dotyczące wyboru sędziów do Krajowej Rady Sądownictwa #KRS #TK (IAR) https://t.co/y8rgMftwDr2017-06-20 @ 12:43PolskieRadio2427