Я не совсем уверен, если ваш подход обещает вообще. Прежде всего, я понял, чего вы хотите достичь:
- Если у вас есть страница в Википедии
- Вы хотите получить соответствующий элемент викиданных
- Вы, вероятно, хотите получить другие связанные страницы к этому предмету?
Если это правильно, я думаю, что вашей лучшей ставкой была бы таблица Викиданных wb_items_per_site
. Почему Wikidata, а не Wikipedia? Текущая архитектура Wikibase (которая является программным обеспечением Wikidata) требует доступа к клиентской (он же Wikipedia) и базе данных репо (он же Wikidata), так как информация о странице сохраняется в клиентской базе данных, тогда как информация о подключенном элементе (включая информацию о том, что страница связана с элементом) сохраняется в базе данных репо. Эта информация сохраняется в таблице wb_items_per_site
(по крайней мере, я бы ее использовал, я не разработчик из Wikibase, так что это может быть и не лучшим решением).
Например, если если вы хотите получить элемент Wikidata для статьи в Википедии, я бы выполнил следующий запрос:
select * from wb_items_per_site where ips_site_id = "enwiki" and ips_site_page = "Tom Selleck" limit 1;
(обратите внимание, что вам нужно заменить подчеркивание (_
) пробелами. Это logi c что будет сделано классом Title
в MediaWiki. Вывод будет выглядеть так:
ips_row_id ips_item_id ips_site_id ips_site_page
540761088 213706 enwiki Tom Selleck
(ссылка https://quarry.wmflabs.org/query/43884)
Чтобы получить другое связанные страницы из этого элемента Wikidata, вы можете выполнить второй запрос:
select * from wb_items_per_site where ips_item_id = 213706;
(см. вывод здесь , он слишком большой для вставки здесь: P)
Для вашего «бонусного вопроса»:
Информация о лицензии сохраняется в викитексте, к сожалению, это означает, что для изображений, сохраненных на en.wikipedia.org, вам нужно проанализировать Викитекст, чтобы получить соответствующую информацию о лицензии .
Один хороший момент здесь: большинство изображений не размещен на en.wikipedia.org, а скорее в проекте Wikimedia Commons. Там есть проект, называемый данными структурированного изображения или около того, цель которого состоит в том, чтобы сделать такую информацию (лицензию, название, авторов и прочее) доступной структурированным, машиночитаемым способом. К сожалению, даже не все сохраненные там изображения и носители имеют структурированную информацию. Таким образом, запасной вариант всегда будет разбирать викитекст.
В Википедии установлено расширение, которое частично берет на себя эту часть анализа для вас. Эта информация, например, используется в функции MediaViewer. Информация доступна через API: https://en.wikipedia.org/w/api.php?action=query&titles=File: Альберт% 20Einstein% 20Head.jpg & prop = imageinfo & iiprop = extmetadata
Там вы получите License
:
"License": {
"value": "pd",
"source": "commons-templates",
"hidden": ""
}
и краткое название лицензии:
"LicenseShortName": {
"value": "Public domain",
"source": "commons-desc-page",
"hidden": ""
}
К сожалению для вас, так как я предполагаю, что вы хотели бы получить эту информацию из дампов, эта информация там недоступна. Информация анализируется «на лету» по запросу API от Викитекста.