python - 在多个用户帐户上运行“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']
])
解决方案
我不确定 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()
推荐阅读
- node.js - 使用 NodeJS 或其他方式欺骗/检测浏览器请求
- java - 获取firestore中子集合的ID
- c++ - 在 condition_variable::wait() 调用期间中断程序 (SIGINT),随后调用 exit(),会导致程序冻结
- git - 使用 git 删除分支中的所有文件?
- c++ - Matlab MEX C++ 将输入稀疏数组的参数传递给 std::vectors 的有效方法
- r - 根据r中另一个数据框中的列向数据框添加值
- javascript - 在 Javascript 中生成 HMAC 与在 python 中生成的 HMAC 不匹配(使用 utf-8 编码字符)
- php - php if else条件在变量中作为字符串
- reactjs - 带有 next.js 的动态标头
- java - 试图理解 Liskov 替换原理