如何使維基百科API調用獲得該頁面上的前5個機場名稱,位置,國家?維基百科api在頁面上調用特定內容
http://en.wikipedia.org/wiki/List_of_the_world%27s_busiest_airports_by_passenger_traffic
如何使維基百科API調用獲得該頁面上的前5個機場名稱,位置,國家?維基百科api在頁面上調用特定內容
http://en.wikipedia.org/wiki/List_of_the_world%27s_busiest_airports_by_passenger_traffic
在這裏你可以看到你所需要prettyfied所有的JSON:只是
http://en.wikipedia.org/w/api.php?format=jsonfm&action=query&titles=List_of_the_world's_busiest_airports_by_passenger_traffic&prop=revisions&rvprop=content
變化?format=jsonfm
,你會得到公正的有用數據。
通過在Linux上執行這個命令你會得到所有列表行:
curl http://en.wikipedia.org/w/api.php?format=json\&action=query\&titles=List_of_the_world\'s_busiest_airports_by_passenger_traffic\&prop=revisions\&rvprop=content | sed 's|\\u||g' | grep -onE '\\n\|[0-9]+\.\|\|[^\\]*'
每行輸出提示爲每個機場的排名順序(30或50每個列表中的機場取決於列表)。
而且該命令將促使其名,而無需任何其他:
curl http://en.wikipedia.org/w/api.php?format=json\&action=query\&titles=List_of_the_world\'s_busiest_airports_by_passenger_traffic\&prop=revisions\&rvprop=content | sed 's|\\u||g' | grep -onE '\\n\|[0-9]+\.\|\|[^\\]*' | grep -onE '} \[\[[^[\]*]' | sed 's/[\[|:}]//g; s/]]//; s/[0-9][0-9]*//g; s/ //'
注意:所有頁面的列表是串聯的,所以最後一個會不會是真正的數字600,但第30它的實數,每個30或50(取決於你正在查看的列表)有一個不同的列表。
我從here得到了URL端點,然後用捲髮做一個GET請求到維基百科的API,它獲取您請求的頁面上的所有可用數據,然後我使用正規表達式來解析所需的值。我使用的正則表達式是:
sed 's|\\u||g'
這個人是被
sed
(流編輯器)進行,它的作用是 搜索的\u
每一次出場(代表的Unicode字符 )並將其刪除。我需要這樣做,因爲稍後我將使用字符串'\n'
(代表新行)作爲行的分隔符。 的方式它做什麼,我說,這確實是使用命令的sed
s
用於替換字符串\u
的每一次亮相,被 兩回斜線的原因是因爲它需要進行轉義或將它解釋爲命令的一部分。
grep -onE '\\n\|[0-9]+\.\|\|[^\\]*'
這個正則表達式是由
grep
進行,第一我們做(如 前面提到過)是匹配任何新線這將是\n
,我們再次 需要躲避後面削減。然後我們需要匹配字符|
和 它也需要被轉義。然後我們需要匹配[0-9]+
裏面的所有數字[]
裏面的所有內容都是一個字符,0-9
是我們要匹配的範圍,+
代表一個或多個,我們也希望字符.
也需要轉義,然後兩個再次將這個字符重新編號:|
。在這一點上,我們已經匹配了索引,現在我們希望匹配每一個字符直到行結束,這將是'\ n',但由於我們已經刪除了無用的\u
,所有的反斜槓都是爲了新的線,所以,這裏是我們需要的匹配:[\\]
,但我們想否定它,這就是爲什麼我們在反斜線前添加^
,然後*
匹配零個或多個未反斜槓的未知字符。正則表達式前面的-onE
是傳遞給grep的選項,其含義是o = only match
,n = number each line
和E = extended regular expression
。
grep -onE '} \[\[[^\]*]]'
在這一點上,我們都在他們每個人的所有可用的數據行,我們想獲取剛剛被內
[[...]]
,總是一個}
後包圍的名字,這是和以前一樣,但是我們不希望這一次的角色是]
,而不是\
sed 's/[\[|:}]//g; s/]]//; s/[0-9][0-9]*//g; s/ //'
這個sed命令所做的唯一的事情就是通過在
[]
內對它們進行分組並刪除它們來刪除所有非字母字符。也許這不是更有效的方法,但它有效。
重要:我現在就注意到,有在JSON中的一些空間,我不得不調整正則表達式多一點,我不會改變上面的解釋,因爲我只加了一些?
每當它可能是一個空白。
curl http://en.wikipedia.org/w/api.php?format=json\&action=query\&titles=List_of_the_world\'s_busiest_airports_by_passenger_traffic\&prop=revisions\&rvprop=content | sed 's|\\u||g' | grep -E '\\n\|[0-9]+\.\|\|[^\\]*' | grep -onE '} ?\[\[[^[\]*]' | sed 's/[\[|:}]//g; s/]]//; s/[0-9][0-9]*//g; s/ //'
and here你在pastebin上有輸出。
進一步講座:this鏈接將幫助您在javascript中使用正則表達式。
無需捲曲的:你可以測試什麼here
維基百科的API文檔和示例的任何請求輸出可以在這裏找到:http://m.mediawiki.org/wiki/API:Main_page。有什麼特別的你正在努力?你能告訴我們一些代碼嗎?你在這裏使用什麼技術? – xboxremote
我正在學習Angular,並嘗試查看是否可以使用Wikipedia內容創建我的第一個Angular項目。由於包含所有其他數據,因此我從維基百科的頁面提取某些數據時遇到了問題。 – Ohsik