Ngiêm cấm sử đụng PROXY và VPS vào mục đích trái pháp luật bạn sẽ phải chịu toàn bộ trách nhiệm trước pháp luật khi sử dụng dịch vụ của chúng tôi tks!
OpenAIRE Graph API nghiên cứu: dự án, tổ chức, kết quả

OpenAIRE Graph API nghiên cứu: quan hệ dự án, tổ chức, kết quả

Chuyên viên Kỹ thuật ProxyVN 04-14-2026 Đang tính... phút đọc

OpenAIRE Graph API nghiên cứu là cách hỏi đồ thị tri thức OpenAIRE để biết kết quả nghiên cứu nào gắn với dự án nào và tổ chức nào. Bài này viết cho người dựng bảng quan hệ dự án, tổ chức và công bố, không chỉ là danh sách DOI. ProxyVN gọi Graph API v1 công khai ngày 05/11/2026 ở mức nhẹ, dựng một bảng quan hệ cho một dự án nghiên cứu chất lượng không khí tại Việt Nam và ghi lại những chỗ dễ hiểu sai.

OpenAIRE Graph API nghiên cứu: mục tiêu và phạm vi không lặp

Phần này chốt bài toán, đầu ra và ranh giới với bài OpenAlex, Crossref đã có.

Bài toán cần giải

Một phòng quản lý khoa học muốn biết dự án do quỹ nước ngoài tài trợ đã sinh ra những công bố và dataset nào, có trường Việt Nam nào đứng tên. Tra DOI từng bài thì biết tác giả, nhưng không biết bài thuộc dự án nào. Cần một nguồn có sẵn quan hệ giữa dự án, tổ chức và kết quả.

Đầu ra nghiệm thu

Đầu ra là bảng quan hệ, mỗi dòng gồm project_id, result_id, loại kết quả, DOI, tổ chức nếu có, và cột relation_source ghi quan hệ được suy ra từ truy vấn nào. Đi kèm là bản ghi nguồn cập nhật: ngày gọi API, tham số truy vấn và số kết quả API báo.

Ranh giới với bài OpenAlex và Crossref

Bài OpenAlex API bằng Python nói cách chọn trường, cursor và checkpoint cho metadata công bố. Bài Crossref API bằng Python tra metadata của DOI. Bài này không lặp lại hai việc đó. Nó tập trung vào quan hệ project, organization và result mà OpenAIRE đã gom từ quỹ tài trợ và kho dữ liệu.

Giới hạn của lab

Lab gọi Graph API v1 thật, không token, nghỉ 3 giây giữa các lời gọi. Mẫu chỉ gồm một dự án UKRI về chất lượng không khí ở Hà Nội và TP.HCM, cùng Đại học Quốc gia Hà Nội. Kết quả là ảnh chụp đồ thị ngày 05/11/2026. Đồ thị được dựng lại định kỳ nên số liệu sẽ đổi.

Ai nên đọc

Người làm báo cáo tác động khoa học cho trường hoặc viện. Kỹ sư dữ liệu xây kho công bố có liên kết quỹ tài trợ. Người viết crawler dữ liệu học thuật cần biết OpenAIRE trả gì và không trả gì trước khi viết mã.

Những gì bài không làm

Bài không hướng dẫn tải toàn bộ đồ thị dạng dump, không nói về Scholexplorer hay API của cổng tìm kiếm cũ. Bài cũng không đánh giá chất lượng dữ liệu OpenAIRE nói chung. Phạm vi chỉ là truy vấn theo quan hệ và ghi lại bằng chứng.

Thuật ngữ dùng trong bài

Research product là kết quả nghiên cứu nói chung, gồm publication, dataset, software và other. Organization là tổ chức như trường, viện, công ty. Project là dự án được một quỹ tài trợ. Relation là cạnh nối giữa các thực thể. Bài giữ tên tiếng Anh như trong API để dễ đối chiếu với code.

Vì sao không chỉ dùng DOI

