我需要使用一些代码来提取包含电子邮件的文件,并与'haveibeenpwned'API进行交互,以返回在公共转储中看到它们的日期。
到目前为止,这就是我在下面的内容,目前我正在努力实施以下内容:
1。)根据API使用指南,每个请求必须延迟1秒。
2。)脚本必须包含一个文件,其中包含要提交的电子邮件(我尝试在命令行上使用for循环调用它但不起作用)。
3。)提交的电子邮件地址必须回显到输出文件,以便与违规数据相关联。
基本上我希望运行脚本,提供一个输入文件(可能带有argparse)然后让脚本将以下示例内容输出到文件中,当它通过提供的电子邮件列表运行时附加... < / p>
email1@email.com
DATA - 在xxxx-xx-xx
上违反email2@email.com
DATA - 在xxxx-xx-xx
上违反
非常感谢任何有关所需更改的帮助或建议。您可以通过使用'-a'运行并提供电子邮件地址来查看其当前功能。
import argparse
import json
import requests
def accCheck(acc):
r = requests.get(
'https://haveibeenpwned.com/api/v2/breachedaccount/%s?truncateResponse=false' % acc
)
data = json.loads(r.text)
for i in data:
print(
i['Name'] +
' - Breached on ' +
i['BreachDate']
)
def list():
r = requests.get(
'https://haveibeenpwned.com/api/v2/breaches'
)
data = json.loads(r.text)
for i in data:
print(
i['Name'] +
' - Breached on - ' +
i['BreachDate']
)
if __name__ == '__main__':
ap = argparse.ArgumentParser()
ap.add_argument(
'-a',
'--account'
)
ap.add_argument(
'--list',
action='store_true'
)
args = ap.parse_args()
acc = args.account
list = args.list
if not list:
if not acc:
print(
'Specify an account (-a <email>) to check or --list for site info'
)
exit(0)
try:
accCheck(acc)
except ValueError:
print(
'No breach data found'
)
else:
list()
答案 0 :(得分:0)
您可以接受输入文件和输出文件作为命令行参数,如下所示:
ap.add_argument(
'-if',
'--input_file'
)
ap.add_argument(
'-of',
'--ouput_file'
)
args = ap.parse_args()
input_file = args.input_file
ouput_file = args.ouput_file
假设您指定为输入文件的文件在每行包含电子邮件帐户,您可以执行以下操作:
with open(input_file,'r') as fl,RedirectStdoutTo(ouput_file):
for acc in fl:
try:
accCheck(acc.rstrip())
except ValueError:
print(
'No breach data found'
)
RedirectStdoutTo是您要编写的类,允许您将打印输出重定向到文件
class RedirectStdoutTo:
def __init__(self, filename):
self.out_new = open(filename,'w')
def __enter__(self):
self.out_old = sys.stdout
sys.stdout = self.out_new
def __exit__(self, *args):
sys.stdout = self.out_old
self.out_new.close()