In Python 3 I made program to extract posts and likes in Twitter:
import tweepy
import pandas as pd
consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
This function receives the didactic classification of profiles (only for database organization) and the name of the profile. It creates a list with dictionaries, which is then returned:
def linhadotempo(posicao, valor):
tela = api.user_timeline(valor)
bolha = []
for status in tela:
dicionario = {"nome": valor, "posicionamento": posicao, "posts_links": status.text, "curtidas": status.favorite_count}
bolha.append(dicionario)
return bolha
List of names of Twitter profiles and their didactic ratings. Then transformed into a dataframe:
data = {
'nome': ['jeanwyllys_real', 'lucianagenro', 'jairbolsonaro', 'MBLivre'],
'posicionamento': ['esquerda', 'esquerda', 'direita', 'direita']
}
perfis = pd.DataFrame(data, columns=['nome','posicionamento'])
perfis.reset_index()
index nome posicionamento
0 0 jeanwyllys_real esquerda
1 1 lucianagenro esquerda
2 2 jairbolsonaro direita
3 3 MBLivre direita
I create a final list to put together the lists created in the function. I do an iteration in the dataframe of the profiles to activate the function
bolhas = []
for num, row in perfis.iterrows():
bolha = linhadotempo(row['posicionamento'], row['nome'])
bolhas.append(bolha)
My intention later was to create a final dataframe with this, but it did not work out. My intention was to have the columns "curtidas", "nome", "posicionamento" and "posts_links"
bolhas_final = pd.DataFrame(bolhas)
bolhas_final.reset_index()
index 0 1 2 3 4 5 6 7 8 ... 10 11 12 13 14 15 16 17 18 19
0 0 {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ... {'nome': 'jeanwyllys_real', 'posicionamento': ...
1 1 {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... ... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es... {'nome': 'lucianagenro', 'posicionamento': 'es...
2 2 {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... ... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd... {'nome': 'jairbolsonaro', 'posicionamento': 'd...
3 3 {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... ... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita... {'nome': 'MBLivre', 'posicionamento': 'direita...
By showing the content of "bolhas" I believe the error was that append created several lists within the list:
[[{'curtidas': 122,
'nome': 'jeanwyllys_real',
'posicionamento': 'esquerda',
'posts_links': 'A expressão "ideologia de gênero" é uma farsa criada para combater a promoção da igualdade e perpetrar a violência… https:///lWdLANLzc5'},
{'curtidas': 316,
'nome': 'jeanwyllys_real',
'posicionamento': 'esquerda',
'posts_links': 'O termo fantasioso "ideologia de gênero" foi criado por aqueles que falam em "ditadura gay". Quando o ministro ileg… https:///zv2aY31X9p'},
...
[{'curtidas': 378,
'nome': 'lucianagenro',
'posicionamento': 'esquerda',
'posts_links': 'Que coisa mais ridícula o ministro da Educação falando em rede nacional que a nova base curricular "está sendo entr… https:///h6l95GhdWT'},
...
{'curtidas': 500,
'nome': 'MBLivre',
'posicionamento': 'direita',
'posts_links': 'URGENTE: Lula pede 1 milhão de reais em indenização moral a Dallagnol e Justiça nega https://d9vVwRH2IS via @'}]]
Is there a correct way to merge the created lists into one? I would like to keep this structure when creating a dataframe.
Importing the required libraries that we are going to use:
import pandas as pd
import numpy as np
import tweepy
import json
Providing our keys to connect to Twitter API:
consumer_key = '....'
consumer_secret = '....'
access_token = '....'
access_secret = '....'
The next step is creating an OAuthHandler instance...
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
...and then gain access to the Twitter API.
auth.set_access_token(access_token, access_secret)
Finally we create an API object that we are going to use it to fetch the tweets:
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
Fetching the last 20 tweets from FC Barcelona twitter account:
last_20_tweets_of_FC_Barcelona = api.user_timeline('FCBarcelona'
)
Then in this code block we isolate the json part of each tweepy status object that we have downloaded and we add them all into a list....
my_list_of_dicts = []
for each_json_tweet in last_20_tweets_of_FC_Barcelona:
my_list_of_dicts.append(each_json_tweet._json)
...and then we write this list into a txt file:
with open('tweet_json_Barca.txt', 'w') as file:
file.write(json.dumps(my_list_of_dicts, indent=4))
Now we are going to create a DataFrame from the tweet_json.txt file:
my_demo_list = []
with open('tweet_json_Barca.txt', encoding='utf-8') as json_file:
all_data = json.load(json_file)
for each_dictionary in all_data:
tweet_id = each_dictionary['id']
text = each_dictionary['text']
favorite_count = each_dictionary['favorite_count']
retweet_count = each_dictionary['retweet_count']
created_at = each_dictionary['created_at']
my_demo_list.append({'tweet_id': str(tweet_id),
'text': str(text),
'favorite_count': int(favorite_count),
'retweet_count': int(retweet_count),
'created_at': created_at,
})
#print(my_demo_list)
tweet_json = pd.DataFrame(my_demo_list, columns =
['tweet_id', 'text',
'favorite_count', 'retweet_count',
'created_at'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With