Wikipedia 維基百科本身,就是建立在 MediaWiki 之上,所以 Wikipedia 使用的就是 MediaWiki 的 API,但 MediaWiki 並不是只有 Wikipedia 在使用。
MediaWiki API ,我覺得還挺難懂的,主要是因為所有的東西都擠在一起,沒有分類可言。要找到自己想找的東西要找好久。
MediaWiki API 可以讓使用者使用維基的各項功能跟資料,現在來說明一下 Request URL 跟可以放的參數。
API 的 base URL如下:
"https://en.wikipedia.org/w/api.php"
這個 URL 回傳的會是英文維基的資料,如果想要其他語言的資料或操作其他語言的維基百科,就要修改 URL 裡的 en
成其他語言代碼。在這邊要注意的是,中文維基百科並不是很完整,而且透過 API 不會自動換簡繁,所以改成 zh
很可能不會出現預期的結果。
由於資料四散於各處,使用 API Sandbox 可以大致了解有哪些參數還有各種參數之間的關係,沒有放入該放的參數時,Sandbox 會跳出警告。
首先,所有的 API request 必需放一個 action
參數,這個參數會表明要進行怎麼樣的操作。如下圖所示,可以進行的操作非常多,比方說比較兩個維基頁面或是對用戶進行某些操作。
剩下的參數比較重要的有:
format
:回傳的資料格式,像 json
、jsonfm
、xml
、php
之類的。預設是 jsonfm
。
後面接fm
的是將原本的資料格式做成適合在使用瀏覽器開 HTML 檔案時看的,所以通常使用此參數時記得改成 format=json
不然會拿到 HTML
origin
:在使用瀏覽器做跨網域的 API Request 時,在 preflight 中要使用這個參數把它設為你的網址。對於要 authenticate 的 request,此參數值要跟 origin
header 裡的一致,網址才會被放入白名單。如果是不需要 authenticate 的 request,可以直接把值設成 *
, Access-Control-Allow-Origin
就會設好
回來講講 action
參數。
action=query
:回傳特定維基頁面的內容。
在眾多操作當中,最重要的就是 action=query
,他自己就有一頁很長的文件,主頁面也是以它為例來講解。在設了action=query
之後,就必須再加上一些其他參數,比方說
titles
:設定要查詢的維基頁面 title。舉例:回傳 New York 頁面 titles=New%20York
(記得要 URL encoded)
prop
:回傳查詢頁面的哪些屬性
extracts
會回傳特定頁面上的文字或 HTML,可以加上 exlimit
設定回傳幾個 extract、exchars
設定 extract的長短
categories
:回傳頁面的分類
images
:回傳頁面上的附加圖片檔
還有很多族繁不及備載
list
:指名抓取特定 list 結果
action=parse
:把內容傳入以得到想要的結果,比方說利用指定 titles
、pageId
、page
的方法抓取頁面然後加上 prop=wikitext
來把內容改成wikitext 的格式。
action=opensearch
:可以獲得特定關鍵字的簡短介紹,加上以下參數
namespace
:頁面的種類,預設是 0,也就是主條目,想要了解請看這邊
search
:(必選)搜尋關鍵字format
:預設是 json
limit
:回傳結果數量以上詳細的寫了幾個比較好利用的參數使用方法,現在我們就套用之前字典的 code 來做個簡單查詢維基百科的功能。
API Request URL:
"https://en.wikipedia.org/w/api.php
?action=opensearch
&search=" +
word +
"&limit=1
&namespace=0
&format=json
&origin=*"
成果:
CodePen 連結
搭配服用這篇文章:如果你想要用 API 來讀取維基百科