DOI cho biết bài báo là gì, ai viết, đăng ở đâu. DOI không nói bài thuộc đề tài nào, quỹ nào. Thông tin đó nằm ở phần cảm ơn của bài hoặc ở hệ thống của quỹ. OpenAIRE gom các nguồn đó lại thành cạnh trong đồ thị, đây là giá trị riêng mà Crossref đơn thuần không có.

Truy vấn kết quả nghiên cứu OpenAIRE và giữ liên kết tổ chức/dự án với OpenAIRE Graph API nghiên cứu

Phần này mô tả các lời gọi đã chạy và những gì response trả về.

Nguồn tài liệu đã đọc

Tài liệu OpenAIRE Graph mô tả mô hình dữ liệu gồm research product, organization, project, data source và các quan hệ giữa chúng. Graph API v1 đặt dưới https://api.openaire.eu/graph/v1 với các endpoint researchProducts, organizations, projects và dataSources.

Tìm dự án bằng từ khóa

Lab gọi /projects với search là "air quality Vietnam", pageSize 3. API trả numFound 1. Dự án có id ukri________::5f9dc3088239841bc1b22d59db9d6c78, code NE/P014771/1, tên A Two City study of Air Quality in Vietnam, chạy từ 13/08/2017 tới 13/02/2021, quỹ UKRI, dòng tài trợ NERC.

Tìm tổ chức bằng từ khóa

Gọi /organizations với search là "Vietnam National University" trả numFound 131. Kết quả đầu là Vietnam National University, Hanoi, id openorgs____::278a7f0f98097e1ce3285f336f954fb7, có ROR https://ror.org/02jmfj006, GRID, ISNI, Wikidata và danh sách tên khác gồm cả tên tiếng Việt.

Bản ghi tổ chức chưa gộp

Kết quả thứ hai của cùng truy vấn có id bắt đầu bằng pending_org_, tên là một chuỗi địa chỉ dài của một viện thuộc ĐHQG TP.HCM, quốc gia UNKNOWN, không có pids. Đây là bản ghi tổ chức chưa được gộp vào thực thể chuẩn. Danh mục tổ chức nên lọc theo tiền tố ID hoặc theo việc có ROR.

Trường fundings của dự án

Mỗi dự án có mảng fundings, mỗi phần tử có shortName, name, jurisdiction và fundingStream. Dự án mẫu có shortName UKRI, jurisdiction GB, fundingStream UKRI::NERC. Khi lọc theo quỹ, dùng relProjectFundingShortName cho researchProducts, hoặc fundingShortName cho projects.

Cờ open access mandate

Dự án mẫu có openAccessMandateForPublications và openAccessMandateForDataset đều là false. Đây là thông tin từ quỹ, không phải trạng thái mở của từng bài. Trạng thái mở của bài nằm ở bestAccessRight và openAccessColor của research product.

Header của mỗi response

Mỗi response có header JSON gồm numFound, maxScore, queryTime, page và pageSize. Lab ghi numFound của từng truy vấn vào bản ghi nguồn. Khi lần quét sau numFound khác, ta biết đồ thị đã đổi trước cả khi so từng dòng.

Ví dụ request bằng Python

import requests, time
s = requests.Session()
s.headers["User-Agent"] = "ProxyVN-docs-lab/1.0 (+https://proxy.vn/)"
B = "https://api.openaire.eu/graph/v1"
 
def get(path, **q):
    r = s.get(B + path, params=q, timeout=90)
    time.sleep(3)
    return r.status_code, r.json()
 
st, d = get("/researchProducts",
            relProjectId="ukri________::5f9dc3088239841bc1b22d59db9d6c78", pageSize=50)
print(st, d["header"]["numFound"])
for x in d["results"]:
    print(x["id"], x["type"], [p["value"] for p in x.get("pids") or [] if p["scheme"] == "doi"])

Tìm kiếm toàn văn trả về điểm

Truy vấn search trả maxScore, ví dụ 11,31 với dự án và 11,37 với tổ chức. Điểm này chỉ dùng để xếp hạng trong một truy vấn. Không so điểm giữa hai truy vấn, và không dùng điểm làm ngưỡng chọn tự động. Xác nhận thực thể bằng mã, quỹ và ngày.

Không có header hạn mức

Lab không thấy header X-RateLimit trong các response. Không có header không có nghĩa là không có giới hạn. Tài liệu OpenAIRE có phần về đăng ký để có hạn mức cao hơn. Lab giữ nhịp một lời gọi mỗi 3 giây, tổng chưa tới 20 lời gọi.

Khám phá endpoint Graph và mô hình result/project bằng OpenAIRE Graph API nghiên cứu

Đây là chỗ quan trọng nhất: quan hệ nằm ở đâu trong API.

Research product không nhúng dự án

Quan hệ nằm ở bộ lọc

Quan hệ nằm ở bộ lọc

Gọi /researchProducts với relProjectId của dự án trả numFound 6, gồm 5 publication và 1 dataset. Danh sách khóa của mỗi kết quả có authors, pids, instances, publicationDate, sources, originalIds và nhiều trường khác. Không có khóa projects hay organizations. Quan hệ không đi kèm trong object kết quả.

Quan hệ chỉ có qua bộ lọc

Muốn biết một kết quả thuộc dự án nào, phải hỏi ngược: lấy kết quả có relProjectId bằng X. Bảng quan hệ vì vậy phải ghi rõ dòng nào sinh ra từ truy vấn nào. Nếu chỉ lưu kết quả mà quên tham số truy vấn, quan hệ sẽ mất.

Tham số hợp lệ của researchProducts

Lab gửi một tham số lạ để API trả danh sách tham số hợp lệ. Thông báo lỗi 400 liệt kê relProjectId, relProjectCode, relOrganizationId, rorId, relProjectFundingShortName, relCommunityId, hasProjectRel, relHostingDataSourceId, relCollectedFromDatasourceId, cursor và nhiều tham số khác. Đây là cách nhanh để biết schema thật khi tài liệu chưa kịp cập nhật.

Hướng ngược lại không có

Gọi /projects với relResultId trả 400 Unknown parameter. Gọi /organizations với relResultId hoặc relProjectId cũng trả 400. Nghĩa là API không cho hỏi "kết quả này thuộc dự án nào" hay "dự án này có tổ chức nào" theo chiều đó. Lab phải dựng quan hệ từ phía researchProducts.

Projects lọc theo tổ chức được

Endpoint /projects nhận relOrganizationId. Gọi với id của ĐHQG Hà Nội trả numFound 4. Cả bốn là cùng một đề tài NIH về hành vi cha mẹ, mang các mã 1R01TW008664-01A1, 4R01TW008664-02, 5R01TW008664-03 và 5R01TW008664-04. Một đề tài thật bị tách thành bốn bản ghi dự án theo năm cấp kinh phí.

Mã dự án thay cho ID

Tham số relProjectCode bằng NE/P014771/1 trả cùng numFound 6 như relProjectId. Mã dự án dễ đọc hơn, nhưng mã có thể trùng giữa các quỹ khác nhau. Bảng quan hệ nên giữ project_id của OpenAIRE làm khóa, mã dự án chỉ để hiển thị.

hasProjectRel để đếm nhanh

Danh sách tham số có hasProjectRel. Tham số này lọc kết quả có hoặc không có cạnh tới bất kỳ dự án nào. Lab chưa chạy, nhưng đây là cách gọn để đo tỉ lệ công bố của một trường có gắn dự án, chỉ cần hai lời gọi pageSize 1.

Đọc thông báo lỗi như tài liệu

Mỗi lỗi 400 Unknown parameter đều kèm danh sách tham số hợp lệ của endpoint đó. Lab lưu nguyên văn các thông báo này. Khi tài liệu web và API lệch nhau, thông báo lỗi phản ánh đúng phiên bản đang chạy.

Bảng hướng truy vấn đã thử

Bảng: Bảng hướng truy vấn đã thử

Hướng hỏi

Tham số

Kết quả 05/11/2026

Kết quả của dự án

