Skip to content

Instantly share code, notes, and snippets.

@jirutka
Created March 9, 2016 14:30
Show Gist options
  • Save jirutka/bad0977bebf2fa73d543 to your computer and use it in GitHub Desktop.
Save jirutka/bad0977bebf2fa73d543 to your computer and use it in GitHub Desktop.
Twitter statistics and archive for #InstallFest 2016

Twitter statistics for #InstallFest 2016

Tweets between 2016-03-04 and 2016-03-07

  • Number of tweets (excluding RTs): 143

  • Number of favourites: 440

  • Number of retweets: 153

  • Number of tweeting users: 53

TOP tweeting users

List of most active users sorted by number of their tweets with hashtag #InstallFest.

Rank User(s) Tweets

1.

@InstallFest_SH

21

2.

@vpsfree_cz

8

3.

@krcmar

7

4.

@LinuxEXPRES, @jhrcz

6

5.

@AVC_SH, @Leaker_ZRH, @PaulosV, @chiptronCZ, @tziokasi

5

6.

@liberouter, @linuxmarketcz

4

7.

@JakubJirutka, @JiriFolta, @Oskar456, @Rootcz, @active24cz, @kotheram, @petrstehlik

3

TOP favourited tweets

Rank Tweet(s) Favourites

1.

@AVC_SH: Slibované foto našeho skvělého teamu z hlavní místnosti #installfest #girlpower #kdotoma #wearehalfredhead https://t.co/3zNT76zjHu

23

2.

@krcmar: Lidi z @AVC_SH jsou neskuteční borci, sobotní videa z #InstallFest jsou venku! Včetně mé přednášky o Let’s Encrypt. https://t.co/GWJpSBlX6D

21

3.

@krcmar: Číňani dělají VDSL modem do SFP. Bylo by to dokonalé řešení pro Turris Omnia. #InstallFest https://t.co/JJn82OZfdH https://t.co/yWf1v1WNdT

16

4.

@krcmar: Kolega teď na hospodském setkání před #InstallFest : "Titul je dobrý. Můj psychiatr mi říká 'pane doktore'." 😀😀😀 @InstallFest_SH

14

5.

@InstallFest_SH: #installfest děkuje sponzorům @active24cz @SUSE @redhatcz @vpsfree_cz @AkademieCZNIC @CVUTPraha @FIT_CTU @CESNET_cz a @Rootcz

13

6.

@vpavlin: My container talk at #installfest is over. Promoted @ProjectAtomic, wore @CentOS shirt.. https://t.co/J9atludEDL

@vpsfree_cz: Věděli jste, že náš kávovar na #InstallFest má sériový port? Zlí jazykové tvrdí, že už tam někdo nainstaloval Linux. https://t.co/2dxqREVER4

12

7.

@AVC_SH: Všechny sobotní přednášky z #installfest jsou již nyní online.

11

TOP retweeted tweets

Rank Tweet(s) Retweets

1.

@InstallFest_SH: #installfest děkuje sponzorům @active24cz @SUSE @redhatcz @vpsfree_cz @AkademieCZNIC @CVUTPraha @FIT_CTU @CESNET_cz a @Rootcz

10

2.

@AVC_SH: Slibované foto našeho skvělého teamu z hlavní místnosti #installfest #girlpower #kdotoma #wearehalfredhead https://t.co/3zNT76zjHu

@jhrcz: "Kdo posila logy pres UDP a ztrati je, nic jineho si nezaslouzi" :-))) by @verosk na #installfest

7

3.

@krcmar: Číňani dělají VDSL modem do SFP. Bylo by to dokonalé řešení pro Turris Omnia. #InstallFest https://t.co/JJn82OZfdH https://t.co/yWf1v1WNdT

@ptvician: Pokud mate tisic serveru a chcete pouzit #puppet, tak ho nejsnaze nainstalujete pomoci @ansible. (@davidkarban na #installfest )

@krcmar: Lidi z @AVC_SH jsou neskuteční borci, sobotní videa z #InstallFest jsou venku! Včetně mé přednášky o Let’s Encrypt. https://t.co/GWJpSBlX6D

6

4.

@InstallFest_SH: #installfest jede! Zrovna povídá @martinstrbacka z @CZ_NIC o #turris_omnia @turris_cz https://t.co/OjSxeigQQp

