Created
October 29, 2018 23:48
-
-
Save robmoore/d6156a3c2066142553871bcaf3c71432 to your computer and use it in GitHub Desktop.
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 requests | |
from urllib.parse import quote_plus | |
url_base = 'https://rxnav.nlm.nih.gov/REST' | |
def lookup_bn(rxcui): | |
brand_names = {} | |
url = f'{url_base}/rxcui/{rxcui}/related.json?tty=BN' | |
print(url) | |
response = requests.get(url).json() | |
for concept_group in response['relatedGroup']['conceptGroup']: | |
if 'conceptProperties' in concept_group: | |
for concept_property in concept_group['conceptProperties']: | |
brand_names[concept_property['rxcui']] = {'rxcui': concept_property['rxcui'], | |
'name': concept_property['name']} | |
return brand_names | |
def lookup_class_id(class_name, class_type='MESHPA'): | |
classes = {} | |
class_name = quote_plus(class_name) | |
url = f'{url_base}/rxclass/class/byName.json?className={class_name}' | |
print(url) | |
response = requests.get(url).json() | |
for min_concept in response['rxclassMinConceptList']['rxclassMinConcept']: | |
classes[min_concept['classType']] = min_concept['classId'] | |
return classes[class_type] | |
def lookup_class_members(class_id, rela_source='MESH', tty='IN'): | |
drugs = {} | |
url = f'{url_base}/rxclass/classMembers.json?classId={class_id}&relaSource={rela_source}&tty={tty}' | |
print(url) | |
response = requests.get(url).json() | |
for drug_details in response['drugMemberGroup']['drugMember']: | |
drugs[drug_details['minConcept']['rxcui']] = {'rxcui': drug_details['minConcept']['rxcui'], | |
'name': drug_details['minConcept']['name']} | |
return drugs | |
class_id = lookup_class_id('hypnotics and sedatives') | |
class_members = lookup_class_members(class_id) | |
generics = [class_member['name'] for class_member in class_members.values()] | |
brand_names = [brand_name['name'] for class_member in class_members.values() for brand_name in | |
lookup_bn(class_member['rxcui']).values()] | |
for drug in generics: | |
print(drug) | |
print() | |
for drug in brand_names: | |
print(drug) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment