二维码扫描和生成。当我扫描二维码时,我希望它显示一些纯文本信息,而不是显示“没有可用信息”

问题描述 投票:0回答:1

所以我正在开发一个

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")

以下二维码可供参考:

enter image description here

我尝试将

ERROR_CORRECT_M
调整到不同的级别,但没有成功。我只是希望它显示一些文本,显示二维码中编码的电子邮件和姓名。它可能以某种错误的方式格式化,如果是这样,那么我不知道如何修复以及格式到底有什么问题。

我希望它能显示姓名和电子邮件的纯文本。

python jupyter-notebook qr-code
1个回答
0
投票

我已经做到了,因此它将数据编码为 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
© www.soinside.com 2019 - 2024. All rights reserved.