|
from arvix import extract_arxiv_data |
|
from pmc import extract_pmc_data |
|
import json |
|
import dotenv |
|
import os |
|
from concurrent.futures import ThreadPoolExecutor |
|
|
|
dotenv.load_dotenv() |
|
ACCESS_KEY = os.getenv("ACCESS_KEY") |
|
|
|
def fetch_arxiv_data(): |
|
return json.loads(extract_arxiv_data()) |
|
|
|
def fetch_pmc_data(): |
|
return json.loads(extract_pmc_data()) |
|
|
|
def fetch_data(user_access_key): |
|
if user_access_key != ACCESS_KEY: |
|
papers_data = {"status": "Invalid access key"} |
|
else: |
|
papers_data = {} |
|
try: |
|
papers_data['status'] = 'success' |
|
papers_data['data'] = {} |
|
with ThreadPoolExecutor() as executor: |
|
pmc_future = executor.submit(fetch_pmc_data) |
|
arxiv_future = executor.submit(fetch_arxiv_data) |
|
pmc_data = pmc_future.result() |
|
arxiv_data = arxiv_future.result() |
|
for topic, topic_data in pmc_data.items(): |
|
if topic_data['count'] == 0: |
|
continue |
|
else: |
|
papers_data['data'][topic] = {} |
|
papers_data['data'][topic]['ids'] = topic_data['ids'] |
|
for topic, topic_data in arxiv_data.items(): |
|
if topic_data['count'] == 0: |
|
continue |
|
else: |
|
papers_data['data'][topic] = {} |
|
papers_data['data'][topic]['ids'] = topic_data['ids'] |
|
except Exception as e: |
|
print(str(e)) |
|
papers_data['status'] = 'error' |
|
data = json.dumps(papers_data, indent=4, ensure_ascii=False) |
|
return data |
|
|
|
if __name__ == '__main__': |
|
data = fetch_data(ACCESS_KEY) |
|
with open('data.json', 'w') as f: |
|
f.write(data) |