我是python的新手,主要使用R,但我正尝试使用下面的代码通过Botometer V4 API运行大约90个twitter帐户/句柄(在下面的代码中保存为一个名为"1"的单列csv文件(。API github表示,您可以使用"check_accounts_in"运行一系列帐户,而无需升级到付费BotometerLite。
然而,我一直纠结于如何循环浏览电子表格中的所有帐户/句柄,然后将单个结果保存到一个新的csv中。非常感谢任何帮助或建议。
import botometer
import csv
import pandas as pd
rapidapi_key = "xxxxx"
twitter_app_auth = {
'consumer_key': 'xxxxx',
'consumer_secret': 'xxxxx',
'access_token': 'xxxxx',
'access_token_secret': 'xxxxx',
}
bom = botometer.Botometer(wait_on_ratelimit=True,
rapidapi_key=rapidapi_key,
**twitter_app_auth)
#read in csv of account names with pandas
data = pd.read_csv("1.csv")
for screen_name, result in bom.check_accounts_in(data):
#add output to csv
with open('output.csv', 'w') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['Account Name','Astroturf Score', 'Fake Follower Score']),
csvwriter.writerow([
result['user']['user_data']['screen_name'],
result['display_scores']['universal']['astroturf'],
result['display_scores']['universal']['fake_follower']
])
我不确定API返回了什么,但您需要循环处理CSV数据,并将每个项目发送到API。使用返回的结果,您可以附加CSV。你可以在没有panda的情况下循环csv,但它保持了这一点,因为你已经在使用它了
添加了一个伪函数来演示保存到csv中的一些返回数据。
我使用的CSV:
names
name1
name2
name3
name4
import pandas as pd
import csv
def sample(x):
return x + " Some new Data"
df = pd.read_csv("1.csv", header=0)
output = open('NewCSV.csv', 'w+')
for name in df['names'].values:
api_data = sample(name)
csvfile = csv.writer(output)
csvfile.writerow([api_data])
output.close()
在没有panda的情况下直接读取一列CSV。您可能需要根据您的CSV 进行调整
with open('1.csv', 'r') as csv:
content = csv.readlines()
for name in content[1:]: # skips the header row - remove [1:] if the file doesn have one
api_data = sample(name.replace('n', ""))
对API做一些假设。这可能起作用:
这假设API正在返回字典:
{"cap":
{
"english": 0.8018818614025648,
"universal": 0.5557322218336633
}
import pandas as pd
import csv
df = pd.read_csv("1.csv", header=0)
output = open('NewCSV.csv', 'w+')
for name in df['names'].values:
api_data = bom.check_accounts_in(name)
csvfile = csv.writer(output)
csvfile.writerow([api_data['cap']['english'],api_data['cap']['universal']])
output.close()