Получение лицензии на изображение и информацию об авторе в вики

Я пытаюсь использовать API Викимедиа для общего пользования вики:

http://commons.wikimedia.org/w/api.php

Похоже, что API Commons очень незрелый, и часть в их документе, в которой упоминается возможность получения информации о лицензии и об авторе, пуста.

Можно ли в любом случае получить абзац, содержащий информацию о лицензировании, с помощью API? (Например, абзац под заголовком "Лицензирование" на этой странице). Конечно, я могу скачать всю страницу и попытаться разобрать ее, но для чего нужны API?

5 ответов

Поздний ответ, но вы можете запросить данные "extmetadata" с помощью следующего запроса:

http://en.wikipedia.org/w/api.php?action=query&prop=imageinfo&iiprop=extmetadata&titles=File%3ABrad_Pitt_at_Incirlik2.jpg&format=json

Посмотрите в imageinfo.extmetadata.UsageTerms, Artist, Credit и т. Д.

Вы можете попробовать использовать инструмент API Commons от Magnus Manske на сервере инструментов Викимедиа. Это не официальный сервис, и документация кажется довольно скудной (то есть почти не существует), но вывод XML кажется довольно очевидным.

Я не могу найти источник сценария Магнуса где-либо, но я предполагаю, что он извлекает информацию о лицензировании из категорий, к которым принадлежит файл. Если вы хотите, вы можете сделать это самостоятельно: просто получите список категорий и, если необходимо, пройдитесь по дереву категорий, пока не найдете категорию лицензий, которую вы узнаете. Увы, для обхода дерева требуется либо несколько запросов API, либо база данных категорий Commons (либо прямой доступ к серверу инструментов, либо восстановленная копия из дампов базы данных).

Да, я понимаю, что этот ответ может показаться неудовлетворительным. Дело в том, что сценарий Магнуса кажется наиболее близким к тому, что вы хотите, и даже помечен как экспериментальный и неполный. По сути, это проблема, которая ждет, когда кто-то найдет (лучшее) решение.

Взгляните на Mediawiki и попробуйте эту функцию:

import json, requests
def extract_image_license(image_name):
    start_of_end_point_str = 'https://commons.wikimedia.org' \
                         '/w/api.php?action=query&titles=File:'
    end_of_end_point_str = '&prop=imageinfo&iiprop=user' \
                       '|userid|canonicaltitle|url|extmetadata&format=json'
    result = requests.get(start_of_end_point_str + image_name+end_of_end_point_str)
    result = result.json()
    page_id = next(iter(result['query']['pages']))
    image_info = result['query']['pages'][page_id]['imageinfo']
    return image_info

затем вы вызываете функцию и передаете имя изображения, которое хотите запросить, например:

extract_image_license('Albert_Einstein_Head.jpg')

Я использовал инструмент Magnus' Commons API. Он не предназначен для простого добавления в проект, но если вы скопируете исходный код вики-страницы, которую он вызывает, и поместите его в локальный кеш, то переместите логику в класс, чтобы сделать его более легко вызываемым. Вот источник версии Магнуса. Если вы хотите класс, который я создал из него, дайте мне знать, и я откопаю его.

С http://www.mediawiki.org/wiki/API_talk:Main_page Есть ли способ получить лицензию на изображение через API? По категориям, вероятно, проще всего, если сайт классифицируется по лицензии. Там нет встроенного модуля, хотя для информации о лицензии. Спларка 08:45, 22 января 2010 (UTC)

Тем не менее, я считаю, что использование категорий не возвращает ничего для многих изображений, даже если для них указана лицензия. Возможно, лучший способ - это проанализировать визуализированный html страницы изображения.

См. страницу: http://www.mediawiki.org/wiki/API:Meta

Вы можете использовать foreach image тег "meta = siteinfo" и тег "siprop = rightsinfo" (siprop - это опора для siteinfo). Затем вы увидите правовую информацию изображения.

В вашем случае с Брэдом Питтом это будет выглядеть так:

http://en.wikipedia.org/w/api.php?format=jsonfm&action=query&titles=File:Brad_Pitt_at_Incirlik2.jpg&prop=imageinfo&iiprop=url&meta=siteinfo&siprop=rightsinfo

Другие вопросы по тегам