首页 > 解决方案 > 在多个用户帐户上运行“botometer-python”脚本并保存到 CSV 时出现问题

问题描述

我是 python 新手,主要使用 R,但我试图使用下面的代码来运行大约 90 个 Twitter 帐户/句柄(在下面的代码中保存为名为“1”的单列 csv 文件)通过Botometer V4 API。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']
        ])

标签: pythonpandascsv

解决方案


我不确定 API 返回什么,但您需要遍历 CSV 数据并将每个项目发送到 API。使用返回的结果,您可以附加 CSV。您可以在没有 pandas 的情况下循环遍历 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()



无需熊猫即可直接读取一列 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()


推荐阅读