researchProducts?relProjectId

200, 6 kết quả

Kết quả theo mã dự án

researchProducts?relProjectCode

200, 6 kết quả

Kết quả của tổ chức

researchProducts?relOrganizationId

200, 12379 kết quả

Kết quả theo ROR

researchProducts?rorId

200, 12379 kết quả

Dự án của tổ chức

projects?relOrganizationId

200, 4 bản ghi

Dự án của kết quả

projects?relResultId

400 Unknown parameter

Tổ chức của dự án

organizations?relProjectId

400

Chọn quan hệ nghiên cứu cần giữ theo schema hiện hành của OpenAIRE Graph API nghiên cứu

Không phải quan hệ nào cũng cần, và không phải quan hệ nào cũng hỏi được.

Ba quan hệ lõi

Bảng của lab giữ ba quan hệ: result thuộc project, result gắn organization, project gắn organization. Quan hệ đầu lấy từ relProjectId. Quan hệ thứ hai lấy từ relOrganizationId. Quan hệ thứ ba lấy từ projects?relOrganizationId. Mỗi quan hệ ghi relation_source là tên tham số đã dùng.

Giao hai bộ lọc để lấy bộ ba

Muốn biết kết quả nào vừa thuộc dự án UKRI vừa gắn ĐHQG Hà Nội, lab gọi researchProducts với cả relProjectId và relOrganizationId. API trả numFound 2. Thay relOrganizationId bằng rorId https://ror.org/02jmfj006 cũng ra 2. Đây là cách duy nhất lab tìm được để dựng bộ ba project, organization, result.

Đối chiếu số lượng

Dự án có 6 kết quả, trong đó 2 có ĐHQG Hà Nội. Bốn kết quả còn lại có thể gắn các trường phía Anh hoặc chưa được gắn tổ chức. Lab không suy diễn tổ chức cho bốn kết quả đó. Dòng quan hệ chỉ ghi những gì API trả về.

Vì sao không suy luận bắc cầu

Nếu dự án X gắn tổ chức A, và kết quả Y thuộc dự án X, thì chưa chắc Y gắn A. Dự án có nhiều đơn vị tham gia, mỗi bài báo chỉ có một phần trong đó. Lab không tự suy cạnh Y với A. Cạnh này chỉ được ghi khi truy vấn giao trả về Y.

ROR là cầu nối sang nguồn khác

Bản ghi tổ chức đã gộp có ROR, GRID, ISNI và Wikidata. Khi nối bảng OpenAIRE với OpenAlex hay danh mục tổ chức nội bộ, ROR là khóa ổn định hơn tên. Tên trường có ít nhất năm cách viết trong alternativeNames của ĐHQG Hà Nội.

DOI có thể nhiều hơn một

Trong 6 kết quả của dự án, cả 6 có DOI, nhưng 2 kết quả có bốn DOI cùng lúc. Đó là các tệp bổ sung trên Figshare với DOI chung và các DOI theo phiên bản như v1, v2, v3. OpenAIRE đã gộp chúng thành một research product có id dạng doi_dedup___::...

ID gộp và ID gốc

Mỗi kết quả có originalIds, số lượng từ 8 tới 25 trong mẫu. Đây là các ID ở nguồn gốc trước khi OpenAIRE gộp bản trùng. Bảng quan hệ dùng id đã gộp làm khóa, lưu số lượng originalIds để biết kết quả đó được ghép từ bao nhiêu bản.

Loại kết quả không chỉ có bài báo

Trong 6 kết quả có 1 dataset, là bộ tài liệu bổ sung trên Figshare. Báo cáo tác động thường chỉ đếm publication. Giữ cột result_type giúp người đọc chọn đếm gì, và không làm mất dataset hay software khi lọc.

Trường sources không phải nguồn dữ liệu đầy đủ

Trường sources của bốn kết quả có giá trị như Crossref và tên tạp chí, hai kết quả không có. Lab không coi sources là danh sách đầy đủ các kho đã cung cấp kết quả. Cần biết kho nào đã thu thập thì dùng bộ lọc relCollectedFromDatasourceId.

