Получение читаемых результатов из Wikidata

Итак, я пытаюсь получить информацию из Викиданных о фильмах, возьмем этот фильм, например: https://www.wikidata.org/wiki/Q24871

На странице данные четко отображаются в удобочитаемом формате, однако при попытке извлечь их через API вы получаете следующее: https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q24871

Вот раздел из этого:

"P272": [
                {
                    "id": "q24871$4721C959-0FCF-49D4-9265-E4FAC217CB6E",
                    "mainsnak": {
                        "snaktype": "value",
                        "property": "P272",
                        "datatype": "wikibase-item",
                        "datavalue": {
                            "value": {
                                "entity-type": "item",
                                "numeric-id": 775450
                            },
                            "type": "wikibase-entityid"
                        }
                    },
                    "type": "statement",
                    "rank": "normal"
                },
                {
                    "id": "q24871$31777445-1068-4C38-9B4B-96362577C442",
                    "mainsnak": {
                        "snaktype": "value",
                        "property": "P272",
                        "datatype": "wikibase-item",
                        "datavalue": {
                            "value": {
                                "entity-type": "item",
                                "numeric-id": 3041294
                            },
                            "type": "wikibase-entityid"
                        }
                    },
                    "type": "statement",
                    "rank": "normal"
                },
                {
                    "id": "q24871$08009F7A-8E54-48C3-92D9-75DEF4CF3E8D",
                    "mainsnak": {
                        "snaktype": "value",
                        "property": "P272",
                        "datatype": "wikibase-item",
                        "datavalue": {
                            "value": {
                                "entity-type": "item",
                                "numeric-id": 646968
                            },
                            "type": "wikibase-entityid"
                        }
                    },
                    "type": "statement",
                    "rank": "normal"
                },
                {
                    "id": "q24871$CA53B5EB-1041-4701-A36E-7C348FAC984E",
                    "mainsnak": {
                        "snaktype": "value",
                        "property": "P272",
                        "datatype": "wikibase-item",
                        "datavalue": {
                            "value": {
                                "entity-type": "item",
                                "numeric-id": 434841
                            },
                            "type": "wikibase-entityid"
                        }
                    },
                    "type": "statement",
                    "rank": "normal",
                    "references": [
                        {
                            "hash": "50f57a3dbac4708ce4ae4a827c0afac7fcdb4a5c",
                            "snaks": {
                                "P143": [
                                    {
                                        "snaktype": "value",
                                        "property": "P143",
                                        "datatype": "wikibase-item",
                                        "datavalue": {
                                            "value": {
                                                "entity-type": "item",
                                                "numeric-id": 11920
                                            },
                                            "type": "wikibase-entityid"
                                        }
                                    }
                                ]
                            },
                            "snaks-order": [
                                "P143"
                            ]
                        }
                    ]
                }
            ],

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

Это действительно возможно в настоящее время, или я лаю не на том дереве?

Ответ 1

Вам нужно искать numeric-id в каждой инструкции и добавлять ['Q775450', 'Q3041294', 'Q646968', 'Q434841', 'Q11920'] Q для восстановления ваших идентификаторов викиданных, что должно привести к ['Q775450', 'Q3041294', 'Q646968', 'Q434841', 'Q11920']

[ обновление: теперь вы можете напрямую обращаться к идентификатору Q по адресу mainsnak.datavalue.value.id, вместо того, чтобы создавать его из numeric-id ]

Это можно сделать с помощью функции wikidata-sdk (разработанной мной библиотеки JS) simplifyClaims

После того, как вы получили эти идентификаторы, вам просто нужно запросить метки сущностей с wbgetentities API wbgetentities: https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels

Вы даже можете получить результаты только для некоторых языков, используя параметр languages: https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q775450|Q3041294|Q646968|Q434841|Q11920&format=json&props=labels&languages=en|de|fr

Ответ 2

Хорошо, поэтому я не нашел решения для использования этой системы "wbgetentities". Я обнаружил, что вы можете использовать команду "parse", чтобы получить структуру html.

https://www.wikidata.org/w/api.php?action=parse&page=Q24871

В то время как по-прежнему потребуется некоторая обработка, это намного проще, чем предыдущее решение.

Ответ 3

Я вижу принятый ответ, но изначально интерпретировал вопрос по-другому. По сути, запросить такой же вывод в JSON можно на странице элемента Wikidata.

Запрос SPARQL с выводом JSON для указанного выше случая: https://query.wikidata.org/sparql?query=SELECT%20%3FwdLabel%20%3Fps_Label%20%3FwdpqLabel%20%3Fpq_Label%20%7B%0A%20%20VALUES %20 (% 3Fcompany) %20% 7B (% 3AQ24871 WD)% 7D% 0A% 0A %20 %20% 3Fcompany %20% 3Fp %20% 3Fstatement %20.% 0A %20 %20% 3Fstatement %20% 3fps %20% 3Fps_ %20.% 0A% 0A %20 %20% 3Fwd %20wikibase% 3Aclaim %20% 3Fp.% 0A %20 %20% 3Fwd %20wikibase% 3AstatementProperty %20% 3fps.% 0A% 0A %20 %20OPTIONAL %20% 7B% 0A %20 %20% 3Fstatement %20% 3Fpq %20% 3Fpq_ %20.% 0A %20 %20% 3Fwdpq %20wikibase% 3Aqualifier %20% 3Fpq %20.% 0A %20 %20% 7D% 0A% 0A %20 %20SERVICE %20wikibase% 3Alabel %20% 7B %20bd% 3AserviceParam %20wikibase% 3Alanguage %20% 22en% 22 %20% 7D% 0A% 7D и формат = JSON

Я использую Wikidata Query Front End, чтобы получить мой запрос прямо и проверить результаты. Затем используйте кнопку </> Code..., объясняющую, почему вы видите столько ненужных пробелов выше.

Смотрите также: