Статьи

Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki

  1. Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki
  2. Часто використовувані абревіатури
  3. Знайомство з API
  4. Лістинг 1. Приклад API
  5. Лістинг 2. Отримання списку категорій Вікіпедії
  6. Малюнок 1. Web-сторінка зі списком категорій Вікіпедії
  7. Лістинг 3. Отримання списку сторінок всередині категорії
  8. Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії
  9. Лістинг 4. Отримання списку результатів повнотекстового пошуку
  10. Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії
  11. Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
  12. Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку
  13. Лістинг 6. Отримання вмісту сторінки
  14. Малюнок 5. Web-сторінка, що відображає вміст в Wikitext
  15. Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
  16. Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML
  17. Пошук по посиланнях на URL
  18. Лістінг 8. Отримання списку сторінок, что посілаються на завдань URL
  19. Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL
  20. Додавання і редагування сторінок
  21. Лістинг 9. Редагування сторінок
  22. Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API
  23. Ресурси для скачування
  24. Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki
  25. Часто використовувані абревіатури
  26. Знайомство з API
  27. Лістинг 1. Приклад API
  28. Лістинг 2. Отримання списку категорій Вікіпедії
  29. Малюнок 1. Web-сторінка зі списком категорій Вікіпедії
  30. Лістинг 3. Отримання списку сторінок всередині категорії
  31. Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії
  32. Лістинг 4. Отримання списку результатів повнотекстового пошуку
  33. Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії
  34. Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
  35. Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку
  36. Лістинг 6. Отримання вмісту сторінки
  37. Малюнок 5. Web-сторінка, що відображає вміст в Wikitext
  38. Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
  39. Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML
  40. Пошук по посиланнях на URL
  41. Лістінг 8. Отримання списку сторінок, что посілаються на завдань URL
  42. Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL
  43. Додавання і редагування сторінок
  44. Лістинг 9. Редагування сторінок
  45. Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API
  46. Ресурси для скачування
  47. Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki
  48. Часто використовувані абревіатури
  49. Знайомство з API
  50. Лістинг 1. Приклад API
  51. Лістинг 2. Отримання списку категорій Вікіпедії
  52. Малюнок 1. Web-сторінка зі списком категорій Вікіпедії
  53. Лістинг 3. Отримання списку сторінок всередині категорії
  54. Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії
  55. Лістинг 4. Отримання списку результатів повнотекстового пошуку
  56. Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії
  57. Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
  58. Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку
  59. Лістинг 6. Отримання вмісту сторінки
  60. Малюнок 5. Web-сторінка, що відображає вміст в Wikitext
  61. Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
  62. Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML
  63. Пошук по посиланнях на URL
  64. Лістинг 8. Отримання списку сторінок, що посилаються на заданий URL
  65. Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL
  66. Додавання і редагування сторінок
  67. Лістинг 9. Редагування сторінок
  68. Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API
  69. Ресурси для скачування

Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki

Використовуємо PHP для пошуку, отримання і зміни елементів Вікіпедії за допомогою API MediaWiki

Часто використовувані абревіатури
  • API: Application programming interface, інтерфейс прикладного програмування
  • CSRF: Cross-site request forgery, міжсайтовий підстановка запиту
  • HTML: Hypertext Markup Language, мова гіпертекстової розмітки
  • HTTP: Hypertext Transfer Protocol
  • IP: Internet Protocol
  • JSON: JavaScript Object Notation
  • OOP: Object-oriented programming, об'єктно-орієнтоване програмування, ООП
  • PEAR: PHP Extension and Application Repository
  • REST: REpresentational State Transfer
  • WDDX: Web Distributed Data eXchange
  • XHTML: Extensible Hypertext Markup Language, розширювана мова гіпертекстової розмітки
  • XML: Extensible Markup Language, розширювана мова розмітки
  • YAML: YAML Is not Markup Language

З Вікіпедією знаком, напевно, кожен. Це найважливіше сховище знань, створене силами безлічі користувачів, що охоплює майже будь-яку мислиму область знань і доступне через Web-браузер. Яка б інформація не була вам потрібна, ви можете знайти її в Вікіпедії, найчастіше в дуже докладному викладі. При цьому, оскільки Вікіпедія доступна для публічного редагування, вона завжди містить оновлену і своєчасну інформацію.

Однак більшість людей не знають про одну важливу частини Вікіпедії. Це захований за лаштунками потужний API для Web-сервісів, який дозволяє розробникам доступ до вмісту Вікіпедії, здійснювати в ньому пошук і інтегрувати його в власний додаток. Цей API, що працює через HTTP і повертає дані в цілому ряді різних форматів, в тому числі XML, знаходиться у вільному доступі для програмістів і робить можливим створення будь-яких видів власних Web-додатків, що використовують матеріали Вікіпедії.

У даній статті я коротко ознайомлю вас з цим API на прикладі інтеграції і використання його з моїм улюбленим мовою програмування - PHP. У статті пояснюються основи роботи API, а потім детально розбираються процеси отримання списку категорій, пошуку записів по категорії або ключовим словом, отримання і відображення записів і віддаленого додавання і редагування вмісту.

Знайомство з API

Перед зануренням в PHP-код необхідно сказати кілька слів про API Вікіпедії. По-перше, хоча я і називаю його «API Вікіпедії», важливо помітити, що він використовується не тільки в Вікіпедії. Насправді він є частиною базового програми MediaWiki, на якому працює Вікіпедія, тому методи і підходи, представлені в цій статті, можна застосувати й до будь-якого іншого додатку, заснованому на MediaWiki. В розділі ресурси наведені посилання як на MediaWiki, так і на повний довідковий посібник із API MediaWiki.

Як і всі сервіси, засновані на HTTP, даний API працює, приймаючи HTTP-запити, що містять один або кілька вхідних аргументів, і видаючи відповіді, які можуть бути переконливо доведено необхідність використання робить запит клієнтом. Найчастіше відповідь надається у форматі XML, так як практично кожна мова програмування підтримує аналіз XML. Однак можна запитувати відповідь і в інших форматах, таких як JSON, WDDX, YAML, або в серіалізовані за допомогою PHP вигляді.

Кожен HTTP-запит до API повинен містити обов'язковий параметр «action», який визначає необхідну дію. Параметр може бути операцією запиту, редагування або видалення, запитом аутентифікації або будь-яким іншим з підтримуваних дій. Додатково до цього обов'язковому параметру, в залежності від необхідного дії, потрібні додаткові аргументи - наприклад, ключові слова для запитів, заголовок сторінки для операцій видалення і редагування, або ім'я користувача і пароль для аутентифікації.

Щоб побачити API Вікіпедії в дії, спробуйте відкрити наведений нижче URL в браузері. (Зверніть увагу: ця адреса є один рядок. Він розбитий на два рядки виключно з міркувань форматування.)

http://en.wikipedia.org/w/api.php?action=query&list=allcategories&acprop=size & acprefix = hollywood & format = xml

Цей метод повертає список десяти перших категорій Вікіпедії, що починаються із префікса "hollywood". В лістингу 1 наведено необроблений XML-результат цього запиту.

Лістинг 1. Приклад API
<? Xml version = "1.0&quot;?> <Api> <query> <allcategories> <c size = "31" pages = "28" files = "0" subcats = "3" xml: space = "preserve"> Hollywood </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood's Rock Walk inductees </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood, California </ c> <c size = "1" pages = "1" files = "0" subcats = "0 "xml: space =" preserve "> Hollywood, Florida </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood, Los Angeles , California </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood.com/celebrity/Wanda Shelley </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Actors </ c> <c size = "0" pages = "0" files = "0 "subcats =" 0 "xml: space =" preserve "> Hollywood Actress </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood Blacklist </ c> <c size = "2" pages = "2" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Boulevard </ c> </ allcategories> </ query> <Query-continue> <allcategories acfrom = "Hollywood Cemetery (Richmond)" /> </ query-continue> </ api>

Отримання списку категорій і сторінок

Тепер, коли ви зрозуміли принципи роботи API, розглянемо пару прикладів коду. Я припускаю, що мої читачі знайомі з HTML і XML і мають робоче середовище розробки для Apache / PHP зі свіжою версією Zend Framework. Також я припускаю, що ви знаєте основи роботи з класами і об'єктами на PHP, так як PHP-компоненти, використані в даній статті, написані відповідно до принципів ООП.

Для взаємодії з API вам буде потрібно HTTP-клієнт, здатний передавати GET- і POST-запити і працювати з відповідями. Непоганим інструментом для цього є компонент Zend_Rest_Client з Zend Framework, який розроблений спеціально для розробників, які об'єднують PHP-додатки з Web-сервісами. Цей клієнт можна використовувати для виконання GET-, POST-, PUT- і DELETE-запитів до кінцевої точки сервісу. XML-відповіді повертаються як екземпляри класу Zend_Rest_Client_Response, що дозволяє легко звертатися до індивідуальних властивостей відповіді.

лістинг 2 ілюструє процес отримання і відображення категорій з лістингу 1 з використанням Zend_Rest_Client в контексті PHP-скрипта.

Лістинг 2. Отримання списку категорій Вікіпедії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Визначення префікса категорії $ prefix = 'hollywood'; try {// ініціалізація Rest-клієнта $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // Завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'allcategories'); $ Wikipedia-> acprefix ($ prefix); $ Wikipedia-> format ( 'xml'); // виконання запиту // Ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?&gt; <Html> <head> </ head> <body> <h2> Search results for categories starting with '<? Php echo $ prefix; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> allcategories-> c as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / Category: <? php echo $ c;?&gt; "> <? php echo $ c; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 2 спочатку инициализируется автозавантажувач Zend Framework, а потім завантажується компонент Zend_Rest_Client. Створюється і инициализируется екземпляр класу Zend_Rest_Client з кінцевою точкою сервісу API Вікіпедії як аргумент конструктора. Потім визначаються та додаються параметри запиту, який передається API за допомогою клієнтського методу get (). Zend_Rest_Client автоматично приймає XML-відповідь сервера і перетворює його в набір SimpleXML-об'єктів, до яких ви можете звертатися, використовуючи стандартну нотацію «об'єкт-властивість».

Малюнок 1 ілюструє результат роботи лістингу 2 .

Малюнок 1. Web-сторінка зі списком категорій Вікіпедії

Зверніть увагу на спосіб передачі сервера параметрів запиту з допомогою Zend_Rest_Client. Кожен параметр задається викликом клієнтського методу з тим же ім'ям і передачею в цей метод потрібного значення в якості першого параметра. Наприклад, для додавання параметра action = query в запит скрипт викликає $ client-> action ( 'query'). Детальніше дізнатися про це можна з документації до Zend_Rest_Client (див. ресурси ).

Також ви можете отримати список сторінок всередині категорії, змінивши запит так, щоб він повертав список елементів категорій замість самих категорій. Очевидно, для цього доведеться передати в API ім'я категорії в якості вхідних даних. Розглянемо лістинг 3 , В якому вирішується це завдання.

Лістинг 3. Отримання списку сторінок всередині категорії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення категорії $ cat = 'Greek_legendary_creatures'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'categorymembers'); $ Wikipedia-> cmtitle ( 'Category:'. $ Cat); $ Wikipedia-> cmlimit ('30 '); $ Wikipedia-> format ( 'xml'); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages in category '<? Php echo $ cat; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> categorymembers-> cm as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ c [ 'title'];?&gt; "> <? php echo $ c [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

код лістингу 3 задає ім'я категорії і передає це ім'я в API, використовуючи параметр cmtitle. Зверніть увагу на параметр cmlimit, який задає кількість повертаються результатів. Як і раніше, Zend_Rest_Client передає запит і перетворює XML-відповідь в об'єкти SimpleXML, полегшуючи аналіз і відображення результатів запиту.

Результати роботи лістингу 3 показані на малюнку 2 .

Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії

Виконання повнотекстового пошуку

Як щодо пошуку сторінок, які містять деякий ключове слово? Це завдання легко вирішується за допомогою запиту, аналогічного описаному раніше, за винятком того, що в даному випадку вам потрібен список результатів пошуку замість елементів категорії. Розгляньте лістинг 4 , Який ілюструє цей процес.

Лістинг 4. Отримання списку результатів повнотекстового пошуку
<? Php // завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення пошукового запиту $ query = 'michelangelo'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ query); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for '<? Php echo $ query; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 4 використовується той же дію query, що ми бачили раніше, але з дещо іншими параметрами. Параметр list вказує, що це операція повнотекстового пошуку, в той час як параметр srsearch задає ключове слово (в даному випадку «michelangelo»). Також важливо задати параметр srwhat який визначає, де необхідно проводити пошук - по заголовкам сторінок або по всьому тексту.

Кожен результат пошуку містить заголовок сторінки, розмір, кількість слів, простір імен (про це трохи пізніше) і фрагмент вмісту сторінки. Ви можете відформатувати і відобразити ці дані як HTML-сторінку, як показано на малюнку 3 .

Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії

Приклад програми: пошук по Вікіпедії

У реальному світі ключові слова для пошуку не "зашиваються» в код, а вводяться користувачем. код лістингу 5 є вдосконаленою версією лістингу 4 з більшою інтерактивністю. Він дозволяє користувачеві вводити пошукові слова в додаток і переглядати сторінки Вікіпедії, що задовольняють умовам пошуку.

Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
<Html> <head> </ head> <body> <h2> Search </ h2> <form method = "post"> Search: <input type = "text" name = "q" /> </ form> < ? php // Якщо форма відправлена ​​if (isset ($ _ POST [ 'q'])) {// Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ _ POST [ 'q']); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <H2> Search results for '<? Php echo $ _POST [' q ']; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> <? Php}?> </ Body> </ html>

В лістингу 5 немає нічого складного. У ньому додані перевірка на коректність введених користувачем даних і передача цих даних в параметр srsearch. на малюнку 4 показані вихідна Web-форма і результати пошуку.

Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку

Отримання вмісту сторінки

API MediaWiki також дозволяє звертатися до поточної або до старих версій вмісту сторінки, приєднуючи до запиту параметр prop = revisions. В даному випадку необхідно задати заголовок повертається сторінки. Розгляньте лістинг 6 , Де показано, як це працює.

Лістинг 6. Отримання вмісту сторінки
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо заголовок шуканої сторінки $ query = 'The A Team'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту сторінки у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ content; ?> </ Script> </ div> </ body> </ html>

запит з лістингу 6 трохи відрізняється від тих, які ви вже бачили, так як він використовує властивість замість списку. Властивості використовуються для визначення того, яку інформацію ви хочете отримати з кількох сторінок. Є кілька різних властивостей, включаючи метадані сторінки, виправлення, посилання, зображення, шаблони, категорії і т.д.

запит з лістингу 6 визначає властивість revisions і потім використовує параметр rvprop для визначення параметрів, одержуваних для кожного виправлення. В даному випадку це просто вміст правки. Також є параметр rvlimit, який можна використовувати для отримання кількох попередніх правок. Однак в даний момент нас цікавить тільки поточна правка, тому цей параметр в даному параметрі не ставить.

на малюнку 5 показаний результат роботи коду з лістингу 6 .

Малюнок 5. Web-сторінка, що відображає вміст в Wikitext

Як ви можете бачити на малюнку 5 , результат роботи лістингу 6 - це вміст певної сторінки в форматі вікі-розмітки (Wikitext). Однак для використання цих даних в Web-додатку їх доведеться переформатувати з вікі-розмітки в розмітку XHTML. Для цього завдання існує кілька готових конвертерів, і один з найкращих - це пакет PEAR Text_Wiki, який може перетворювати з Wikitext в безліч інших форматів і назад.

Для установки просто виконайте в консолі наступні команди:

shell> pear install Text_Wiki shell> pear install Text_Wiki_Mediawiki

Установник PEAR приєднається до сервера пакетів PEAR, завантажить пакети і встановить їх в відповідне місце у вашій системі. Якщо ви віддаєте перевагу ручну установку, в розділі ресурси можна знайти посилання для скачування.

Після установки пакета виправте лістинг 6 для використання конвертера Text_Wiki, як в лістингу 7 .

Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Завантаження конвертера Wikitext require_once 'Text / Wiki.php'; // Створення примірника Text_Wiki вихідного класу // і установка Mediawiki-адаптера $ wiki = & Text_Wiki :: factory ( 'Mediawiki'); // завдання правил обробки $ wiki-> setRenderConf ( 'xhtml', 'wikilink', 'view_url', 'http://en.wikipedia.org/wiki/'); $ Wiki-> setRenderConf ( 'xhtml', 'wikilink', 'pages', false); // визначення заголовка сторінки $ query = 'The A Team'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ wiki-> transform ($ content,' Xhtml '); ?> </ Script> </ div> </ body> </ html>

код в лістингу 7 инициализирует об'єкт Text_Wiki і налаштовує його на використання Mediawiki-адаптера. Він також визначає деякі параметри, які використовуються для перетворення в XHTML, включаючи встановлений за замовчуванням URL-префікс, який використовується для зовнішніх вікі-посилань. потім лістинг 7 отримує необхідну вміст сторінки, використовуючи API, і пропускає його через метод transform () об'єкта Text_Wiki для перетворення в XHTML. на малюнку 6 показаний результуючий текст з правкою.

Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML

Як видно з малюнка 6 , Пакет Text_Wiki непогано перетворює Wikitext в стандартний XHTML. Однак результат не ідеальний, оскільки Text_Wiki враховує не всі аспекти розмітки Wikitext (наприклад, він абсолютно не може працювати з Інфобокс). Якщо ви виявите, що цей пакет недостатній для ваших потреб, спробуйте використовувати замість нього аналізатор Wikitext Стіва Блінч (див. ресурси ), Який реалізує альтернативний підхід до аналізу і перетворення Wikitext.

Пошук по посиланнях на URL

Цікавим аспектом API запитів Вікіпедії є те, що він дозволяє шукати сторінки, що посилаються на конкретний URL. Ця можливість дуже корисна, наприклад, якщо ви хочете дізнатися кількість посилань на ваш сайт в статтях Вікіпедії.

Для виконання цього запиту вам буде потрібно змінити запит так, щоб він використовував зовнішній список URL і передавав шуканий URL. Розглянемо лістинг 8 , Який ілюструє цей процес.

Лістінг 8. Отримання списку сторінок, что посілаються на завдань URL
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо префікс категорії $ url = 'httpd.apache.org'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'exturlusage'); $ Wikipedia-> euquery ($ url); $ Wikipedia-> eulimit ('30 '); $ Wikipedia-> eunamespace ( '0'); $ Wikipedia-> format ( 'xml'); // Виконання запиту // ітерірованіе апо безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages referencing URL '<? Php echo $ url; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> exturlusage-> eu as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

До стандартних параметрах action і list код лістингу 8 додає параметр euquery, який задає перевіряється URL (в даному випадку сайт Apache), і параметр eunamespace, який задає вікі-простір імен для пошуку. Зверніть увагу, що URL повинен бути заданий без префікса протоколу «http: //». Результати аналізуються і обробляються звичайним чином, і підсумок виглядає приблизно так, як на малюнку 7 .

Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL

Слід окремо зупинитися на використанні простору імен в лістінгу 8 . API MediaWiki визначає кілька різних просторів імен для різних типів вікі-вмісту. Кожне простір імен визначається префіксом до заголовку сторінки. Наприклад, сторінка користувача завжди має префікс простору імен «User:», в той час як категорія має префікс "Category:".

Кожному простору імен також зіставляється ціле число, яке можна використовувати для фільтрації пошукових запитів. Повний список номерів і префіксів просторів імен наведено в документації до MediaWiki (див. ресурси ). Нижче наведені найбільш часто використовувані:

  • 0: простір імен за замовчуванням для сторінок з вмістом
  • 1: простір імен для сторінок дискусій
  • 2: простір імен для сторінок користувачів
  • 6: простір імен для файлів
  • 14: простір імен для сторінок категорій

З наведеного вище списку стає зрозуміло, що лістинг 8 відсіває все запити крім тих, що пов'язані зі сторінками з вмістом за допомогою параметра eunamespace. Видалення цього обмеження призведе до збільшення кількості результатів - будуть включені сторінки користувачів і сторінки дискусій, що містять заданий URL.

Додавання і редагування сторінок

Всі попередні листинги в цій статті були присвячені дії query і показували, як його можна використовувати для отримання різних типів даних зі сховища вмісту. Однак API Вікіпедії також підтримує кілька інших методів, включаючи можливість створення нових сторінок або редагування існуючих сторінок. Для виконання цих завдань викличте дію edit і передайте йому заголовок створюваної або редагованої сторінки разом із вмістом сторінки або розділу.

Кожна операція редагування повинна супроводжуватися маркером, який гарантує справжність призначеного для користувача запиту і захищає від CSRF-атак. Маркер зазвичай являє собою рядок букв і цифр, що закінчувалася спеціальною послідовністю + \. Для анонімних користувачів маркер складається тільки з послідовності + \.

Маркер повинен бути приєднаний до запиту на редагування, як в лістінгу 9 .

Лістинг 9. Редагування сторінок
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'edit'); $ Wikipedia-> title ( 'Wikipedia: Sandbox'); $ Wikipedia-> section ( 'new'); $ Wikipedia-> summary ( 'My Section'); $ Wikipedia-> text ( 'Some text'); $ Wikipedia-> token ( '+ \\'); // POST даних сторінки $ wikipedia-> post (); } Catch (Exception $ e) {}?>

лістинг 9 знайомить нас з декількома новими параметрами запиту.

  • Аргумент title задає редаговану сторінку. В даному випадку редагування проводиться на спеціальній страніце- «пісочниці», призначеної спеціально для експериментів і тестування. Час від часу вона автоматично очищається.
  • Аргумент section визначає номер редагованого розділу. Використання ключового слова «new» додає новий розділ. Пропуск цього аргументу призведе до заміни цілої сторінки.
  • Аргумент summary визначає заголовок розділу при створенні.
  • Аргумент text містить вміст розділу або сторінки.
  • Аргумент token задає маркер для операції редагування.

Варто також зауважити, що, на відміну від попередніх лістингів, запит на редагування передається за допомогою POST, а не GET. тому в лістінгу 9 щоб попросити спеціально використовується метод post () з Zend_Rest_Client. Так як API Вікіпедії не повертає XML-відповідь на POST-запити, Zend_Rest_Client при прочитанні відповіді генерує виняткова подія SimpleXML. Тому код лістингу передбачає перехоплення виняткової події, але нічого з ним не робить. Альтернативним підходом тут може бути використання Zend_Http_Client і створення пакета POST вручну.

Після виконання запиту ви можете спостерігати зміни на обраній сторінці, а в історії правок вашої сторінки з'являться ваш IP-адреса (для анонімних користувачів) або ваше ім'я (для аутентіфіцированний користувачів). Кожен запис історії правок містить дату, IP-адреса або ім'я користувача, тип маркера редагування і розмір в байтах. на малюнку 8 показаний приклад.

Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API

Висновок

На останніх сторінках цієї статті було наведено прискорений вступний курс в використання API MediaWiki для отримання та інтеграції інформації з Вікіпедії за допомогою вашого Web-додатки на PHP. Також ми коротко вивчили деякі унікальні аспекти даного API, такі як простору імен, властивості і списки. Також було показано, як використовувати цей API не тільки для зчитування інформації з вікі-ресурсу, але і для запису даних в нього.

Представлена ​​в даній статті інформація - це лише верхівка айсберга. Модуль запитів, який обговорювався на кількох останніх сторінках, - це надзвичайно потужний інструмент, що дозволяє взаємодіяти з безліччю категорій вікі-контенту, включаючи зображення, файли, дані про користувачів і дані про правки сторінки. Безумовно, саме модуль запитів ви будете використовувати найчастіше, але є і додаткові модулі, що дозволяють виконувати інші дії - обчислювати статистику, таку як кількість кліків, змін і реєстрацій користувачів; публікувати відгуки до статті; повертати дані з профілю користувача; відкочувати зміни в сторінці; завантажувати файли; працювати зі списками спостереження користувачів і т.д.

Як показують наведені в цій статті приклади, API MediaWiki надає гнучкий інструмент розробникам, які бажають будувати нові креативні додатки на основі вмісту з Вікіпедії або будь-якого іншого вікі-ресурсу, заснованого на Mediawiki. Експериментуйте з ним на дозвіллі та оцініть його можливості.

Ресурси для скачування

Схожі тими

  • Оригінал статті: Hook into Wikipedia information using PHP and the MediaWiki API (EN)
  • API MediaWiki (EN) : Навчіться користуватися зручним доступом до вікі-функцій, даних і метаданих в базаx даних MediaWiki.
  • Простору імен MediaWiki (EN) : Навчіться групувати сторінки в набори ( "простору імен"), скомпоновані відповідно до призначення сторінок.
  • Довідник з Zend_Rest (EN) : Дізнайтеся більше про компоненті Zend_Rest_Client.
  • Компонент PEAR Text_Wiki (EN) : Дізнайтеся більше про те, як перетворювати розмітку Wiki і BBCode в XHTML, LaTeX або розмітку звичайного тексту.
  • MediaWiki (EN) : Скачайте цей вікі-пакет з відкритим вихідним кодом, написаний на PHP.
  • Zend Framework (EN) : Скачайте цей пакет і будуйте захищені, надійні і сучасні Web 2.0 додатка і Web-сервіси за допомогою широко доступних API.
  • Компонент PEAR Text_Wiki (EN) : Скачайте основний механізм, який використовується у всіх підкласах Text_Wiki.
  • Компонент PEAR Text_Wiki_MediaWiki (EN) : Скачайте Mediawiki-аналізатор для Text_Wiki.
  • WikiText-аналізатор Стіва Блінч (EN) : Cкачать і випробуйте простий клас, який отримує і аналізує сторінки з MediaWiki. Цей клас здатний працювати з більшою частиною розмітки форматування тексту і управління зображеннями.
  • Інші статті автора (EN) (Вікрам Васвані, developerWorks, серпень 2007 року): статті про XML, додаткових API-інтерфейсів Google і інших технологіях.
  • Сертифікація IBM XML (EN) : Дізнайтеся, як стати сертифікованим розробником IBM в сфері XML і суміжних технологій.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki

Використовуємо PHP для пошуку, отримання і зміни елементів Вікіпедії за допомогою API MediaWiki

Часто використовувані абревіатури
  • API: Application programming interface, інтерфейс прикладного програмування
  • CSRF: Cross-site request forgery, міжсайтовий підстановка запиту
  • HTML: Hypertext Markup Language, мова гіпертекстової розмітки
  • HTTP: Hypertext Transfer Protocol
  • IP: Internet Protocol
  • JSON: JavaScript Object Notation
  • OOP: Object-oriented programming, об'єктно-орієнтоване програмування, ООП
  • PEAR: PHP Extension and Application Repository
  • REST: REpresentational State Transfer
  • WDDX: Web Distributed Data eXchange
  • XHTML: Extensible Hypertext Markup Language, розширювана мова гіпертекстової розмітки
  • XML: Extensible Markup Language, розширювана мова розмітки
  • YAML: YAML Is not Markup Language

З Вікіпедією знаком, напевно, кожен. Це найважливіше сховище знань, створене силами безлічі користувачів, що охоплює майже будь-яку мислиму область знань і доступне через Web-браузер. Яка б інформація не була вам потрібна, ви можете знайти її в Вікіпедії, найчастіше в дуже докладному викладі. При цьому, оскільки Вікіпедія доступна для публічного редагування, вона завжди містить оновлену і своєчасну інформацію.

Однак більшість людей не знають про одну важливу частини Вікіпедії. Це захований за лаштунками потужний API для Web-сервісів, який дозволяє розробникам доступ до вмісту Вікіпедії, здійснювати в ньому пошук і інтегрувати його в власний додаток. Цей API, що працює через HTTP і повертає дані в цілому ряді різних форматів, в тому числі XML, знаходиться у вільному доступі для програмістів і робить можливим створення будь-яких видів власних Web-додатків, що використовують матеріали Вікіпедії.

У даній статті я коротко ознайомлю вас з цим API на прикладі інтеграції і використання його з моїм улюбленим мовою програмування - PHP. У статті пояснюються основи роботи API, а потім детально розбираються процеси отримання списку категорій, пошуку записів по категорії або ключовим словом, отримання і відображення записів і віддаленого додавання і редагування вмісту.

Знайомство з API

Перед зануренням в PHP-код необхідно сказати кілька слів про API Вікіпедії. По-перше, хоча я і називаю його «API Вікіпедії», важливо помітити, що він використовується не тільки в Вікіпедії. Насправді він є частиною базового програми MediaWiki, на якому працює Вікіпедія, тому методи і підходи, представлені в цій статті, можна застосувати й до будь-якого іншого додатку, заснованому на MediaWiki. В розділі ресурси наведені посилання як на MediaWiki, так і на повний довідковий посібник із API MediaWiki.

Як і всі сервіси, засновані на HTTP, даний API працює, приймаючи HTTP-запити, що містять один або кілька вхідних аргументів, і видаючи відповіді, які можуть бути переконливо доведено необхідність використання робить запит клієнтом. Найчастіше відповідь надається у форматі XML, так як практично кожна мова програмування підтримує аналіз XML. Однак можна запитувати відповідь і в інших форматах, таких як JSON, WDDX, YAML, або в серіалізовані за допомогою PHP вигляді.

Кожен HTTP-запит до API повинен містити обов'язковий параметр «action», який визначає необхідну дію. Параметр може бути операцією запиту, редагування або видалення, запитом аутентифікації або будь-яким іншим з підтримуваних дій. Додатково до цього обов'язковому параметру, в залежності від необхідного дії, потрібні додаткові аргументи - наприклад, ключові слова для запитів, заголовок сторінки для операцій видалення і редагування, або ім'я користувача і пароль для аутентифікації.

Щоб побачити API Вікіпедії в дії, спробуйте відкрити наведений нижче URL в браузері. (Зверніть увагу: ця адреса є один рядок. Він розбитий на два рядки виключно з міркувань форматування.)

http://en.wikipedia.org/w/api.php?action=query&list=allcategories&acprop=size & acprefix = hollywood & format = xml

Цей метод повертає список десяти перших категорій Вікіпедії, що починаються із префікса "hollywood". В лістингу 1 наведено необроблений XML-результат цього запиту.

Лістинг 1. Приклад API
<? Xml version = "1.0&quot;?> <Api> <query> <allcategories> <c size = "31" pages = "28" files = "0" subcats = "3" xml: space = "preserve"> Hollywood </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood's Rock Walk inductees </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood, California </ c> <c size = "1" pages = "1" files = "0" subcats = "0 "xml: space =" preserve "> Hollywood, Florida </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood, Los Angeles , California </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood.com/celebrity/Wanda Shelley </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Actors </ c> <c size = "0" pages = "0" files = "0 "subcats =" 0 "xml: space =" preserve "> Hollywood Actress </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood Blacklist </ c> <c size = "2" pages = "2" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Boulevard </ c> </ allcategories> </ query> <Query-continue> <allcategories acfrom = "Hollywood Cemetery (Richmond)" /> </ query-continue> </ api>

Отримання списку категорій і сторінок

Тепер, коли ви зрозуміли принципи роботи API, розглянемо пару прикладів коду. Я припускаю, що мої читачі знайомі з HTML і XML і мають робоче середовище розробки для Apache / PHP зі свіжою версією Zend Framework. Також я припускаю, що ви знаєте основи роботи з класами і об'єктами на PHP, так як PHP-компоненти, використані в даній статті, написані відповідно до принципів ООП.

Для взаємодії з API вам буде потрібно HTTP-клієнт, здатний передавати GET- і POST-запити і працювати з відповідями. Непоганим інструментом для цього є компонент Zend_Rest_Client з Zend Framework, який розроблений спеціально для розробників, які об'єднують PHP-додатки з Web-сервісами. Цей клієнт можна використовувати для виконання GET-, POST-, PUT- і DELETE-запитів до кінцевої точки сервісу. XML-відповіді повертаються як екземпляри класу Zend_Rest_Client_Response, що дозволяє легко звертатися до індивідуальних властивостей відповіді.

лістинг 2 ілюструє процес отримання і відображення категорій з лістингу 1 з використанням Zend_Rest_Client в контексті PHP-скрипта.

Лістинг 2. Отримання списку категорій Вікіпедії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Визначення префікса категорії $ prefix = 'hollywood'; try {// ініціалізація Rest-клієнта $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // Завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'allcategories'); $ Wikipedia-> acprefix ($ prefix); $ Wikipedia-> format ( 'xml'); // виконання запиту // Ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?&gt; <Html> <head> </ head> <body> <h2> Search results for categories starting with '<? Php echo $ prefix; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> allcategories-> c as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / Category: <? php echo $ c;?&gt; "> <? php echo $ c; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 2 спочатку инициализируется автозавантажувач Zend Framework, а потім завантажується компонент Zend_Rest_Client. Створюється і инициализируется екземпляр класу Zend_Rest_Client з кінцевою точкою сервісу API Вікіпедії як аргумент конструктора. Потім визначаються та додаються параметри запиту, який передається API за допомогою клієнтського методу get (). Zend_Rest_Client автоматично приймає XML-відповідь сервера і перетворює його в набір SimpleXML-об'єктів, до яких ви можете звертатися, використовуючи стандартну нотацію «об'єкт-властивість».

Малюнок 1 ілюструє результат роботи лістингу 2 .

Малюнок 1. Web-сторінка зі списком категорій Вікіпедії

Зверніть увагу на спосіб передачі сервера параметрів запиту з допомогою Zend_Rest_Client. Кожен параметр задається викликом клієнтського методу з тим же ім'ям і передачею в цей метод потрібного значення в якості першого параметра. Наприклад, для додавання параметра action = query в запит скрипт викликає $ client-> action ( 'query'). Детальніше дізнатися про це можна з документації до Zend_Rest_Client (див. ресурси ).

Також ви можете отримати список сторінок всередині категорії, змінивши запит так, щоб він повертав список елементів категорій замість самих категорій. Очевидно, для цього доведеться передати в API ім'я категорії в якості вхідних даних. Розглянемо лістинг 3 , В якому вирішується це завдання.

Лістинг 3. Отримання списку сторінок всередині категорії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення категорії $ cat = 'Greek_legendary_creatures'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'categorymembers'); $ Wikipedia-> cmtitle ( 'Category:'. $ Cat); $ Wikipedia-> cmlimit ('30 '); $ Wikipedia-> format ( 'xml'); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages in category '<? Php echo $ cat; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> categorymembers-> cm as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ c [ 'title'];?&gt; "> <? php echo $ c [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

код лістингу 3 задає ім'я категорії і передає це ім'я в API, використовуючи параметр cmtitle. Зверніть увагу на параметр cmlimit, який задає кількість повертаються результатів. Як і раніше, Zend_Rest_Client передає запит і перетворює XML-відповідь в об'єкти SimpleXML, полегшуючи аналіз і відображення результатів запиту.

Результати роботи лістингу 3 показані на малюнку 2 .

Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії

Виконання повнотекстового пошуку

Як щодо пошуку сторінок, які містять деякий ключове слово? Це завдання легко вирішується за допомогою запиту, аналогічного описаному раніше, за винятком того, що в даному випадку вам потрібен список результатів пошуку замість елементів категорії. Розгляньте лістинг 4 , Який ілюструє цей процес.

Лістинг 4. Отримання списку результатів повнотекстового пошуку
<? Php // завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення пошукового запиту $ query = 'michelangelo'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ query); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for '<? Php echo $ query; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 4 використовується той же дію query, що ми бачили раніше, але з дещо іншими параметрами. Параметр list вказує, що це операція повнотекстового пошуку, в той час як параметр srsearch задає ключове слово (в даному випадку «michelangelo»). Також важливо задати параметр srwhat який визначає, де необхідно проводити пошук - по заголовкам сторінок або по всьому тексту.

Кожен результат пошуку містить заголовок сторінки, розмір, кількість слів, простір імен (про це трохи пізніше) і фрагмент вмісту сторінки. Ви можете відформатувати і відобразити ці дані як HTML-сторінку, як показано на малюнку 3 .

Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії

Приклад програми: пошук по Вікіпедії

У реальному світі ключові слова для пошуку не "зашиваються» в код, а вводяться користувачем. код лістингу 5 є вдосконаленою версією лістингу 4 з більшою інтерактивністю. Він дозволяє користувачеві вводити пошукові слова в додаток і переглядати сторінки Вікіпедії, що задовольняють умовам пошуку.

Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
<Html> <head> </ head> <body> <h2> Search </ h2> <form method = "post"> Search: <input type = "text" name = "q" /> </ form> < ? php // Якщо форма відправлена ​​if (isset ($ _ POST [ 'q'])) {// Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ _ POST [ 'q']); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <H2> Search results for '<? Php echo $ _POST [' q ']; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> <? Php}?> </ Body> </ html>

В лістингу 5 немає нічого складного. У ньому додані перевірка на коректність введених користувачем даних і передача цих даних в параметр srsearch. на малюнку 4 показані вихідна Web-форма і результати пошуку.

Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку

Отримання вмісту сторінки

API MediaWiki також дозволяє звертатися до поточної або до старих версій вмісту сторінки, приєднуючи до запиту параметр prop = revisions. В даному випадку необхідно задати заголовок повертається сторінки. Розгляньте лістинг 6 , Де показано, як це працює.

Лістинг 6. Отримання вмісту сторінки
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо заголовок шуканої сторінки $ query = 'The A Team'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту сторінки у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ content; ?> </ Script> </ div> </ body> </ html>

запит з лістингу 6 трохи відрізняється від тих, які ви вже бачили, так як він використовує властивість замість списку. Властивості використовуються для визначення того, яку інформацію ви хочете отримати з кількох сторінок. Є кілька різних властивостей, включаючи метадані сторінки, виправлення, посилання, зображення, шаблони, категорії і т.д.

запит з лістингу 6 визначає властивість revisions і потім використовує параметр rvprop для визначення параметрів, одержуваних для кожного виправлення. В даному випадку це просто вміст правки. Також є параметр rvlimit, який можна використовувати для отримання кількох попередніх правок. Однак в даний момент нас цікавить тільки поточна правка, тому цей параметр в даному параметрі не ставить.

на малюнку 5 показаний результат роботи коду з лістингу 6 .

Малюнок 5. Web-сторінка, що відображає вміст в Wikitext

Як ви можете бачити на малюнку 5 , результат роботи лістингу 6 - це вміст певної сторінки в форматі вікі-розмітки (Wikitext). Однак для використання цих даних в Web-додатку їх доведеться переформатувати з вікі-розмітки в розмітку XHTML. Для цього завдання існує кілька готових конвертерів, і один з найкращих - це пакет PEAR Text_Wiki, який може перетворювати з Wikitext в безліч інших форматів і назад.

Для установки просто виконайте в консолі наступні команди:

shell> pear install Text_Wiki shell> pear install Text_Wiki_Mediawiki

Установник PEAR приєднається до сервера пакетів PEAR, завантажить пакети і встановить їх в відповідне місце у вашій системі. Якщо ви віддаєте перевагу ручну установку, в розділі ресурси можна знайти посилання для скачування.

Після установки пакета виправте лістинг 6 для використання конвертера Text_Wiki, як в лістингу 7 .

Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Завантаження конвертера Wikitext require_once 'Text / Wiki.php'; // Створення примірника Text_Wiki вихідного класу // і установка Mediawiki-адаптера $ wiki = & Text_Wiki :: factory ( 'Mediawiki'); // завдання правил обробки $ wiki-> setRenderConf ( 'xhtml', 'wikilink', 'view_url', 'http://en.wikipedia.org/wiki/'); $ Wiki-> setRenderConf ( 'xhtml', 'wikilink', 'pages', false); // визначення заголовка сторінки $ query = 'The A Team'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ wiki-> transform ($ content,' Xhtml '); ?> </ Script> </ div> </ body> </ html>

код в лістингу 7 инициализирует об'єкт Text_Wiki і налаштовує його на використання Mediawiki-адаптера. Він також визначає деякі параметри, які використовуються для перетворення в XHTML, включаючи встановлений за замовчуванням URL-префікс, який використовується для зовнішніх вікі-посилань. потім лістинг 7 отримує необхідну вміст сторінки, використовуючи API, і пропускає його через метод transform () об'єкта Text_Wiki для перетворення в XHTML. на малюнку 6 показаний результуючий текст з правкою.

Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML

Як видно з малюнка 6 , Пакет Text_Wiki непогано перетворює Wikitext в стандартний XHTML. Однак результат не ідеальний, оскільки Text_Wiki враховує не всі аспекти розмітки Wikitext (наприклад, він абсолютно не може працювати з Інфобокс). Якщо ви виявите, що цей пакет недостатній для ваших потреб, спробуйте використовувати замість нього аналізатор Wikitext Стіва Блінч (див. ресурси ), Який реалізує альтернативний підхід до аналізу і перетворення Wikitext.

Пошук по посиланнях на URL

Цікавим аспектом API запитів Вікіпедії є те, що він дозволяє шукати сторінки, що посилаються на конкретний URL. Ця можливість дуже корисна, наприклад, якщо ви хочете дізнатися кількість посилань на ваш сайт в статтях Вікіпедії.

Для виконання цього запиту вам буде потрібно змінити запит так, щоб він використовував зовнішній список URL і передавав шуканий URL. Розглянемо лістинг 8 , Який ілюструє цей процес.

Лістінг 8. Отримання списку сторінок, что посілаються на завдань URL
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо префікс категорії $ url = 'httpd.apache.org'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'exturlusage'); $ Wikipedia-> euquery ($ url); $ Wikipedia-> eulimit ('30 '); $ Wikipedia-> eunamespace ( '0'); $ Wikipedia-> format ( 'xml'); // Виконання запиту // ітерірованіе апо безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages referencing URL '<? Php echo $ url; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> exturlusage-> eu as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

До стандартних параметрах action і list код лістингу 8 додає параметр euquery, який задає перевіряється URL (в даному випадку сайт Apache), і параметр eunamespace, який задає вікі-простір імен для пошуку. Зверніть увагу, що URL повинен бути заданий без префікса протоколу «http: //». Результати аналізуються і обробляються звичайним чином, і підсумок виглядає приблизно так, як на малюнку 7 .

Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL

Слід окремо зупинитися на використанні простору імен в лістингу 8 . API MediaWiki визначає кілька різних просторів імен для різних типів вікі-вмісту. Кожне простір імен визначається префіксом до заголовку сторінки. Наприклад, сторінка користувача завжди має префікс простору імен «User:», в той час як категорія має префікс "Category:".

Кожному простору імен також зіставляється ціле число, яке можна використовувати для фільтрації пошукових запитів. Повний список номерів і префіксів просторів імен наведено в документації до MediaWiki (див. ресурси ). Нижче наведені найбільш часто використовувані:

  • 0: простір імен за замовчуванням для сторінок з вмістом
  • 1: простір імен для сторінок дискусій
  • 2: простір імен для сторінок користувачів
  • 6: простір імен для файлів
  • 14: простір імен для сторінок категорій

З наведеного вище списку стає зрозуміло, що лістинг 8 відсіває все запити крім тих, що пов'язані зі сторінками з вмістом за допомогою параметра eunamespace. Видалення цього обмеження призведе до збільшення кількості результатів - будуть включені сторінки користувачів і сторінки дискусій, що містять заданий URL.

Додавання і редагування сторінок

Всі попередні листинги в цій статті були присвячені дії query і показували, як його можна використовувати для отримання різних типів даних зі сховища вмісту. Однак API Вікіпедії також підтримує кілька інших методів, включаючи можливість створення нових сторінок або редагування існуючих сторінок. Для виконання цих завдань викличте дію edit і передайте йому заголовок створюваної або редагованої сторінки разом із вмістом сторінки або розділу.

Кожна операція редагування повинна супроводжуватися маркером, який гарантує справжність призначеного для користувача запиту і захищає від CSRF-атак. Маркер зазвичай являє собою рядок букв і цифр, що закінчувалася спеціальною послідовністю + \. Для анонімних користувачів маркер складається тільки з послідовності + \.

Маркер повинен бути приєднаний до запиту на редагування, як в лістінгу 9 .

Лістинг 9. Редагування сторінок
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'edit'); $ Wikipedia-> title ( 'Wikipedia: Sandbox'); $ Wikipedia-> section ( 'new'); $ Wikipedia-> summary ( 'My Section'); $ Wikipedia-> text ( 'Some text'); $ Wikipedia-> token ( '+ \\'); // POST даних сторінки $ wikipedia-> post (); } Catch (Exception $ e) {}?>

лістинг 9 знайомить нас з декількома новими параметрами запиту.

  • Аргумент title задає редаговану сторінку. В даному випадку редагування проводиться на спеціальній страніце- «пісочниці», призначеної спеціально для експериментів і тестування. Час від часу вона автоматично очищається.
  • Аргумент section визначає номер редагованого розділу. Використання ключового слова «new» додає новий розділ. Пропуск цього аргументу призведе до заміни цілої сторінки.
  • Аргумент summary визначає заголовок розділу при створенні.
  • Аргумент text містить вміст розділу або сторінки.
  • Аргумент token задає маркер для операції редагування.

Варто також зауважити, що, на відміну від попередніх лістингів, запит на редагування передається за допомогою POST, а не GET. Тому в лістінгу 9 щоб попросити спеціально використовується метод post () з Zend_Rest_Client. Так як API Вікіпедії не повертає XML-відповідь на POST-запити, Zend_Rest_Client при прочитанні відповіді генерує виняткова подія SimpleXML. Тому код лістингу передбачає перехоплення виняткової події, але нічого з ним не робить. Альтернативним підходом тут може бути використання Zend_Http_Client і створення пакета POST вручну.

Після виконання запиту ви можете спостерігати зміни на обраній сторінці, а в історії правок вашої сторінки з'являться ваш IP-адреса (для анонімних користувачів) або ваше ім'я (для аутентіфіцированний користувачів). Кожен запис історії правок містить дату, IP-адреса або ім'я користувача, тип маркера редагування і розмір в байтах. на малюнку 8 показаний приклад.

Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API

Висновок

На останніх сторінках цієї статті було наведено прискорений вступний курс в використання API MediaWiki для отримання та інтеграції інформації з Вікіпедії за допомогою вашого Web-додатки на PHP. Також ми коротко вивчили деякі унікальні аспекти даного API, такі як простору імен, властивості і списки. Також було показано, як використовувати цей API не тільки для зчитування інформації з вікі-ресурсу, але і для запису даних в нього.

Представлена ​​в даній статті інформація - це лише верхівка айсберга. Модуль запитів, який обговорювався на кількох останніх сторінках, - це надзвичайно потужний інструмент, що дозволяє взаємодіяти з безліччю категорій вікі-контенту, включаючи зображення, файли, дані про користувачів і дані про правки сторінки. Безумовно, саме модуль запитів ви будете використовувати найчастіше, але є і додаткові модулі, що дозволяють виконувати інші дії - обчислювати статистику, таку як кількість кліків, змін і реєстрацій користувачів; публікувати відгуки до статті; повертати дані з профілю користувача; відкочувати зміни в сторінці; завантажувати файли; працювати зі списками спостереження користувачів і т.д.

Як показують наведені в цій статті приклади, API MediaWiki надає гнучкий інструмент розробникам, які бажають будувати нові креативні додатки на основі вмісту з Вікіпедії або будь-якого іншого вікі-ресурсу, заснованого на Mediawiki. Експериментуйте з ним на дозвіллі та оцініть його можливості.

Ресурси для скачування

Схожі тими

  • Оригінал статті: Hook into Wikipedia information using PHP and the MediaWiki API (EN)
  • API MediaWiki (EN) : Навчіться користуватися зручним доступом до вікі-функцій, даних і метаданих в базаx даних MediaWiki.
  • Простору імен MediaWiki (EN) : Навчіться групувати сторінки в набори ( "простору імен"), скомпоновані відповідно до призначення сторінок.
  • Довідник з Zend_Rest (EN) : Дізнайтеся більше про компоненті Zend_Rest_Client.
  • Компонент PEAR Text_Wiki (EN) : Дізнайтеся більше про те, як перетворювати розмітку Wiki і BBCode в XHTML, LaTeX або розмітку звичайного тексту.
  • MediaWiki (EN) : Скачайте цей вікі-пакет з відкритим вихідним кодом, написаний на PHP.
  • Zend Framework (EN) : Скачайте цей пакет і будуйте захищені, надійні і сучасні Web 2.0 додатка і Web-сервіси за допомогою широко доступних API.
  • Компонент PEAR Text_Wiki (EN) : Скачайте основний механізм, який використовується у всіх підкласах Text_Wiki.
  • Компонент PEAR Text_Wiki_MediaWiki (EN) : Скачайте Mediawiki-аналізатор для Text_Wiki.
  • WikiText-аналізатор Стіва Блінч (EN) : Cкачать і випробуйте простий клас, який отримує і аналізує сторінки з MediaWiki. Цей клас здатний працювати з більшою частиною розмітки форматування тексту і управління зображеннями.
  • Інші статті автора (EN) (Вікрам Васвані, developerWorks, серпень 2007 року): статті про XML, додаткових API-інтерфейсів Google і інших технологіях.
  • Сертифікація IBM XML (EN) : Дізнайтеся, як стати сертифікованим розробником IBM в сфері XML і суміжних технологій.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Доступ до інформації Вікіпедії за допомогою PHP і API MediaWiki

Використовуємо PHP для пошуку, отримання і зміни елементів Вікіпедії за допомогою API MediaWiki

Часто використовувані абревіатури
  • API: Application programming interface, інтерфейс прикладного програмування
  • CSRF: Cross-site request forgery, міжсайтовий підстановка запиту
  • HTML: Hypertext Markup Language, мова гіпертекстової розмітки
  • HTTP: Hypertext Transfer Protocol
  • IP: Internet Protocol
  • JSON: JavaScript Object Notation
  • OOP: Object-oriented programming, об'єктно-орієнтоване програмування, ООП
  • PEAR: PHP Extension and Application Repository
  • REST: REpresentational State Transfer
  • WDDX: Web Distributed Data eXchange
  • XHTML: Extensible Hypertext Markup Language, розширювана мова гіпертекстової розмітки
  • XML: Extensible Markup Language, розширювана мова розмітки
  • YAML: YAML Is not Markup Language

З Вікіпедією знаком, напевно, кожен. Це найважливіше сховище знань, створене силами безлічі користувачів, що охоплює майже будь-яку мислиму область знань і доступне через Web-браузер. Яка б інформація не була вам потрібна, ви можете знайти її в Вікіпедії, найчастіше в дуже докладному викладі. При цьому, оскільки Вікіпедія доступна для публічного редагування, вона завжди містить оновлену і своєчасну інформацію.

Однак більшість людей не знають про одну важливу частини Вікіпедії. Це захований за лаштунками потужний API для Web-сервісів, який дозволяє розробникам доступ до вмісту Вікіпедії, здійснювати в ньому пошук і інтегрувати його в власний додаток. Цей API, що працює через HTTP і повертає дані в цілому ряді різних форматів, в тому числі XML, знаходиться у вільному доступі для програмістів і робить можливим створення будь-яких видів власних Web-додатків, що використовують матеріали Вікіпедії.

У даній статті я коротко ознайомлю вас з цим API на прикладі інтеграції і використання його з моїм улюбленим мовою програмування - PHP. У статті пояснюються основи роботи API, а потім детально розбираються процеси отримання списку категорій, пошуку записів по категорії або ключовим словом, отримання і відображення записів і віддаленого додавання і редагування вмісту.

Знайомство з API

Перед зануренням в PHP-код необхідно сказати кілька слів про API Вікіпедії. По-перше, хоча я і називаю його «API Вікіпедії», важливо помітити, що він використовується не тільки в Вікіпедії. Насправді він є частиною базового програми MediaWiki, на якому працює Вікіпедія, тому методи і підходи, представлені в цій статті, можна застосувати й до будь-якого іншого додатку, заснованому на MediaWiki. В розділі ресурси наведені посилання як на MediaWiki, так і на повний довідковий посібник із API MediaWiki.

Як і всі сервіси, засновані на HTTP, даний API працює, приймаючи HTTP-запити, що містять один або кілька вхідних аргументів, і видаючи відповіді, які можуть бути переконливо доведено необхідність використання робить запит клієнтом. Найчастіше відповідь надається у форматі XML, так як практично кожна мова програмування підтримує аналіз XML. Однак можна запитувати відповідь і в інших форматах, таких як JSON, WDDX, YAML, або в серіалізовані за допомогою PHP вигляді.

Кожен HTTP-запит до API повинен містити обов'язковий параметр «action», який визначає необхідну дію. Параметр може бути операцією запиту, редагування або видалення, запитом аутентифікації або будь-яким іншим з підтримуваних дій. Додатково до цього обов'язковому параметру, в залежності від необхідного дії, потрібні додаткові аргументи - наприклад, ключові слова для запитів, заголовок сторінки для операцій видалення і редагування, або ім'я користувача і пароль для аутентифікації.

Щоб побачити API Вікіпедії в дії, спробуйте відкрити наведений нижче URL в браузері. (Зверніть увагу: ця адреса є один рядок. Він розбитий на два рядки виключно з міркувань форматування.)

http://en.wikipedia.org/w/api.php?action=query&list=allcategories&acprop=size & acprefix = hollywood & format = xml

Цей метод повертає список десяти перших категорій Вікіпедії, що починаються із префікса "hollywood". В лістингу 1 наведено необроблений XML-результат цього запиту.

Лістинг 1. Приклад API
<? Xml version = "1.0&quot;?> <Api> <query> <allcategories> <c size = "31" pages = "28" files = "0" subcats = "3" xml: space = "preserve"> Hollywood </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood's Rock Walk inductees </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood, California </ c> <c size = "1" pages = "1" files = "0" subcats = "0 "xml: space =" preserve "> Hollywood, Florida </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood, Los Angeles , California </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood.com/celebrity/Wanda Shelley </ c> <c size = "0" pages = "0" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Actors </ c> <c size = "0" pages = "0" files = "0 "subcats =" 0 "xml: space =" preserve "> Hollywood Actress </ c> <c size =" 0 "pages =" 0 "files =" 0 "subcats =" 0 "xml: space =" preserve "> Hollywood Blacklist </ c> <c size = "2" pages = "2" files = "0" subcats = "0" xml: space = "preserve"> Hollywood Boulevard </ c> </ allcategories> </ query> <Query-continue> <allcategories acfrom = "Hollywood Cemetery (Richmond)" /> </ query-continue> </ api>

Отримання списку категорій і сторінок

Тепер, коли ви зрозуміли принципи роботи API, розглянемо пару прикладів коду. Я припускаю, що мої читачі знайомі з HTML і XML і мають робоче середовище розробки для Apache / PHP зі свіжою версією Zend Framework. Також я припускаю, що ви знаєте основи роботи з класами і об'єктами на PHP, так як PHP-компоненти, використані в даній статті, написані відповідно до принципів ООП.

Для взаємодії з API вам буде потрібно HTTP-клієнт, здатний передавати GET- і POST-запити і працювати з відповідями. Непоганим інструментом для цього є компонент Zend_Rest_Client з Zend Framework, який розроблений спеціально для розробників, які об'єднують PHP-додатки з Web-сервісами. Цей клієнт можна використовувати для виконання GET-, POST-, PUT- і DELETE-запитів до кінцевої точки сервісу. XML-відповіді повертаються як екземпляри класу Zend_Rest_Client_Response, що дозволяє легко звертатися до індивідуальних властивостей відповіді.

лістинг 2 ілюструє процес отримання і відображення категорій з лістингу 1 з використанням Zend_Rest_Client в контексті PHP-скрипта.

