Если я правильно понял, вы просто хотите добавить перезагрузку после нажатия на одно из ваших ключевых слов.
Вы не уточнили, хотите ли вы сделать это только в PHP, поэтому я даю вам решение только для javascript.
/** {string} URL queries in string */
let urlQueriesString = window.location.search,
/** {string[]} URL queries in array */
urlQueriesArray = urlQueriesString.substring(1).split('&'),
/** {Object.<string, string>} URL queries in object */
urlQueries = {},
/** {string[]} List of search keywords */
searchKeywords = [],
/** {HTMLElement[]} List of <li> which will be inserted into DOM */
liElements;
// Fills in urlQueries object
for (let i in urlQueriesArray) {
urlQueriesArray[i] = urlQueriesArray[i].split('=');
urlQueries[urlQueriesArray[i][0]] = urlQueriesArray[i][1];
}
// Gets search keywords from _sft_category parameter
searchKeywords = urlQueries._sft_category.split('+'); // or .split(' ')
// Inserts a <li> in the DOM for each keyword
for (let i in searchKeywords) {
let ul = document.getElementsByTagName('ul')[0],
html = `<li>${searchKeywords[i]}</li>`;
ul.innerHTML += html;
}
// Gets inserted <li>
liElements = document.getElementsByTagName('li');
// Adds an event on click for each <li>
for (let i in liElements) {
let li = liElements[i];
// Checks instance type because last element of liElements is the length and we don't want to do what's following for this one
if (li instanceof HTMLElement) {
// Creates new URL on click
li.addEventListener('click', function() {
let url = window.location.hostname + window.location.pathname,
keyword = this.innerText;
searchKeywords = searchKeywords.filter((kw) => (kw !== keyword));
url += urlQueriesString.replace(/_sft_category=[\w\d_+-]+/, `_sft_category=${searchKeywords.join('+')}`);
console.log(url);
// Uncomment next line for reload with new url
// window.location.href = url;
});
}
}
<ul></ul>
Этот фрагмент кода может быть упрощен, но в настоящее время он должен выполнять свою работу.
Возможно, вам придется немного адаптировать его, чтобы он работал с вашим проектом.
Сначала вы можете попробовать запрос GET, потому что он немного проще (вам понадобится только в POST для входа в Википедию). Например, попробуйте смоделировать этот запрос:
http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page
Вот код:
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create("http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page");
using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse())
{
string ResponseText;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
ResponseText = reader.ReadToEnd();
}
}
Редактировать: Другая проблема, с которой он столкнулся при запросе POST, была Исключение: удаленный сервер возвратил ошибку: (417) Ожидание не удалось.
Это можно решить, установив:
System.Net.ServicePointManager.Expect100Continue = false;
(это из: HTTP POST возвращает ошибку: 417 «Ожидание не выполнено». )
Вы, кажется, выдвигаете входные данные по HTTP POST, но, похоже, вам следует использовать HTTP GET.
Из документов MediaWiki API:
API принимает свои данные через параметры в строке запроса. каждый модуль (и каждое действие = запрос субмодуль) имеет свой набор параметры, которые перечислены в документация и в действии = помощь, и можно получить через действие = paraminfo. http://www.mediawiki.org/wiki/API:Data_formats
В настоящее время я на завершающей стадии реализации C # MediaWiki API, который позволяет легко создавать сценарии для большинства действий по просмотру и редактированию MediaWiki.
Основной API находится здесь: http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs и вот пример используемого API:
var wiki = new O2MediaWikiAPI("http://www.o2platform.com/api.php");
wiki.login(userName, password);
var page = "Test"; // "Main_Page";
wiki.editPage(page,"Test content2");
var rawWikiText = wiki.raw(page);
var htmlText = wiki.html(page);
return rawWikiText.line().line() + htmlText;