19 mar

[off] OpenSource NerdFollow – Procurando Contatos ?

#NFW

#NFW foi um movimento idealizado por @MyCoderLife @withcaffeine e @eder099, e significa Nerd Follow Wednesday, criado a início para indicar perfis Geeks e Nerds no twitter toda a quarta feira. No primeiro dia o movimento ganhou centenas de adeptos, e também o apoio de @nickdigietal e posteriormente de dezenas de outros colaboradores como @ProgramadorREAL, @tuliobaars,  dentre outros. O #NFW veio a crescer bastante e então foi criado o @nerdfollow por  @nick_linux que seria um twitter para seguir os adeptos da hashtag, mais tarde o @nerdfollow foi automatizado por @withcaffeine e se tornou um bot que segue e indica automaticamente pessoas interessantes com um preview do perfil do mesmo. @NerdFollow é mantido pelos idealizadores da #NFW e conta com o apoio de centenas de Nerds pelo orkut.

NerdFollow

Nerd Follow é um bot, @nerdfollow, ou seja, é um perfil robô desenvolvido em Python com o módulo python twitter. O nerdfollow é responsável por seguir todos os seus followers e mais centenas de outras pessoas que apresentem um perfil de cunho interessante universalmente, ele busca aleatóriamente esses mesmos perfis na lista Following e os indica. Existem três hashtags no @nerdfollow, sendo elas: #NF – NerdFollow, para indicações comuns; #NFW – NerdFollow Wednesday para todas as quartas, quando o movimento realmente é mais forte, e #NFF – NerdFollow Friday para sexta feira. Para evitar que o robô indique perfis fantasmas, outros bots, perfis de vendas, compras, trakings, trolls e afins o NerdFollow usa uma política de BlackList. BlackList nada mais é do que um arquivo blacklist.ff na mesma pasta do .py (source do bot) o qual contem uma lista de todos os perfis que o robô deve ignorar completamente, incluindo um perfil nesta lista ele será isolado, assim podemos garantir indicações limpas e livres de oportunistas.

O Source

Para rodar o NerdFollow é necessário a plataforma Python 2.6 com o módulo Python-Twitter instalado. Ambos podem ser encontrados nos seguintes links:

http://www.python.org
http://code.google.com/p/python-twitter/

NerdFollow é OpenSource e mantido pela licença GNU AFFERO GENERAL PUBLIC LICENSE. O source code segue a baixo, se preferir pode fazer o download do fonte em: http://www.4shared.com/file/4Xk_C7GU/NerdFollow.html

Source Code:

 

#!/usr/bin/python
# coding: utf-8

''' NerdFollow 0.1: Bot Python para twitter com finalidade de
conectar e indicar perfis. Copyright (C) 2011 Felippe Regazio de Moraes Este programa é software livre; você pode redistribuí-lo e/ou
modificá-lo sob os termos da Licença Pública Geral GNU Affero,
conforme publicada pela Free Software Foundation; tanto a versão
2 da Licença como (a seu critério) qualquer versão mais nova. Este programa é distribuído na expectativa de ser útil, mas SEM
QUALQUER GARANTIA; sem mesmo a garantia implícita de
COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
detalhes. Contato
twitter: @withcaffeine
Gmail : withcaffeine@gmail.com ''' import twitter
import random
import datetime
import time #Logando no Twitter com a Conta do NerdFollowDeck
api = twitter.Api(consumer_key='',
consumer_secret='',
access_token_key='',
access_token_secret='') #Este print e opcional e verifica se o login foi bem sucedido
#print api.VerifyCredentials() #Lista de Funcoes #Twittar - Twitta a mensagem do parametro 'm'
def Twittar(m):
api.PostUpdate(m)
print '\ntweeted\n ', m #Follow - Segue o user no parametro 'u' //nao utilizar @ no user
def Follow(u):
api.CreateFriendship(u)
print '\nfollowed\n ', u #Unfollow - logicamente, da um unfollow no parametro 'u' //tambem sem @
def Unfollow(u):
api.DestroyFriendship(u)
print '\nunfollowed\n ', u #Following - Mostra a lista com todos os Following
def Following():
userlist = api.GetFriends()
for username in userlist:
print username.screen_name
return username.screen_name #Followers - Mostra a lista com os followers
def Followers():
userlist = api.GetFollowers()
for username in userlist:
print username.screen_name
return username.screen_name #DiaAtual - Retorna o dia da semana em números
def DiaAtual():
d = datetime.date.weekday(datetime.date.today())
return d # 0Seg - 1Ter - 2Qua - 3Qui - 4Sex - 5Sab - 6Dom #LoadBlackList - Transforma a blacklist.ff em uma lista ''' Na mesma pasta do bot há um arquivo, o blacklist.ff, o
@NerdFollow indica os perfis a partir de seus followings
para que possamos definir quem vai ou não ser indicado,
o mesmo também sempre faz uma "copia" dos followers para os
followings, sendo assim alguns perfis trolls, gente escrota
e afins que estariam seguindo o bot poderiam ser automaticamente
seguidos. Para evitar isso, o arquivo blacklist.ff contem os
perfis identificados no NerdFollow que devem ser evitados.
Assim o Bot nao segue, e logo não indica acidentalmente nenhum
perfil fantasma : ) ''' def BlackList():
b=open('blacklist.ff')
blacklist="".join(b)
return blacklist
#print blacklist #FollowAll - Seguir todos os followers
def FollowAll():
#Gerando a lista followers com todos os followers do perfil
#e a lista friends com todos os followings do perfil
followlist = api.GetFollowers()
#Jogo os followers em followlist
for username in followlist:
following = "".join(' '+username.screen_name)
friendlist = api.GetFriends()
#Verifica todos os seguidores do perfil
blacklist=BlackList(); print 'BLACKLIST\n', blacklist
#Cria a blacklist com os perfis que nao devem ser seguidos
#Verificando quem esta na blacklist
for username in followlist:
f = (username.screen_name)
#gera o nome do follower em questao
if blacklist.find(f)>0:
print f,' esta na blacklist'
else:
if following.find(f)<=0:
try:
Follow(f)
except:
continue #NFSomeone - NF Aleatório, Escolhe 10 Nerds via Sort nos followers e da #NF
'''As indicações do bot devem partir da lista following do mesmo, pois assim
garantimos sempre #NFs de qualidade Caso as indicações partissem dos followers,
poderiam haver trolls e outros bot entre eles o qual o bot indicaria Ja na
lista following estão apenas os que podem ser indicados préviamente, caso haja
algum bot ou perfil duvidoso, o mesmo receberá unfollow. Assim garantimos sempre
um #NF de qualidade :D '''
def NFSomeone(N):
#N é o numero de NFs que o Bot ira gerar, P é pag de followers
for i in range(0,N): # Gerando a Lista com todos os followers
following=api.GetFriends()
F=[]
for username in following:
F.append([username.screen_name, ' ',username.description])
# gera uma lista com todos os followers e descriçao u = F.pop(random.randrange(0, len(F)))
# remove um user aleatório e sua descriacao da lista F
# Abaixo montamos o tweet com o #NF ou #NFW ou #NF #FF
T = '#NF '+'@'+"".join(u)
# Junta os valores em lista para que fiquem em str e adiciona a hashtag
if DiaAtual()== 2:
#Verifica se é quarta feira, caso sim, em vez de #NF utiliza-se #NFW
T = '#NFW '+'@'+"".join(u)
print '\ntweeted: ','#NFW '+'@'+"".join(u)
if DiaAtual()== 4:
#Verifica se é sexta feira, caso sim, Inclui também a hashtag #FF
T = '#NFF '+'@'+"".join(u)
print '\ntweeted: ','#NF #FF '+'@'+"".join(u)
if len(T)>140:
try:
Twittar(T[0:138]+' +')
#Twitta #NF + @usuario + perfil do usuario até dentro do limite de 140 char.
print '\nTweeted: ', T[0:138]+' +'
except:
continue
else:
try:
Twittar(T[0:138])
#Twitta #NF + @usuario + perfil do usuario até dentro do limite de 140 char.
print '\nTweeted: ',T[0:138]
except:
continue #RetweetNF - Procura por replys que contenham #NF #NFW e #NFF e da RT
def RetweetNF(self): #Gera uma strings com os retweets anteriores contidos no arquivo retweets.ff
RTFile=open('retweets.ff','r')
retweeted=RTFile.read() #Define as palavras chaves para o RT Key="NF" # Comeca procurando por NFs
if DiaAtual() == 2: # Caso seja quarta feira, verifica por #NFWs
Key="NFW"
if DiaAtual() == 4: # Caso seja sexta feira, verifica por #NFF
Key="NFF" replies = api.GetReplies(since_id=None) #Manda as Replys para replies
for reply in replies: #Procura as hashtags #NF #NFW #NFF na reply
RT=reply.text #Pega apenas o texto contino na reply #Procura por #NF #NFW ou #NFF contindos na RT
if RT.find(Key)>0:
id = reply.id
if retweeted.find(str(id))>-1:
id = ' '
pass
else:
id = ' ' #Caso tenha encontrado, gera um NF
if id != ' ': RTFile=open('retweets.ff','w')
RTFile.write('')
RTFile.write(retweeted+(str(id))+' ') if not self._oauth_consumer:
raise TwitterError("The twitter.Api instance must be authenticated.")
try:
if int(id) <= 0:
raise TwitterError("'id' must be a positive number")
except ValueError:
raise TwitterError('')
try:
url = 'http://api.twitter.com/1/statuses/retweet/%s.json' % id
json = self._FetchUrl(url, post_data={'dummy': None})
data = simplejson.loads(json)
self._CheckForTwitterError(data) #return Status.NewFromJsonDict(data)
except:
continue #==================================================================================== #INICIO DO BOT
def main():
running=True
while running==True:
print 'Bot Started\n'
FollowAll()
NFSomeone(5)
RetweetNF(api)
print '\nEsperando TimeOut 0%\n'
#Apos Indicar, espera 500x5 (devido ao tempo de timeout do RetweetNF(api) segundos
#No intervalo de 2 em 2 seg é feito uma procura por replys com NFs para RT
for i in xrange(0,1000):
print i,
time.sleep(1)
print '\nTimeOut 100% Restarting\n'
time.sleep(5) # =================================================================================== if __name__ == "__main__":
main()#Running

Felippe Regazio

Humano nas horas vagas.