Mỗi dự án Wikipedia đều có 1 trang tên là api.php (API), trang này cung cấp 1 giao diện để trao đổi dữ liệu với cơ sở dữ liệu, thông qua các hàm chức năng dựa theo các truy vấn Web. Ví dụ:

Nếu bạn không muốn sử dụng API thì bạn phải tải toàn bộ Wikipedia về, xin xem ở Wikipedia:Database download, viwiki. Bạn cần tạo server ảo để lấy dữ liệu hoặc truy vấn trực tiếp ở tập tin dữ liệu.

Một trong những action (hành động) phổ biến khi thực hiện truy vấn là query hoặc API:Query. Sau đây là một số ví dụ.

Kiến thức cần nắm trước

  • API
  • JSON (cấu trúc dữ liệu gọn hơn XML)
  • XML
  • Web Query
  • Web URL
  • Web service (để hiểu tại sao người ta lại dùng API)

Yêu cầu truy vấn API

Nếu bạn cần lấy dữ liệu bằng API nhưng chưa biết làm thế nào, bạn có thể:

1. Lấy danh sách các thể loại của 1 trang bất kỳ

Toàn bộ tham số cho vấn đề này ở prop=categories (cl).

Đường dẫn truy vấn

https://vi.wikipedia.org/w/api.php?action=query&format=xml&prop=categories&cllimit=max&clshow=!hidden&titles=Toán học

https://vi.wikipedia.org/w/api.php?action=query&format=json&formatversion=2&prop=categories&cllimit=max&clshow=!hidden&titles=To%C3%A1n%20h%E1%BB%8Dc

Lấy danh sách các thể loại của trang tên là "Toán học".

  • cllimit=max: lấy toàn bộ danh sách.
  • clshow=!hidden: chỉ lấy những thể loại không ẩn
  • format=xml: định dạng trả về là XML, khuyến cáo nên lấy định dạng là JSON.
  • formatversion=2: chỉ dùng với kiểu dữ liệu trả về là JSON để hiển thị tiếng Việt có thể đọc được

Dữ liệu trả về XML

<api batchcomplete="">
<query>
<pages>
<page _idx="1353" pageid="1353" ns="0" title="Toán học">
<categories>
<cl ns="14" title="Thể loại:Khoa học hình thức"/>
<cl ns="14" title="Thể loại:Khoa học tự nhiên"/>
<cl ns="14" title="Thể loại:Phân loại chủ đề chính"/>
<cl ns="14" title="Thể loại:Thuật ngữ toán học"/>
<cl ns="14" title="Thể loại:Toán học"/>
</categories>
</page>
</pages>
</query>
<limits categories="5000"/>
</api>

Dữ liệu về trả về JSON

{"batchcomplete":true,"query":{"pages":[{"pageid":1353,"ns":0,"title":"Toán học","categories":[{"ns":14,"title":"Thể loại:Khoa học hình thức"},{"ns":14,"title":"Thể loại:Khoa học tự nhiên"},{"ns":14,"title":"Thể loại:Phân loại chủ đề chính"},{"ns":14,"title":"Thể loại:Thuật ngữ toán học"},{"ns":14,"title":"Thể loại:Toán học"}]}]},"limits":{"categories":5000}}

2. Lấy mã nguồn của 1 trang bất kỳ

Thông thường, tôi hay lấy dữ liệu thô này để xử lý bài viết Wikipedia bằng bot.

Truy vấn

https://vi.wikipedia.org/wiki/Toán học?action=raw

Dữ liệu trả về

3. Lấy nội dung của 1 trang bất kỳ

Truy vấn

https://vi.wikipedia.org/w/api.php?format=json&formatversion=2&action=query&prop=extracts&titles=Toán học&redirects=true

Giải thích:

  • prop=extracts: Dùng để lấy nội dung wikitext ít mã HTML nhất có thể
  • redirects=true: chuyển tới trang đích cuối cùng

Dữ liệu trả về

4. Tìm kiếm trang theo tựa đề

Bạn nào ngứa tay thì làm hộ.

5. Tìm kiếm cụm từ chứa trong trang

Bạn nào ngứa tay thì làm hộ.

6. Liệt kê danh sách thành viên/IP

Bạn nào ngứa tay thì làm hộ.

7. Liệt kê danh sách thành viên/IP theo tên

Bạn nào ngứa tay thì làm hộ.

8. Liệt kê danh sách thành viên/IP theo sửa đổi

Bạn nào ngứa tay thì làm hộ.

9. Liệt kê danh sách thành viên/IP theo ngày đóng góp gần đây

Bạn nào ngứa tay thì làm hộ.

10. Nhập tên bài viết bằng tiếng Việt, kiểm tra tên tương ứng ở dự án tiếng Anh bằng Wikidata

Bạn phải kết hợp 2 request đến API:

  • Kiểm tra xem tên bài có ở tiếng Việt hay không ở API tiếng Việt. Nếu có thì tiếp tục.
  • Kiểm tra liên kết ngoại ngữ bằng tiếng Anh ở API Wikidata

11. Nhập tên thể loại bằng tiếng Việt, kiểm tra tên tương ứng ở dự án tiếng Anh bằng Wikidata

Đây là 1 trong những chức năng được tích hợp ở AlphamaEditor, ví dụ thêm thể loại [1]. Bạn phải kết hợp 2 request đến API:

  • Kiểm tra xem tên thể loại có ở tiếng Việt hay không ở API tiếng Việt. Nếu có thì tiếp tục.
  • Kiểm tra liên kết ngoại ngữ bằng tiếng Anh ở API Wikidata