Скачать список всех опубликованных идентификаторов по дате (от-до)

Мне нужно автоматизировать сбор статей PubMed. Я нашел только примеры загрузки статей PubMed по запросу термина и загрузки статьи PubMed по пмид. (ОДНА СТАТЬЯ) Но я думаю о том, чтобы загрузить СПИСОК идентификаторов PubMed по дате (от-до) или все их, как в OAI.


person Tihamer    schedule 31.05.2016    source источник
comment
Ваша проблема решена или еще не решена?   -  person Maximilian Peters    schedule 01.07.2016


Ответы (1)


Для таких целей вы можете использовать BioPython. Следующий фрагмент кода даст вам ссылку на все статьи PubMed за определенный диапазон дат. Статьи PMC можно загружать напрямую, для других статей предоставляется DOI, но расположение PDF зависит от издателя и не может быть предсказано для всех статей.

def article_links(start_date, end_date = '3000'):
    """
    start_date, end_date = 'YYYY/MM/DD'
    returns a list of PubMedCentral links and a 2nd list of DOI links
    """
    from Bio import Entrez

    Entrez.email = "[email protected]"

    #get all articles in certain date range, in this case 5 articles which will be published in the future
    handle = Entrez.esearch(db="pubmed", term='("%s"[Date - Publication] : "%s"[Date - Publication]) ' %(start_date, end_date))
    records = Entrez.read(handle)

    #get a list of Pubmed IDs for all articles
    idlist = ','.join(records['IdList'])
    handle = Entrez.efetch("pubmed", id=idlist, retmode="xml")
    records = Entrez.parse(handle)

    pmc_articles = []
    doi = []
    for record in records:
        #get all PMC articles
        if record.get('MedlineCitation'):
            if record['MedlineCitation'].get('OtherID'):
               for other_id in record['MedlineCitation']['OtherID']:
                   if other_id.title().startswith('Pmc'):
                       pmc_articles.append('http://www.ncbi.nlm.nih.gov/pmc/articles/%s/pdf/' % (other_id.title().upper()))
        #get all DOIs
        if record.get('PubmedData'):
            if record['PubmedData'].get('ArticleIdList'):
                for other_id in record['PubmedData']['ArticleIdList']:
                    if 'doi' in other_id.attributes.values():
                        doi.append('http://dx.doi.org/' + other_id.title())


    return pmc_articles, doi

if __name__ == '__main__':
    print (article_links('2016/12/20'))
person Maximilian Peters    schedule 16.06.2016