Thu dataset nhỏ có ID và nguồn cập nhật với OpenAIRE Graph API nghiên cứu

Phần này dựng bảng quan hệ và bản ghi nguồn.

Mã dựng bảng

Bảng quan hệ của lab

Bảng quan hệ của lab

import csv
PRJ = "ukri________::5f9dc3088239841bc1b22d59db9d6c78"
VNU = "openorgs____::278a7f0f98097e1ce3285f336f954fb7"
rows = []
for src, params in [("relProjectId", {"relProjectId": PRJ}),
                    ("relProjectId+relOrganizationId", {"relProjectId": PRJ, "relOrganizationId": VNU})]:
    st, d = get("/researchProducts", pageSize=50, **params)
    for x in d["results"]:
        dois = [p["value"] for p in x.get("pids") or [] if p["scheme"] == "doi"]
        rows.append({"project_id": PRJ, "org_id": VNU if "Organization" in src else "",
                     "result_id": x["id"], "result_type": x["type"], "doi": dois[0] if dois else "",
                     "n_doi": len(dois), "n_original_ids": len(x.get("originalIds") or []),
                     "relation_source": src, "num_found": d["header"]["numFound"]})

Kết quả chạy thật

Lần chạy mã trên trả numFound 6 với truy vấn dự án và 2 với truy vấn giao. Lời gọi /projects/{id} kiểm ID trả 200. Hai kết quả có tổ chức là bài trên Environmental Pollution 2022 và Atmospheric Environment 2021. Hai kết quả nhiều DOI là bộ tài liệu bổ sung trên Figshare.

Bảng quan hệ của lab

Bảng có 6 dòng project và result, cộng 2 dòng project, organization và result. Mọi dòng có result_id dạng doi_dedup___, có DOI. Hai dòng có n_doi bằng 4. Số originalIds dao động từ 8 tới 25. Cột relation_source cho biết dòng nào đến từ truy vấn giao.

Bản ghi nguồn cập nhật

Lab lưu một tệp JSON nhỏ gồm ngày giờ gọi, URL đầy đủ, numFound và queryTime của từng truy vấn. Trong các lần chạy, queryTime dao động từ 37 ms tới 346 ms tùy truy vấn. Bản ghi này giúp so sánh khi đồ thị được dựng lại.

Phân trang bằng cursor

Tổ chức ĐHQG Hà Nội có 12379 kết quả. Lab gọi với cursor là dấu sao và pageSize 2. Header trả thêm nextCursor là một chuỗi mã hóa dài. Lấy hết danh sách thì lặp với nextCursor cho tới khi hết. Lab không lấy hết vì vượt nhu cầu của bài.

Chọn pageSize hợp lý

pageSize lớn giảm số lời gọi nhưng mỗi response nặng hơn, vì object kết quả có mô tả, tác giả, instance. Với bảng quan hệ, 50 tới 100 là mức vừa. Nếu chỉ cần đếm, gọi pageSize 1 và đọc numFound.

Thứ tự kết quả không cố định

Không có sortBy, thứ tự kết quả theo điểm liên quan, có thể đổi giữa hai lần gọi. So sánh hai lần quét phải dựa trên tập result_id, không dựa trên vị trí dòng. Nên sắp xếp result_id trước khi ghi CSV để hai lần quét so được bằng diff.

Lưu JSON gốc

Lab lưu products_project.json cùng các tệp CSV. Khi cần thêm trường như ngày công bố hay quyền truy cập mở, đọc lại từ JSON gốc thay vì gọi lại API.

Che thông tin không cần

Object kết quả chứa tên tác giả và có thể có ORCID. Bảng quan hệ cho báo cáo quản lý thường không cần tên cá nhân. Giữ chúng trong JSON gốc với quyền truy cập hạn chế, chỉ đưa ID và DOI vào bảng chia sẻ rộng.

Đối soát quan hệ thiếu hoặc nhiều liên kết cùng thực thể trong OpenAIRE Graph API nghiên cứu

Phần này liệt kê những chỗ lệch và cách xử lý không bịa dữ liệu.

Một đề tài thành nhiều dự án

Một đề tài nhiều mã

Một đề tài nhiều mã

Bốn bản ghi NIH có cùng tên, khác mã theo năm. Đếm số dự án của ĐHQG Hà Nội ra 4 là sai về nghĩa. Lab gom theo phần mã chung R01TW008664 và tên dự án, ghi số bản ghi gốc vào cột riêng. Quy tắc gom phải ghi rõ vì nó là suy luận của mình, không phải của OpenAIRE.

Giữ bản ghi gốc khi gom

Khi gom bốn bản ghi NIH thành một đề tài, đừng xóa bốn project_id gốc. Bảng gom có một dòng cho đề tài và cột danh sách project_id. Người khác dùng bảng có thể bỏ quy tắc gom của mình và quay lại dữ liệu gốc của OpenAIRE.

Một kết quả nhiều DOI

Kết quả gộp từ các bản trên Figshare có bốn DOI. Nối với Crossref theo DOI đầu tiên có thể ra bản v2, nối với kho khác lại ra v3. Lab giữ n_doi và lưu đủ danh sách DOI trong JSON. Khi nối bảng, thử từng DOI trong danh sách.

Kết quả không gắn tổ chức

Bốn trong sáu kết quả không xuất hiện khi giao với ĐHQG Hà Nội. Lab không điền tổ chức cho chúng. Cột org_id để trống, relation_source chỉ là relProjectId. Báo cáo phải nói rõ "chưa thấy liên kết tổ chức trong OpenAIRE", không nói "không có trường Việt Nam tham gia".

Bản ghi tổ chức chờ gộp

Bản ghi pending_org_ không có quốc gia và ROR. Nếu dùng relOrganizationId của bản ghi này, số kết quả có thể ít và khác với thực thể chuẩn. Lab chỉ dùng id openorgs____ có ROR. Bản ghi pending ghi vào danh sách cần theo dõi.

Trùng tên dự án giữa các quỹ

Tìm theo từ khóa có thể ra nhiều dự án tên gần giống nhau từ các quỹ khác nhau. Lab xác nhận dự án bằng code, quỹ, ngày bắt đầu và ngày kết thúc. Một trường không khớp thì không gộp.

Kết quả đến từ nhiều nguồn thu thập

Một kết quả có thể được thu từ Crossref, PubMed Central, kho của trường và Figshare cùng lúc. Số originalIds 25 của bài đầu cho thấy điều đó. Khi đếm công bố của dự án, đếm theo result_id đã gộp, không đếm theo originalIds.

Ngày công bố có thể khác giữa các nguồn

Bản gộp chọn một publicationDate. Bản trên Crossref, bản preprint và bản kho trường có thể có ngày khác. Báo cáo theo năm nên ghi rõ đang dùng ngày nào, và giữ JSON gốc để tra lại khi có thắc mắc.

Kiểm ID trước khi ghi

Gọi /projects/{id} với id đúng trả 200 và các khóa id, code, title, fundings, startDate, endDate. Gọi với id sai trả 404 kèm thông điệp Project with id not found. Lab kiểm từng project_id trong bảng bằng lời gọi này trước khi xuất bản bảng.

Bảng đối soát

Bảng: Bảng đối soát

Tình huống

Quan sát

Cách ghi

Đề tài nhiều mã năm

4 bản ghi NIH

Gom có ghi quy tắc

Kết quả nhiều DOI

2/6 kết quả có 4 DOI

Giữ đủ danh sách

Kết quả chưa có tổ chức

4/6 kết quả

Để trống, không đoán

Tổ chức pending

Không ROR, UNKNOWN

Loại khỏi khóa

ID sai

404

Dừng, báo lỗi

Đầu ra nghiệm thu: Dataset project result relation và nguồn cập nhật có kiểm ID của OpenAIRE Graph API nghiên cứu

Phần này nói bảng phải đạt gì để giao cho người dùng.

