File size: 1,077 Bytes
64008c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import requests

COMMON_MOLECULES = {
    'aspirin':      'CC(=O)Oc1ccccc1C(=O)O',
    'caffeine':     'Cn1cnc2c1c(=O)n(c(=O)n2C)C',
    'ibuprofen':    'CC(C)Cc1ccc(cc1)C(C)C(=O)O',
    'paracetamol':  'CC(=O)Nc1ccc(O)cc1',
    'dopamine':     'NCCc1ccc(O)c(O)c1',
    'serotonin':    'NCCc1c[nH]c2ccc(O)cc12',
    'morphine':     'OC1=CC=C2CC3N(C)CCC34C2=C1OC4',
    'penicillin':   'CC1(C)SC2C(NC1=O)C(=O)N2Cc1ccccc1',
    'glucose':      'OC[C@H]1OC(O)[C@H](O)[C@@H](O)[C@@H]1O',
    'ethanol':      'CCO',
    'benzene':      'c1ccccc1',
}

def name_to_smiles(name):
    """Convert molecule name to SMILES via PubChem API."""
    if name.lower() in COMMON_MOLECULES:
        return COMMON_MOLECULES[name.lower()]
    url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/{name}/property/IsomericSMILES/JSON"
    try:
        r = requests.get(url, timeout=10)
        if r.status_code == 200:
            data = r.json()['PropertyTable']['Properties'][0]
            return data.get('IsomericSMILES') or data.get('SMILES')
    except:
        pass
    return None