2017-01-24 9 views
2

Я сбор данных о некоторых фильмах в России и, используя API Википедии, можно запросить данные о требуемых пленках в формате JSON:Как получить IMDb ID для какой-либо статьи из фильма из Википедии?

https://ru.wikipedia.org/w/api.php?format=json&action=query&prop=revisions&rvprop=content&titles=%s 

где %s это название статьи.

Одно из обязательных объектов - IMDb ID. Проблема здесь в том, что не все статей содержат его в wiki-разметке (фактически в шаблоне фильма), но всегда отображаются страницы.

Russian version из фильма шаблон говорит, что IMDb ID автоматически взят из Wikidata (английская версия говорит об отказе от любой базы данных в этой инфобокса вообще в пользу раздела ссылок внизу).

Есть ли способ запросить идентификатор IMDb с использованием API Википедии или API Викидиата?

+0

Вы пытались использовать API OMDb. Он выдает вам IMDb ID Например: http://www.omdbapi.com/?t=Under+Electric+Clouds&y=&plot=full&r=json – Vikash

+0

@Vikash Да, в настоящее время я использую API OMDb, но где получить идентификатор if нет в статье? – cybersoft

ответ

2

Вы можете получить все элементы викиданных пленок, которые имеют ID IMDb и ссылку на ruwiki по Wikidata Query Service:

SELECT ?item ?IMDb_ID ?sitelink WHERE { 
    ?item wdt:P31 wd:Q11424 . 
    ?item wdt:P345 ?IMDb_ID . 
    ?sitelink schema:about ?item ; schema:isPartOf <https://ru.wikipedia.org/> . 
} 

или

https://query.wikidata.org/bigdata/namespace/wdq/sparql?format=json&query=SELECT+?item+?IMDb_ID+?sitelink+WHERE+{?item+wdt:P31+wd:Q11424+.?item+wdt:P345+?IMDb_ID+.?sitelink+schema:about+?item+;+schema:isPartOf+%3Chttps://ru.wikipedia.org/%3E+.} 

, где каждый элемент имеет:

Результат будет включать в себя все элементы викиданные, их идентификаторы IMDb и связанные с ними ruwiki названия статьи.

{ 
    "item" : { 
    "value" : "http://www.wikidata.org/entity/Q203063" 
    }, 
    "IMDb_ID" : { 
    "value" : "tt0457308" 
    }, 
    "sitelink" : { 
    "value" : "https://ru.wikipedia.org/wiki/Приходи_пораньше" 
    } 
}, 
... 

И here пример того, как вы можете получить IMDb ID только для русской страницы Приходи пораньше.

+0

Так медленно ... Потребовалось около 5-8 секунд, чтобы найти. Но это работает, спасибо! – cybersoft

+0

@cybersoft. Я не знаю, какой язык вы используете, но попробовали ли вы всегда использовать этот запрос, чтобы получить все идентификаторы IMDb и искать в них определенный заголовок? Мне интересно, какова будет разница в скорости, если вам нужно использовать «медленный» запрос, чтобы напрямую получить этот идентификатор по тому же заголовку. – Termininja

+1

ее результаты: загрузка в память ~ 5 секунд, поиск по URL ~ 0,7 мс. Я использую java 1.8, поиск выполняется с использованием параллельного Stream API (debug показывает в моем случае 3 потока). Это быстрее, чем отправлять запрос на сервер и ждать ответа ... Может быть, сервер медленный, или это сетевая задержка – cybersoft