Tệp relations.csv

Mỗi dòng có project_id, org_id, result_id, result_type, doi, n_doi, n_original_ids, relation_source, num_found. Không dòng nào thiếu project_id hay result_id. Không dòng nào có org_id mà relation_source không chứa relOrganizationId.

Tệp nguồn cập nhật

Tệp sources.json ghi ngày giờ, URL, numFound, queryTime của từng truy vấn. Người đọc bảng có thể chạy lại đúng các URL đó để kiểm.

Kiểm ID đã chạy

Mọi project_id trả 200 ở /projects/{id}. ID tổ chức dùng làm khóa có ROR. ID kết quả đều có tiền tố doi_dedup___ hoặc tiền tố nguồn hợp lệ.

Kiểm bảng bằng mã

Lab kiểm ba điều kiện bằng vài dòng Python: mọi dòng có project_id và result_id, mọi dòng có org_id thì relation_source chứa relOrganizationId, và tập result_id của truy vấn giao là tập con của truy vấn dự án. Ba điều kiện đều đúng với dữ liệu 05/11/2026.

Bảng nghiệm thu của lab

Nghiệm thu bảng quan hệ

Nghiệm thu bảng quan hệ

Bảng: Bảng nghiệm thu của lab

Hạng mục

Kết quả

Dự án tìm thấy

1, UKRI NE/P014771/1

Kết quả của dự án

6 (5 publication, 1 dataset)

Kết quả dự án có ĐHQG Hà Nội

2

Kết quả có nhiều DOI

2

Dự án của ĐHQG Hà Nội

4 bản ghi, 1 đề tài

Quan hệ nhúng trong object

Không có

Hướng hỏi ngược

400

Những gì lab chưa chạy

Lab chưa lấy hết 12379 kết quả của tổ chức, chưa thử relCommunityId, chưa so với dump đồ thị, chưa thử token đăng ký. Lab cũng chưa kiểm mức độ đầy đủ của liên kết tổ chức cho các trường Việt Nam nói chung. Một dự án mẫu không đủ để kết luận về cả đồ thị.

Vận hành OpenAIRE Graph API nghiên cứu trong pipeline định kỳ

Đồ thị đổi theo đợt dựng lại, pipeline phải chịu được thay đổi đó.

Lịch quét theo đợt dựng đồ thị

OpenAIRE dựng lại đồ thị định kỳ. Quét hằng ngày không mang lại nhiều. Quét hằng tháng, so numFound và danh sách result_id với lần trước là đủ cho báo cáo quản lý.

ID gộp có thể đổi

Khi OpenAIRE gộp thêm bản trùng, id doi_dedup___ có thể đổi. Lab chưa quan sát việc này trong một ngày. Pipeline nên nối lại theo DOI khi một result_id cũ biến mất, thay vì coi đó là kết quả bị xóa.

Xử lý lỗi

400 là lỗi tham số, sửa mã chứ không thử lại. 404 ở /projects/{id} là ID sai hoặc đã bị gộp. 5xx và lỗi mạng thì thử lại có giãn cách. Lab không gặp 5xx trong hơn 15 lời gọi.

Chạy lại truy vấn giao khi thêm tổ chức

Mỗi khi danh sách tổ chức theo dõi có thêm một trường, chạy lại truy vấn giao với từng dự án đã có. Số lời gọi bằng số dự án nhân số tổ chức, nên giữ danh sách gọn và nghỉ vài giây giữa các lời gọi.

Proxy ở tầng tải

API OpenAIRE công khai, gọi thẳng là đủ trong đa số trường hợp. Nếu mạng công ty bắt buộc đi qua proxy, cấu hình theo định dạng proxy thống nhất. Vai trò của proxy trong thu thập dữ liệu có ở bài Web Scraping proxy là gì. Khi cần IP Việt Nam cho các tác vụ khác, anh em có thể mua proxy tại trang chủ ProxyVN.

Giới hạn kích thước response

Mỗi research product có mô tả dài, danh sách tác giả và instance. Trang 50 kết quả có thể nặng vài trăm KB. Nếu mạng chậm, giảm pageSize thay vì tăng timeout vô hạn. Lab đặt timeout 90 giây, không lời gọi nào chạm ngưỡng.

Proxy không đổi dữ liệu đồ thị

Đổi IP không làm OpenAIRE trả thêm quan hệ. Kết quả thiếu tổ chức là do đồ thị chưa có liên kết, không phải do bị chặn. Đừng xoay IP để tìm dữ liệu không tồn tại.

Báo cáo thay đổi giữa hai lần quét

Mỗi lượt quét sinh danh sách result_id mới, result_id biến mất và numFound đổi. Kết quả biến mất nên được tra lại theo DOI trước khi kết luận. Người dùng bảng đọc báo cáo này thay vì so hai tệp CSV bằng mắt.

Khóa phiên bản

Lab chạy Python 3.12.10 với requests 2.34.2. Header response cho thấy API v1. Ghi phiên bản API vào bản ghi nguồn, vì khi OpenAIRE ra v2, tên tham số có thể đổi.

Quan hệ trong OpenAIRE Graph API nằm ở tham số truy vấn, không nằm trong object kết quả. Không ghi tham số thì mất quan hệ.

OpenAIRE Graph API nghiên cứu: câu hỏi thường gặp

Các câu dưới đây gom những điểm hay bị hỏi khi dựng bảng quan hệ.

Có cần token không?

Không cho truy vấn công khai ở mức nhẹ. Lab chạy không token. Tài liệu có hướng dẫn đăng ký khi cần hạn mức cao hơn.

Vì sao object kết quả không có dự án?

Graph API v1 không nhúng quan hệ project trong research product. Phải hỏi bằng relProjectId rồi tự ghi quan hệ.

rorId và relOrganizationId khác gì?

Trong lab, hai tham số cho cùng số kết quả với ĐHQG Hà Nội. rorId tiện khi đã có ROR từ nguồn khác.

Đếm dự án của một trường có tin được không?

Cẩn thận. Một đề tài NIH thành bốn bản ghi theo năm. Phải gom trước khi đếm.

Kết quả không có tổ chức thì có nghĩa trường không tham gia?

Không nên kết luận vậy. Câu đúng là OpenAIRE chưa có liên kết đó tại ngày gọi.

Có nên tải dump thay vì gọi API?

Khi cần toàn bộ đồ thị thì dump hợp lý hơn. Với bảng quan hệ cho vài dự án, API đủ và nhẹ hơn nhiều.

Có lọc theo quốc gia tổ chức được không?

researchProducts có countryCode, nhưng không có relOrganizationCountryCode. Lab gửi tham số sau và nhận 400. Lọc theo trường cụ thể bằng relOrganizationId hoặc rorId thì chắc hơn.

Bảng quan hệ dùng được cho báo cáo chính thức không?

Dùng được làm nguồn tham khảo có ghi ngày và tham số. Với báo cáo chính thức cho quỹ, nên đối chiếu thêm với danh sách công bố mà nhóm nghiên cứu tự khai báo.

Lấy tác giả theo ORCID được không?

researchProducts có tham số authorOrcid. Lab chưa chạy tham số này. Nếu dùng, nhớ rằng không phải tác giả nào cũng có ORCID gắn trong đồ thị.

OpenAIRE Graph API nghiên cứu và những điều cần nhớ

OpenAIRE Graph API nghiên cứu cho phép dựng bảng quan hệ dự án, tổ chức và kết quả, nhưng quan hệ chỉ có qua bộ lọc truy vấn, nên phải ghi relation_source cho từng dòng. Giữ ID OpenAIRE và ROR làm khóa, giữ đủ danh sách DOI, gom đề tài bị tách theo năm có ghi quy tắc, và để trống chỗ đồ thị chưa có liên kết. Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam khuyên anh em lưu tham số truy vấn cùng kết quả khi làm OpenAIRE Graph API nghiên cứu.

TIN TỨC LIÊN QUAN