Last active
February 27, 2025 21:17
-
-
Save np5/a5603d1698ae88bd20e26e542e3db786 to your computer and use it in GitHub Desktop.
Apple computer / model identifiers model id models ID IDENTIFIERS APPLE mac MacPro script parse download output
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Model | Type | Identifier | |
---|---|---|---|
MacBook Air | LAPTOP | Mac14,15 | |
MacBook Air | LAPTOP | Mac14,2 | |
MacBook Air | LAPTOP | Mac15,12 | |
MacBook Air | LAPTOP | Mac15,13 | |
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 | Mac15,10 | |
MacBook Pro | LAPTOP | Mac15,11 | |
MacBook Pro | LAPTOP | Mac15,3 | |
MacBook Pro | LAPTOP | Mac15,6 | |
MacBook Pro | LAPTOP | Mac15,7 | |
MacBook Pro | LAPTOP | Mac15,8 | |
MacBook Pro | LAPTOP | Mac15,9 | |
MacBook Pro | LAPTOP | Mac16,1 | |
MacBook Pro | LAPTOP | Mac16,5 | |
MacBook Pro | LAPTOP | Mac16,6 | |
MacBook Pro | LAPTOP | Mac16,7 | |
MacBook Pro | LAPTOP | Mac16,8 | |
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 | Mac16,10 | |
Mac mini | DESKTOP | Mac16,11 | |
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 | |
Mac Studio | DESKTOP | Mac14,13 | |
Mac Studio | DESKTOP | Mac14,14 | |
iMac | DESKTOP | Mac15,4 | |
iMac | DESKTOP | Mac15,5 | |
iMac | DESKTOP | Mac16,2 | |
iMac | DESKTOP | Mac16,3 | |
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 | Mac14,8 | |
Mac Pro | DESKTOP | Mac14,8 | |
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import re | |
import urllib.request | |
MODEL_IDENTIFIER_RE = re.compile(r"i?[A-Z][a-zA-Z]+[0-9]{1,2},[0-9]{1,2}") | |
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 | |
for match in MODEL_IDENTIFIER_RE.findall(line): | |
yield match | |
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() | |
aggs = [] | |
for url, model, machine_type in PAGES: | |
content = get_page_content(url) | |
model_identifiers = list(extract_model_identifiers(content)) | |
model_identifiers.sort() | |
if args.pretty: | |
pretty_print(model, machine_type, model_identifiers) | |
elif args.csv: | |
quick_and_dirty_csv_print(model, machine_type, model_identifiers) | |
elif args.ztl: | |
for model_identifier in model_identifiers: | |
aggs.append((model_identifier, machine_type)) | |
if aggs: | |
aggs.sort(key=lambda k: (-1*len(k[0]), k[0].lower())) | |
for model_identifier, machine_type in aggs: | |
print(f" ('{model_identifier.lower()}', {machine_type}),") | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser("apple_model_identifiers.py") | |
group = parser.add_mutually_exclusive_group() | |
group.add_argument('-z', '--ztl', action='store_true', help='Zentral output') | |
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment