Pull to refresh

Подключаем Wikipedia к сайту

Reading time 3 min
Views 33K
Сейчас практически на каждом сайте есть кнопки для перехода на сайт твитера или добавление странички в закладки. Но почему-то очень мало можно увидеть иконок Wikipedia возле фамилий великих людей или терминов.

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



Если учитывать, что только активные пользователи нажмут на кнопку «Оставить свой отзыв» и проголосуют, то наверно 33 голоса можно умножить на 10 – 100.

Разобравшись с api Wikipedia хочется предложить решение как можно немного автоматизировать добавление линков на википедию.


Трудности


Зная ими, фамилию или отчество известной личности невозможно быть на 100% уверенным, что это именно тот человек кто нам нужен. Например если нам нужно дать линк на Иванова Александра Александровича, на википедии есть пару людей с одинаковыми данными и автоматически никак не определить кто нам подходит. Такая же ситуация с названиями книг и фильмов. Нам например нужна статья о книге, ав википедии может быть статья о фильме. Мое решение — делать поисковый запрос с помощью вики и уже выбирать что больше подходит.

Api Wiki


В википедии есть очень мощный api www.mediawiki.org/wiki/API/ru
Все параметры описаны тут en.wikipedia.org/w/api.php (eng)
Из множества параметров нам понадобятся

Action – действие, которое хотим совершить. Нам нужен поиск Action=opensearch

Search – что будем искать. Например «Мастер и Маргарита»
search=%EC%E0%F1%F2%E5%F0%20%E8%20%EC%E0%F0%E3%E0%F0%E8%F2%E0

Prop – какие характеристики странички хотим получить. Нам нужна общая информация о страничке: заглавие, описание
prop=info

Format – формат в котором возвращается результат. Для поиска используем xml
format=xml

inprop – какую дополнительную информацию хотим получить. Нам еще нужен линк на страничку википедии, поэтому
inprop=url

Полностью строка со всеми параметрами будет иметь вид
ru.wikipedia.org/w/api.php?action=opensearch&search=%EC%E0%F1%F2%E5%F0%20%E8%20%EC%E0%F0%E3%E0%F0%E8%F2%E0&prop=info&format=xml&inprop=url

пример функции на php для получения данных о страничке

<?
function get_wiki_url($title)
{
  //устанавливаем соединение через сокет
  $fp = fsockopen("ru.wikipedia.org", 80, $errno, $errstr, 30);
  if (!$fp) {
    echo "$errstr ($errno)<br />\n";
  } else {
    $out = "GET /w/api.php?action=opensearch&search=".urlencode($title)."& prop=info&format=xml&inprop=url HTTP/1.1\r\n";
    $out .= "Host: ru.wikipedia.org\r\n";
    // указывает User-Agent. Без него будет ошибка
    $out .= "User-Agent: MyCuteBot/0.1\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $str = '';
    // получает только xml без полученных заголовков сервера
    while (!feof($fp)) {
      $tmp_str = fgets($fp, 128);
      if ($str != '' || substr($tmp_str,0,2)=='<?')
        $str .= $tmp_str;
    }
    fclose($fp);
    //парсим строку
    $xml = simplexml_load_string($str);
    return $xml->Section->Item;
  }
}
$pages_data = get_wiki_url("Мастер и Маргарита");
?>


Может, пришло время, когда возле каждого известного имени или термина будет ссылка на википедию?
Tags:
Hubs:
+35
Comments 26
Comments Comments 26

Articles