import requests import json import os import re from PIL import Image, ImageDraw,ImageFont from barcode import Code128 from barcode.writer import ImageWriter import qrcode # 定义图像大小和条形码大小 image_width = 2479 image_height = 3508 qrcode_size = 400 def search_save_and_return(sn): begin_url="https://pro-psurf-app.glb.inc.hp.com/partsurferapi/Search/GenericSearch/"+sn+"/country/CN/usertype/EXT" headers = { 'Accept': 'application/json, text/plain, */*', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7', 'Authorization': 'Basic MjAyMzEzNy1wYXJ0c3VyZmVyOlBTVVJGQCNQUk9E', 'Connection': 'keep-alive', 'Host': 'pro-psurf-app.glb.inc.hp.com', 'Origin': 'https://partsurfer.hp.com', 'Referer': 'https://partsurfer.hp.com/', #'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"', #'sec-ch-ua-mobile': '?0', #'sec-ch-ua-platform': '"Windows"', #'Sec-Fetch-Dest': 'empty', #'Sec-Fetch-Mode': 'cors', #'Sec-Fetch-Site': 'same-site', #'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } r = requests.get(begin_url,headers=headers) jsdata={} if(r.status_code==200): htmlx_byt=r.content htmlx=str(htmlx_byt,'utf-8') jsdata=json.loads(htmlx) datacode=jsdata['Status']['Code'] if(datacode=='S-0001'): f=open("database/"+sn+".json","w") f.write(json.dumps(jsdata, indent=4, separators=(',', ': '))) f.close print("saved") elif(datacode=='E-0099'): jsdata={} print("can not seach the sn") else: print("web error") return jsdata print("HP partsurfer auto get BuildId and FeatureByte. V1.9") print("compiled by kevin. wuwenfengmi@outlook.com") print("for learning purposes only") if not os.path.exists("database/"): os.makedirs("database/") while_loop=True while while_loop: print("Enter Serial No.\nor Enter (exit)") HP_device_SN=input(":") if HP_device_SN=="exit": while_loop=False else: jdata={} if os.path.exists("database/"+HP_device_SN+".json"): print("fined in database") f=open("database/"+HP_device_SN+".json","r") jdata=json.loads(f.read()) else: print("find in wed") jdata=search_save_and_return(HP_device_SN) if jdata!={}: try: sn=jdata['Body']['SerialNumberBOM']['wwsnrsinput']['serial_no'] pn=jdata['Body']['SerialNumberBOM']['wwsnrsinput']['product_no'] dn=jdata['Body']['SerialNumberBOM']['wwsnrsinput']['user_name'] print("------------------------------------------------") print("Serial No: "+sn) print("Product No: "+pn) print("Device Name: "+dn) print("---") unit_data=jdata['Body']['SerialNumberBOM']['unit_configuration'] for i in unit_data: if i['part_number'].lower()=="IMG_BuildId".lower(): bilid=str(i['part_description']).replace("BID=","") if i['part_number'].lower()=="IMG_Desc1".lower(): Desc1=i['part_description'] if i['part_number'].lower()=="IMG_Desc2".lower(): Desc2=i['part_description'] FeatureByte=Desc1+Desc2 FeatureByte=str(FeatureByte).replace(" ","") print("Build Id: "+bilid) print("Feature Byte: "+FeatureByte) #print("Feature Byte 4: ") fb2="" index=0 for i in FeatureByte: if index==4: index=0 #print(" ",end="") fb2+=" " index+=1 #print(i,end="") fb2+=i print(fb2) print("\n------------------------------------------------\n\n") #cp # 创建一个空白图像 image = Image.new("RGB", (image_width, image_height), (255, 255, 255)) draw = ImageDraw.Draw(image) # 条形码配置 barcode_options = { "writer": ImageWriter(), "output": 'temp', # 输出格式,可以是文件名或字节流 } # 在图像上生成多个条形码并放置它们 x_position = 50 y_position = 50 # 加载自定义图片并将其添加到图像中 custom_image = Image.open("favicon.png") # 替换为你自己的图片路径 image.paste(custom_image, (x_position, y_position)) y_position+=150 # 在条形码下方添加自定义文本 text_color = (0, 0, 0) # 文本颜色(黑色) # 设置字体大小 font_size = 20 font_20 = ImageFont.truetype("fonts/arial", font_size) # 替换为你自己的字体文件路径 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "HP partsurfer auto get BuildId and FeatureByte. V1.9\ncompiled by kevin. wuwenfengmi@outlook.com", fill=text_color, font=font_20) y_position+=200 # 在条形码下方添加自定义文本 text_color = (0, 0, 0) # 文本颜色(黑色) # 设置字体大小 font_size = 50 font = ImageFont.truetype("fonts/arial", font_size) # 替换为你自己的字体文件路径 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "Serial No: "+sn, fill=text_color, font=font) y_position+=50 # 生成条形码 barcode = Code128(sn, writer=barcode_options["writer"]) barcode_file = barcode.save(barcode_options["output"]) # 打开生成的条形码图像 barcode_image = Image.open(barcode_file) # 将条形码添加到图像上 image.paste(barcode_image, (x_position, y_position)) # 更新下一个条形码的位置 y_position += 400 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "Product No: "+pn, fill=text_color, font=font) y_position+=50 # 生成条形码 barcode = Code128(pn, writer=barcode_options["writer"]) barcode_file = barcode.save(barcode_options["output"]) # 打开生成的条形码图像 barcode_image = Image.open(barcode_file) # 将条形码添加到图像上 image.paste(barcode_image, (x_position, y_position)) # 更新下一个条形码的位置 y_position += 400 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "Device Name: "+dn, fill=text_color, font=font) y_position+=50 # 生成二维码 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(dn) qr.make(fit=True) qr_image = qr.make_image(fill_color="black", back_color="white").resize((qrcode_size, qrcode_size)) # 将二维码添加到图像上 image.paste(qr_image, (x_position, y_position)) # 更新下一个条形码的位置 y_position += 600 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "Build Id: "+bilid, fill=text_color, font=font) y_position+=50 # 生成二维码 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(bilid) qr.make(fit=True) qr_image = qr.make_image(fill_color="black", back_color="white").resize((qrcode_size, qrcode_size)) # 将二维码添加到图像上 image.paste(qr_image, (x_position, y_position)) # 更新下一个条形码的位置 y_position += 600 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), "Feature Byte: "+fb2, fill=text_color, font=font) y_position+=50 # 生成二维码 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(FeatureByte) qr.make(fit=True) qr_image = qr.make_image(fill_color="black", back_color="white").resize((qrcode_size, qrcode_size)) # 将二维码添加到图像上 image.paste(qr_image, (x_position, y_position)) # 更新下一个条形码的位置 y_position += 400 # 创建一个Draw对象并将文本添加到图像上 text_draw = ImageDraw.Draw(image) text_draw.text((x_position, y_position), FeatureByte, fill=text_color, font=font) # 保存生成的图像 image.save("database/"+sn+".png") # 显示图像(可选) image.show() except: print("Data Error") else: print("Data Error 2") print("Thank for use. pass any key..") os.system('pause')