@vpavlin: My container talk at #installfest is over. Promoted @ProjectAtomic, wore @CentOS shirt.. https://t.co/J9atludEDL

@stepanb: Zítra rozhodně navštivte ESP8266 Workshop pořádaný @bastlirna na #installfest

5

5.

@krcmar: Kolega teď na hospodském setkání před #InstallFest : "Titul je dobrý. Můj psychiatr mi říká 'pane doktore'." 😀😀😀 @InstallFest_SH

4

All tweets archive

@AVC_SH

@DarmanCZE

@DaveRuzicka

@HalisCz

@InstallFest_SH

@JakubJirutka

@JanSmucr

@JiriFolta

@Krejdom

@Leaker_ZRH

  • Sat 9:27: a jedem - 3 minuty…​. #installfest

  • Sat 9:33: tweetwall na #installfest padla. :(

  • Sat 9:41: #turris #omnia #installfest vice nez 50% objednano s 2GB ram

  • Sat 9:54: #installfest #turris 3.0 bude brzo :)

  • Sat 10:03: konec dubna prvni zarizeni #omnia #turris #installfest

@LinuxEXPRES

@MarekSpacirek

@MichalProrok

@Oskar456

@PaulosV

  • Sat 12:44: @JakubJirutka :) ten resolver jsem zkusil v kombinaci s Dockerem a byl jsem docela spokojený #KnotDNS #installfest

  • Sat 18:18: Coming soon #RADIUS #InstallFest https://t.co/f0QClZZqaw

  • Sat 19:40: #InstallFest, díky za dnešní den, dobře jsem se bavil! Taky díky všem, co vydrželi na lightning talky :-)

  • Sat 21:32: Po těch letech, kdy jsem prakticky nic neprezentoval, těchto 7 minut byla dobrá zkušenost. Díky za ni. #InstallFest

  • Sun 16:17: Velmi prinosny workshop o monitoringu sitoveho provozu na #InstallFest https://t.co/fGvQhwfhWA

@PetrHodac

  • Sun 3:47: Kalby ze stredy na nedeli to je #peklo #installfest

@Petr_Kulich

@PijanCZ

@Rootcz

@Sesivany

  • Sun 10:09: Jedu odpoledne směr Brno, kdyby chtěl někdo z účastníků #installfest přiblížit domů.

@Sukovec

  • Sun 7:44: Dnes v 10 na #installfest povím o tom, jak zaměstnat tučňáky při tvorbě muziky. Track II a 25 minut, takže téma jenom pohladím po povrchu.

@active24cz

@atheiste

  • Sun 11:24: #installfest se profiluje do dvou odvětví, stejně jako Linux samotný - do programovatelných desek a distribuovaných technologií.

  • Sun 12:21: Jsem pozdě na "ELK - sežere vaše logy" od Věroše Kaplana a setsakra mě to mrzí! Super přednes, výborný talk. Těším se na záznam #installfest

@bejzz

@chiptronCZ

  • Fri 9:39: Těšíte se na #InstallFest? Nezapomeňte na sobotní přednášku o #STM32 od 15:00. https://t.co/3WJaPnsgHC

  • Sat 13:40: Jsme na #InstallFest. A darky mame s sebou :) #STM32 od 15:00 track II.

  • Sat 16:45: Prednaska na #linuxdays byla moc dlouha, na #installfest moc kratka…​ Mame co pilovat :)

  • Sun 9:25: Nedelni cast #InstallFest za chvili zacina.

  • Sun 10:26: Pravda, #ESP8266 z prevodniku nenapajejte. Pokud jste si neubastlili tenhle, 3V3 az 500mA :) #InstallFest https://t.co/nJIOw0fj78

@czhujer

@darnel_cz

@davidkarban

  • Sun 9:43: Chcete punkový mail klient? Zkuste Notmuch. #installfest

  • Sun 12:10: V rohu místnosti jsme naměřili jen 16 stupňů, asi tam budeme muset dát server. @verosk na #InstallFest

@eddyneilo

@hroncok

@jaklukcz

  • Sat 19:45: Tak jsem se konečně viděl s @mmajko. Na záchodech #InstallFest.

