Skip to content

Instantly share code, notes, and snippets.

@np5
Last active March 22, 2023 19:36
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save np5/a5603d1698ae88bd20e26e542e3db786 to your computer and use it in GitHub Desktop.
Save np5/a5603d1698ae88bd20e26e542e3db786 to your computer and use it in GitHub Desktop.
How to get the Apple computer identifiers
import argparse
import urllib.request
PAGES = (
("https://support.apple.com/en-us/HT201862", "MacBook Air", "LAPTOP"),
("https://support.apple.com/en-us/HT201300", "MacBook Pro", "LAPTOP"),
("https://support.apple.com/en-us/HT201894", "Mac mini", "DESKTOP"),
("https://support.apple.com/en-us/HT213073", "Mac Studio", "DESKTOP"),
("https://support.apple.com/en-us/HT201634", "iMac", "DESKTOP"),
("https://support.apple.com/en-us/HT202888", "Mac Pro", "DESKTOP"),
)
def get_page_content(url):
f = urllib.request.urlopen(url)
return f.read().decode("utf-8")
def extract_model_identifiers(content):
for line in content.splitlines():
if "Model Identifier" not in line:
continue
line = line.split(":")[1].strip()
line = line.replace("<br>", "")
line = line.strip()
line = line.replace("&nbsp;", ";") # Robust split
line = line.replace(", ", ";") # Robust split v2
for model_identifier in line.split(";"):
model_identifier = model_identifier.strip(", ")
if model_identifier:
yield model_identifier
def pretty_print(model, machine_type, model_identifiers):
print(model, "-", machine_type.title())
for model_identifier in model_identifiers:
print(" -", model_identifier)
def quick_and_dirty_header_print():
print("Model,Type,Identifier")
def quick_and_dirty_csv_print(model, machine_type, model_identifiers):
for model_identifier in model_identifiers:
print(f'{model},{machine_type},"{model_identifier}"')
def get_all_model_identifiers(args):
if args.csv:
quick_and_dirty_header_print()
for url, model, machine_type in PAGES:
content = get_page_content(url)
model_identifiers = list(extract_model_identifiers(content))
model_identifiers.sort()
if not args.csv:
pretty_print(model, machine_type, model_identifiers)
else:
quick_and_dirty_csv_print(model, machine_type, model_identifiers)
if __name__ == "__main__":
parser = argparse.ArgumentParser("apple_model_identifiers.py")
group = parser.add_mutually_exclusive_group()
group.add_argument('-p', '--pretty', action='store_true', help='Pretty print')
group.add_argument('-c', '--csv', action='store_true', help='CSV output')
args = parser.parse_args()
get_all_model_identifiers(args)
Model Type Identifier
MacBook Air LAPTOP Mac14,2
MacBook Air LAPTOP MacBookAir10,1
MacBook Air LAPTOP MacBookAir2,1
MacBook Air LAPTOP MacBookAir3,1
MacBook Air LAPTOP MacBookAir3,2
MacBook Air LAPTOP MacBookAir4,1
MacBook Air LAPTOP MacBookAir4,2
MacBook Air LAPTOP MacBookAir5,1
MacBook Air LAPTOP MacBookAir5,2
MacBook Air LAPTOP MacBookAir6,1
MacBook Air LAPTOP MacBookAir6,1
MacBook Air LAPTOP MacBookAir6,2
MacBook Air LAPTOP MacBookAir6,2
MacBook Air LAPTOP MacBookAir7,1
MacBook Air LAPTOP MacBookAir7,2
MacBook Air LAPTOP MacBookAir7,2
MacBook Air LAPTOP MacBookAir8,1
MacBook Air LAPTOP MacBookAir8,2
MacBook Air LAPTOP MacBookAir9,1
MacBook Pro LAPTOP Mac14,10
MacBook Pro LAPTOP Mac14,5
MacBook Pro LAPTOP Mac14,6
MacBook Pro LAPTOP Mac14,7
MacBook Pro LAPTOP Mac14,9
MacBook Pro LAPTOP MacBookPro10,1
MacBook Pro LAPTOP MacBookPro10,1
MacBook Pro LAPTOP MacBookPro10,2
MacBook Pro LAPTOP MacBookPro10,2
MacBook Pro LAPTOP MacBookPro11,1
MacBook Pro LAPTOP MacBookPro11,1
MacBook Pro LAPTOP MacBookPro11,2
MacBook Pro LAPTOP MacBookPro11,2
MacBook Pro LAPTOP MacBookPro11,3
MacBook Pro LAPTOP MacBookPro11,3
MacBook Pro LAPTOP MacBookPro11,4
MacBook Pro LAPTOP MacBookPro11,5
MacBook Pro LAPTOP MacBookPro12,1
MacBook Pro LAPTOP MacBookPro13,1
MacBook Pro LAPTOP MacBookPro13,2
MacBook Pro LAPTOP MacBookPro13,3
MacBook Pro LAPTOP MacBookPro14,1
MacBook Pro LAPTOP MacBookPro14,2
MacBook Pro LAPTOP MacBookPro14,3
MacBook Pro LAPTOP MacBookPro15,1
MacBook Pro LAPTOP MacBookPro15,1
MacBook Pro LAPTOP MacBookPro15,2
MacBook Pro LAPTOP MacBookPro15,2
MacBook Pro LAPTOP MacBookPro15,3
MacBook Pro LAPTOP MacBookPro15,4
MacBook Pro LAPTOP MacBookPro16,1
MacBook Pro LAPTOP MacBookPro16,2
MacBook Pro LAPTOP MacBookPro16,3
MacBook Pro LAPTOP MacBookPro16,4
MacBook Pro LAPTOP MacBookPro17,1
MacBook Pro LAPTOP MacBookPro18,1
MacBook Pro LAPTOP MacBookPro18,2
MacBook Pro LAPTOP MacBookPro18,3
MacBook Pro LAPTOP MacBookPro18,4
MacBook Pro LAPTOP MacBookPro4,1
MacBook Pro LAPTOP MacBookPro4,1
MacBook Pro LAPTOP MacBookPro5,1
MacBook Pro LAPTOP MacBookPro5,2
MacBook Pro LAPTOP MacBookPro5,2
MacBook Pro LAPTOP MacBookPro5,3
MacBook Pro LAPTOP MacBookPro5,3
MacBook Pro LAPTOP MacBookPro5,5
MacBook Pro LAPTOP MacBookPro6,1
MacBook Pro LAPTOP MacBookPro6,2
MacBook Pro LAPTOP MacBookPro7,1
MacBook Pro LAPTOP MacBookPro8,1
MacBook Pro LAPTOP MacBookPro8,1
MacBook Pro LAPTOP MacBookPro8,2
MacBook Pro LAPTOP MacBookPro8,2
MacBook Pro LAPTOP MacBookPro8,3
MacBook Pro LAPTOP MacBookPro8,3
MacBook Pro LAPTOP MacBookPro9,1
MacBook Pro LAPTOP MacBookPro9,2
Mac mini DESKTOP Mac14,12
Mac mini DESKTOP Mac14,3
Mac mini DESKTOP Macmini3,1
Mac mini DESKTOP Macmini3,1
Mac mini DESKTOP Macmini4,1
Mac mini DESKTOP Macmini5,1
Mac mini DESKTOP Macmini5,2
Mac mini DESKTOP Macmini6,1
Mac mini DESKTOP Macmini6,2
Mac mini DESKTOP Macmini7,1
Mac mini DESKTOP Macmini8,1
Mac mini DESKTOP Macmini9,1
Mac Studio DESKTOP Mac13,1
Mac Studio DESKTOP Mac13,2
iMac DESKTOP iMac10,1
iMac DESKTOP iMac10,1
iMac DESKTOP iMac11,2
iMac DESKTOP iMac11,3
iMac DESKTOP iMac12,1
iMac DESKTOP iMac12,2
iMac DESKTOP iMac13,1
iMac DESKTOP iMac13,2
iMac DESKTOP iMac14,1
iMac DESKTOP iMac14,2
iMac DESKTOP iMac14,4
iMac DESKTOP iMac15,1
iMac DESKTOP iMac15,1
iMac DESKTOP iMac16,1
iMac DESKTOP iMac16,2
iMac DESKTOP iMac17,1
iMac DESKTOP iMac18,1
iMac DESKTOP iMac18,2
iMac DESKTOP iMac18,3
iMac DESKTOP iMac19,1
iMac DESKTOP iMac19,2
iMac DESKTOP iMac20,1
iMac DESKTOP iMac20,2
iMac DESKTOP iMac21,1
iMac DESKTOP iMac21,2
iMac DESKTOP iMac9,1
iMac DESKTOP iMac9,1
iMac DESKTOP iMacPro1,1
Mac Pro DESKTOP MacPro4,1
Mac Pro DESKTOP MacPro5,1
Mac Pro DESKTOP MacPro5,1
Mac Pro DESKTOP MacPro5,1
Mac Pro DESKTOP MacPro5,1
Mac Pro DESKTOP MacPro6,1
Mac Pro DESKTOP MacPro7,1
Mac Pro DESKTOP MacPro7,1
MacBook Air - Laptop
- Mac14,2
- MacBookAir10,1
- MacBookAir2,1
- MacBookAir3,1
- MacBookAir3,2
- MacBookAir4,1
- MacBookAir4,2
- MacBookAir5,1
- MacBookAir5,2
- MacBookAir6,1
- MacBookAir6,1
- MacBookAir6,2
- MacBookAir6,2
- MacBookAir7,1
- MacBookAir7,2
- MacBookAir7,2
- MacBookAir8,1
- MacBookAir8,2
- MacBookAir9,1
MacBook Pro - Laptop
- Mac14,10
- Mac14,5
- Mac14,6
- Mac14,7
- Mac14,9
- MacBookPro10,1
- MacBookPro10,1
- MacBookPro10,2
- MacBookPro10,2
- MacBookPro11,1
- MacBookPro11,1
- MacBookPro11,2
- MacBookPro11,2
- MacBookPro11,3
- MacBookPro11,3
- MacBookPro11,4
- MacBookPro11,5
- MacBookPro12,1
- MacBookPro13,1
- MacBookPro13,2
- MacBookPro13,3
- MacBookPro14,1
- MacBookPro14,2
- MacBookPro14,3
- MacBookPro15,1
- MacBookPro15,1
- MacBookPro15,2
- MacBookPro15,2
- MacBookPro15,3
- MacBookPro15,4
- MacBookPro16,1
- MacBookPro16,2
- MacBookPro16,3
- MacBookPro16,4
- MacBookPro17,1
- MacBookPro18,1
- MacBookPro18,2
- MacBookPro18,3
- MacBookPro18,4
- MacBookPro4,1
- MacBookPro4,1
- MacBookPro5,1
- MacBookPro5,2
- MacBookPro5,2
- MacBookPro5,3
- MacBookPro5,3
- MacBookPro5,5
- MacBookPro6,1
- MacBookPro6,2
- MacBookPro7,1
- MacBookPro8,1
- MacBookPro8,1
- MacBookPro8,2
- MacBookPro8,2
- MacBookPro8,3
- MacBookPro8,3
- MacBookPro9,1
- MacBookPro9,2
Mac mini - Desktop
- Mac14,12
- Mac14,3
- Macmini3,1
- Macmini3,1
- Macmini4,1
- Macmini5,1
- Macmini5,2
- Macmini6,1
- Macmini6,2
- Macmini7,1
- Macmini8,1
- Macmini9,1
Mac Studio - Desktop
- Mac13,1
- Mac13,2
iMac - Desktop
- iMac10,1
- iMac10,1
- iMac11,2
- iMac11,3
- iMac12,1
- iMac12,2
- iMac13,1
- iMac13,2
- iMac14,1
- iMac14,2
- iMac14,4
- iMac15,1
- iMac15,1
- iMac16,1
- iMac16,2
- iMac17,1
- iMac18,1
- iMac18,2
- iMac18,3
- iMac19,1
- iMac19,2
- iMac20,1
- iMac20,2
- iMac21,1
- iMac21,2
- iMac9,1
- iMac9,1
- iMacPro1,1
Mac Pro - Desktop
- MacPro4,1
- MacPro5,1
- MacPro5,1
- MacPro5,1
- MacPro5,1
- MacPro6,1
- MacPro7,1
- MacPro7,1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment