Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Twitter and Youtube Collector
1. Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
BCC428 - ANÁLISE DE MÍDIA SOCIAL
Segundo Trabalho Prático
Johnnatan Messias
Pollyanna Gonçalves
Wellington Dores
Professor - Fabricio Benevenuto
Ouro Preto
10 de outubro de 2011
3. 0.1 Considerações iniciais
• Linguagem utilizada: Linguagem Python.
• Ambiente de desenvolvimento da documentação: TeXnicCenter 1 BETA 7.50-
A
Editor de LTEX.
0.2 Especicação do problema
Este trabalho tem como objetivo exercitar formas de coletar dados de redes socias
online através de suas respectivas AP Is e o entendimento das mesmas.
1 Problemas
• Construa um coletor de dados do Twitter em P ython. Seu programa deve
receber como parâmetro o ID de um usuário e deve então coletar informações
do perl do usuário, dos tweets já postados pelo usuário (caso a conta não seja
privada) e a lista de seguidores e seguidos.
• Desenvolva um crawler que faça a coleta de uma amostra aleatória de tweets
a partir da AP I de streaming.
• Desenvolva um coletor de informações da AP I de outro sistema que não o já
apresentado.
As funções abaixo apresentam uma resolução para os problemas propostos
acima:
1.1 Coletor Timeline Pública - Twitter
Através dessa funções é possível capturar os dados referentes a TimeLine
Pública do Twitter.
Para isso, é necessário acessar a API do Twitter e capturar como, por exemplo,
estes dados:
1. Tweet:
Text: o Tweet do usuário.
Created At: Data de criação do Tweet.
Place: Cidade e país de origem do Tweet.
ID: Número de identicação do Tweet.
User: Usuário proprietário do Tweet.
2. User:
Name: Nome de registro do usuário.
Description: Descrição do perl do usuário.
ID: Número de identicação do usuário.
Location: Coordenadas geográcas do usuário.
1
4. 1 def getTimeLinePublic ( ) :
u r l = h t t p s : / / a p i . t w i t t e r . com/1/ s t a t u s e s / p u b l i c _ t i m e l i n e . j s o n
? count=3
3 d = getJson ( url )
5 l = []
7 f o r i in range ( len (d) ) :
i f ( d [ i ] [ ' p l a c e ' ] == None ) :
9 p l a c e = P l a c e not e x i s t s
else :
11 p l a c e = ( d [ i ] [ ' p l a c e ' ] [ ' full_name ' ] + − +d [ i ] [ '
place ' ] [ ' country ' ] )
l . append ( nMessage %d %i )
13 l . append ( Text : %s %(d [ i ] [ ' t e x t ' ] ) )
l . append ( Created At : %s %(d [ i ] [ ' c r e a t e d _ a t ' ] ) )
15 l . append ( P l a c e : %s %( p l a c e ) )
l . append ( ID : %s %(d [ i ] [ ' i d ' ] ) )
17 l . append ( User : @ %(d [ i ] [ ' u s e r ' ] [ ' screen_name '
%s
]) )
l . append ( Name : %s % ( d [ i ] [ ' u s e r ' ] [ ' name '
]) )
19 l . append ( D e s c r i p t i o n : %s % ( d [ i ] [ ' u s e r '
] [ ' description ' ]) )
l . append ( ID : %s % ( d [ i ] [ ' u s e r ' ] [ ' i d ' ] ) )
21 l . append ( L o c a t i o n : %s % ( d [ i ] [ ' u s e r ' ] [ '
location ' ]) )
23 printMyList ( l )
Listing 1: Coletor da timeline Pública
1.2 Coletor Timeline de Usuário - Twitter
Semalhando à seção 1.1, aqui capturamos a lista de Tweets de um determinado
usuário.
Text: Tweet do usuário.
Created At: Data de criação do Tweet.
Place: Cidade e país de origem do Tweet.
1 d e f getTimeLineUser ( i d ) :
u r l = h t t p s : / / t w i t t e r . com/ s t a t u s e s / u s e r _ t i m e l i n e . j s o n ? u s e r _ i d
= + s t r ( i d )
3 d = getJson ( url )
l = []
5
i f ( l e n ( d ) == 0 ) :
7 l . append ( TimeLineUser not found o r not e x i s t s )
return
9
f o r i in range ( len (d) ) :
11 i f ( d [ i ] [ ' p l a c e ' ] == None ) :
p l a c e = P l a c e not e x i s t s
2
5. 13 else :
p l a c e = ( d [ i ] [ ' p l a c e ' ] [ ' full_name ' ] + − +d [ i ] [ '
place ' ] [ ' country ' ] )
15 l . append ( nMessage %d %i )
l . append ( Text : %s %(d [ i ] [ ' t e x t ' ] ) )
17 l . append ( Created At : %s %(d [ i ] [ ' c r e a t e d _ a t ' ] ) )
l . append ( P l a c e : %s %( p l a c e ) )
19
printMyList ( l )
Listing 2: Coletor da timeline de um usuário
1.3 Coletor de Prole - Twitter
Função responsável por obter os seguintes dados de um determinado usuário:
User: Usuário proprietário do Tweet.
Name: Nome de registro do usuário.
Status: Último Tweet postado pelo usuário.
Description: Descrição do perl do usuário.
Followers Count: Quantidade de seguidores.
Friends Count: Quantidade dde seguidos.
Listed Count: Quantidade de listas do usuário.
Veried: Informa se a conta do usuário foi vericada.
Language: Idioma utilizado pelo usuário.
URL: Exibe a URL que o usuário deniu no seu prole.
Location: Coordenadas geográcas do usuário.
def getUserProfile ( id ) :
2 u r l = h t t p s : / / a p i . t w i t t e r . com/1/ u s e r s /show . j s o n ?
i n c l u d e _ e n t i t i e s=t r u eu s e r _ i d= + s t r ( i d )
d = getJson ( url )
4 s t a t u s = None
6 l = []
8 i f ( l e n ( d ) == 0 ) :
l . append ( User not found o r not e x i s t s )
10 return
i f ( d . has_key ( ' s t a t u s ' ) ) :
12 status = d [ ' status ' ] [ ' text ' ]
14 l . append ( User @ : %d [ ' screen_name ' ] )
%s
l . append ( Name : %s %d [ ' name ' ] )
16 l . append ( S t a t u s : %s %s t a t u s )
l . append ( D e s c r i p t i o n : %s %d [ ' d e s c r i p t i o n ' ] )
18 l . append ( F o l l o w e r s Count : %s %d [ ' f o l l o w e r s _ c o u n t ' ] )
l . append ( F r i e n d s Count : %s %d [ ' f r i e n d s _ c o u n t ' ] )
20 l . append ( L i s t e d Count : %s %d [ ' l i s t e d _ c o u n t ' ] )
l . append ( V e r i f i e d : %s %d [ ' v e r i f i e d ' ] )
3
6. 22 l . append ( Language : %s %d [ ' l a n g ' ] )
l . append ( Url : %s %d [ ' u r l ' ] )
24 l . append ( L o c a t i o n : %s %d [ ' l o c a t i o n ' ] )
26 printMyList ( l )
Listing 3: Coletor da timeline de um prole
1.4 Coletor de Followers - Twitter
Aqui capturamos a lista de Seguidores(Followers) de um determinado usuário.
É importante ressaltar que a cada captura nos é fornecido, através da API do
Twitter, uma lista de 5000 IDs dos usuários. Logo foi realizado um tratamento
de modo a obter toda a lista do utuário que ultrapasse esse limite.
def getFollowersUser ( id ) :
2 c u r s o r = −1
count = 1
4 n = 5000
nFollowers = getFollowersAndFriendsCount ( id ) [ 0 ]
6 q n t L i s t s = i n t ( math . c e i l ( f l o a t ( n F o l l o w e r s ) /n ) )
8 f o r i in range ( q n t L i s t s ) :
l = []
10 u r l = h t t p s : / / a p i . t w i t t e r . com/1/ f o l l o w e r s / i d s . j s o n ? c u r s o r
=+s t r ( c u r s o r )+u s e r _ i d= + s t r ( i d )
d = getJson ( url )
12 i f ( l e n ( d [ ' i d s ' ] ) == 0 ) :
l . append ( User doesn ' t have f o l l o w e r s )
14 return
16 f o r i in range ( len (d [ ' i d s ' ] ) ) :
l . append ( s t r ( count )+ / +s t r ( n F o l l o w e r s ) )
18 l . append ( ID : %s %d [ ' i d s ' ] [ i ] )
count = count + 1
20 printMyList ( l )
cursor = d [ ' next_cursor ' ]
Listing 4: Coletor de followers
1.5 Coletor de Friends - Twitter
Aqui capturamos a lista de Seguidos(Friends) de um determinado usuário.
A execução dessa função é semelhante à 1.4.
1 def getFriendsUser ( id ) :
c u r s o r = −1
3 count = 1
n = 5000
5 nFriends = getFollowersAndFriendsCount ( id ) [ 1 ]
q n t L i s t s = i n t ( math . c e i l ( f l o a t ( n F r i e n d s ) /n ) )
7
f o r i in range ( q n t L i s t s ) :
4
7. 9 l = []
u r l = h t t p s : / / a p i . t w i t t e r . com/1/ f r i e n d s / i d s . j s o n ? c u r s o r=
+s t r ( c u r s o r )+u s e r _ i d= + s t r ( i d )
11 d = getJson ( url )
13 i f ( l e n ( d [ ' i d s ' ] ) == 0 ) :
l . append ( User doesn ' t have f r i e n d s )
15 return
17 f o r i in range ( len (d [ ' i d s ' ] ) ) :
l . append ( s t r ( count )+ / +s t r ( n F r i e n d s ) )
19 l . append ( ID : %s %d [ ' i d s ' ] [ i ] )
count = count + 1
21
printMyList ( l )
23 cursor = d [ ' next_cursor ' ]
Listing 5: Coletor de friends
1.6 Coletor da Quantidade de Seguidores e Seguidos -
Twitter
Essa função é responsável por denir a quantidade de Seguidores e Seguidos de
um determinado usuário para uso exclusivo das funções 1.4 e 1.5. Basicamente
retorna uma tupla contendo o número de Seguidores e Seguidos.
1 def getFollowersAndFriendsCount ( id ) :
u r l = h t t p s : / / a p i . t w i t t e r . com/1/ u s e r s /show . j s o n ?
i n c l u d e _ e n t i t i e s=t r u eu s e r _ i d= + s t r ( i d )
3 d = getJson ( url )
i f ( l e n ( d ) == 0 ) :
5 p r i n t User doesn ' t have f o l l o w e r s
return 0
7 return (d [ ' followers_count ' ] , d [ ' friends_count ' ] )
Listing 6: Coletor da quantidade de seguidores e seguidos
1.7 Coletor do Youtube
O coletor para o Y outube apresentado abaixo retorna uma lista dos vídeos
mais populares da rede, incluindo suas descrições e categorias:
Categoria: Exibe a categoria dos vídeos capturados.
Title: Título do vídeo.
Autor: Autor do vídeo.
Published: Data de publicação do vídeo no Youtube
1 d e f most_popular_Youtube ( ) :
l = []
3 u r l = ( h t t p : / / gdata . youtube . com/ f e e d s / a p i / s t a n d a r d f e e d s /
most_popular ? v=2a l t=j s o n )
5
8. d = getJson ( url )
5 json = d [ ' feed ' ]
videos = json [ ' entry ' ]
7
f o r i in range ( len ( videos ) ) :
9 videoList = videos [ i ]
l . append ( C a t e g o r i a : + videoList [ ' category '
] [ 1 ] [ ' label ' ])
11 l . append ( Title : + v i d e o L i s t [ ' t i t l e ' ] [ ' $t
' ])
l . append ( Autor : + v i d e o L i s t [ ' author '
] [ 0 ] [ ' name ' ] [ ' $ t ' ] )
13 l . append ( Published : + videoList [ ' published '
] [ ' $t ' ] )
15 printMyList ( l )
Listing 7: Coletor do Youtube
1.8 Funções Auxiliares
Estas são funções importantes para a entrada e saída dos dados.
Temos:
getJson: Função responsável por armazenar o mapa do JSon retornado
pela API do Twitter.
printMyList: Função responsável pela impressão em tela dos resultados
obtidos em cada uma das execuções das funções do programa.
1 def getJson ( url ) :
arq = u r l l i b . u r l o p e n ( u r l )
3 r e t u r n ( j s o n . l o a d ( arq ) )
5 def printMyList ( l ) :
f o r i in range ( len ( l ) ) :
7 print l [ i ]
Listing 8: Funções Auxiliares
1.9 Função Principal
Essa é a função principal do programa. É nela em que o usuário dene o ciclo
de execução de todo o programa.
Vide código 9.
1 def getPainel () :
print ( [ 0 ] − Exit )
3 print ( [ 1 ] − getTimeLinePublic )
print ( [ 2 ] − getTimeLineUser )
5 print ( [ 3 ] − getUserProfile )
print ( [ 4 ] − getFollowersUser )
7 print ( [ 5 ] − getFriendsUser )
6
9. p r i n t ( [ 6 ] − getFollowersAndFriendsCount )
9 p r i n t ( [ 7 ] − Videos mais p o p u l a r e s do Youtube )
11 d e f main ( ) :
w h i l e ( True ) :
13 getPainel ()
op = i n p u t ( D i g i t e a opcao : )
15
i f ( op == 0 ) :
17 break
19 e l i f ( op == 1 ) :
getTimeLinePublic ( )
21 e l i f ( op == 7 ) :
most_popular_Youtube ( )
23
else :
25 i d = i n p u t ( D i g i t e o ID do User : )
i f ( op == 2 ) :
27 getTimeLineUser ( i d )
e l i f ( op == 3 ) :
29 getUserProfile ( id )
e l i f ( op == 4 ) :
31 getFollowersUser ( id )
e l i f ( op == 5 ) :
33 getFriendsUser ( id )
e l i f ( op == 6 ) :
35 count = g e t F o l l o w e r s A n d F r i e n d s C o u n t ( i d )
p r i n t ( F o l l o w e r s Count : %s %count [ 0 ] )
37 p r i n t ( F r i e n d s Count : %s %count [ 1 ] )
39 i f __name__ == __main__ :
main ( )
Listing 9: Função Principal
2 Limitações
Nesse Trabalho Prático tivemos como diculdade em utilizar caracteres unicode
no Windows, sendo assim, sugiro a execução do programa no Sistema Operacional
Linux ou Mac uma vez que não tivemos problemas em executar nessas plataformas.
7
10. 3 Testes
Abaixo estão representados os testes de funcionamento das funções getUserProle
(Figura 1), getTimeLinePublic (Figura 2), getFollowersAndFriendsCount (Figura
3) e mostPopularYoutube (Figura 4).
Figura 1: Função getU serP rof ile
Figura 2: Função getT imeLineP ublic
8
11. Figura 3: Função getF ollowersAndF riendsCount
Figura 4: Função mostP opularY outube
4 Referências
• `A python wrapper around the Twitter API' -
http://code.google.com/p/python-twitter/
• `Twitter Developers' -
https://dev.twitter.com/
• `APIs e Ferramentas do Youtube' -
http://code.google.com/intl/pt-BR/apis/youtube/overview.html
9