所以我正在开发一个
python
脚本,该脚本生成一个包含信息的二维码,其中包括电子邮件、姓名、ID 和扫描时要重定向到的网站。我在这里成功创建了二维码的生成:
def generate_qr_code_redirect_and_id(name, email, redirect_url):
# Generate ID
id = generate_id(name, email)
# Construct data for QR code including the GIF URL
data = f"ID: {id}\nName: {name}\nEmail: {email}\nRedirectURL: {redirect_url}\nGIF: https://gifdb.com/images/high/spongebob-squarepants-done-and-done-2de4g1978uus7pp6.gif"
# Generate QR code
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white")
# Convert image to bytes
qr_buffer = BytesIO()
qr_image.save(qr_buffer, format='PNG')
qr_image_data = qr_buffer.getvalue()
return id, qr_image_data
我还获得了要上传到 MongoDB 集群的数据,并且还自动将其保存在 csv 文件中。
问题是当我扫描二维码时,它显示在我的手机上
no usable information
。
这是其余的代码(所有导入均已完成):
def generate_id(name, email):
# Generate an ID using email and name
data = f"{name}_{email}"
hashed_data = hashlib.sha256(data.encode('utf-8')).hexdigest()
return hashed_data
def generate_qr_code_redirect_and_id(name, email, redirect_url):
# Generate ID
id = generate_id(name, email)
# Construct data for QR code including the GIF URL
data = f"ID: {id}\nName: {name}\nEmail: {email}\nRedirectURL: {redirect_url}\nGIF: https://gifdb.com/images/high/spongebob-squarepants-done-and-done-2de4g1978uus7pp6.gif"
# Generate QR code
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white")
# Convert image to bytes
qr_buffer = BytesIO()
qr_image.save(qr_buffer, format='PNG')
qr_image_data = qr_buffer.getvalue()
return id, qr_image_data
def upload_to_mongodb_and_csv(id, name, email, redirect_url):
# Connect to MongoDB
client = MongoClient(
'mongo connection string hidden for privacy'
)
# Select database and collection
db = client['QRCode-Scans']
collection = db['People-Who-Scanned']
# Create document to insert
document = {
'id': id,
'name': name,
'email': email,
'redirect_url': redirect_url
# Add more fields as needed
}
# Insert document into collection
collection.insert_one(document)
# Write data to CSV file
with open('data.csv', mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow([id, name, email, redirect_url])
def send_email_with_qr_code(sender_email, sender_password, recipient_email, qr_code_image_data, id, name, email, redirect_url):
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = recipient_email
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = "Your QR Code"
# Email body
body = f"Hello,\n\nHere is your QR code along with the details:\n\nName: {name}\nEmail: {email}\nRedirect URL: {redirect_url}\n\nBest regards,\nName"
msg.attach(MIMEText(body))
# Attach QR code image
image = MIMEImage(qr_code_image_data)
image.add_header('Content-Disposition', 'attachment', filename="qr_code.png")
msg.attach(image)
# Connect to SMTP server and send email
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
server.send_message(msg)
server.quit()
def read_recipients_from_csv(csv_file):
recipients = []
with open(csv_file, mode='r', newline='') as file:
reader = csv.reader(file)
next(reader) # Skip the header row
for row in reader:
if len(row) >= 2:
recipients.append({"name": row[0], "email": row[1]})
else:
print(f"Issue with row: {row}") # Print rows with missing data
return recipients
# Example usage:
# Path to the CSV file containing recipient information
csv_file_path = "input.csv"
# Read recipients from the CSV file
recipients = read_recipients_from_csv(csv_file_path)
sender_email = "an email hidden for privacy"
sender_password = "app access code hidden for privacy"
# recipients = [
# # {"name": "name hidden for privacy", "email": "an email hidden for privacy"},
# # # Add more recipients as needed
# ]
for recipient in recipients:
name = recipient["name"]
email = recipient["email"]
# Generate QR code
id, qr_code_image = generate_qr_code_redirect_and_id(name, email, "https://www.google.com")
# Upload data to MongoDB and CSV
upload_to_mongodb_and_csv(id, name, email, "https://www.google.com")
# Send email with QR code image data and details
send_email_with_qr_code(sender_email, sender_password, email, qr_code_image, id, name, email, "https://www.google.com")
以下二维码可供参考:
我尝试将
ERROR_CORRECT_M
调整到不同的级别,但没有成功。我只是希望它显示一些文本,显示二维码中编码的电子邮件和姓名。它可能以某种错误的方式格式化,如果是这样,那么我不知道如何修复以及格式到底有什么问题。
我希望它能显示姓名和电子邮件的纯文本。
我已经做到了,因此它将数据编码为 vCard。下面是生成方法的代码:
def generate_qr_code_redirect_and_id(name, email):
# Generate ID
id = generate_id(name, email)
# Construct vCard data
vcard_data = f"BEGIN:VCARD\nVERSION:3.0\nFN:{name}\nEMAIL:{email}\nEND:VCARD"
# Generate QR code
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
)
qr.add_data(vcard_data)
qr.make(fit=True)
qr_image = qr.make_image(fill_color="black", back_color="white")
# Convert image to bytes
qr_buffer = BytesIO()
qr_image.save(qr_buffer, format='PNG')
qr_image_data = qr_buffer.getvalue()
return id, qr_image_data