Недавно с удивлением узнал о том, что Wikipedia – это не только ценный мех отличный источник информации, но еще и очень приличное API для доступа к этой самой отличной информации. Ну а там, где есть какое-то API, почти наверняка найдется Python библиотека к нему.
А вообще, затеял я все это дело ради того, что бы загрузить список языков программирования с Wikipedia и получить немного дополнительной информации по ним. Что удивительно, полностью подходящей мне библиотеки не нашлось, и пришлось писать небольшой патчик к библиотеки Wikipedia, благо на Python код пишется очень быстро. В примерах используется та версия, что лежит у меня на GitHub. Это вызвано тем, что мои изменения в основном репозитории библиотеки Wikipedia несколько видоизменили и теперь результат новых функций выглядит более читабельным, но бесполезным в моем случае, т.к. возвращает отформатированный текст, а не Markdown.
Да, а кроме того, я решил проверить на сколько удобно использовать IPython Notebook для написания постов в WordPress %-)
import wikipedia
import re
Для начала нужно получить список секций с типами языков программирования:
langs = wikipedia.page("List_of_programming_languages_by_type")
langs.sections[:10]
И добавить немного магии с регулярками. Основная идея следующая: информация о языках хранится в виде “* [[линк_на_статью_в_вики | название_языка ]] какое-то текстовое описание”
def process_type(section):
result = []
lines = section.split('\n')
for line in lines:
# * [[wiki_link | lang_name]]
lang = re.search('^\*+\s*(\[\[' # * or ** and [[
'((?P<wiki_link>[^\[]*?)(\|))?' #optional wiki_link using lazy algorithm
'(?P<lang_name>.+?)'
'\]\])', line) # ]]
if lang:
result.append(lang.groupdict())
return result
И заключительный штрих – собрать в кучу всю загруженую информацию.
langs_info = {}
for section in langs.sections:
section_data = langs.section(section['index'])
lang_list = process_type(section_data)
langs_info[section['title']] = lang_list
print langs_info.keys()
print langs_info[langs_info.keys()[1]]
Вышло все неожиданно быстро и просто. Люблю Python все больше и больше
P.S. а вот IPython Notebook для написания постов как-то не очень подходит, слишком уж стили едут и текст не редактируемый становится.
По ЯП есть progopedia.ru, но там без api. Но список яп там должен быть длинее
Спасибо за сайт, не знал о нем.
Но для моих целей, мне кажется, Wikipedia лучше подходит.