Лістинг 2. Отримання списку категорій Вікіпедії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Визначення префікса категорії $ prefix = 'hollywood'; try {// ініціалізація Rest-клієнта $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // Завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'allcategories'); $ Wikipedia-> acprefix ($ prefix); $ Wikipedia-> format ( 'xml'); // виконання запиту // Ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?&gt; <Html> <head> </ head> <body> <h2> Search results for categories starting with '<? Php echo $ prefix; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> allcategories-> c as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / Category: <? php echo $ c;?&gt; "> <? php echo $ c; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 2 спочатку инициализируется автозавантажувач Zend Framework, а потім завантажується компонент Zend_Rest_Client. Створюється і инициализируется екземпляр класу Zend_Rest_Client з кінцевою точкою сервісу API Вікіпедії як аргумент конструктора. Потім визначаються та додаються параметри запиту, який передається API за допомогою клієнтського методу get (). Zend_Rest_Client автоматично приймає XML-відповідь сервера і перетворює його в набір SimpleXML-об'єктів, до яких ви можете звертатися, використовуючи стандартну нотацію «об'єкт-властивість».

Малюнок 1 ілюструє результат роботи лістингу 2 .

Малюнок 1. Web-сторінка зі списком категорій Вікіпедії

Зверніть увагу на спосіб передачі сервера параметрів запиту з допомогою Zend_Rest_Client. Кожен параметр задається викликом клієнтського методу з тим же ім'ям і передачею в цей метод потрібного значення в якості першого параметра. Наприклад, для додавання параметра action = query в запит скрипт викликає $ client-> action ( 'query'). Детальніше дізнатися про це можна з документації до Zend_Rest_Client (див. ресурси ).

Також ви можете отримати список сторінок всередині категорії, змінивши запит так, щоб він повертав список елементів категорій замість самих категорій. Очевидно, для цього доведеться передати в API ім'я категорії в якості вхідних даних. Розглянемо лістинг 3 , В якому вирішується це завдання.

Лістинг 3. Отримання списку сторінок всередині категорії
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення категорії $ cat = 'Greek_legendary_creatures'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'categorymembers'); $ Wikipedia-> cmtitle ( 'Category:'. $ Cat); $ Wikipedia-> cmlimit ('30 '); $ Wikipedia-> format ( 'xml'); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages in category '<? Php echo $ cat; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> categorymembers-> cm as $ c):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ c [ 'title'];?&gt; "> <? php echo $ c [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

код лістингу 3 задає ім'я категорії і передає це ім'я в API, використовуючи параметр cmtitle. Зверніть увагу на параметр cmlimit, який задає кількість повертаються результатів. Як і раніше, Zend_Rest_Client передає запит і перетворює XML-відповідь в об'єкти SimpleXML, полегшуючи аналіз і відображення результатів запиту.

Результати роботи лістингу 3 показані на малюнку 2 .

Малюнок 2. Web-сторінка зі списком сторінок Вікіпедії в обраній категорії

Виконання повнотекстового пошуку

Як щодо пошуку сторінок, які містять деякий ключове слово? Це завдання легко вирішується за допомогою запиту, аналогічного описаному раніше, за винятком того, що в даному випадку вам потрібен список результатів пошуку замість елементів категорії. Розгляньте лістинг 4 , Який ілюструє цей процес.

Лістинг 4. Отримання списку результатів повнотекстового пошуку
<? Php // завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // визначення пошукового запиту $ query = 'michelangelo'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ query); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for '<? Php echo $ query; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

В лістингу 4 використовується той же дію query, що ми бачили раніше, але з дещо іншими параметрами. Параметр list вказує, що це операція повнотекстового пошуку, в той час як параметр srsearch задає ключове слово (в даному випадку «michelangelo»). Також важливо задати параметр srwhat який визначає, де необхідно проводити пошук - по заголовкам сторінок або по всьому тексту.

Кожен результат пошуку містить заголовок сторінки, розмір, кількість слів, простір імен (про це трохи пізніше) і фрагмент вмісту сторінки. Ви можете відформатувати і відобразити ці дані як HTML-сторінку, як показано на малюнку 3 .

Малюнок 3. Web-сторінка з результатами пошуку по Вікіпедії

Приклад програми: пошук по Вікіпедії

У реальному світі ключові слова для пошуку не "зашиваються» в код, а вводяться користувачем. код лістингу 5 є вдосконаленою версією лістингу 4 з більшою інтерактивністю. Він дозволяє користувачеві вводити пошукові слова в додаток і переглядати сторінки Вікіпедії, що задовольняють умовам пошуку.

Лістинг 5. Інтерактивне додаток для пошуку по Вікіпедії
<Html> <head> </ head> <body> <h2> Search </ h2> <form method = "post"> Search: <input type = "text" name = "q" /> </ form> < ? php // Якщо форма відправлена ​​if (isset ($ _ POST [ 'q'])) {// Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'search'); $ Wikipedia-> srwhat ( 'text'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> srsearch ($ _ POST [ 'q']); // виконання запиту // ітерірованіе по безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <H2> Search results for '<? Php echo $ _POST [' q ']; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> search-> p as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> <br/> <small> <? Php echo $ r [ 'snippet']; ?> </ Small> </ li> <? Php endforeach; ?> </ Ol> <? Php}?> </ Body> </ html>

В лістингу 5 немає нічого складного. У ньому додані перевірка на коректність введених користувачем даних і передача цих даних в параметр srsearch. на малюнку 4 показані вихідна Web-форма і результати пошуку.

Малюнок 4. Web-форма для пошуку по Вікіпедії і результати пошуку

Отримання вмісту сторінки

API MediaWiki також дозволяє звертатися до поточної або до старих версій вмісту сторінки, приєднуючи до запиту параметр prop = revisions. В даному випадку необхідно задати заголовок повертається сторінки. Розгляньте лістинг 6 , Де показано, як це працює.

Лістинг 6. Отримання вмісту сторінки
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо заголовок шуканої сторінки $ query = 'The A Team'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту сторінки у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ content; ?> </ Script> </ div> </ body> </ html>

запит з лістингу 6 трохи відрізняється від тих, які ви вже бачили, так як він використовує властивість замість списку. Властивості використовуються для визначення того, яку інформацію ви хочете отримати з кількох сторінок. Є кілька різних властивостей, включаючи метадані сторінки, виправлення, посилання, зображення, шаблони, категорії і т.д.

запит з лістингу 6 визначає властивість revisions і потім використовує параметр rvprop для визначення параметрів, одержуваних для кожного виправлення. В даному випадку це просто вміст правки. Також є параметр rvlimit, який можна використовувати для отримання кількох попередніх правок. Однак в даний момент нас цікавить тільки поточна правка, тому цей параметр в даному параметрі не ставить.

на малюнку 5 показаний результат роботи коду з лістингу 6 .

Малюнок 5. Web-сторінка, що відображає вміст в Wikitext

Як ви можете бачити на малюнку 5 , результат роботи лістингу 6 - це вміст певної сторінки в форматі вікі-розмітки (Wikitext). Однак для використання цих даних в Web-додатку їх доведеться переформатувати з вікі-розмітки в розмітку XHTML. Для цього завдання існує кілька готових конвертерів, і один з найкращих - це пакет PEAR Text_Wiki, який може перетворювати з Wikitext в безліч інших форматів і назад.

Для установки просто виконайте в консолі наступні команди:

shell> pear install Text_Wiki shell> pear install Text_Wiki_Mediawiki

Установник PEAR приєднається до сервера пакетів PEAR, завантажить пакети і встановить їх в відповідне місце у вашій системі. Якщо ви віддаєте перевагу ручну установку, в розділі ресурси можна знайти посилання для скачування.

Після установки пакета виправте лістинг 6 для використання конвертера Text_Wiki, як в лістингу 7 .

Лістинг 7. Отримання вмісту сторінки і перетворення його в XHTML
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Завантаження конвертера Wikitext require_once 'Text / Wiki.php'; // Створення примірника Text_Wiki вихідного класу // і установка Mediawiki-адаптера $ wiki = & Text_Wiki :: factory ( 'Mediawiki'); // завдання правил обробки $ wiki-> setRenderConf ( 'xhtml', 'wikilink', 'view_url', 'http://en.wikipedia.org/wiki/'); $ Wiki-> setRenderConf ( 'xhtml', 'wikilink', 'pages', false); // визначення заголовка сторінки $ query = 'The A Team'; try {// ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> prop ( 'revisions'); $ Wikipedia-> rvprop ( 'content'); $ Wikipedia-> format ( 'xml'); $ Wikipedia-> redirects ( '1'); $ Wikipedia-> titles ($ query); // виконання запиту // отримання вмісту у вигляді XML $ result = $ wikipedia-> get (); $ Content = $ result-> query-> pages-> page-> revisions-> rev; } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Page result for '<? Php echo $ query; ?> '</ H2> <div> <? Php echo $ wiki-> transform ($ content,' Xhtml '); ?> </ Script> </ div> </ body> </ html>

код в лістингу 7 инициализирует об'єкт Text_Wiki і налаштовує його на використання Mediawiki-адаптера. Він також визначає деякі параметри, які використовуються для перетворення в XHTML, включаючи встановлений за замовчуванням URL-префікс, який використовується для зовнішніх вікі-посилань. потім лістинг 7 отримує необхідну вміст сторінки, використовуючи API, і пропускає його через метод transform () об'єкта Text_Wiki для перетворення в XHTML. на малюнку 6 показаний результуючий текст з правкою.

Малюнок 6. Web-сторінка, що відображає вікі-вміст після перетворення в XHTML

Як видно з малюнка 6 , Пакет Text_Wiki непогано перетворює Wikitext в стандартний XHTML. Однак результат не ідеальний, оскільки Text_Wiki враховує не всі аспекти розмітки Wikitext (наприклад, він абсолютно не може працювати з Інфобокс). Якщо ви виявите, що цей пакет недостатній для ваших потреб, спробуйте використовувати замість нього аналізатор Wikitext Стіва Блінч (див. ресурси ), Який реалізує альтернативний підхід до аналізу і перетворення Wikitext.

Пошук по посиланнях на URL

Цікавим аспектом API запитів Вікіпедії є те, що він дозволяє шукати сторінки, що посилаються на конкретний URL. Ця можливість дуже корисна, наприклад, якщо ви хочете дізнатися кількість посилань на ваш сайт в статтях Вікіпедії.

Для виконання цього запиту вам буде потрібно змінити запит так, щоб він використовував зовнішній список URL і передавав шуканий URL. Розглянемо лістинг 8 , Який ілюструє цей процес.

Лістинг 8. Отримання списку сторінок, що посилаються на заданий URL
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); // Задаємо префікс категорії $ url = 'httpd.apache.org'; try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'query'); $ Wikipedia-> list ( 'exturlusage'); $ Wikipedia-> euquery ($ url); $ Wikipedia-> eulimit ('30 '); $ Wikipedia-> eunamespace ( '0'); $ Wikipedia-> format ( 'xml'); // виконання запиту // ітерірованіе апо безлічі XML-результатів $ result = $ wikipedia-> get (); } Catch (Exception $ e) {die ( 'ERROR:'. $ E-> getMessage ()); }?> <Html> <head> </ head> <body> <h2> Search results for pages referencing URL '<? Php echo $ url; ?&gt; '</ H2> <ol> <? Php foreach ($ result-> query-> exturlusage-> eu as $ r):?> <Li> <a href = "http://www.wikipedia.org / wiki / <? php echo $ r [ 'title'];?&gt; "> <? php echo $ r [ 'title']; ?> </a> </ li> <? Php endforeach; ?> </ Ol> </ body> </ html>

До стандартних параметрах action і list код лістингу 8 додає параметр euquery, який задає перевіряється URL (в даному випадку сайт Apache), і параметр eunamespace, який задає вікі-простір імен для пошуку. Зверніть увагу, що URL повинен бути заданий без префікса протоколу «http: //». Результати аналізуються і обробляються звичайним чином, і підсумок виглядає приблизно так, як на малюнку 7 .

Малюнок 7. Web-сторінка, що відображає сторінки, що посилаються на заданий URL

Слід окремо зупинитися на використанні простору імен в лістингу 8 . API MediaWiki визначає кілька різних просторів імен для різних типів вікі-вмісту. Кожне простір імен визначається префіксом до заголовку сторінки. Наприклад, сторінка користувача завжди має префікс простору імен «User:», в той час як категорія має префікс "Category:".

Кожному простору імен також зіставляється ціле число, яке можна використовувати для фільтрації пошукових запитів. Повний список номерів і префіксів просторів імен наведено в документації до MediaWiki (див. ресурси ). Нижче наведені найбільш часто використовувані:

  • 0: простір імен за замовчуванням для сторінок з вмістом
  • 1: простір імен для сторінок дискусій
  • 2: простір імен для сторінок користувачів
  • 6: простір імен для файлів
  • 14: простір імен для сторінок категорій

З наведеного вище списку стає зрозуміло, що лістинг 8 відсіває все запити крім тих, що пов'язані зі сторінками з вмістом за допомогою параметра eunamespace. Видалення цього обмеження призведе до збільшення кількості результатів - будуть включені сторінки користувачів і сторінки дискусій, що містять заданий URL.

Додавання і редагування сторінок

Всі попередні листинги в цій статті були присвячені дії query і показували, як його можна використовувати для отримання різних типів даних зі сховища вмісту. Однак API Вікіпедії також підтримує кілька інших методів, включаючи можливість створення нових сторінок або редагування існуючих сторінок. Для виконання цих завдань викличте дію edit і передайте йому заголовок створюваної або редагованої сторінки разом із вмістом сторінки або розділу.

Кожна операція редагування повинна супроводжуватися маркером, який гарантує справжність призначеного для користувача запиту і захищає від CSRF-атак. Маркер зазвичай являє собою рядок букв і цифр, що закінчувалася спеціальною послідовністю + \. Для анонімних користувачів маркер складається тільки з послідовності + \.

Маркер повинен бути приєднаний до запиту на редагування, як в лістингу 9 .

Лістинг 9. Редагування сторінок
<? Php // Завантаження класів Zend require_once 'Zend / Loader.php'; Zend_Loader :: loadClass ( 'Zend_Rest_Client'); try {// Ініціалізація клієнта Rest $ wikipedia = new Zend_Rest_Client ( 'http://en.wikipedia.org/w/api.php'); // завдання параметрів запиту $ wikipedia-> action ( 'edit'); $ Wikipedia-> title ( 'Wikipedia: Sandbox'); $ Wikipedia-> section ( 'new'); $ Wikipedia-> summary ( 'My Section'); $ Wikipedia-> text ( 'Some text'); $ Wikipedia-> token ( '+ \\'); // POST даних сторінки $ wikipedia-> post (); } Catch (Exception $ e) {}?>

лістинг 9 знайомить нас з декількома новими параметрами запиту.

  • Аргумент title задає редаговану сторінку. В даному випадку редагування проводиться на спеціальній страніце- «пісочниці», призначеної спеціально для експериментів і тестування. Час від часу вона автоматично очищається.
  • Аргумент section визначає номер редагованого розділу. Використання ключового слова «new» додає новий розділ. Пропуск цього аргументу призведе до заміни цілої сторінки.
  • Аргумент summary визначає заголовок розділу при створенні.
  • Аргумент text містить вміст розділу або сторінки.
  • Аргумент token задає маркер для операції редагування.

Варто також зауважити, що, на відміну від попередніх лістингів, запит на редагування передається за допомогою POST, а не GET. Тому в лістингу 9 щоб попросити спеціально використовується метод post () з Zend_Rest_Client. Так як API Вікіпедії не повертає XML-відповідь на POST-запити, Zend_Rest_Client при прочитанні відповіді генерує виняткова подія SimpleXML. Тому код лістингу передбачає перехоплення виняткової події, але нічого з ним не робить. Альтернативним підходом тут може бути використання Zend_Http_Client і створення пакета POST вручну.

Після виконання запиту ви можете спостерігати зміни на обраній сторінці, а в історії правок вашої сторінки з'являться ваш IP-адреса (для анонімних користувачів) або ваше ім'я (для аутентіфіцированний користувачів). Кожен запис історії правок містить дату, IP-адреса або ім'я користувача, тип маркера редагування і розмір в байтах. на малюнку 8 показаний приклад.

Малюнок 8. Історія правок сторінки Вікіпедії, що показує зміни, внесені за допомогою API

висновок

На останніх сторінках цієї статті було наведено прискорений вступний курс в використання API MediaWiki для отримання та інтеграції інформації з Вікіпедії за допомогою вашого Web-додатки на PHP. Також ми коротко вивчили деякі унікальні аспекти даного API, такі як простору імен, властивості і списки. Також було показано, як використовувати цей API не тільки для зчитування інформації з вікі-ресурсу, але і для запису даних в нього.

Представлена ​​в даній статті інформація - це лише верхівка айсберга. Модуль запитів, який обговорювався на кількох останніх сторінках, - це надзвичайно потужний інструмент, що дозволяє взаємодіяти з безліччю категорій вікі-контенту, включаючи зображення, файли, дані про користувачів і дані про правки сторінки. Безумовно, саме модуль запитів ви будете використовувати найчастіше, але є і додаткові модулі, що дозволяють виконувати інші дії - обчислювати статистику, таку як кількість кліків, змін і реєстрацій користувачів; публікувати відгуки до статті; повертати дані з профілю користувача; відкочувати зміни в сторінці; завантажувати файли; працювати зі списками спостереження користувачів і т.д.

Як показують наведені в цій статті приклади, API MediaWiki надає гнучкий інструмент розробникам, які бажають будувати нові креативні додатки на основі вмісту з Вікіпедії або будь-якого іншого вікі-ресурсу, заснованого на Mediawiki. Експериментуйте з ним на дозвіллі та оцініть його можливості.

Ресурси для скачування

Схожі теми

  • Оригінал статті: Hook into Wikipedia information using PHP and the MediaWiki API (EN)
  • API MediaWiki (EN) : Навчіться користуватися зручним доступом до вікі-функцій, даних і метаданих в базаx даних MediaWiki.
  • Простору імен MediaWiki (EN) : Навчіться групувати сторінки в набори ( "простору імен"), скомпоновані відповідно до призначення сторінок.
  • Довідник з Zend_Rest (EN) : Дізнайтеся більше про компоненті Zend_Rest_Client.
  • Компонент PEAR Text_Wiki (EN) : Дізнайтеся більше про те, як перетворювати розмітку Wiki і BBCode в XHTML, LaTeX або розмітку звичайного тексту.
  • MediaWiki (EN) : Скачайте цей вікі-пакет з відкритим вихідним кодом, написаний на PHP.
  • Zend Framework (EN) : Скачайте цей пакет і будуйте захищені, надійні і сучасні Web 2.0 додатка і Web-сервіси за допомогою широко доступних API.
  • Компонент PEAR Text_Wiki (EN) : Скачайте основний механізм, який використовується у всіх підкласах Text_Wiki.
  • Компонент PEAR Text_Wiki_MediaWiki (EN) : Скачайте Mediawiki-аналізатор для Text_Wiki.
  • WikiText-аналізатор Стіва Блінч (EN) : Cкачать і випробуйте простий клас, який отримує і аналізує сторінки з MediaWiki. Цей клас здатний працювати з більшою частиною розмітки форматування тексту і управління зображеннями.
  • Інші статті автора (EN) (Вікрам Васвані, developerWorks, серпень 2007 року): статті про XML, додаткових API-інтерфейсів Google і інших технологіях.
  • Сертифікація IBM XML (EN) : Дізнайтеся, як стати сертифікованим розробником IBM в сфері XML і суміжних технологій.

Підпишіть мене на повідомлення до коментарів

Php?
Quot;?
Gt; <Html> <head> </ head> <body> <h2> Search results for categories starting with '<?
Php echo $ prefix; ?
Gt; '</ H2> <ol> <?
Php foreach ($ result-> query-> allcategories-> c as $ c):?
Org / wiki / Category: <?
Php echo $ c;?
Gt; "> <?

Новости