@jhrcz

  • Sat 10:14: #HaveAPI …​ instantni API na #InstallFest zni dost zajimave

  • Sat 17:29: @davidkarban …​ nasel jsem :-))) https://t.co/FvNZNfMl02 pripadne https://t.co/PHvTi0UTLd #installfest

  • Sun 11:30: Paradni sheepdog vs glusterfs vs ceph na #installfest od Ales Kapica. Ty minimalni funkcni pocty nodu jsou skvele.

  • Sun 13:13: "Kdo posila logy pres UDP a ztrati je, nic jineho si nezaslouzi" :-))) by @verosk na #installfest

  • Sun 14:25: haproxy balancovani v lmc od michal rychlik. Pekne kouknuti pod poklicku, z praxe #installfest …​ vice ha balanceru misto f5 megabalanceru

  • Sun 17:44: Po #installfest hrozi 2 veci …​ chut neco zkouset a chut na #clubmate …​ diky petrhodac :-) https://t.co/JsriKt7tk8

@kotheram

  • Sat 10:32: @InstallFest_SH Využití WiFi 25% 5GHz .11ac, 25% 5GHz .11n, 48% 2,4GHz .11n, 2% .11g. Celkem jen 5 zařízení s Windows #installfest #aruba

  • Sat 10:51: Chybička se vloudila. Na tropický ostrov si klidně zeleťe, ale my tu máme WiFi od @ArubaNetworks #installfest

  • Sun 20:37: Jak lépe zakončit #installfest než aktualizací pracovních Windows serverů? #justtrolling

@krcmar

@kubahorak

@latraxa

  • Sat 9:25: Těšíme se na #turris_omnia na #installfest

@liberouter

@linuxmarketcz

@mdecky

  • Sat 14:02: Myslel jsem, že hospoda v budově kolejí ČVUT bude queueing a scheduling zvládat lépe. Obzvláště s objednávkami den předem :) #installfest

  • Sat 23:51: Slajdy z mé #installfest přednášky na téma nízkoúrovňového programování: https://t.co/yB6UbnKGVX // CC @InstallFest_SH

@mmajko

@pavlixnet

  • Sun 8:55: #installfest Tak si pouštím záznam první přednášky včerejšího Track II od Jiřího Nápravníka a musím říct, že je to dobrá komedie.

@petrstehlik

  • Sun 11:08: Pokud nemate Stehliku dost na #installfest, dojdete v 15:00 na workshop o monitoringu sluzeb od @liberouter @CESNET_cz

  • Sun 11:13: Presny nazev #installfest workshopu je "Monitorování a bezpečnostní analýza v počítačové síti", abychom byli presni.

  • Sun 17:37: My presentation/workshop about #nemea dashboard was a hit. Thankseveryone @ #installfest https://t.co/pqyz07tmTw

@prvnivcesku

@ptvician

@seidl_gabriel

  • Sat 10:14: @flash_sh ma plno na sve prednasce o zpracovani textu v bashi na #installfest #shellporno

@stepanb

  • Sat 19:32: Zítra rozhodně navštivte ESP8266 Workshop pořádaný @bastlirna na #installfest

@tbedrich

  • Sat 17:47: V pisoáru na #InstallFest leží logo Windows a místo nápisu "Ideal Standard" je Tux. #hateFreeCulture

@tomcejka

  • Sun 17:35: Thanks #installfest, @PetrHodac and his team for excellent organization and support during the whole event! See you next year!

@tomkukral

@tziokasi

@vesp

@vpavlin

@vpsfree_cz


Generated on 2016-03-09 15:28:33 +0100.

#!/usr/bin/env ruby
#
# Quick & dirty script to generate some Twitter statistics for events.
#
# Usage:
# 1. gem install twitter
# 2. Register your “app” on https://apps.twitter.com/apps and set OAuth
# credentials here.
# 3. Profit!
#
# License:
# Creative Commons CC-Zero This file is made available under the Creative
# Commons CC0 1.0 Universal Public Domain Dedication.
# https://creativecommons.org/publicdomain/zero/1.0/deed.en
#
# Author: Jakub Jirutka
# Version: 2016-03-09
require 'ostruct'
require 'twitter'
require 'yaml'
######## Configuration ########
HASHTAG = '#InstallFest'
DATE_FROM = '2016-03-04'
DATE_TO = '2016-03-07'
USERS_LIST_LIMIT = 7
FAVORITES_LIST_LIMIT = 7
RETWEETS_LIST_LIMIT = 5
CACHE_FILE = 'data.yml'
client = Twitter::REST::Client.new do |config|
config.consumer_key = 'YOUR_CONSUMER_KEY'
config.consumer_secret = 'YOUR_CONSUMER_SECRET'
config.access_token = 'YOUR_ACCESS_TOKEN'
config.access_token_secret = 'YOUR_ACCESS_SECRET'
end
year = DATE_FROM.split('-').first
######## Functions ########
def top_tweets_by(field, tweets)
tweets.lazy
.group_by { |tw| tw.public_send(field) }
.sort.reverse
.map { |count, tweets| [count, tweets.sort_by(&:created_at)] }
end
def top_users_by_tweets_count(tweets)
tweets.lazy
.group_by(&:user)
.map { |user, tweets| [user, tweets.count] }
.group_by(&:last) # group by number of tweets
.sort.reverse
.map { |count, tuples| [count, tuples.map(&:first)] } # extract users as value of the entry
.map { |count, users| [count, users.sort_by(&:screen_name)] }
end
def title(level, text)
puts "\n\n#{'=' * level} #{text}\n\n"
end
def table(headers, data, &block)
lines = ['|===', '| ' + headers.join(' | '), '']
data.each_with_index do |item, idx|
(yield item, idx + 1).each do |col|
lines << "| #{col}"
end
lines << ''
end
lines << '|===' << ''
puts lines.join("\n")
end
def format_tweet_text(text)
text.gsub(/@(\w+)/, 'https://twitter.com/\1[@\1]')
.gsub(/(#\w+)/, '_\1_')
.gsub(/^\./, '')
end
def format_date(date)
date.strftime('%a %k:%M').squeeze(' ')
end
format_user = ->(user) { "#{user.uri}[@#{user.screen_name}]" }
format_tweet = ->(tweet) { "@#{tweet.user.screen_name}: #{tweet.uri}[#{tweet.text}]" }
######## Main ########
tweets =
if File.exist? CACHE_FILE
YAML.load(File.read(CACHE_FILE))
else
client.search("#{HASHTAG} since:#{DATE_FROM} until:#{DATE_TO}", result_type: :all)
.reject(&:retweet?)
.tap { |tweets| File.write(CACHE_FILE, YAML.dump(tweets)) }
end
users = tweets.map(&:user).uniq
favourites_count = tweets.map(&:favorite_count).reduce(:+)
retweets_count = tweets.map(&:retweet_count).reduce(:+)
top_users = top_users_by_tweets_count(tweets).take(USERS_LIST_LIMIT)
top_favorites = top_tweets_by(:favorite_count, tweets).take(FAVORITES_LIST_LIMIT)
top_retweets = top_tweets_by(:retweet_count, tweets).take(RETWEETS_LIST_LIMIT)
# Print report in AsciiDoc
title 1, "Twitter statistics for #{HASHTAG} #{year}"
puts "_Tweets between #{DATE_FROM} and #{DATE_TO}_\n\n"
puts "* Number of tweets (excluding RTs): #{tweets.count}"
puts "* Number of favourites: #{favourites_count}"
puts "* Number of retweets: #{retweets_count}"
puts "* Number of tweeting users: #{users.count}"
title 2, 'TOP tweeting users'
puts "List of most active users sorted by number of their tweets with hashtag #{HASHTAG}.\n\n"
table ['Rank', 'User(s)', 'Tweets'], top_users do |(count, users), idx|
["#{idx}.", users.map(&format_user).join(', '), count]
end
title 2, 'TOP favourited tweets'
table ['Rank', 'Tweet(s)', 'Favourites'], top_favorites do |(count, tweets), idx|
["#{idx}.", tweets.map(&format_tweet).join("\n\n"), count]
end
title 2, 'TOP retweeted tweets'
table ['Rank', 'Tweet(s)', 'Retweets'], top_retweets do |(count, tweets), idx|
["#{idx}.", tweets.map(&format_tweet).join("\n\n"), count]
end
title 2, "All tweets archive"
tweets.sort_by { |tw| [tw.user.screen_name, tw.created_at] }.group_by(&:user).each do |user, tweets|
title 3, "@#{user.screen_name}"
tweets.each do |tweet|
puts "* #{tweet.uri}[#{format_date(tweet.created_at)}]: #{format_tweet_text(tweet.text)}"
end
end
puts "\n\n''''"
puts "_Generated on #{Time.now}._"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment